diff --git a/widget/nsIWidget.h b/widget/nsIWidget.h index 06eab558eb13..29c127c14645 100644 --- a/widget/nsIWidget.h +++ b/widget/nsIWidget.h @@ -1397,6 +1397,8 @@ class nsIWidget : public nsISupports { const nsAString& xulWinClass, const nsAString& xulWinName) = 0; + virtual void SetIsEarlyBlankWindow(bool) {} + /** * Enables/Disables system capture of any and all events that would cause a * popup to be rolled up. aListener should be set to a non-null value for diff --git a/widget/windows/nsWindow.cpp b/widget/windows/nsWindow.cpp index e6fc404109a7..c7072c627aea 100644 --- a/widget/windows/nsWindow.cpp +++ b/widget/windows/nsWindow.cpp @@ -3951,10 +3951,8 @@ uint32_t nsWindow::GetMaxTouchPoints() const { return WinUtils::GetMaxTouchPoints(); } -void nsWindow::SetWindowClass(const nsAString& xulWinType, - const nsAString& xulWinClass, - const nsAString& xulWinName) { - mIsEarlyBlankWindow = xulWinType.EqualsLiteral("navigator:blank"); +void nsWindow::SetIsEarlyBlankWindow(bool aIsEarlyBlankWindow) { + mIsEarlyBlankWindow = aIsEarlyBlankWindow; } /************************************************************** diff --git a/widget/windows/nsWindow.h b/widget/windows/nsWindow.h index 6a53354dbe88..dc1d84e298b4 100644 --- a/widget/windows/nsWindow.h +++ b/widget/windows/nsWindow.h @@ -261,8 +261,7 @@ class nsWindow final : public nsBaseWidget { const LayoutDeviceIntRegion& aRegion) override; uint32_t GetMaxTouchPoints() const override; - void SetWindowClass(const nsAString& xulWinType, const nsAString& xulWinClass, - const nsAString& xulWinName) override; + void SetIsEarlyBlankWindow(bool) override; /** * Event helpers diff --git a/xpfe/appshell/AppWindow.cpp b/xpfe/appshell/AppWindow.cpp index e172f9340efa..4a70cb83c5e3 100644 --- a/xpfe/appshell/AppWindow.cpp +++ b/xpfe/appshell/AppWindow.cpp @@ -1631,30 +1631,33 @@ void AppWindow::SyncAttributesToWidget() { NS_ENSURE_TRUE_VOID(mWindow); + // Only change blank window status once we're loaded, so that a + // partially-loaded browser window doesn't start painting early. + if (mChromeLoaded) { + mWindow->SetIsEarlyBlankWindow(attr.EqualsLiteral("navigator:blank")); + NS_ENSURE_TRUE_VOID(mWindow); + } + // "icon" attribute windowElement->GetAttribute(u"icon"_ns, attr); if (!attr.IsEmpty()) { mWindow->SetIcon(attr); - NS_ENSURE_TRUE_VOID(mWindow); } // "drawtitle" attribute windowElement->GetAttribute(u"drawtitle"_ns, attr); mWindow->SetDrawsTitle(attr.LowerCaseEqualsLiteral("true")); - NS_ENSURE_TRUE_VOID(mWindow); // "toggletoolbar" attribute windowElement->GetAttribute(u"toggletoolbar"_ns, attr); mWindow->SetShowsToolbarButton(attr.LowerCaseEqualsLiteral("true")); - NS_ENSURE_TRUE_VOID(mWindow); // "macnativefullscreen" attribute windowElement->GetAttribute(u"macnativefullscreen"_ns, attr); mWindow->SetSupportsNativeFullscreen(attr.LowerCaseEqualsLiteral("true")); - NS_ENSURE_TRUE_VOID(mWindow); // "macanimationtype" attribute