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];