Changeset 233940 in webkit


Ignore:
Timestamp:
Jul 18, 2018 4:29:57 PM (6 years ago)
Author:
jer.noble@apple.com
Message:

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]):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r233939 r233940  
     12018-07-18  Jer Noble  <jer.noble@apple.com>
     2
     3        CRASH at WebKit: WebKit::WebFullScreenManagerProxy::saveScrollPosition
     4        https://bugs.webkit.org/show_bug.cgi?id=187769
     5        <rdar://problem/42160666>
     6
     7        Reviewed by Tim Horton.
     8
     9        Null-check all uses of _page and _manager in WKFullScreenWindowControllerIOS.
     10
     11        * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm:
     12        (WebKit::WKWebViewState::applyTo):
     13        (WebKit::WKWebViewState::store):
     14        (-[WKFullScreenWindowController enterFullScreen]):
     15        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
     16        (-[WKFullScreenWindowController _completedExitFullScreen]):
     17
    1182018-07-18  Chris Dumez  <cdumez@apple.com>
    219
  • trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm

    r233331 r233940  
    116116        [[webView scrollView] setContentOffset:_savedContentOffset];
    117117        [[webView scrollView] setScrollIndicatorInsets:_savedScrollIndicatorInsets];
    118         [webView _page]->setTopContentInset(_savedTopContentInset);
    119         [webView _page]->setForceAlwaysUserScalable(_savedForceAlwaysUserScalable);
     118        if (auto* page = webView._page) {
     119            page->setTopContentInset(_savedTopContentInset);
     120            page->setForceAlwaysUserScalable(_savedForceAlwaysUserScalable);
     121        }
    120122        [webView _setViewScale:_savedViewScale];
    121123        [[webView scrollView] setZoomScale:_savedZoomScale];
     
    132134        _savedContentOffset = [[webView scrollView] contentOffset];
    133135        _savedScrollIndicatorInsets = [[webView scrollView] scrollIndicatorInsets];
    134         _savedTopContentInset = [webView _page]->topContentInset();
    135         _savedForceAlwaysUserScalable = [webView _page]->forceAlwaysUserScalable();
     136        if (auto* page = webView._page) {
     137            _savedTopContentInset = page->topContentInset();
     138            _savedForceAlwaysUserScalable = page->forceAlwaysUserScalable();
     139        }
    136140        _savedViewScale = [webView _viewScale];
    137141        _savedZoomScale = [[webView scrollView] zoomScale];
     
    489493        return;
    490494
     495    RetainPtr<WKWebView> webView = self._webView;
     496    auto* page = [webView _page];
     497    auto* manager = self._manager;
     498    if (!page || !manager)
     499        return;
     500
    491501    [self _invalidateEVOrganizationName];
    492502
     
    506516
    507517    _window.get().rootViewController = _rootViewController.get();
    508 
    509     RetainPtr<WKWebView> webView = self._webView;
    510518
    511519    _fullscreenViewController = adoptNS([[WKFullScreenViewController alloc] initWithWebView:webView.get()]);
     
    535543    [_fullscreenViewController.get().view addGestureRecognizer:_interactivePinchDismissGestureRecognizer.get()];
    536544
    537     [self _manager]->saveScrollPosition();
    538 
    539     [webView _page]->setSuppressVisibilityUpdates(true);
     545    manager->saveScrollPosition();
     546
     547    page->setSuppressVisibilityUpdates(true);
    540548
    541549    _viewState.store(webView.get());
     
    548556    [webView takeSnapshotWithConfiguration:config completionHandler:^(UIImage * snapshotImage, NSError * error) {
    549557        RetainPtr<WKWebView> webView = self._webView;
    550         if (![webView _page])
     558        auto* page = [self._webView _page];
     559        if (!page)
    551560            return;
    552561
     
    566575        [webView layoutIfNeeded];
    567576       
    568         [self _manager]->setAnimatingFullScreen(true);
     577        if (auto* manager = self._manager)
     578            manager->setAnimatingFullScreen(true);
    569579
    570580        ViewportArguments arguments { ViewportArguments::CSSDeviceAdaptation };
     
    573583        arguments.maxZoom = 1;
    574584        arguments.userZoom = 1;
    575         [webView _page]->setOverrideViewportArguments(arguments);
     585        page->setOverrideViewportArguments(arguments);
    576586
    577587        _repaintCallback = VoidCallback::create([protectedSelf = retainPtr(self), self](WebKit::CallbackBase::Error) {
     
    585595            [self _exitFullscreenImmediately];
    586596        });
    587         [webView _page]->forceRepaint(_repaintCallback.copyRef());
     597        page->forceRepaint(_repaintCallback.copyRef());
    588598
    589599        [CATransaction commit];
     
    675685    _finalFrame = safeInlineRect(_finalFrame, [_rootViewController view].frame.size);
    676686
    677     [self._webView _page]->setSuppressVisibilityUpdates(true);
     687    if (auto* page = [self._webView _page])
     688        page->setSuppressVisibilityUpdates(true);
    678689
    679690    [_fullscreenViewController setPrefersStatusBarHidden:NO];
     
    706717
    707718    _viewState.applyTo(webView.get());
    708     [webView _page]->setOverrideViewportArguments(std::nullopt);
     719    if (auto* page = [webView _page])
     720        page->setOverrideViewportArguments(std::nullopt);
    709721
    710722    [webView setNeedsLayout];
Note: See TracChangeset for help on using the changeset viewer.