From f57b29ed8ee1a980a371d938abe8199e8342b3e8 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Thu, 16 Feb 2017 10:56:00 -0500 Subject: [PATCH] Bug 1339930 - Don't crash in AudioChannelService when dealing with Windows without a parent; r=baku --- dom/audiochannel/AudioChannelService.cpp | 21 +++++++++++++++++++++ dom/audiochannel/crashtests/1339930.html | 19 +++++++++++++++++++ dom/audiochannel/crashtests/crashtests.list | 1 + 3 files changed, 41 insertions(+) create mode 100644 dom/audiochannel/crashtests/1339930.html diff --git a/dom/audiochannel/AudioChannelService.cpp b/dom/audiochannel/AudioChannelService.cpp index 6c86c10ed104..080c7994ec05 100644 --- a/dom/audiochannel/AudioChannelService.cpp +++ b/dom/audiochannel/AudioChannelService.cpp @@ -829,6 +829,10 @@ AudioChannelService::GetAudioChannelVolume(mozIDOMWindowProxy* aWindow, MOZ_ASSERT(NS_IsMainThread()); auto* window = nsPIDOMWindowOuter::From(aWindow)->GetScriptableTop(); + if (!window) { + *aVolume = 0.f; + return NS_ERROR_FAILURE; + } *aVolume = GetAudioChannelVolume(window, (AudioChannel)aAudioChannel); return NS_OK; } @@ -859,6 +863,9 @@ AudioChannelService::SetAudioChannelVolume(mozIDOMWindowProxy* aWindow, MOZ_ASSERT(NS_IsMainThread()); auto* window = nsPIDOMWindowOuter::From(aWindow)->GetScriptableTop(); + if (!window) { + return NS_ERROR_FAILURE; + } SetAudioChannelVolume(window, (AudioChannel)aAudioChannel, aVolume); return NS_OK; } @@ -883,6 +890,10 @@ AudioChannelService::GetAudioChannelMuted(mozIDOMWindowProxy* aWindow, MOZ_ASSERT(NS_IsMainThread()); auto* window = nsPIDOMWindowOuter::From(aWindow)->GetScriptableTop(); + if (!window) { + *aMuted = false; + return NS_ERROR_FAILURE; + } *aMuted = GetAudioChannelMuted(window, (AudioChannel)aAudioChannel); return NS_OK; } @@ -918,6 +929,9 @@ AudioChannelService::SetAudioChannelMuted(mozIDOMWindowProxy* aWindow, MOZ_ASSERT(NS_IsMainThread()); auto* window = nsPIDOMWindowOuter::From(aWindow)->GetScriptableTop(); + if (!window) { + return NS_ERROR_FAILURE; + } SetAudioChannelMuted(window, (AudioChannel)aAudioChannel, aMuted); return NS_OK; } @@ -942,6 +956,10 @@ AudioChannelService::IsAudioChannelActive(mozIDOMWindowProxy* aWindow, MOZ_ASSERT(NS_IsMainThread()); auto* window = nsPIDOMWindowOuter::From(aWindow)->GetScriptableTop(); + if (!window) { + *aActive = false; + return NS_ERROR_FAILURE; + } *aActive = IsAudioChannelActive(window, (AudioChannel)aAudioChannel); return NS_OK; } @@ -952,6 +970,9 @@ AudioChannelService::IsWindowActive(nsPIDOMWindowOuter* aWindow) MOZ_ASSERT(NS_IsMainThread()); auto* window = nsPIDOMWindowOuter::From(aWindow)->GetScriptableTop(); + if (!window) { + return false; + } AudioChannelWindow* winData = GetOrCreateWindowData(window); return !winData->mAudibleAgents.IsEmpty(); } diff --git a/dom/audiochannel/crashtests/1339930.html b/dom/audiochannel/crashtests/1339930.html new file mode 100644 index 000000000000..f817c85975c7 --- /dev/null +++ b/dom/audiochannel/crashtests/1339930.html @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/dom/audiochannel/crashtests/crashtests.list b/dom/audiochannel/crashtests/crashtests.list index f877939416e9..3af64ac4662e 100644 --- a/dom/audiochannel/crashtests/crashtests.list +++ b/dom/audiochannel/crashtests/crashtests.list @@ -1 +1,2 @@ load 1223734.html +load 1339930.html