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