Title: [153402] trunk/Source/WebKit2
Revision
153402
Author
[email protected]
Date
2013-07-27 16:14:07 -0700 (Sat, 27 Jul 2013)

Log Message

If entering fullscreen for a window fails, don't leave things in a bad state
https://bugs.webkit.org/show_bug.cgi?id=119179
<rdar://problem/14517068>

Reviewed by Sam Weinig.

On Lion, attempting to take a video fullscreen when the Safari window is already
fullscreen can sometimes fail, and AppKit informs us via windowDidFailToEnterFullScreen:

When this happens we have to undo the work done when entering fullscreen, to
avoid leaving things in a bad state.

* UIProcess/mac/WKFullScreenWindowController.mm:
(-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (153401 => 153402)


--- trunk/Source/WebKit2/ChangeLog	2013-07-27 22:23:38 UTC (rev 153401)
+++ trunk/Source/WebKit2/ChangeLog	2013-07-27 23:14:07 UTC (rev 153402)
@@ -1,3 +1,19 @@
+2013-07-27  Simon Fraser  <[email protected]>
+
+        If entering fullscreen for a window fails, don't leave things in a bad state
+        https://bugs.webkit.org/show_bug.cgi?id=119179
+
+        Reviewed by Sam Weinig.
+        
+        On Lion, attempting to take a video fullscreen when the Safari window is already
+        fullscreen can sometimes fail, and AppKit informs us via windowDidFailToEnterFullScreen:
+        
+        When this happens we have to undo the work done when entering fullscreen, to
+        avoid leaving things in a bad state.
+
+        * UIProcess/mac/WKFullScreenWindowController.mm:
+        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
+
 2013-07-26  Tim Horton  <[email protected]>
 
         Add a mode where autosizing fixes the FrameView height to at least the WKView height

Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm (153401 => 153402)


--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2013-07-27 22:23:38 UTC (rev 153401)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2013-07-27 23:14:07 UTC (rev 153402)
@@ -278,9 +278,10 @@
 {
     if (_fullScreenState != EnteringFullScreen)
         return;
-    _fullScreenState = InFullScreen;
+    
+    if (completed) {
+        _fullScreenState = InFullScreen;
 
-    if (completed) {
         // Screen updates to be re-enabled ta the end of the current block.
         NSDisableScreenUpdates();
         [self _manager]->didEnterFullScreen();
@@ -299,9 +300,30 @@
 
         [_webViewPlaceholder.get() setExitWarningVisible:YES];
         [_webViewPlaceholder.get() setTarget:self];
-        NSEnableScreenUpdates();
-    } else
+    } else {
+        // Transition to fullscreen failed. Clean up.
+        _fullScreenState = NotInFullScreen;
+
         [_scaleAnimation.get() stopAnimation];
+
+        [_backgroundWindow.get() orderOut:self];
+        [_backgroundWindow.get() setFrame:NSZeroRect display:YES];
+
+        [[self window] setAutodisplay:YES];
+        [_webView _setSuppressVisibilityUpdates:NO];
+
+        NSResponder *firstResponder = [[self window] firstResponder];
+        [self _replaceView:_webViewPlaceholder.get() with:_webView];
+        [[_webView window] makeResponder:firstResponder firstResponderIfDescendantOfView:_webView];
+        [[_webView window] makeKeyAndOrderFront:self];
+
+        [self _manager]->didExitFullScreen();
+        [self _manager]->setAnimatingFullScreen(false);
+        [self _page]->scalePage(_savedScale, IntPoint());
+        [self _manager]->restoreScrollPosition();
+    }
+
+    NSEnableScreenUpdates();
 }
 
 - (void)exitFullScreen
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to