Changeset 209975 in webkit


Ignore:
Timestamp:
Dec 18, 2016 1:09:34 PM (7 years ago)
Author:
Simon Fraser
Message:

Expose a way for MiniBrowser to simulate header and footer banners
https://bugs.webkit.org/show_bug.cgi?id=166005

Reviewed by Wenson Hsieh.

Source/WebKit2:

Expose testing SPI that allows a client to simulate the presence of header
and footer banners. These are simply plumbed through to set FrameView's
m_headerHeight and m_footerHeight.

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _setHeaderBannerHeightForTesting:]):
(-[WKWebView _setFooterBannerHeightForTesting:]):

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

(WebKit::WebPageProxy::setHeaderBannerHeightForTesting):
(WebKit::WebPageProxy::setFooterBannerHeightForTesting):

  • UIProcess/WebPageProxy.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::setHeaderBannerHeightForTesting):
(WebKit::WebPage::setFooterBannerHeightForTesting):

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:

Tools:

Add a MiniBrowser menu item and setting to toggle adding space for header and footer
banners. This only works in WebKit2.

We need to reset these on each navigation, since newly created FrameViews
don't re-fetch the header and footer height stored on Page.

Also fix the signature of webView:didFinishNavigation: to follow API changes,
as well as fixing webViewWebContentProcessDidTerminate:

  • MiniBrowser/mac/SettingsController.h:
  • MiniBrowser/mac/SettingsController.m:

(-[SettingsController _populateMenu]):
(-[SettingsController validateMenuItem:]):
(-[SettingsController toggleReserveSpaceForBanners:]):
(-[SettingsController isSpaceReservedForBanners]):

  • MiniBrowser/mac/WK2BrowserWindowController.m:

