Bug 1303347 - add assertions for debugging if Observe() could ever happen after Unsubscribe(). r=cpearce

MozReview-Commit-ID: 9XhGYI3fTqb
This commit is contained in:
JW Wang
2016-09-20 11:27:46 +08:00
parent 21f1f1c0c7
commit 19c0ee3464

View File

@@ -2812,10 +2812,16 @@ HTMLMediaElement::LookupMediaElementURITable(nsIURI* aURI)
}
class HTMLMediaElement::ShutdownObserver : public nsIObserver {
enum class Phase : int8_t {
Init,
Subscribed,
Unsubscribed
};
public:
NS_DECL_ISUPPORTS
NS_IMETHOD Observe(nsISupports*, const char* aTopic, const char16_t*) override {
MOZ_DIAGNOSTIC_ASSERT(mPhase == Phase::Subscribed);
MOZ_DIAGNOSTIC_ASSERT(mWeak);
if (strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID) == 0) {
mWeak->NotifyShutdownEvent();
@@ -2823,14 +2829,18 @@ public:
return NS_OK;
}
void Subscribe(HTMLMediaElement* aPtr) {
MOZ_DIAGNOSTIC_ASSERT(mPhase == Phase::Init);
MOZ_DIAGNOSTIC_ASSERT(!mWeak);
mWeak = aPtr;
nsContentUtils::RegisterShutdownObserver(this);
mPhase = Phase::Subscribed;
}
void Unsubscribe() {
MOZ_DIAGNOSTIC_ASSERT(mPhase == Phase::Subscribed);
MOZ_DIAGNOSTIC_ASSERT(mWeak);
mWeak = nullptr;
nsContentUtils::UnregisterShutdownObserver(this);
mPhase = Phase::Unsubscribed;
}
void AddRefMediaElement() {
mWeak->AddRef();
@@ -2840,10 +2850,12 @@ public:
}
private:
virtual ~ShutdownObserver() {
MOZ_DIAGNOSTIC_ASSERT(mPhase == Phase::Unsubscribed);
MOZ_DIAGNOSTIC_ASSERT(!mWeak);
}
// Guaranteed to be valid by HTMLMediaElement.
HTMLMediaElement* mWeak = nullptr;
Phase mPhase = Phase::Init;
};
NS_IMPL_ISUPPORTS(HTMLMediaElement::ShutdownObserver, nsIObserver)