Bug 1332040 - Dispatch resize after fullscreen transistion for headless. r?jrmuizel
MozReview-Commit-ID: Lo17bhJsnww
--- a/widget/headless/HeadlessWidget.cpp
+++ b/widget/headless/HeadlessWidget.cpp
@@ -412,23 +412,36 @@ HeadlessWidget::MakeFullScreen(bool aFul
if (mSizeMode != nsSizeMode_Fullscreen) {
mLastSizeMode = mSizeMode;
}
mSizeMode = nsSizeMode_Fullscreen;
} else {
mSizeMode = mLastSizeMode;
}
- nsBaseWidget::InfallibleMakeFullScreen(aFullScreen, aTargetScreen);
-
+ // Notify the listener first so size mode change events are triggered before
+ // resize events.
if (mWidgetListener) {
mWidgetListener->SizeModeChanged(mSizeMode);
mWidgetListener->FullscreenChanged(aFullScreen);
}
+ // Real widget backends don't seem to follow a common approach for
+ // when and how many resize events are triggered during fullscreen
+ // transitions. InfallibleMakeFullScreen will trigger a resize, but it
+ // will be ignored if still transitioning to fullscreen, so it must be
+ // triggered on the next tick.
+ RefPtr<HeadlessWidget> self(this);
+ nsCOMPtr<nsIScreen> targetScreen(aTargetScreen);
+ NS_DispatchToCurrentThread(NS_NewRunnableFunction(
+ "HeadlessWidget::MakeFullScreen",
+ [self, targetScreen, aFullScreen]() -> void {
+ self->InfallibleMakeFullScreen(aFullScreen, targetScreen);
+ }));
+
return NS_OK;
}
nsresult
HeadlessWidget::AttachNativeKeyEvent(WidgetKeyboardEvent& aEvent)
{
HeadlessKeyBindings& bindings = HeadlessKeyBindings::GetInstance();
return bindings.AttachNativeKeyEvent(aEvent);