Title: [233976] branches/safari-606-branch/Source/WebKit
Revision
233976
Author
[email protected]
Date
2018-07-18 19:01:20 -0700 (Wed, 18 Jul 2018)

Log Message

Cherry-pick r233940. rdar://problem/42359640

    CRASH at WebKit: WebKit::WebFullScreenManagerProxy::saveScrollPosition
    https://bugs.webkit.org/show_bug.cgi?id=187769
    <rdar://problem/42160666>

    Reviewed by Tim Horton.

    Null-check all uses of _page and _manager in WKFullScreenWindowControllerIOS.

    * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
    (WebKit::WKWebViewState::applyTo):
    (WebKit::WKWebViewState::store):
    (-[WKFullScreenWindowController enterFullScreen]):
    (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
    (-[WKFullScreenWindowController _completedExitFullScreen]):

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

Modified Paths

Diff

Modified: branches/safari-606-branch/Source/WebKit/ChangeLog (233975 => 233976)


--- branches/safari-606-branch/Source/WebKit/ChangeLog	2018-07-19 02:01:18 UTC (rev 233975)
+++ branches/safari-606-branch/Source/WebKit/ChangeLog	2018-07-19 02:01:20 UTC (rev 233976)
@@ -1,5 +1,43 @@
 2018-07-18  Babak Shafiei  <[email protected]>
 
+        Cherry-pick r233940. rdar://problem/42359640
+
+    CRASH at WebKit: WebKit::WebFullScreenManagerProxy::saveScrollPosition
+    https://bugs.webkit.org/show_bug.cgi?id=187769
+    <rdar://problem/42160666>
+    
+    Reviewed by Tim Horton.
+    
+    Null-check all uses of _page and _manager in WKFullScreenWindowControllerIOS.
+    
+    * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
+    (WebKit::WKWebViewState::applyTo):
+    (WebKit::WKWebViewState::store):
+    (-[WKFullScreenWindowController enterFullScreen]):
+    (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
+    (-[WKFullScreenWindowController _completedExitFullScreen]):
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233940 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-07-18  Jer Noble  <[email protected]>
+
+            CRASH at WebKit: WebKit::WebFullScreenManagerProxy::saveScrollPosition
+            https://bugs.webkit.org/show_bug.cgi?id=187769
+            <rdar://problem/42160666>
+
+            Reviewed by Tim Horton.
+
+            Null-check all uses of _page and _manager in WKFullScreenWindowControllerIOS.
+
+            * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
+            (WebKit::WKWebViewState::applyTo):
+            (WebKit::WKWebViewState::store):
+            (-[WKFullScreenWindowController enterFullScreen]):
+            (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
+            (-[WKFullScreenWindowController _completedExitFullScreen]):
+
+2018-07-18  Babak Shafiei  <[email protected]>
+
         Cherry-pick r233939. rdar://problem/42359636
 
     WebContent crash in WebProcess::ensureNetworkProcessConnection

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm (233975 => 233976)


--- branches/safari-606-branch/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm	2018-07-19 02:01:18 UTC (rev 233975)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm	2018-07-19 02:01:20 UTC (rev 233976)
@@ -115,8 +115,10 @@
         [[webView scrollView] setContentInset:_savedEdgeInset];
         [[webView scrollView] setContentOffset:_savedContentOffset];
         [[webView scrollView] setScrollIndicatorInsets:_savedScrollIndicatorInsets];
-        [webView _page]->setTopContentInset(_savedTopContentInset);
-        [webView _page]->setForceAlwaysUserScalable(_savedForceAlwaysUserScalable);
+        if (auto* page = webView._page) {
+            page->setTopContentInset(_savedTopContentInset);
+            page->setForceAlwaysUserScalable(_savedForceAlwaysUserScalable);
+        }
         [webView _setViewScale:_savedViewScale];
         [[webView scrollView] setZoomScale:_savedZoomScale];
         webView.scrollView.minimumZoomScale = _savedMinimumZoomScale;
@@ -131,8 +133,10 @@
         _savedEdgeInset = [[webView scrollView] contentInset];
         _savedContentOffset = [[webView scrollView] contentOffset];
         _savedScrollIndicatorInsets = [[webView scrollView] scrollIndicatorInsets];
-        _savedTopContentInset = [webView _page]->topContentInset();
-        _savedForceAlwaysUserScalable = [webView _page]->forceAlwaysUserScalable();
+        if (auto* page = webView._page) {
+            _savedTopContentInset = page->topContentInset();
+            _savedForceAlwaysUserScalable = page->forceAlwaysUserScalable();
+        }
         _savedViewScale = [webView _viewScale];
         _savedZoomScale = [[webView scrollView] zoomScale];
         _savedMinimumZoomScale = webView.scrollView.minimumZoomScale;
@@ -488,6 +492,12 @@
     if ([self isFullScreen])
         return;
 
+    RetainPtr<WKWebView> webView = self._webView;
+    auto* page = [webView _page];
+    auto* manager = self._manager;
+    if (!page || !manager)
+        return;
+
     [self _invalidateEVOrganizationName];
 
     _fullScreenState = WaitingToEnterFullScreen;
@@ -506,8 +516,6 @@
 
     _window.get().rootViewController = _rootViewController.get();
 
-    RetainPtr<WKWebView> webView = self._webView;
-
     _fullscreenViewController = adoptNS([[WKFullScreenViewController alloc] initWithWebView:webView.get()]);
     [_fullscreenViewController setModalPresentationStyle:UIModalPresentationCustom];
     [_fullscreenViewController setTransitioningDelegate:self];
@@ -534,9 +542,9 @@
     [_interactivePinchDismissGestureRecognizer setCancelsTouchesInView:NO];
     [_fullscreenViewController.get().view addGestureRecognizer:_interactivePinchDismissGestureRecognizer.get()];
 
-    [self _manager]->saveScrollPosition();
+    manager->saveScrollPosition();
 
-    [webView _page]->setSuppressVisibilityUpdates(true);
+    page->setSuppressVisibilityUpdates(true);
 
     _viewState.store(webView.get());
 
@@ -547,7 +555,8 @@
     WKSnapshotConfiguration* config = nil;
     [webView takeSnapshotWithConfiguration:config completionHandler:^(UIImage * snapshotImage, NSError * error) {
         RetainPtr<WKWebView> webView = self._webView;
-        if (![webView _page])
+        auto* page = [self._webView _page];
+        if (!page)
             return;
 
         [CATransaction begin];
@@ -565,7 +574,8 @@
         [webView setNeedsLayout];
         [webView layoutIfNeeded];
         
-        [self _manager]->setAnimatingFullScreen(true);
+        if (auto* manager = self._manager)
+            manager->setAnimatingFullScreen(true);
 
         ViewportArguments arguments { ViewportArguments::CSSDeviceAdaptation };
         arguments.zoom = 1;
@@ -572,7 +582,7 @@
         arguments.minZoom = 1;
         arguments.maxZoom = 1;
         arguments.userZoom = 1;
-        [webView _page]->setOverrideViewportArguments(arguments);
+        page->setOverrideViewportArguments(arguments);
 
         _repaintCallback = VoidCallback::create([protectedSelf = retainPtr(self), self](WebKit::CallbackBase::Error) {
             _repaintCallback = nullptr;
@@ -584,7 +594,7 @@
             ASSERT_NOT_REACHED();
             [self _exitFullscreenImmediately];
         });
-        [webView _page]->forceRepaint(_repaintCallback.copyRef());
+        page->forceRepaint(_repaintCallback.copyRef());
 
         [CATransaction commit];
     }];
@@ -674,7 +684,8 @@
     _finalFrame.size = sizeExpandedToSize(_finalFrame.size, CGSizeMake(1, 1));
     _finalFrame = safeInlineRect(_finalFrame, [_rootViewController view].frame.size);
 
-    [self._webView _page]->setSuppressVisibilityUpdates(true);
+    if (auto* page = [self._webView _page])
+        page->setSuppressVisibilityUpdates(true);
 
     [_fullscreenViewController setPrefersStatusBarHidden:NO];
 
@@ -705,7 +716,8 @@
     [webView becomeFirstResponder];
 
     _viewState.applyTo(webView.get());
-    [webView _page]->setOverrideViewportArguments(std::nullopt);
+    if (auto* page = [webView _page])
+        page->setOverrideViewportArguments(std::nullopt);
 
     [webView setNeedsLayout];
     [webView layoutIfNeeded];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to