[Mac] Fullscreen mode for some applications shows only a black screen.
authorbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Aug 2014 17:38:53 +0000 (17:38 +0000)
committerbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Aug 2014 17:38:53 +0000 (17:38 +0000)
https://bugs.webkit.org/show_bug.cgi?id=135493
<rdar://problem/17628212>

Reviewed by Jer Noble.

In some applications, the window hosting the WKView is an InProcess layer hosting mode.
The fullscreen window created by the WKFullScreenWindowController defaults to an
OutOfProcess mode.

When this kind of mismatch is encountered, the WK2 layer in the UI process is supposed
to send a message back to the WebProcess indicating that the layer hosting mode of the
containing window is different, so that the WebProcess can adjust its logic accordingly.
Unfortunately, the notification that this had happened was not getting sent to the
WebProcess due to an optimization in window state change logic (see Bug 135509 for
details).

The fix is to check layer hosting mode state when a WKView is added to a window, and
notify the WebProcess when it needs to change state to match.

* UIProcess/API/mac/WKView.mm:
(-[WKView viewDidMoveToWindow]): When moving to a new window, always call
'layerHostingModeDidChange' to pick up any changes in the layer hosting mode.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@171920 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/mac/WKView.mm

index 7c1d7f46473fd9fae5faae23094dbef419bf52d2..327dbbfa02dc4fcd7092ebc1ce10e6b6ea4c1a51 100644 (file)
@@ -1,3 +1,30 @@
+2014-08-01  Brent Fulgham  <bfulgham@apple.com>
+
+        [Mac] Fullscreen mode for some applications shows only a black screen.
+        https://bugs.webkit.org/show_bug.cgi?id=135493
+        <rdar://problem/17628212>
+
+        Reviewed by Jer Noble.
+
+        In some applications, the window hosting the WKView is an InProcess layer hosting mode.
+        The fullscreen window created by the WKFullScreenWindowController defaults to an
+        OutOfProcess mode.
+
+        When this kind of mismatch is encountered, the WK2 layer in the UI process is supposed
+        to send a message back to the WebProcess indicating that the layer hosting mode of the
+        containing window is different, so that the WebProcess can adjust its logic accordingly.
+        Unfortunately, the notification that this had happened was not getting sent to the
+        WebProcess due to an optimization in window state change logic (see Bug 135509 for
+        details).
+
+        The fix is to check layer hosting mode state when a WKView is added to a window, and
+        notify the WebProcess when it needs to change state to match.
+        
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView viewDidMoveToWindow]): When moving to a new window, always call
+        'layerHostingModeDidChange' to pick up any changes in the layer hosting mode.
+
 2014-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [CMake] GTK and EFL are using PROJECT_VERSION_PATCH to define the micro version
index c8dd8bf25f6c35f4e3f4d1aa10b44bdf032add32..5c9768a2b20e0b55e6d3ebcd3ab111dc49a566c9 100644 (file)
@@ -2506,6 +2506,9 @@ static void* keyValueObservingContext = &keyValueObservingContext;
 
         [self _updateWindowAndViewFrames];
 
+        // FIXME(135509) This call becomes unnecessary once 135509 is fixed; remove.
+        _data->_page->layerHostingModeDidChange();
+
         if (!_data->_flagsChangedEventMonitor) {
             _data->_flagsChangedEventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSFlagsChangedMask handler:^(NSEvent *flagsChangedEvent) {
                 [self _postFakeMouseMovedEventForFlagsChangedEvent:flagsChangedEvent];