author | Xidorn Quan <quanxunzhen@gmail.com> |
Thu, 04 Jun 2015 13:49:34 +1200 | |
changeset 247091 | c6b801a65cc6796361f3ba81132b22938c00bafa |
parent 247090 | 70ab2a1ad75ef6e5444642510c28c84ef98fad96 |
child 247092 | af6175e10def03b400a9d5fe6450139513add4fd |
push id | 60603 |
push user | xquan@mozilla.com |
push date | Thu, 04 Jun 2015 01:50:31 +0000 |
treeherder | mozilla-inbound@00ffe2b5199f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1105939 |
milestone | 41.0a1 |
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/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -6041,55 +6041,54 @@ NS_IMETHODIMP nsGlobalWindow::SetFullScreen(bool aFullScreen) { FORWARD_TO_OUTER(SetFullScreen, (aFullScreen), NS_ERROR_NOT_INITIALIZED); return SetFullScreenInternal(aFullScreen, true); } nsresult -nsGlobalWindow::SetFullScreenInternal(bool aFullScreen, bool aRequireTrust, gfx::VRHMDInfo* aHMD) +nsGlobalWindow::SetFullScreenInternal(bool aFullScreen, bool aFullscreenMode, + gfx::VRHMDInfo* aHMD) { MOZ_ASSERT(IsOuterWindow()); NS_ENSURE_TRUE(mDocShell, NS_ERROR_FAILURE); - // Only chrome can change our fullScreen mode, unless we're running in - // untrusted mode. + // Only chrome can change our fullscreen mode. Otherwise, the state + // can only be changed for DOM fullscreen. if (aFullScreen == FullScreen() || - (aRequireTrust && !nsContentUtils::IsCallerChrome())) { + (aFullscreenMode && !nsContentUtils::IsCallerChrome())) { return NS_OK; } // SetFullScreen needs to be called on the root window, so get that // via the DocShell tree, and if we are not already the root, // call SetFullScreen on that window instead. nsCOMPtr<nsIDocShellTreeItem> rootItem; mDocShell->GetRootTreeItem(getter_AddRefs(rootItem)); nsCOMPtr<nsPIDOMWindow> window = rootItem ? rootItem->GetWindow() : nullptr; if (!window) return NS_ERROR_FAILURE; if (rootItem != mDocShell) - return window->SetFullScreenInternal(aFullScreen, aRequireTrust, aHMD); + return window->SetFullScreenInternal(aFullScreen, aFullscreenMode, aHMD); // make sure we don't try to set full screen on a non-chrome window, // which might happen in embedding world if (mDocShell->ItemType() != nsIDocShellTreeItem::typeChrome) return NS_ERROR_FAILURE; // If we are already in full screen mode, just return. if (mFullScreen == aFullScreen) return NS_OK; - // If a fullscreen is originated from chrome, we are switching to - // the fullscreen mode, otherwise, we are entering DOM fullscreen. // Note that although entering DOM fullscreen could also cause // consequential calls to this method, those calls will be skipped // at the condition above. - if (aRequireTrust) { + if (aFullscreenMode) { mFullscreenMode = aFullScreen; } else { // If we are exiting from DOM fullscreen while we // initially make the window fullscreen because of // fullscreen mode, don't restore the window. if (!aFullScreen && mFullscreenMode) { return NS_OK; }
--- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -485,17 +485,17 @@ public: // Outer windows only. virtual bool DispatchCustomEvent(const nsAString& aEventName) override; bool DispatchResizeEvent(const mozilla::CSSIntSize& aSize); // Inner windows only. virtual void RefreshCompartmentPrincipal() override; // Outer windows only. - virtual nsresult SetFullScreenInternal(bool aIsFullScreen, bool aRequireTrust, + virtual nsresult SetFullScreenInternal(bool aIsFullscreen, bool aFullscreenMode, mozilla::gfx::VRHMDInfo *aHMD = nullptr) override; bool FullScreen() const; // Inner windows only. virtual void SetHasGamepadEventListener(bool aHasGamepad = true) override; // nsIInterfaceRequestor NS_DECL_NSIINTERFACEREQUESTOR
--- a/dom/base/nsPIDOMWindow.h +++ b/dom/base/nsPIDOMWindow.h @@ -458,25 +458,26 @@ public: if (!mMayHaveTouchEventListener) { mMayHaveTouchEventListener = true; MaybeUpdateTouchState(); } } /** * Moves the top-level window into fullscreen mode if aIsFullScreen is true, - * otherwise exits fullscreen. If aRequireTrust is true, this method only - * changes window state in a context trusted for write. + * otherwise exits fullscreen. If aFullscreenMode is true, this method is + * called for fullscreen mode instead of DOM fullscreen, which means it can + * only change window state in a context trusted for write. * * If aHMD is not null, the window is made full screen on the given VR HMD * device instead of its currrent display. * * Outer windows only. */ - virtual nsresult SetFullScreenInternal(bool aIsFullScreen, bool aRequireTrust, + virtual nsresult SetFullScreenInternal(bool aIsFullscreen, bool aFullscreenMode, mozilla::gfx::VRHMDInfo *aHMD = nullptr) = 0; /** * Call this to check whether some node (this window, its document, * or content in that document) has a mouseenter/leave event listener. */ bool HasMouseEnterLeaveEventListeners() {