Changeset 170776 in webkit


Ignore:
Timestamp:
Jul 3, 2014 4:31:15 PM (10 years ago)
Author:
mitz@apple.com
Message:

<rdar://problem/16337741> The UI process needs to track the number of HTTP subresource loads in progress (or at least whether there are any)
https://bugs.webkit.org/show_bug.cgi?id=134615

Reviewed by Anders Carlsson.

Added a _networkRequestsInProgress boolean property to WKWebView.

  • UIProcess/API/Cocoa/WKBrowsingContextController.mm: Added no-op overrides of new

PageLoadStateObserver member functions.

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _networkRequestsInProgress]): New getter that gets this state from the
PageLoadState.

  • UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared new property.
  • UIProcess/Cocoa/NavigationState.h:
  • UIProcess/Cocoa/NavigationState.mm:

(WebKit::NavigationState::willChangeNetworkRequestsInProgress):: Override this new
PageLoadState::Observer member function by sending the appropriate KVO change message to the
WKWebView.
(WebKit::NavigationState::didChangeNetworkRequestsInProgress): Ditto.

  • UIProcess/PageLoadState.cpp:

(WebKit::PageLoadState::commitChanges): Check for changes to networkRequestsInProgress
and call the observers if needed.
(WebKit::PageLoadState::reset): Reset networkRequestsInProgress in the uncommitted state.
(WebKit::PageLoadState::setNetworkRequestsInProgress): Set networkRequestsInProgress in the
uncommitted state.

  • UIProcess/PageLoadState.h:

(WebKit::PageLoadState::networkRequestsInProgress): Added this getter.
(WebKit::PageLoadState::Data::Data): Initialize new networkRequestsInProgress member.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::setNetworkRequestsInProgress): Added. Updates the PageLoadState.

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in: Added SetNetworkRequestsInProgress message.
  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest): Call
WebPage::addResourceRequest.
(WebKit::WebFrameLoaderClient::dispatchDidFinishLoading): Call
WebPage::removeResourceRequest.
(WebKit::WebFrameLoaderClient::dispatchDidFailLoading): Ditto.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::addResourceRequest): Added. If the new request is for an HTTP-family URL,
add its identifier to the set of network resourece request identifiers. If the set was
previously empty, send the WebPageProxy a message.
(WebKit::WebPage::removeResourceRequest): Added. Remove the identifier from the set. If it
becomes empty, send the WebPageProxy a message.

  • WebProcess/WebPage/WebPage.h:
