diff --git a/dom/src/base/nsBarProps.cpp b/dom/src/base/nsBarProps.cpp index d80159b4fef4..aa3b7c80d692 100644 --- a/dom/src/base/nsBarProps.cpp +++ b/dom/src/base/nsBarProps.cpp @@ -314,8 +314,14 @@ nsScrollbarsProp::SetVisible(PRBool aVisible) do_QueryInterface(mDOMWindow->GetDocShell()); if (scroller) { - PRInt32 prefValue = aVisible ? nsIScrollable::Scrollbar_Auto : - nsIScrollable::Scrollbar_Never ; + PRInt32 prefValue; + + if (aVisible) { + prefValue = nsIScrollable::Scrollbar_Auto; + } else { + prefValue = nsIScrollable::Scrollbar_Never; + } + scroller->SetDefaultScrollbarPreferences( nsIScrollable::ScrollOrientation_Y, prefValue); scroller->SetDefaultScrollbarPreferences( diff --git a/dom/src/base/nsGlobalWindow.cpp b/dom/src/base/nsGlobalWindow.cpp index a1d495307276..c6ab92bfbc45 100644 --- a/dom/src/base/nsGlobalWindow.cpp +++ b/dom/src/base/nsGlobalWindow.cpp @@ -1459,10 +1459,7 @@ nsGlobalWindow::GetOpener(nsIDOMWindowInternal** aOpener) *aOpener = nsnull; // First, check if we were called from a privileged chrome script - NS_ENSURE_TRUE(sSecMan, NS_ERROR_FAILURE); - PRBool allowClose; - nsresult rv = sSecMan->SubjectPrincipalIsSystem(&allowClose); - if (NS_SUCCEEDED(rv) && allowClose) { + if (IsCallerChrome()) { *aOpener = mOpener; NS_IF_ADDREF(*aOpener); return NS_OK; @@ -2178,6 +2175,21 @@ nsGlobalWindow::WindowExists(const nsAString& aName) return foundWindow; } +already_AddRefed +nsGlobalWindow::GetMainWidget() +{ + nsCOMPtr treeOwnerAsWin; + GetTreeOwner(getter_AddRefs(treeOwnerAsWin)); + + nsIWidget *widget = nsnull; + + if (treeOwnerAsWin) { + treeOwnerAsWin->GetMainWidget(&widget); + } + + return widget; +} + NS_IMETHODIMP nsGlobalWindow::SetFullScreen(PRBool aFullScreen) { @@ -2213,12 +2225,7 @@ nsGlobalWindow::SetFullScreen(PRBool aFullScreen) return NS_OK; } - nsCOMPtr treeOwnerAsWin; - GetTreeOwner(getter_AddRefs(treeOwnerAsWin)); - NS_ENSURE_TRUE(treeOwnerAsWin, NS_ERROR_FAILURE); - - nsCOMPtr widget; - treeOwnerAsWin->GetMainWidget(getter_AddRefs(widget)); + nsCOMPtr widget = GetMainWidget(); if (widget) widget->MakeFullScreen(aFullScreen); @@ -3479,48 +3486,43 @@ nsGlobalWindow::Close() // Don't allow scripts from content to close windows // that were not opened by script - nsresult rv; + nsresult rv = NS_OK; if (!mOpener && !mOpenerWasCleared) { - nsCOMPtr secMan( - do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv)); - if (NS_SUCCEEDED(rv)) { - PRBool allowClose = PR_TRUE; - rv = secMan->SubjectPrincipalIsSystem(&allowClose); + PRBool allowClose = PR_FALSE; - if (!allowClose) - rv = sSecMan->IsCapabilityEnabled("UniversalBrowserWrite", - &allowClose); + // UniversalBrowserWrite will be enabled if it's been explicitly + // enabled, or if we're called from chrome. + rv = sSecMan->IsCapabilityEnabled("UniversalBrowserWrite", + &allowClose); - if (NS_SUCCEEDED(rv) && !allowClose) { - allowClose = - nsContentUtils::GetBoolPref("dom.allow_scripts_to_close_windows", - PR_TRUE); - if (!allowClose) { - // We're blocking the close operation - // report localized error msg in JS console - nsCOMPtr stringBundleService( - do_GetService(kCStringBundleServiceCID)); - if (stringBundleService) { - nsCOMPtr stringBundle; - rv = stringBundleService->CreateBundle( - kDOMSecurityWarningsBundleURL, - getter_AddRefs(stringBundle)); - if (NS_SUCCEEDED(rv) && stringBundle) { - nsXPIDLString errorMsg; - rv = stringBundle->GetStringFromName( - NS_LITERAL_STRING("WindowCloseBlockedWarning").get(), - getter_Copies(errorMsg)); - if (NS_SUCCEEDED(rv)) { - nsCOMPtr console( - do_GetService("@mozilla.org/consoleservice;1")); - if (console) - console->LogStringMessage(errorMsg.get()); - } + if (NS_SUCCEEDED(rv) && !allowClose) { + allowClose = + nsContentUtils::GetBoolPref("dom.allow_scripts_to_close_windows", + PR_TRUE); + if (!allowClose) { + // We're blocking the close operation + // report localized error msg in JS console + nsCOMPtr stringBundleService = + do_GetService(kCStringBundleServiceCID); + if (stringBundleService) { + nsCOMPtr stringBundle; + stringBundleService->CreateBundle(kDOMSecurityWarningsBundleURL, + getter_AddRefs(stringBundle)); + if (stringBundle) { + nsXPIDLString errorMsg; + rv = stringBundle->GetStringFromName( + NS_LITERAL_STRING("WindowCloseBlockedWarning").get(), + getter_Copies(errorMsg)); + if (NS_SUCCEEDED(rv)) { + nsCOMPtr console = + do_GetService("@mozilla.org/consoleservice;1"); + if (console) + console->LogStringMessage(errorMsg.get()); } } - - return NS_OK; } + + return NS_OK; } } } @@ -5781,13 +5783,12 @@ nsGlobalChromeWindow::GetWindowState(PRUint16* aWindowState) { *aWindowState = nsIDOMChromeWindow::STATE_NORMAL; - nsCOMPtr widget; - nsresult rv = GetMainWidget(getter_AddRefs(widget)); + nsCOMPtr widget = GetMainWidget(); PRInt32 aMode = 0; if (widget) { - rv = widget->GetSizeMode(&aMode); + nsresult rv = widget->GetSizeMode(&aMode); NS_ENSURE_SUCCESS(rv, rv); } @@ -5806,14 +5807,14 @@ nsGlobalChromeWindow::GetWindowState(PRUint16* aWindowState) break; } - return rv; + return NS_OK; } NS_IMETHODIMP nsGlobalChromeWindow::Maximize() { - nsCOMPtr widget; - nsresult rv = GetMainWidget(getter_AddRefs(widget)); + nsCOMPtr widget = GetMainWidget(); + nsresult rv = NS_OK; if (widget) { rv = widget->SetSizeMode(nsSizeMode_Maximized); @@ -5825,8 +5826,8 @@ nsGlobalChromeWindow::Maximize() NS_IMETHODIMP nsGlobalChromeWindow::Minimize() { - nsCOMPtr widget; - nsresult rv = GetMainWidget(getter_AddRefs(widget)); + nsCOMPtr widget = GetMainWidget(); + nsresult rv = NS_OK; if (widget) { // minimize doesn't send deactivate events on windows, @@ -5845,8 +5846,8 @@ nsGlobalChromeWindow::Minimize() NS_IMETHODIMP nsGlobalChromeWindow::Restore() { - nsCOMPtr widget; - nsresult rv = GetMainWidget(getter_AddRefs(widget)); + nsCOMPtr widget = GetMainWidget(); + nsresult rv = NS_OK; if (widget) { rv = widget->SetSizeMode(nsSizeMode_Normal); @@ -5864,8 +5865,8 @@ nsGlobalChromeWindow::GetAttention() NS_IMETHODIMP nsGlobalChromeWindow::GetAttentionWithCycleCount(PRInt32 aCycleCount) { - nsCOMPtr widget; - nsresult rv = GetMainWidget(getter_AddRefs(widget)); + nsCOMPtr widget = GetMainWidget(); + nsresult rv = NS_OK; if (widget) { rv = widget->GetAttention(aCycleCount); @@ -5930,19 +5931,6 @@ nsGlobalChromeWindow::SetCursor(const nsAString& aCursor) return rv; } -nsresult -nsGlobalChromeWindow::GetMainWidget(nsIWidget** aMainWidget) -{ - nsCOMPtr treeOwnerAsWin; - nsresult rv = GetTreeOwner(getter_AddRefs(treeOwnerAsWin)); - - if (treeOwnerAsWin) { - rv = treeOwnerAsWin->GetMainWidget(aMainWidget); - } - - return rv; -} - NS_IMETHODIMP nsGlobalChromeWindow::GetBrowserDOMWindow(nsIBrowserDOMWindow **aBrowserWindow) { diff --git a/dom/src/base/nsGlobalWindow.h b/dom/src/base/nsGlobalWindow.h index ad8443eb34fc..d01f7d9649b8 100644 --- a/dom/src/base/nsGlobalWindow.h +++ b/dom/src/base/nsGlobalWindow.h @@ -297,6 +297,8 @@ protected: PRBool WindowExists(const nsAString& aName); + already_AddRefed GetMainWidget(); + // When adding new member variables, be careful not to create cycles // through JavaScript. If there is any chance that a member variable // could own objects that are implemented in JavaScript, then those @@ -372,8 +374,6 @@ public: protected: nsCOMPtr mBrowserDOMWindow; - - nsresult GetMainWidget(nsIWidget** aMainWidget); }; /*