Bug 1303347 - add assertions for debugging if Observe() could ever happen after Unsubscribe(). r=cpearce
MozReview-Commit-ID: 9XhGYI3fTqb
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user