Changeset 207292 in webkit


Ignore:
Timestamp:
Oct 13, 2016 10:44:27 AM (8 years ago)
Author:
timothy_horton@apple.com
Message:

Expose SPI to disable synchronously blocking on painting after parenting a WKWebView
https://bugs.webkit.org/show_bug.cgi?id=163364
<rdar://problem/28012494>

Reviewed by Geoff Garen.

Some clients may not want the default WKWebView behavior where we synchronously
block on the Web process after the first time a WKWebView is re-added to the window,
because they are e.g. parenting re-used WKWebViews while scrolling.

  • UIProcess/API/APIPageConfiguration.h:

(API::PageConfiguration::shouldSynchronizeInitialPaintAfterMovingToWindow):
(API::PageConfiguration::setShouldSynchronizeInitialPaintAfterMovingToWindow):

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _initializeWithConfiguration:]):

  • UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

(-[WKWebViewConfiguration init]):
(-[WKWebViewConfiguration copyWithZone:]):
(-[WKWebViewConfiguration _shouldSynchronizeInitialPaintAfterMovingToWindow]):
(-[WKWebViewConfiguration _setShouldSynchronizeInitialPaintAfterMovingToWindow:]):

  • UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::WebPageProxy):
Add and plumb a new WKWebView configuration parameter.