(-[WK2BrowserWindowController didChangeSettings]):
(-[WK2BrowserWindowController webView:didFinishNavigation:]):
(-[WK2BrowserWindowController webViewWebContentProcessDidTerminate:]):
(-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]): Deleted.
(-[WK2BrowserWindowController _webViewWebProcessDidCrash:]): Deleted.

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r209969 r209975  
     12016-12-18  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Expose a way for MiniBrowser to simulate header and footer banners
     4        https://bugs.webkit.org/show_bug.cgi?id=166005
     5
     6        Reviewed by Wenson Hsieh.
     7       
     8        Expose testing SPI that allows a client to simulate the presence of header
     9        and footer banners. These are simply plumbed through to set FrameView's
     10        m_headerHeight and m_footerHeight.
     11
     12        * UIProcess/API/Cocoa/WKWebView.mm:
     13        (-[WKWebView _setHeaderBannerHeightForTesting:]):
     14        (-[WKWebView _setFooterBannerHeightForTesting:]):
     15        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
     16        * UIProcess/WebPageProxy.cpp:
     17        (WebKit::WebPageProxy::setHeaderBannerHeightForTesting):
     18        (WebKit::WebPageProxy::setFooterBannerHeightForTesting):
     19        * UIProcess/WebPageProxy.h:
     20        * WebProcess/WebPage/WebPage.cpp:
     21        (WebKit::WebPage::setHeaderBannerHeightForTesting):
     22        (WebKit::WebPage::setFooterBannerHeightForTesting):
     23        * WebProcess/WebPage/WebPage.h:
     24        * WebProcess/WebPage/WebPage.messages.in:
     25
    1262016-12-16  Dave Hyatt  <hyatt@apple.com>
    227
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r209967 r209975  
    48644864    [self insertText:string replacementRange:replacementRange];
    48654865}
     4866
     4867- (void)_setHeaderBannerHeight:(int)height
     4868{
     4869    _page->setHeaderBannerHeightForTesting(height);
     4870}
     4871
     4872- (void)_setFooterBannerHeight:(int)height
     4873{
     4874    _page->setFooterBannerHeightForTesting(height);
     4875}
     4876
    48664877#endif // PLATFORM(MAC)
    48674878
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h

    r209967 r209975  
    313313
    314314- (void)_insertText:(id)string replacementRange:(NSRange)replacementRange WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     315
     316- (void)_setHeaderBannerHeight:(int)height WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     317- (void)_setFooterBannerHeight:(int)height WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    315318#endif
    316319
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r209941 r209975  
    65756575    m_pageClient.didHandleAcceptedCandidate();
    65766576}
     6577
     6578void WebPageProxy::setHeaderBannerHeightForTesting(int height)
     6579{
     6580    m_process->send(Messages::WebPage::SetHeaderBannerHeightForTesting(height), m_pageID);
     6581}
     6582
     6583void WebPageProxy::setFooterBannerHeightForTesting(int height)
     6584{
     6585    m_process->send(Messages::WebPage::SetFooterBannerHeightForTesting(height), m_pageID);
     6586}
     6587
    65776588#endif
    65786589
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r209967 r209975  
    10891089    void handleAcceptedCandidate(WebCore::TextCheckingResult);
    10901090    void didHandleAcceptedCandidate();
     1091
     1092    void setHeaderBannerHeightForTesting(int);
     1093    void setFooterBannerHeightForTesting(int);
    10911094#endif
    10921095
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r209943 r209975  
    18341834        m_footerBanner->showIfHidden();
    18351835}
     1836
     1837void WebPage::setHeaderBannerHeightForTesting(int height)
     1838{
     1839#if ENABLE(RUBBER_BANDING)
     1840    corePage()->addHeaderWithHeight(height);
     1841#endif
     1842}
     1843
     1844void WebPage::setFooterBannerHeightForTesting(int height)
     1845{
     1846#if ENABLE(RUBBER_BANDING)
     1847    corePage()->addFooterWithHeight(height);
     1848#endif
     1849}
     1850
    18361851#endif // !PLATFORM(IOS)
    18371852
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r209839 r209975  
    476476    void showPageBanners();
    477477   
     478    void setHeaderBannerHeightForTesting(int);
     479    void setFooterBannerHeightForTesting(int);
    478480#endif // !PLATFORM(IOS)
    479481
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in

    r209839 r209975  
    417417    ImmediateActionDidCancel()
    418418    ImmediateActionDidComplete()
     419
    419420    DataDetectorsDidPresentUI(WebCore::PageOverlay::PageOverlayID pageOverlay)
    420421    DataDetectorsDidChangeUI(WebCore::PageOverlay::PageOverlayID pageOverlay)
    421422    DataDetectorsDidHideUI(WebCore::PageOverlay::PageOverlayID pageOverlay)
     423
    422424    HandleAcceptedCandidate(struct WebCore::TextCheckingResult acceptedCandidate)
    423425    RequestActiveNowPlayingSessionInfo()
     426
     427    SetHeaderBannerHeightForTesting(int height);
     428    SetFooterBannerHeightForTesting(int height);
    424429#endif
    425430
  • trunk/Tools/ChangeLog

    r209972 r209975  
     12016-12-18  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Expose a way for MiniBrowser to simulate header and footer banners
     4        https://bugs.webkit.org/show_bug.cgi?id=166005
     5
     6        Reviewed by Wenson Hsieh.
     7       
     8        Add a MiniBrowser menu item and setting to toggle adding space for header and footer
     9        banners. This only works in WebKit2.
     10       
     11        We need to reset these on each navigation, since newly created FrameViews
     12        don't re-fetch the header and footer height stored on Page.
     13       
     14        Also fix the signature of webView:didFinishNavigation: to follow API changes,
     15        as well as fixing webViewWebContentProcessDidTerminate:
     16
     17        * MiniBrowser/mac/SettingsController.h:
     18        * MiniBrowser/mac/SettingsController.m:
     19        (-[SettingsController _populateMenu]):
     20        (-[SettingsController validateMenuItem:]):
     21        (-[SettingsController toggleReserveSpaceForBanners:]):
     22        (-[SettingsController isSpaceReservedForBanners]):
     23        * MiniBrowser/mac/WK2BrowserWindowController.m:
     24        (-[WK2BrowserWindowController didChangeSettings]):
     25        (-[WK2BrowserWindowController webView:didFinishNavigation:]):
     26        (-[WK2BrowserWindowController webViewWebContentProcessDidTerminate:]):
     27        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]): Deleted.
     28        (-[WK2BrowserWindowController _webViewWebProcessDidCrash:]): Deleted.
     29
    1302016-12-17  Simon Fraser  <simon.fraser@apple.com>
    231
  • trunk/Tools/MiniBrowser/mac/SettingsController.h

    r209717 r209975  
    4141@property (nonatomic, readonly) BOOL incrementalRenderingSuppressed;
    4242@property (nonatomic, readonly) BOOL tiledScrollingIndicatorVisible;
     43@property (nonatomic, readonly, getter=isSpaceReservedForBanners) BOOL spaceReservedForBanners;
    4344@property (nonatomic, readonly) BOOL resourceUsageOverlayVisible;
    4445@property (nonatomic, readonly) BOOL nonFastScrollableRegionOverlayVisible;
  • trunk/Tools/MiniBrowser/mac/SettingsController.m

    r209717 r209975  
    4141static NSString * const SimpleLineLayoutDebugBordersEnabledPreferenceKey = @"SimpleLineLayoutDebugBordersEnabled";
    4242static NSString * const TiledScrollingIndicatorVisiblePreferenceKey = @"TiledScrollingIndicatorVisible";
     43static NSString * const ReserveSpaceForBannersPreferenceKey = @"ReserveSpaceForBanners";
     44
    4345static NSString * const ResourceUsageOverlayVisiblePreferenceKey = @"ResourceUsageOverlayVisible";
    4446static NSString * const LoadsAllSiteIconsKey = @"LoadsAllSiteIcons";
     
    136138    [self _addHeaderWithTitle:@"WebKit2-only Settings"];
    137139
     140    [self _addItemWithTitle:@"Reserve Space For Banners" action:@selector(toggleReserveSpaceForBanners:) indented:YES];
    138141    [self _addItemWithTitle:@"Show Tiled Scrolling Indicator" action:@selector(toggleShowTiledScrollingIndicator:) indented:YES];
    139142    [self _addItemWithTitle:@"Use UI-Side Compositing" action:@selector(toggleUseUISideCompositing:) indented:YES];
     
    214217    else if (action == @selector(toggleVisualViewportEnabled:))
    215218        [menuItem setState:[self visualViewportEnabled] ? NSOnState : NSOffState];
     219    else if (action == @selector(toggleReserveSpaceForBanners:))
     220        [menuItem setState:[self isSpaceReservedForBanners] ? NSOnState : NSOffState];
    216221    else if (action == @selector(toggleShowTiledScrollingIndicator:))
    217222        [menuItem setState:[self tiledScrollingIndicatorVisible] ? NSOnState : NSOffState];
     
    361366}
    362367
     368- (void)toggleReserveSpaceForBanners:(id)sender
     369{
     370    [self _toggleBooleanDefault:ReserveSpaceForBannersPreferenceKey];
     371}
     372
    363373- (void)toggleShowTiledScrollingIndicator:(id)sender
    364374{
     
    399409{
    400410    [self _toggleBooleanDefault:NetworkCacheSpeculativeRevalidationDisabledKey];
     411}
     412
     413- (BOOL)isSpaceReservedForBanners
     414{
     415    return [[NSUserDefaults standardUserDefaults] boolForKey:ReserveSpaceForBannersPreferenceKey];
    401416}
    402417
  • trunk/Tools/MiniBrowser/mac/WK2BrowserWindowController.m

    r209640 r209975  
    4444
    4545static void* keyValueObservingContext = &keyValueObservingContext;
     46static const int testHeaderBannerHeight = 42;
     47static const int testFooterBannerHeight = 58;
    4648
    4749@interface WK2BrowserWindowController () <WKNavigationDelegate, WKUIDelegate, _WKIconLoadingDelegate>
     
    409411   
    410412    preferences._visibleDebugOverlayRegions = visibleOverlayRegions;
     413
     414    [_webView _setHeaderBannerHeight:[settings isSpaceReservedForBanners] ? testHeaderBannerHeight : 0];
     415    [_webView _setFooterBannerHeight:[settings isSpaceReservedForBanners] ? testFooterBannerHeight : 0];
    411416}
    412417
     
    618623}
    619624
    620 - (void)webView:(WKWebView *)webView didFinishLoadingNavigation:(WKNavigation *)navigation
    621 {
    622     LOG(@"didFinishLoadingNavigation: %@", navigation);
     625- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
     626{
     627    LOG(@"didFinishNavigation: %@", navigation);
     628   
     629    // Banner heights don't persist across page loads (oddly, since Page stores them), so reset on every page load.
     630    if ([[SettingsController shared] isSpaceReservedForBanners]) {
     631        [_webView _setHeaderBannerHeight:testHeaderBannerHeight];
     632        [_webView _setFooterBannerHeight:testFooterBannerHeight];
     633    }
    623634}
    624635
     
    634645}
    635646
    636 - (void)_webViewWebProcessDidCrash:(WKWebView *)webView
     647- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView
    637648{
    638649    NSLog(@"WebContent process crashed; reloading");
Note: See TracChangeset for help on using the changeset viewer.