author | Bobby Holley <bobbyholley@gmail.com> |
Fri, 16 Oct 2015 14:40:30 -0700 | |
changeset 268131 | 4690eec6b6583f4fd01b8b60be3ce6867d85ed78 |
parent 268130 | 98e03b1c4713a1133ac22de7293211e10343d601 |
child 268132 | 99fb9871018239725645581638eefd6f5269bb58 |
push id | 66712 |
push user | bobbyholley@gmail.com |
push date | Fri, 16 Oct 2015 23:35:33 +0000 |
treeherder | mozilla-inbound@4690eec6b658 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bz |
bugs | 1215398 |
milestone | 44.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
|
dom/base/nsGlobalWindow.cpp | file | annotate | diff | comparison | revisions | |
dom/base/nsGlobalWindow.h | file | annotate | diff | comparison | revisions |
--- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -6877,22 +6877,22 @@ nsGlobalWindow::MakeScriptDialogTitle(ns // Just in case if (aOutTitle.IsEmpty()) { NS_WARNING("could not get ScriptDlgGenericHeading string from string bundle"); aOutTitle.AssignLiteral("[Script]"); } } bool -nsGlobalWindow::CanMoveResizeWindows() +nsGlobalWindow::CanMoveResizeWindows(bool aCallerIsChrome) { MOZ_ASSERT(IsOuterWindow()); // When called from chrome, we can avoid the following checks. - if (!nsContentUtils::IsCallerChrome()) { + if (!aCallerIsChrome) { // Don't allow scripts to move or resize windows that were not opened by a // script. if (!mHadOriginalOpener) { return false; } if (!CanSetProperty("dom.disable_window_move_resize")) { return false; @@ -7598,25 +7598,25 @@ nsGlobalWindow::Print() ErrorResult rv; Print(rv); return rv.StealNSResult(); } void -nsGlobalWindow::MoveToOuter(int32_t aXPos, int32_t aYPos, ErrorResult& aError) +nsGlobalWindow::MoveToOuter(int32_t aXPos, int32_t aYPos, ErrorResult& aError, bool aCallerIsChrome) { MOZ_RELEASE_ASSERT(IsOuterWindow()); /* * If caller is not chrome and the user has not explicitly exempted the site, * prevent window.moveTo() by exiting early */ - if (!CanMoveResizeWindows() || IsFrame()) { + if (!CanMoveResizeWindows(aCallerIsChrome) || IsFrame()) { return; } nsCOMPtr<nsIBaseWindow> treeOwnerAsWin = GetTreeOwnerWindow(); if (!treeOwnerAsWin) { aError.Throw(NS_ERROR_FAILURE); return; } @@ -7628,41 +7628,41 @@ nsGlobalWindow::MoveToOuter(int32_t aXPo nsIntSize devPos = CSSToDevIntPixels(cssPos); aError = treeOwnerAsWin->SetPosition(devPos.width, devPos.height); } void nsGlobalWindow::MoveTo(int32_t aXPos, int32_t aYPos, ErrorResult& aError) { - FORWARD_TO_OUTER_OR_THROW(MoveToOuter, (aXPos, aYPos, aError), aError, ); + FORWARD_TO_OUTER_OR_THROW(MoveToOuter, (aXPos, aYPos, aError, nsContentUtils::IsCallerChrome()), aError, ); } NS_IMETHODIMP nsGlobalWindow::MoveTo(int32_t aXPos, int32_t aYPos) { - FORWARD_TO_INNER(MoveTo, (aXPos, aYPos), NS_ERROR_UNEXPECTED); - - ErrorResult rv; - MoveTo(aXPos, aYPos, rv); - - return rv.StealNSResult(); -} - -void -nsGlobalWindow::MoveByOuter(int32_t aXDif, int32_t aYDif, ErrorResult& aError) + FORWARD_TO_OUTER(MoveTo, (aXPos, aYPos), NS_ERROR_UNEXPECTED); + + ErrorResult rv; + MoveToOuter(aXPos, aYPos, rv, /* aCallerIsChrome = */ true); + + return rv.StealNSResult(); +} + +void +nsGlobalWindow::MoveByOuter(int32_t aXDif, int32_t aYDif, ErrorResult& aError, bool aCallerIsChrome) { MOZ_RELEASE_ASSERT(IsOuterWindow()); /* * If caller is not chrome and the user has not explicitly exempted the site, * prevent window.moveBy() by exiting early */ - if (!CanMoveResizeWindows() || IsFrame()) { + if (!CanMoveResizeWindows(aCallerIsChrome) || IsFrame()) { return; } nsCOMPtr<nsIBaseWindow> treeOwnerAsWin = GetTreeOwnerWindow(); if (!treeOwnerAsWin) { aError.Throw(NS_ERROR_FAILURE); return; } @@ -7688,32 +7688,32 @@ nsGlobalWindow::MoveByOuter(int32_t aXDi nsIntSize newDevPos(CSSToDevIntPixels(cssPos)); aError = treeOwnerAsWin->SetPosition(newDevPos.width, newDevPos.height); } void nsGlobalWindow::MoveBy(int32_t aXDif, int32_t aYDif, ErrorResult& aError) { - FORWARD_TO_OUTER_OR_THROW(MoveByOuter, (aXDif, aYDif, aError), aError, ); + FORWARD_TO_OUTER_OR_THROW(MoveByOuter, (aXDif, aYDif, aError, nsContentUtils::IsCallerChrome()), aError, ); } NS_IMETHODIMP nsGlobalWindow::MoveBy(int32_t aXDif, int32_t aYDif) { - FORWARD_TO_INNER(MoveBy, (aXDif, aYDif), NS_ERROR_UNEXPECTED); - - ErrorResult rv; - MoveBy(aXDif, aYDif, rv); - - return rv.StealNSResult(); -} - -void -nsGlobalWindow::ResizeToOuter(int32_t aWidth, int32_t aHeight, ErrorResult& aError) + FORWARD_TO_OUTER(MoveBy, (aXDif, aYDif), NS_ERROR_UNEXPECTED); + + ErrorResult rv; + MoveByOuter(aXDif, aYDif, rv, /* aCallerIsChrome = */ true); + + return rv.StealNSResult(); +} + +void +nsGlobalWindow::ResizeToOuter(int32_t aWidth, int32_t aHeight, ErrorResult& aError, bool aCallerIsChrome) { MOZ_RELEASE_ASSERT(IsOuterWindow()); /* * If caller is a browser-element then dispatch a resize event to * the embedder. */ if (mDocShell && mDocShell->GetIsBrowserOrApp()) { @@ -7725,17 +7725,17 @@ nsGlobalWindow::ResizeToOuter(int32_t aW } } /* * If caller is not chrome and the user has not explicitly exempted the site, * prevent window.resizeTo() by exiting early */ - if (!CanMoveResizeWindows() || IsFrame()) { + if (!CanMoveResizeWindows(aCallerIsChrome) || IsFrame()) { return; } nsCOMPtr<nsIBaseWindow> treeOwnerAsWin = GetTreeOwnerWindow(); if (!treeOwnerAsWin) { aError.Throw(NS_ERROR_FAILURE); return; } @@ -7746,33 +7746,33 @@ nsGlobalWindow::ResizeToOuter(int32_t aW nsIntSize devSz(CSSToDevIntPixels(cssSize)); aError = treeOwnerAsWin->SetSize(devSz.width, devSz.height, true); } void nsGlobalWindow::ResizeTo(int32_t aWidth, int32_t aHeight, ErrorResult& aError) { - FORWARD_TO_OUTER_OR_THROW(ResizeToOuter, (aWidth, aHeight, aError), aError, ); + FORWARD_TO_OUTER_OR_THROW(ResizeToOuter, (aWidth, aHeight, aError, nsContentUtils::IsCallerChrome()), aError, ); } NS_IMETHODIMP nsGlobalWindow::ResizeTo(int32_t aWidth, int32_t aHeight) { - FORWARD_TO_INNER(ResizeTo, (aWidth, aHeight), NS_ERROR_UNEXPECTED); - - ErrorResult rv; - ResizeTo(aWidth, aHeight, rv); + FORWARD_TO_OUTER(ResizeTo, (aWidth, aHeight), NS_ERROR_UNEXPECTED); + + ErrorResult rv; + ResizeToOuter(aWidth, aHeight, rv, nsContentUtils::IsCallerChrome()); return rv.StealNSResult(); } void nsGlobalWindow::ResizeByOuter(int32_t aWidthDif, int32_t aHeightDif, - ErrorResult& aError) + ErrorResult& aError, bool aCallerIsChrome) { MOZ_RELEASE_ASSERT(IsOuterWindow()); /* * If caller is a browser-element then dispatch a resize event to * parent. */ if (mDocShell && mDocShell->GetIsBrowserOrApp()) { @@ -7791,17 +7791,17 @@ nsGlobalWindow::ResizeByOuter(int32_t aW } } /* * If caller is not chrome and the user has not explicitly exempted the site, * prevent window.resizeBy() by exiting early */ - if (!CanMoveResizeWindows() || IsFrame()) { + if (!CanMoveResizeWindows(aCallerIsChrome) || IsFrame()) { return; } nsCOMPtr<nsIBaseWindow> treeOwnerAsWin = GetTreeOwnerWindow(); if (!treeOwnerAsWin) { aError.Throw(NS_ERROR_FAILURE); return; } @@ -7827,45 +7827,45 @@ nsGlobalWindow::ResizeByOuter(int32_t aW aError = treeOwnerAsWin->SetSize(newDevSize.width, newDevSize.height, true); } void nsGlobalWindow::ResizeBy(int32_t aWidthDif, int32_t aHeightDif, ErrorResult& aError) { - FORWARD_TO_OUTER_OR_THROW(ResizeByOuter, (aWidthDif, aHeightDif, aError), aError, ); + FORWARD_TO_OUTER_OR_THROW(ResizeByOuter, (aWidthDif, aHeightDif, aError, nsContentUtils::IsCallerChrome()), aError, ); } NS_IMETHODIMP nsGlobalWindow::ResizeBy(int32_t aWidthDif, int32_t aHeightDif) { - FORWARD_TO_INNER(ResizeBy, (aWidthDif, aHeightDif), NS_ERROR_UNEXPECTED); - - ErrorResult rv; - ResizeBy(aWidthDif, aHeightDif, rv); - - return rv.StealNSResult(); -} - -void -nsGlobalWindow::SizeToContentOuter(ErrorResult& aError) + FORWARD_TO_OUTER(ResizeBy, (aWidthDif, aHeightDif), NS_ERROR_UNEXPECTED); + + ErrorResult rv; + ResizeByOuter(aWidthDif, aHeightDif, rv, /* aCallerIsChrome = */ true); + + return rv.StealNSResult(); +} + +void +nsGlobalWindow::SizeToContentOuter(ErrorResult& aError, bool aCallerIsChrome) { MOZ_RELEASE_ASSERT(IsOuterWindow()); if (!mDocShell) { return; } /* * If caller is not chrome and the user has not explicitly exempted the site, * prevent window.sizeToContent() by exiting early */ - if (!CanMoveResizeWindows() || IsFrame()) { + if (!CanMoveResizeWindows(aCallerIsChrome) || IsFrame()) { return; } // The content viewer does a check to make sure that it's a content // viewer for a toplevel docshell. nsCOMPtr<nsIContentViewer> cv; mDocShell->GetContentViewer(getter_AddRefs(cv)); if (!cv) { @@ -7894,26 +7894,26 @@ nsGlobalWindow::SizeToContentOuter(Error aError = treeOwner->SizeShellTo(mDocShell, newDevSize.width, newDevSize.height); } void nsGlobalWindow::SizeToContent(ErrorResult& aError) { - FORWARD_TO_OUTER_OR_THROW(SizeToContentOuter, (aError), aError, ); + FORWARD_TO_OUTER_OR_THROW(SizeToContentOuter, (aError, nsContentUtils::IsCallerChrome()), aError, ); } NS_IMETHODIMP nsGlobalWindow::SizeToContent() { - FORWARD_TO_INNER(SizeToContent, (), NS_ERROR_UNEXPECTED); - - ErrorResult rv; - SizeToContent(rv); + FORWARD_TO_OUTER(SizeToContent, (), NS_ERROR_UNEXPECTED); + + ErrorResult rv; + SizeToContentOuter(rv, /* aCallerIsChrome = */ true); return rv.StealNSResult(); } NS_IMETHODIMP nsGlobalWindow::GetWindowRoot(nsIDOMEventTarget **aWindowRoot) { nsCOMPtr<nsPIWindowRoot> root = GetTopWindowRoot(); @@ -14729,17 +14729,17 @@ nsGlobalWindow::SetReplaceableWindowCoor { MOZ_ASSERT(IsInnerWindow()); /* * If caller is not chrome and the user has not explicitly exempted the site, * just treat this the way we would an IDL replaceable property. */ nsGlobalWindow* outer = GetOuterWindowInternal(); - if (!outer || !outer->CanMoveResizeWindows() || outer->IsFrame()) { + if (!outer || !outer->CanMoveResizeWindows(nsContentUtils::IsCallerChrome()) || outer->IsFrame()) { RedefineProperty(aCx, aPropName, aValue, aError); return; } int32_t value; if (!ValueToPrimitive<int32_t, eDefault>(aCx, aValue, &value)) { aError.Throw(NS_ERROR_UNEXPECTED); return;
--- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -978,24 +978,24 @@ public: mozilla::dom::indexedDB::IDBFactory* GetIndexedDB(mozilla::ErrorResult& aError); already_AddRefed<nsICSSDeclaration> GetComputedStyle(mozilla::dom::Element& aElt, const nsAString& aPseudoElt, mozilla::ErrorResult& aError); already_AddRefed<mozilla::dom::MediaQueryList> MatchMediaOuter(const nsAString& aQuery); already_AddRefed<mozilla::dom::MediaQueryList> MatchMedia(const nsAString& aQuery, mozilla::ErrorResult& aError); nsScreen* GetScreen(mozilla::ErrorResult& aError); - void MoveToOuter(int32_t aXPos, int32_t aYPos, mozilla::ErrorResult& aError); + void MoveToOuter(int32_t aXPos, int32_t aYPos, mozilla::ErrorResult& aError, bool aCallerIsChrome); void MoveTo(int32_t aXPos, int32_t aYPos, mozilla::ErrorResult& aError); - void MoveByOuter(int32_t aXDif, int32_t aYDif, mozilla::ErrorResult& aError); + void MoveByOuter(int32_t aXDif, int32_t aYDif, mozilla::ErrorResult& aError, bool aCallerIsChrome); void MoveBy(int32_t aXDif, int32_t aYDif, mozilla::ErrorResult& aError); - void ResizeToOuter(int32_t aWidth, int32_t aHeight, mozilla::ErrorResult& aError); + void ResizeToOuter(int32_t aWidth, int32_t aHeight, mozilla::ErrorResult& aError, bool aCallerIsChrome); void ResizeTo(int32_t aWidth, int32_t aHeight, mozilla::ErrorResult& aError); - void ResizeByOuter(int32_t aWidthDif, int32_t aHeightDif, mozilla::ErrorResult& aError); + void ResizeByOuter(int32_t aWidthDif, int32_t aHeightDif, mozilla::ErrorResult& aError, bool aCallerIsChrome); void ResizeBy(int32_t aWidthDif, int32_t aHeightDif, mozilla::ErrorResult& aError); void Scroll(double aXScroll, double aYScroll); void Scroll(const mozilla::dom::ScrollToOptions& aOptions); void ScrollTo(double aXScroll, double aYScroll); void ScrollTo(const mozilla::dom::ScrollToOptions& aOptions); void ScrollBy(double aXScrollDif, double aYScrollDif); void ScrollBy(const mozilla::dom::ScrollToOptions& aOptions); @@ -1047,17 +1047,17 @@ public: #ifdef MOZ_WEBSPEECH mozilla::dom::SpeechSynthesis* GetSpeechSynthesis(mozilla::ErrorResult& aError); #endif already_AddRefed<nsICSSDeclaration> GetDefaultComputedStyle(mozilla::dom::Element& aElt, const nsAString& aPseudoElt, mozilla::ErrorResult& aError); - void SizeToContentOuter(mozilla::ErrorResult& aError); + void SizeToContentOuter(mozilla::ErrorResult& aError, bool aCallerIsChrome); void SizeToContent(mozilla::ErrorResult& aError); mozilla::dom::Crypto* GetCrypto(mozilla::ErrorResult& aError); nsIControllers* GetControllersOuter(mozilla::ErrorResult& aError); nsIControllers* GetControllers(mozilla::ErrorResult& aError); mozilla::dom::Element* GetRealFrameElementOuter(); mozilla::dom::Element* GetRealFrameElement(mozilla::ErrorResult& aError); float GetMozInnerScreenXOuter(); float GetMozInnerScreenX(mozilla::ErrorResult& aError); @@ -1466,17 +1466,17 @@ public: // Arguments to this function should have values in device pixels nsresult SetDocShellWidthAndHeight(int32_t width, int32_t height); static bool CanSetProperty(const char *aPrefName); static void MakeScriptDialogTitle(nsAString &aOutTitle); // Outer windows only. - bool CanMoveResizeWindows(); + bool CanMoveResizeWindows(bool aCallerIsChrome); // If aDoFlush is true, we'll flush our own layout; otherwise we'll try to // just flush our parent and only flush ourselves if we think we need to. // Outer windows only. mozilla::CSSIntPoint GetScrollXY(bool aDoFlush); void GetScrollMaxXYOuter(int32_t* aScrollMaxX, int32_t* aScrollMaxY); void GetScrollMaxXY(int32_t* aScrollMaxX, int32_t* aScrollMaxY,