(WebKit::WebPageProxy::dispatchViewStateChange):
If the new configuration parameter is set, don't block the main thread when
a view is reparented.

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r207279 r207292  
     12016-10-13  Tim Horton  <timothy_horton@apple.com>
     2
     3        Expose SPI to disable synchronously blocking on painting after parenting a WKWebView
     4        https://bugs.webkit.org/show_bug.cgi?id=163364
     5        <rdar://problem/28012494>
     6
     7        Reviewed by Geoff Garen.
     8
     9        Some clients may not want the default WKWebView behavior where we synchronously
     10        block on the Web process after the first time a WKWebView is re-added to the window,
     11        because they are e.g. parenting re-used WKWebViews while scrolling.
     12
     13        * UIProcess/API/APIPageConfiguration.h:
     14        (API::PageConfiguration::shouldSynchronizeInitialPaintAfterMovingToWindow):
     15        (API::PageConfiguration::setShouldSynchronizeInitialPaintAfterMovingToWindow):
     16        * UIProcess/API/Cocoa/WKWebView.mm:
     17        (-[WKWebView _initializeWithConfiguration:]):
     18        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
     19        (-[WKWebViewConfiguration init]):
     20        (-[WKWebViewConfiguration copyWithZone:]):
     21        (-[WKWebViewConfiguration _shouldSynchronizeInitialPaintAfterMovingToWindow]):
     22        (-[WKWebViewConfiguration _setShouldSynchronizeInitialPaintAfterMovingToWindow:]):
     23        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
     24        * UIProcess/WebPageProxy.h:
     25        * UIProcess/WebPageProxy.cpp:
     26        (WebKit::WebPageProxy::WebPageProxy):
     27        Add and plumb a new WKWebView configuration parameter.
     28
     29        (WebKit::WebPageProxy::dispatchViewStateChange):
     30        If the new configuration parameter is set, don't block the main thread when
     31        a view is reparented.
     32
    1332016-10-12  Chris Dumez  <cdumez@apple.com>
    234
  • trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.h

    r202185 r207292  
    9393    void setInitialCapitalizationEnabled(bool initialCapitalizationEnabled) { m_initialCapitalizationEnabled = initialCapitalizationEnabled; }
    9494
     95    bool shouldWaitForPaintAfterViewDidMoveToWindow() const { return m_shouldWaitForPaintAfterViewDidMoveToWindow; }
     96    void setShouldWaitForPaintAfterViewDidMoveToWindow(bool shouldSynchronize) { m_shouldWaitForPaintAfterViewDidMoveToWindow = shouldSynchronize; }
     97
    9598private:
    9699
     
    113116#endif
    114117    bool m_initialCapitalizationEnabled = true;
     118    bool m_shouldWaitForPaintAfterViewDidMoveToWindow = true;
    115119};
    116120
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r207171 r207292  
    439439    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowUniversalAccessFromFileURLsKey(), WebKit::WebPreferencesStore::Value(!![_configuration _allowUniversalAccessFromFileURLs]));
    440440    pageConfiguration->setInitialCapitalizationEnabled([_configuration _initialCapitalizationEnabled]);
     441    pageConfiguration->setShouldWaitForPaintAfterViewDidMoveToWindow([_configuration _shouldWaitForPaintAfterViewDidMoveToWindow]);
    441442
    442443#if PLATFORM(MAC)
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm

    r206054 r207292  
    124124#endif
    125125    BOOL _initialCapitalizationEnabled;
     126    BOOL _shouldWaitForPaintAfterViewDidMoveToWindow;
    126127
    127128#if ENABLE(APPLE_PAY)
     
    175176#endif
    176177    _initialCapitalizationEnabled = YES;
     178    _shouldWaitForPaintAfterViewDidMoveToWindow = YES;
    177179
    178180#if ENABLE(WIRELESS_PLAYBACK_TARGET)
     
    285287    configuration->_mainContentUserGestureOverrideEnabled = self->_mainContentUserGestureOverrideEnabled;
    286288    configuration->_initialCapitalizationEnabled = self->_initialCapitalizationEnabled;
     289    configuration->_shouldWaitForPaintAfterViewDidMoveToWindow = self->_shouldWaitForPaintAfterViewDidMoveToWindow;
    287290
    288291#if PLATFORM(IOS)
     
    656659}
    657660
     661- (BOOL)_shouldWaitForPaintAfterViewDidMoveToWindow
     662{
     663    return _shouldWaitForPaintAfterViewDidMoveToWindow;
     664}
     665
     666- (void)_setShouldWaitForPaintAfterViewDidMoveToWindow:(BOOL)shouldSynchronize
     667{
     668    _shouldWaitForPaintAfterViewDidMoveToWindow = shouldSynchronize;
     669}
     670
    658671#if PLATFORM(MAC)
    659672- (BOOL)_showsURLsInToolTips
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h

    r206054 r207292  
    5656@property (nonatomic, setter=_setInitialCapitalizationEnabled:) BOOL _initialCapitalizationEnabled WK_API_AVAILABLE(macosx(10.12), ios(10.0));
    5757@property (nonatomic, setter=_setApplePayEnabled:) BOOL _applePayEnabled WK_API_AVAILABLE(macosx(10.12), ios(10.0));
     58@property (nonatomic, setter=_setShouldWaitForPaintAfterViewDidMoveToWindow:) BOOL _shouldWaitForPaintAfterViewDidMoveToWindow WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
    5859
    5960#if TARGET_OS_IPHONE
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r206986 r207292  
    358358    , m_backForwardList(WebBackForwardList::create(*this))
    359359    , m_maintainsInactiveSelection(false)
     360    , m_shouldWaitForPaintAfterViewDidMoveToWindow(m_configuration->shouldWaitForPaintAfterViewDidMoveToWindow())
    360361    , m_isEditable(false)
    361362    , m_textZoomFactor(1)
     
    15251526    bool isNowInWindow = (changed & ViewState::IsInWindow) && isInWindow();
    15261527    // We always want to wait for the Web process to reply if we've been in-window before and are coming back in-window.
    1527     if (m_viewWasEverInWindow && isNowInWindow && m_drawingArea->hasVisibleContent())
     1528    if (m_viewWasEverInWindow && isNowInWindow && m_drawingArea->hasVisibleContent() && m_shouldWaitForPaintAfterViewDidMoveToWindow)
    15281529        m_viewStateChangeWantsSynchronousReply = true;
    15291530
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r206986 r207292  
    16541654    bool m_maintainsInactiveSelection;
    16551655
     1656    bool m_shouldWaitForPaintAfterViewDidMoveToWindow;
     1657
    16561658    String m_toolTip;
    16571659
Note: See TracChangeset for help on using the changeset viewer.