Title: [233095] trunk/Source/WebKit
Revision
233095
Author
[email protected]
Date
2018-06-22 13:24:55 -0700 (Fri, 22 Jun 2018)

Log Message

[Fullscreen] Exit fullscreen when opening a new tab
https://bugs.webkit.org/show_bug.cgi?id=186826
<rdar://problem/40853211>

Reviewed by Brent Fulgham.

Make the fullscreen placeholder view a custom UIView, and exit fullscreen when the
placeholder is removed from its superview.

* UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
(-[WKFullScreenPlaceholderView willMoveToSuperview:]):
(-[WKFullScreenWindowController enterFullScreen]):
(-[WKFullScreenWindowController _completedExitFullScreen]):
(-[WKFullScreenWindowController placeholderWillMoveToSuperview:]):
(-[WKFullScreenWindowController _exitFullscreenImmediately]):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (233094 => 233095)


--- trunk/Source/WebKit/ChangeLog	2018-06-22 20:21:15 UTC (rev 233094)
+++ trunk/Source/WebKit/ChangeLog	2018-06-22 20:24:55 UTC (rev 233095)
@@ -1,3 +1,21 @@
+2018-06-22  Jer Noble  <[email protected]>
+
+        [Fullscreen] Exit fullscreen when opening a new tab
+        https://bugs.webkit.org/show_bug.cgi?id=186826
+        <rdar://problem/40853211>
+
+        Reviewed by Brent Fulgham.
+
+        Make the fullscreen placeholder view a custom UIView, and exit fullscreen when the
+        placeholder is removed from its superview.
+
+        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
+        (-[WKFullScreenPlaceholderView willMoveToSuperview:]):
+        (-[WKFullScreenWindowController enterFullScreen]):
+        (-[WKFullScreenWindowController _completedExitFullScreen]):
+        (-[WKFullScreenWindowController placeholderWillMoveToSuperview:]):
+        (-[WKFullScreenWindowController _exitFullscreenImmediately]):
+
 2018-06-22  Timothy Horton  <[email protected]>
 
         Fix the build after r233089

Modified: trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm (233094 => 233095)


--- trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm	2018-06-22 20:21:15 UTC (rev 233094)
+++ trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm	2018-06-22 20:24:55 UTC (rev 233095)
@@ -363,10 +363,27 @@
 
 @interface WKFullScreenWindowController () <UIGestureRecognizerDelegate>
 @property (weak, nonatomic) WKWebView *_webView; // Cannot be retained, see <rdar://problem/14884666>.
+- (void)placeholderWillMoveToSuperview:(UIView *)superview;
 @end
 
+#pragma mark -
+
+@interface WKFullScreenPlaceholderView : UIView
+@property (weak, nonatomic) WKFullScreenWindowController *parent;
+@end
+
+@implementation WKFullScreenPlaceholderView
+- (void)willMoveToSuperview:(UIView *)newSuperview
+{
+    [super viewWillMoveToSuperview:newSuperview];
+    [self.parent placeholderWillMoveToSuperview:newSuperview];
+}
+@end
+
+#pragma mark -
+
 @implementation WKFullScreenWindowController {
-    RetainPtr<UIView> _webViewPlaceholder;
+    RetainPtr<WKFullScreenPlaceholderView> _webViewPlaceholder;
 
     FullScreenState _fullScreenState;
     WKWebViewState _viewState;
@@ -481,7 +498,8 @@
 
     _viewState.store(webView.get());
 
-    _webViewPlaceholder = adoptNS([[UIView alloc] init]);
+    _webViewPlaceholder = adoptNS([[WKFullScreenPlaceholderView alloc] init]);
+    [_webViewPlaceholder setParent:self];
     [[_webViewPlaceholder layer] setName:@"Fullscreen Placeholder View"];
 
     WKSnapshotConfiguration* config = nil;
@@ -670,6 +688,7 @@
 
     _repaintCallback = VoidCallback::create([protectedSelf = retainPtr(self), self](WebKit::CallbackBase::Error) {
         _repaintCallback = nullptr;
+        _webViewPlaceholder.get().parent = nil;
         [_webViewPlaceholder removeFromSuperview];
 
         if (auto* page = [self._webView _page])
@@ -702,6 +721,12 @@
         [_fullscreenViewController videoControlsManagerDidChange];
 }
 
+- (void)placeholderWillMoveToSuperview:(UIView *)superview
+{
+    if (!superview)
+        [self close];
+}
+
 #pragma mark -
 #pragma mark UIGestureRecognizerDelegate
 
@@ -770,6 +795,7 @@
     _fullScreenState = ExitingFullScreen;
     [self _completedExitFullScreen];
     RetainPtr<WKWebView> webView = self._webView;
+    _webViewPlaceholder.get().parent = nil;
     replaceViewWithView(_webViewPlaceholder.get(), webView.get());
     if (auto* page = [webView _page])
         page->setSuppressVisibilityUpdates(false);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to