author | Carsten "Tomcat" Book <cbook@mozilla.com> |
Tue, 15 Dec 2015 14:44:50 +0100 | |
changeset 276460 | 4f75683d679e871626f5228c805e9b6e1957654f |
parent 276459 | a9085a77cbd47d83952e0c04b703a781435e833c |
child 276461 | cb66ffeb6725e8344818e8e2f707ae2eaeb953b4 |
push id | 69162 |
push user | cbook@mozilla.com |
push date | Tue, 15 Dec 2015 13:52:23 +0000 |
treeherder | mozilla-inbound@98d65afd9826 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 1214148 |
milestone | 46.0a1 |
backs out | debd1ce280de9a629509c8178b31ad1c48ea8d88 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/audiochannel/AudioChannelService.cpp +++ b/dom/audiochannel/AudioChannelService.cpp @@ -9,17 +9,16 @@ #include "base/basictypes.h" #include "mozilla/Services.h" #include "mozilla/StaticPtr.h" #include "mozilla/unused.h" #include "mozilla/dom/ContentChild.h" #include "mozilla/dom/ContentParent.h" -#include "mozilla/dom/TabParent.h" #include "nsContentUtils.h" #include "nsIScriptSecurityManager.h" #include "nsISupportsPrimitives.h" #include "nsThreadUtils.h" #include "nsHashPropertyBag.h" #include "nsComponentManagerUtils.h" #include "nsPIDOMWindow.h" @@ -215,17 +214,16 @@ AudioChannelService::Shutdown() // To monitor the volume settings based on audio channel. obs->RemoveObserver(gAudioChannelService, "mozsettings-changed"); #endif } } gAudioChannelService->mWindows.Clear(); gAudioChannelService->mPlayingChildren.Clear(); - gAudioChannelService->mTabParents.Clear(); #ifdef MOZ_WIDGET_GONK gAudioChannelService->mSpeakerManager.Clear(); #endif gAudioChannelService = nullptr; } } @@ -339,31 +337,16 @@ AudioChannelService::UnregisterAudioChan new MediaPlaybackRunnable(aAgent->Window(), false /* active */); NS_DispatchToCurrentThread(runnable); } MaybeSendStatusUpdate(); } void -AudioChannelService::RegisterTabParent(TabParent* aTabParent) -{ - MOZ_ASSERT(aTabParent); - MOZ_ASSERT(!mTabParents.Contains(aTabParent)); - mTabParents.AppendElement(aTabParent); -} - -void -AudioChannelService::UnregisterTabParent(TabParent* aTabParent) -{ - MOZ_ASSERT(aTabParent); - mTabParents.RemoveElement(aTabParent); -} - -void AudioChannelService::GetState(nsPIDOMWindow* aWindow, uint32_t aAudioChannel, float* aVolume, bool* aMuted) { MOZ_ASSERT(!aWindow || aWindow->IsOuterWindow()); MOZ_ASSERT(aVolume && aMuted); MOZ_ASSERT(aAudioChannel < NUMBER_OF_AUDIO_CHANNELS); @@ -573,42 +556,16 @@ AudioChannelService::Observe(nsISupports RemoveChildStatus(childID); } return NS_OK; } void -AudioChannelService::RefreshAgentsVolumeAndPropagate(AudioChannel aAudioChannel, - nsPIDOMWindow* aWindow) -{ - MOZ_ASSERT(aWindow); - MOZ_ASSERT(aWindow->IsOuterWindow()); - - nsCOMPtr<nsPIDOMWindow> topWindow = aWindow->GetScriptableTop(); - if (!topWindow) { - return; - } - - AudioChannelWindow* winData = GetWindowData(topWindow->WindowID()); - if (!winData) { - return; - } - - for (uint32_t i = 0; i < mTabParents.Length(); ++i) { - mTabParents[i]->AudioChannelChangeNotification(aWindow, aAudioChannel, - winData->mChannels[(uint32_t)aAudioChannel].mVolume, - winData->mChannels[(uint32_t)aAudioChannel].mMuted); - } - - RefreshAgentsVolume(aWindow); -} - -void AudioChannelService::RefreshAgentsVolume(nsPIDOMWindow* aWindow) { MOZ_ASSERT(aWindow); MOZ_ASSERT(aWindow->IsOuterWindow()); nsCOMPtr<nsPIDOMWindow> topWindow = aWindow->GetScriptableTop(); if (!topWindow) { return; @@ -789,17 +746,17 @@ AudioChannelService::SetAudioChannelVolu MOZ_ASSERT(aWindow->IsOuterWindow()); MOZ_LOG(GetAudioChannelLog(), LogLevel::Debug, ("AudioChannelService, SetAudioChannelVolume, window = %p, type = %d, " "volume = %d\n", aWindow, aAudioChannel, aVolume)); AudioChannelWindow* winData = GetOrCreateWindowData(aWindow); winData->mChannels[(uint32_t)aAudioChannel].mVolume = aVolume; - RefreshAgentsVolumeAndPropagate(aAudioChannel, aWindow); + RefreshAgentsVolume(aWindow); } NS_IMETHODIMP AudioChannelService::SetAudioChannelVolume(nsIDOMWindow* aWindow, unsigned short aAudioChannel, float aVolume) { MOZ_ASSERT(NS_IsMainThread()); @@ -852,17 +809,17 @@ AudioChannelService::SetAudioChannelMute if (aAudioChannel == AudioChannel::System) { // Workaround for bug1183033, system channel type can always playback. return; } AudioChannelWindow* winData = GetOrCreateWindowData(aWindow); winData->mChannels[(uint32_t)aAudioChannel].mMuted = aMuted; - RefreshAgentsVolumeAndPropagate(aAudioChannel, aWindow); + RefreshAgentsVolume(aWindow); } NS_IMETHODIMP AudioChannelService::SetAudioChannelMuted(nsIDOMWindow* aWindow, unsigned short aAudioChannel, bool aMuted) { MOZ_ASSERT(NS_IsMainThread());
--- a/dom/audiochannel/AudioChannelService.h +++ b/dom/audiochannel/AudioChannelService.h @@ -18,23 +18,20 @@ #include "mozilla/dom/AudioChannelBinding.h" class nsIRunnable; class nsPIDOMWindow; struct PRLogModuleInfo; namespace mozilla { namespace dom { - #ifdef MOZ_WIDGET_GONK class SpeakerManagerService; #endif -class TabParent; - #define NUMBER_OF_AUDIO_CHANNELS (uint32_t)AudioChannel::EndGuard_ class AudioChannelService final : public nsIAudioChannelService , public nsIObserver { public: NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER @@ -62,22 +59,16 @@ public: /** * Any audio channel agent that stops playing should unregister itself to * this service. */ void UnregisterAudioChannelAgent(AudioChannelAgent* aAgent, uint32_t aNotifyPlayback); /** - * For nested iframes. - */ - void RegisterTabParent(TabParent* aTabParent); - void UnregisterTabParent(TabParent* aTabParent); - - /** * Return the state to indicate this audioChannel for his window should keep * playing/muted. */ void GetState(nsPIDOMWindow* aWindow, uint32_t aChannel, float* aVolume, bool* aMuted); /* Methods for the BrowserElementAudioChannel */ float GetAudioChannelVolume(nsPIDOMWindow* aWindow, AudioChannel aChannel); @@ -112,19 +103,16 @@ public: */ virtual void SetDefaultVolumeControlChannel(int32_t aChannel, bool aVisible); bool AnyAudioChannelIsActive(); void RefreshAgentsVolume(nsPIDOMWindow* aWindow); - void RefreshAgentsVolumeAndPropagate(AudioChannel aAudioChannel, - nsPIDOMWindow* aWindow); - // This method needs to know the inner window that wants to capture audio. We // group agents per top outer window, but we can have multiple innerWindow per // top outerWindow (subiframes, etc.) and we have to identify all the agents // just for a particular innerWindow. void RefreshAgentsCapture(nsPIDOMWindow* aWindow, uint64_t aInnerWindowID); @@ -230,19 +218,16 @@ private: nsTObserverArray<nsAutoPtr<AudioChannelWindow>> mWindows; nsTObserverArray<nsAutoPtr<AudioChannelChildStatus>> mPlayingChildren; #ifdef MOZ_WIDGET_GONK nsTArray<SpeakerManagerService*> mSpeakerManager; #endif - // Raw pointers because TabParents must unregister themselves. - nsTArray<TabParent*> mTabParents; - nsCOMPtr<nsIRunnable> mRunnable; uint64_t mDefChannelChildID; // These boolean are used to know if we have to send an status update to the // service running in the main process. bool mTelephonyChannel; bool mContentOrNormalChannel;
--- a/dom/ipc/PBrowser.ipdl +++ b/dom/ipc/PBrowser.ipdl @@ -755,23 +755,16 @@ child: * using the list of provided charCodes. * * @param charCode array of potential character codes * @param isTrusted true if triggered by a trusted key event * @param modifierMask indicates which accesskey modifiers are pressed */ HandleAccessKey(uint32_t[] charCodes, bool isTrusted, int32_t modifierMask); - /** - * Propagate a refresh to the child process - */ - AudioChannelChangeNotification(uint32_t aAudioChannel, - float aVolume, - bool aMuted); - /* * FIXME: write protocol! state LIVE: send LoadURL goto LIVE; //etc. send Destroy goto DYING;
--- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -2250,37 +2250,16 @@ TabChild::RecvHandleAccessKey(nsTArray<u pc->EventStateManager()->HandleAccessKey(pc, aCharCodes, aIsTrusted, aModifierMask); } } return true; } bool -TabChild::RecvAudioChannelChangeNotification(const uint32_t& aAudioChannel, - const float& aVolume, - const bool& aMuted) -{ - nsCOMPtr<nsPIDOMWindow> window = do_GetInterface(WebNavigation()); - if (window) { - RefPtr<AudioChannelService> service = AudioChannelService::GetOrCreate(); - MOZ_ASSERT(service); - - service->SetAudioChannelVolume(window, - static_cast<AudioChannel>(aAudioChannel), - aVolume); - service->SetAudioChannelMuted(window, - static_cast<AudioChannel>(aAudioChannel), - aMuted); - } - - return true; -} - -bool TabChild::RecvDestroy() { MOZ_ASSERT(mDestroyed == false); mDestroyed = true; nsTArray<PContentPermissionRequestChild*> childArray = nsContentPermissionUtils::GetContentPermissionRequestChildById(GetTabId());
--- a/dom/ipc/TabChild.h +++ b/dom/ipc/TabChild.h @@ -499,20 +499,16 @@ public: virtual bool RecvUIResolutionChanged(const float& aDpi, const double& aScale) override; virtual bool RecvThemeChanged(nsTArray<LookAndFeelInt>&& aLookAndFeelIntCache) override; virtual bool RecvHandleAccessKey(nsTArray<uint32_t>&& aCharCodes, const bool& aIsTrusted, const int32_t& aModifierMask) override; - virtual bool RecvAudioChannelChangeNotification(const uint32_t& aAudioChannel, - const float& aVolume, - const bool& aMuted) override; - /** * Native widget remoting protocol for use with windowed plugins with e10s. */ PPluginWidgetChild* AllocPPluginWidgetChild() override; bool DeallocPPluginWidgetChild(PPluginWidgetChild* aActor) override; nsresult CreatePluginWidget(nsIWidget* aParent, nsIWidget** aOut); LayoutDeviceIntPoint GetChromeDisplacement() { return mChromeDisp; };
--- a/dom/ipc/TabParent.cpp +++ b/dom/ipc/TabParent.cpp @@ -179,17 +179,17 @@ private: FileDescriptor::PlatformHandleType handle = FileDescriptor::PlatformHandleType(PR_FileDesc2NativeHandle(mFD)); fd = FileDescriptor(handle); } // Our TabParent may have been destroyed already. If so, don't send any // fds over, just go back to the IO thread and close them. if (!tabParent->IsDestroyed()) { - Unused << tabParent->SendCacheFileDescriptor(mPath, fd); + mozilla::Unused << tabParent->SendCacheFileDescriptor(mPath, fd); } if (!mFD) { return; } nsCOMPtr<nsIEventTarget> eventTarget; mEventTarget.swap(eventTarget); @@ -227,17 +227,17 @@ private: OpenBlobImpl(); if (NS_FAILED(NS_DispatchToMainThread(this))) { NS_WARNING("Failed to dispatch to main thread!"); // Intentionally leak the runnable (but not the fd) rather // than crash when trying to release a main thread object // off the main thread. - Unused << mTabParent.forget(); + mozilla::Unused << mTabParent.forget(); CloseFile(); } } void CloseFile() { // It's possible for this to happen on the main thread if the dispatch // to the stream service fails after we've already opened the file so @@ -382,21 +382,16 @@ TabParent::AddWindowListeners() eventTarget->AddEventListener(NS_LITERAL_STRING("MozUpdateWindowPos"), this, false, false); } } if (nsIPresShell* shell = mFrameElement->OwnerDoc()->GetShell()) { mPresShellWithRefreshListener = shell; shell->AddPostRefreshObserver(this); } - - RefPtr<AudioChannelService> acs = AudioChannelService::GetOrCreate(); - if (acs) { - acs->RegisterTabParent(this); - } } } void TabParent::RemoveWindowListeners() { if (mFrameElement && mFrameElement->OwnerDoc()->GetWindow()) { nsCOMPtr<nsPIDOMWindow> window = mFrameElement->OwnerDoc()->GetWindow(); @@ -405,21 +400,16 @@ TabParent::RemoveWindowListeners() eventTarget->RemoveEventListener(NS_LITERAL_STRING("MozUpdateWindowPos"), this, false); } } if (mPresShellWithRefreshListener) { mPresShellWithRefreshListener->RemovePostRefreshObserver(this); mPresShellWithRefreshListener = nullptr; } - - RefPtr<AudioChannelService> acs = AudioChannelService::GetOrCreate(); - if (acs) { - acs->UnregisterTabParent(this); - } } void TabParent::DidRefresh() { if (mChromeOffset != -GetChildProcessOffset()) { UpdatePosition(); } @@ -2641,16 +2631,17 @@ TabParent::RecvAudioChannelActivityNotif const bool& aActive) { if (aAudioChannel >= NUMBER_OF_AUDIO_CHANNELS) { return false; } nsCOMPtr<nsIObserverService> os = services::GetObserverService(); if (os) { + RefPtr<AudioChannelService> service = AudioChannelService::GetOrCreate(); nsAutoCString topic; topic.Assign("audiochannel-activity-"); topic.Append(AudioChannelService::GetAudioChannelTable()[aAudioChannel].tag); os->NotifyObservers(NS_ISUPPORTS_CAST(nsITabParent*, this), topic.get(), aActive ? MOZ_UTF16("active") : MOZ_UTF16("inactive")); } @@ -3401,43 +3392,16 @@ TabParent::GetShowInfo() return ShowInfo(name, allowFullscreen, isPrivate, false, mDPI, mDefaultScale.scale); } return ShowInfo(EmptyString(), false, false, false, mDPI, mDefaultScale.scale); } -void -TabParent::AudioChannelChangeNotification(nsPIDOMWindow* aWindow, - AudioChannel aAudioChannel, - float aVolume, - bool aMuted) -{ - if (!mFrameElement || !mFrameElement->OwnerDoc()) { - return; - } - - nsCOMPtr<nsPIDOMWindow> window = mFrameElement->OwnerDoc()->GetWindow(); - while (window) { - if (window == aWindow) { - Unused << SendAudioChannelChangeNotification(static_cast<uint32_t>(aAudioChannel), - aVolume, aMuted); - break; - } - - nsCOMPtr<nsPIDOMWindow> win = window->GetScriptableParent(); - if (window == win) { - break; - } - - window = win; - } -} - NS_IMETHODIMP FakeChannel::OnAuthAvailable(nsISupports *aContext, nsIAuthInformation *aAuthInfo) { nsAuthInformationHolder* holder = static_cast<nsAuthInformationHolder*>(aAuthInfo); if (!net::gNeckoChild->SendOnAuthAvailable(mCallbackId, holder->User(),
--- a/dom/ipc/TabParent.h +++ b/dom/ipc/TabParent.h @@ -4,17 +4,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_tabs_TabParent_h #define mozilla_tabs_TabParent_h #include "js/TypeDecls.h" #include "mozilla/ContentCache.h" -#include "mozilla/dom/AudioChannelBinding.h" #include "mozilla/dom/ipc/IdType.h" #include "mozilla/dom/PBrowserParent.h" #include "mozilla/dom/PContent.h" #include "mozilla/dom/PFilePickerParent.h" #include "mozilla/dom/TabContext.h" #include "mozilla/EventForwards.h" #include "mozilla/dom/File.h" #include "mozilla/RefPtr.h" @@ -451,21 +450,16 @@ public: int32_t& aDragAreaX, int32_t& aDragAreaY); layout::RenderFrameParent* GetRenderFrame(); // Called by HttpChannelParent. The function may use a new process to // reload the URI associated with the given channel. void OnStartSignedPackageRequest(nsIChannel* aChannel, const nsACString& aPackageId); - void AudioChannelChangeNotification(nsPIDOMWindow* aWindow, - AudioChannel aAudioChannel, - float aVolume, - bool aMuted); - protected: bool ReceiveMessage(const nsString& aMessage, bool aSync, ipc::StructuredCloneData* aData, mozilla::jsipc::CpowHolder* aCpows, nsIPrincipal* aPrincipal, nsTArray<ipc::StructuredCloneData>* aJSONRetVal = nullptr);