Location:
trunk/Source/WebKit2
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r170775 r170776  
     12014-07-03  Dan Bernstein  <mitz@apple.com>
     2
     3        <rdar://problem/16337741> The UI process needs to track the number of HTTP subresource loads in progress (or at least whether there are any)
     4        https://bugs.webkit.org/show_bug.cgi?id=134615
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Added a _networkRequestsInProgress boolean property to WKWebView.
     9
     10        * UIProcess/API/Cocoa/WKBrowsingContextController.mm: Added no-op overrides of new
     11        PageLoadStateObserver member functions.
     12
     13        * UIProcess/API/Cocoa/WKWebView.mm:
     14        (-[WKWebView _networkRequestsInProgress]): New getter that gets this state from the
     15        PageLoadState.
     16        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared new property.
     17
     18        * UIProcess/Cocoa/NavigationState.h:
     19        * UIProcess/Cocoa/NavigationState.mm:
     20        (WebKit::NavigationState::willChangeNetworkRequestsInProgress):: Override this new
     21        PageLoadState::Observer member function by sending the appropriate KVO change message to the
     22        WKWebView.
     23        (WebKit::NavigationState::didChangeNetworkRequestsInProgress): Ditto.
     24
     25        * UIProcess/PageLoadState.cpp:
     26        (WebKit::PageLoadState::commitChanges): Check for changes to networkRequestsInProgress
     27        and call the observers if needed.
     28        (WebKit::PageLoadState::reset): Reset networkRequestsInProgress in the uncommitted state.
     29        (WebKit::PageLoadState::setNetworkRequestsInProgress): Set networkRequestsInProgress in the
     30        uncommitted state.
     31        * UIProcess/PageLoadState.h:
     32        (WebKit::PageLoadState::networkRequestsInProgress): Added this getter.
     33        (WebKit::PageLoadState::Data::Data): Initialize new networkRequestsInProgress member.
     34
     35        * UIProcess/WebPageProxy.cpp:
     36        (WebKit::WebPageProxy::setNetworkRequestsInProgress): Added. Updates the PageLoadState.
     37        * UIProcess/WebPageProxy.h:
     38        * UIProcess/WebPageProxy.messages.in: Added SetNetworkRequestsInProgress message.
     39
     40        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     41        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest): Call
     42        WebPage::addResourceRequest.
     43        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading): Call
     44        WebPage::removeResourceRequest.
     45        (WebKit::WebFrameLoaderClient::dispatchDidFailLoading): Ditto.
     46
     47        * WebProcess/WebPage/WebPage.cpp:
     48        (WebKit::WebPage::addResourceRequest): Added. If the new request is for an HTTP-family URL,
     49        add its identifier to the set of network resourece request identifiers. If the set was
     50        previously empty, send the WebPageProxy a message.
     51        (WebKit::WebPage::removeResourceRequest): Added. Remove the identifier from the set. If it
     52        becomes empty, send the WebPageProxy a message.
     53        * WebProcess/WebPage/WebPage.h:
     54
    1552014-07-03  Anders Carlsson  <andersca@apple.com>
    256
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm

    r170069 r170776  
    125125    virtual void willChangeCanGoForward() override { }
    126126    virtual void didChangeCanGoForward() override { }
     127    virtual void willChangeNetworkRequestsInProgress() override { }
     128    virtual void didChangeNetworkRequestsInProgress() override { }
    127129
    128130    WKBrowsingContextController *m_controller;
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r170774 r170776  
    16521652}
    16531653
     1654- (BOOL)_networkRequestsInProgress
     1655{
     1656    return _page->pageLoadState().networkRequestsInProgress();
     1657}
     1658
    16541659static inline WebCore::LayoutMilestones layoutMilestones(_WKRenderingProgressEvents events)
    16551660{
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h

    r170711 r170776  
    9797@property (nonatomic, setter=_setAddsVisitedLinks:) BOOL _addsVisitedLinks;
    9898
     99@property (nonatomic, readonly) BOOL _networkRequestsInProgress;
     100
    99101- (void)_close;
    100102
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h

    r170660 r170776  
    132132    virtual void willChangeCanGoForward() override;
    133133    virtual void didChangeCanGoForward() override;
     134    virtual void willChangeNetworkRequestsInProgress() override;
     135    virtual void didChangeNetworkRequestsInProgress() override;
    134136
    135137    WKWebView *m_webView;
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm

    r170774 r170776  
    798798}
    799799
     800void NavigationState::willChangeNetworkRequestsInProgress()
     801{
     802    [m_webView willChangeValueForKey:@"_networkRequestsInProgress"];
     803}
     804
     805void NavigationState::didChangeNetworkRequestsInProgress()
     806{
     807    [m_webView didChangeValueForKey:@"_networkRequestsInProgress"];
     808}
     809
    800810} // namespace WebKit
    801811
  • trunk/Source/WebKit2/UIProcess/PageLoadState.cpp

    r170774 r170776  
    103103    bool hasOnlySecureContentChanged = hasOnlySecureContent(m_committedState) != hasOnlySecureContent(m_uncommittedState);
    104104    bool estimatedProgressChanged = estimatedProgress(m_committedState) != estimatedProgress(m_uncommittedState);
     105    bool networkRequestsInProgressChanged = m_committedState.networkRequestsInProgress != m_uncommittedState.networkRequestsInProgress;
    105106
    106107    if (canGoBackChanged)
     
    118119    if (estimatedProgressChanged)
    119120        callObserverCallback(&Observer::willChangeEstimatedProgress);
     121    if (networkRequestsInProgressChanged)
     122        callObserverCallback(&Observer::willChangeNetworkRequestsInProgress);
    120123
    121124    m_committedState = m_uncommittedState;
    122125
    123126    // The "did" ordering is the reverse of the "will". This is a requirement of Cocoa Key-Value Observing.
     127    if (networkRequestsInProgressChanged)
     128        callObserverCallback(&Observer::didChangeNetworkRequestsInProgress);
    124129    if (estimatedProgressChanged)
    125130        callObserverCallback(&Observer::didChangeEstimatedProgress);
     
    155160
    156161    m_uncommittedState.estimatedProgress = 0;
     162    m_uncommittedState.networkRequestsInProgress = false;
    157163}
    158164
     
    369375}
    370376
     377void PageLoadState::setNetworkRequestsInProgress(const Transaction::Token& token, bool networkRequestsInProgress)
     378{
     379    ASSERT_UNUSED(token, &token.m_pageLoadState == this);
     380    m_uncommittedState.networkRequestsInProgress = networkRequestsInProgress;
     381}
     382
    371383bool PageLoadState::isLoading(const Data& data)
    372384{
  • trunk/Source/WebKit2/UIProcess/PageLoadState.h

    r169805 r170776  
    6868        virtual void willChangeCanGoForward() = 0;
    6969        virtual void didChangeCanGoForward() = 0;
     70
     71        virtual void willChangeNetworkRequestsInProgress() = 0;
     72        virtual void didChangeNetworkRequestsInProgress() = 0;
    7073    };
    7174
     
    119122
    120123    double estimatedProgress() const;
     124    bool networkRequestsInProgress() const { return m_committedState.networkRequestsInProgress; }
    121125
    122126    const String& pendingAPIRequestURL() const;
     
    150154    void didChangeProgress(const Transaction::Token&, double);
    151155    void didFinishProgress(const Transaction::Token&);
     156    void setNetworkRequestsInProgress(const Transaction::Token&, bool);
    152157
    153158private:
     
    166171            , canGoForward(false)
    167172            , estimatedProgress(0)
     173            , networkRequestsInProgress(false)
    168174        {
    169175        }
     
    185191
    186192        double estimatedProgress;
     193        bool networkRequestsInProgress;
    187194    };
    188195
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r170774 r170776  
    24432443}
    24442444
     2445void WebPageProxy::setNetworkRequestsInProgress(bool networkRequestsInProgress)
     2446{
     2447    auto transaction = m_pageLoadState.transaction();
     2448    m_pageLoadState.setNetworkRequestsInProgress(transaction, networkRequestsInProgress);
     2449}
     2450
    24452451void WebPageProxy::didDestroyNavigation(uint64_t navigationID)
    24462452{
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r170719 r170776  
    957957    void didChangeProgress(double);
    958958    void didFinishProgress();
     959    void setNetworkRequestsInProgress(bool);
     960
    959961    void didDestroyNavigation(uint64_t navigationID);
    960962
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in

    r170660 r170776  
    120120    DidStartProgress()
    121121
     122    SetNetworkRequestsInProgress(bool networkRequestsInProgress)
     123
    122124    # Frame lifetime messages
    123125    DidCreateMainFrame(uint64_t frameID)
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r170774 r170776  
    170170
    171171    webPage->injectedBundleResourceLoadClient().didInitiateLoadForResource(webPage, m_frame, identifier, request, pageIsProvisionallyLoading);
     172    webPage->addResourceRequest(identifier, request);
    172173}
    173174
     
    250251
    251252    webPage->injectedBundleResourceLoadClient().didFinishLoadForResource(webPage, m_frame, identifier);
     253    webPage->removeResourceRequest(identifier);
    252254}
    253255
     
    259261
    260262    webPage->injectedBundleResourceLoadClient().didFailLoadForResource(webPage, m_frame, identifier, error);
     263    webPage->removeResourceRequest(identifier);
    261264}
    262265
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r170774 r170776  
    38073807#endif
    38083808
     3809void WebPage::addResourceRequest(unsigned long identifier, const WebCore::ResourceRequest& request)
     3810{
     3811    if (!request.url().protocolIsInHTTPFamily())
     3812        return;
     3813
     3814    ASSERT(!m_networkResourceRequestIdentifiers.contains(identifier));
     3815    bool wasEmpty = m_networkResourceRequestIdentifiers.isEmpty();
     3816    m_networkResourceRequestIdentifiers.add(identifier);
     3817    if (wasEmpty)
     3818        send(Messages::WebPageProxy::SetNetworkRequestsInProgress(true));
     3819}
     3820
     3821void WebPage::removeResourceRequest(unsigned long identifier)
     3822{
     3823    if (!m_networkResourceRequestIdentifiers.remove(identifier))
     3824        return;
     3825
     3826    if (m_networkResourceRequestIdentifiers.isEmpty())
     3827        send(Messages::WebPageProxy::SetNetworkRequestsInProgress(false));
     3828}
     3829
    38093830void WebPage::setMediaVolume(float volume)
    38103831{
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r170723 r170776  
    691691#endif
    692692
     693    void addResourceRequest(unsigned long, const WebCore::ResourceRequest&);
     694    void removeResourceRequest(unsigned long);
     695
    693696    void setMediaVolume(float);
    694697    void setMayStartMediaWhenInWindow(bool);
     
    12011204    unsigned m_cachedPageCount;
    12021205
     1206    HashSet<unsigned long> m_networkResourceRequestIdentifiers;
     1207
    12031208    WebCore::IntSize m_minimumLayoutSize;
    12041209    bool m_autoSizingShouldExpandToViewHeight;
Note: See TracChangeset for help on using the changeset viewer.