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
--- 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.