Bug 1325172 - unregister agent when nsNPAPI releases it. draft
authorAlastor Wu <alwu@mozilla.com>
Fri, 23 Dec 2016 15:04:51 +0800
changeset 453338 f89aae7b85477c04c841303305ceb950f495ed1e
parent 452718 f179934df0c1bab590c558485d419c7910e41325
child 540426 76671d97ee72b9c0c3fe0c7bbf1c55108b1aee70
push id39631
push useralwu@mozilla.com
push dateFri, 23 Dec 2016 07:05:14 +0000
bugs1325172
milestone53.0a1
Bug 1325172 - unregister agent when nsNPAPI releases it. When the global window detroyed, the service would notify agent's callback to mute its volume. And the nsNSNPAPI's detroy would release the agent, I guess these things would happen in the same time. So we should check whether the agent exists before calling agent's function. MozReview-Commit-ID: 7uNmbdOLqxe
dom/plugins/base/nsNPAPIPluginInstance.cpp
--- a/dom/plugins/base/nsNPAPIPluginInstance.cpp
+++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp
@@ -1792,21 +1792,23 @@ nsNPAPIPluginInstance::GetOrCreateAudioC
 NS_IMETHODIMP
 nsNPAPIPluginInstance::WindowVolumeChanged(float aVolume, bool aMuted)
 {
   // We just support mute/unmute
   nsresult rv = SetMuted(aMuted);
   NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "SetMuted failed");
   if (mMuted != aMuted) {
     mMuted = aMuted;
-    AudioChannelService::AudibleState audible = aMuted ?
-      AudioChannelService::AudibleState::eNotAudible :
-      AudioChannelService::AudibleState::eAudible;
-    mAudioChannelAgent->NotifyStartedAudible(audible,
-                                             AudioChannelService::AudibleChangedReasons::eVolumeChanged);
+    if (mAudioChannelAgent) {
+      AudioChannelService::AudibleState audible = aMuted ?
+        AudioChannelService::AudibleState::eNotAudible :
+        AudioChannelService::AudibleState::eAudible;
+      mAudioChannelAgent->NotifyStartedAudible(audible,
+                                               AudioChannelService::AudibleChangedReasons::eVolumeChanged);
+    }
   }
   return rv;
 }
 
 NS_IMETHODIMP
 nsNPAPIPluginInstance::WindowSuspendChanged(nsSuspendedTypes aSuspend)
 {
   // It doesn't support suspended, so we just do something like mute/unmute.