Changeset 167635 in webkit


Ignore:
Timestamp:
Apr 21, 2014 5:10:38 PM (10 years ago)
Author:
mitz@apple.com
Message:

Source/WebCore: WebCore part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
https://bugs.webkit.org/show_bug.cgi?id=131939

Reviewed by David Kilzer.

  • WebCore.exp.in: Exported WebCore::ResourceHandle::setDefersLoading.
  • loader/ResourceLoadScheduler.cpp:

(WebCore::ResourceLoadScheduler::setDefersLoading): Added a no-op implementation.

  • loader/ResourceLoadScheduler.h: Declared new virtual member function setDefersLoading.
  • loader/ResourceLoader.cpp:

(WebCore::ResourceLoader::setDefersLoading): Added a call to the above function.

Source/WebKit2: WebKit part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
https://bugs.webkit.org/show_bug.cgi?id=131939

Reviewed by David Kilzer.

  • NetworkProcess/NetworkConnectionToWebProcess.cpp:

(WebKit::NetworkConnectionToWebProcess::setDefersLoading): Added. Forwards the message to
the NetworkResourceLoader.

  • NetworkProcess/NetworkConnectionToWebProcess.h:
  • NetworkProcess/NetworkConnectionToWebProcess.messages.in: Added SetDefersLoading message.
  • NetworkProcess/NetworkResourceLoader.cpp:

(WebKit::NetworkResourceLoader::NetworkResourceLoader): Initialize new member variable
m_defersLoading from the new field in the loader parameters.
(WebKit::NetworkResourceLoader::start): Added. Like WebCore::ResourceLoader, if loading is
deferred, keep the request in m_deferredRequest and bail out.
(WebKit::NetworkResourceLoader::setDefersLoading): Added. Similar to
WebCore::ResourceLoader::setDefersLoading.

  • NetworkProcess/NetworkResourceLoader.h:

(WebKit::NetworkResourceLoader::defersLoading):

  • Shared/Network/NetworkResourceLoadParameters.cpp:

(WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters): Initialize new field
defersLoading to false.
(WebKit::NetworkResourceLoadParameters::encode): Encode new field.
(WebKit::NetworkResourceLoadParameters::decode): Decode new field.

  • Shared/Network/NetworkResourceLoadParameters.h: Added defersLoading field.
  • WebProcess/Network/WebResourceLoadScheduler.cpp:

(WebKit::WebResourceLoadScheduler::scheduleLoad): Populate defersLoading field in the load
parameters.
(WebKit::WebResourceLoadScheduler::setDefersLoading): Send a message to the Network process.

  • WebProcess/Network/WebResourceLoadScheduler.h:
Location:
trunk/Source
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r167634 r167635  
     12014-04-21  Dan Bernstein  <mitz@apple.com>
     2
     3        WebCore part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
     4        https://bugs.webkit.org/show_bug.cgi?id=131939
     5
     6        Reviewed by David Kilzer.
     7
     8        * WebCore.exp.in: Exported WebCore::ResourceHandle::setDefersLoading.
     9
     10        * loader/ResourceLoadScheduler.cpp:
     11        (WebCore::ResourceLoadScheduler::setDefersLoading): Added a no-op implementation.
     12        * loader/ResourceLoadScheduler.h: Declared new virtual member function setDefersLoading.
     13
     14        * loader/ResourceLoader.cpp:
     15        (WebCore::ResourceLoader::setDefersLoading): Added a call to the above function.
     16
    1172014-04-21  Brent Fulgham  <bfulgham@apple.com>
    218
  • trunk/Source/WebCore/WebCore.exp.in

    r167624 r167635  
    365365__ZN7WebCore14ResourceBufferD2Ev
    366366__ZN7WebCore14ResourceHandle12firstRequestEv
     367__ZN7WebCore14ResourceHandle16setDefersLoadingEb
    367368__ZN7WebCore14ResourceHandle20forceContentSniffingEv
    368369__ZN7WebCore14ResourceHandle23continueWillSendRequestERKNS_15ResourceRequestE
  • trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp

    r163725 r167635  
    217217}
    218218
     219void ResourceLoadScheduler::setDefersLoading(ResourceLoader*, bool)
     220{
     221}
     222
    219223void ResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader* resourceLoader, const URL& redirectURL)
    220224{
  • trunk/Source/WebCore/loader/ResourceLoadScheduler.h

    r162063 r167635  
    5454    virtual PassRefPtr<NetscapePlugInStreamLoader> schedulePluginStreamLoad(Frame*, NetscapePlugInStreamLoaderClient*, const ResourceRequest&);
    5555    virtual void remove(ResourceLoader*);
     56    virtual void setDefersLoading(ResourceLoader*, bool);
    5657    virtual void crossOriginRedirectReceived(ResourceLoader*, const URL& redirectURL);
    5758   
  • trunk/Source/WebCore/loader/ResourceLoader.cpp

    r167207 r167635  
    188188        start();
    189189    }
     190
     191    platformStrategies()->loaderStrategy()->resourceLoadScheduler()->setDefersLoading(this, defers);
    190192}
    191193
  • trunk/Source/WebKit2/ChangeLog

    r167633 r167635  
     12014-04-21  Dan Bernstein  <mitz@apple.com>
     2
     3        WebKit part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
     4        https://bugs.webkit.org/show_bug.cgi?id=131939
     5
     6        Reviewed by David Kilzer.
     7
     8        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     9        (WebKit::NetworkConnectionToWebProcess::setDefersLoading): Added. Forwards the message to
     10        the NetworkResourceLoader.
     11        * NetworkProcess/NetworkConnectionToWebProcess.h:
     12
     13        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Added SetDefersLoading message.
     14
     15        * NetworkProcess/NetworkResourceLoader.cpp:
     16        (WebKit::NetworkResourceLoader::NetworkResourceLoader): Initialize new member variable
     17        m_defersLoading from the new field in the loader parameters.
     18        (WebKit::NetworkResourceLoader::start): Added. Like WebCore::ResourceLoader, if loading is
     19        deferred, keep the request in m_deferredRequest and bail out.
     20        (WebKit::NetworkResourceLoader::setDefersLoading): Added. Similar to
     21        WebCore::ResourceLoader::setDefersLoading.
     22        * NetworkProcess/NetworkResourceLoader.h:
     23        (WebKit::NetworkResourceLoader::defersLoading):
     24
     25        * Shared/Network/NetworkResourceLoadParameters.cpp:
     26        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters): Initialize new field
     27        defersLoading to false.
     28        (WebKit::NetworkResourceLoadParameters::encode): Encode new field.
     29        (WebKit::NetworkResourceLoadParameters::decode): Decode new field.
     30        * Shared/Network/NetworkResourceLoadParameters.h: Added defersLoading field.
     31
     32        * WebProcess/Network/WebResourceLoadScheduler.cpp:
     33        (WebKit::WebResourceLoadScheduler::scheduleLoad): Populate defersLoading field in the load
     34        parameters.
     35        (WebKit::WebResourceLoadScheduler::setDefersLoading): Send a message to the Network process.
     36        * WebProcess/Network/WebResourceLoadScheduler.h:
     37
    1382014-04-21  Anders Carlsson  <andersca@apple.com>
    239
  • trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r166728 r167635  
    142142}
    143143
     144void NetworkConnectionToWebProcess::setDefersLoading(ResourceLoadIdentifier identifier, bool defers)
     145{
     146    RefPtr<NetworkResourceLoader> loader = m_networkResourceLoaders.get(identifier);
     147    if (!loader)
     148        return;
     149
     150    loader->setDefersLoading(defers);
     151}
     152
    144153void NetworkConnectionToWebProcess::servePendingRequests(uint32_t resourceLoadPriority)
    145154{
  • trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h

    r166728 r167635  
    7474
    7575    void removeLoadIdentifier(ResourceLoadIdentifier);
     76    void setDefersLoading(ResourceLoadIdentifier, bool);
    7677    void crossOriginRedirectReceived(ResourceLoadIdentifier, const WebCore::URL& redirectURL);
    7778    void servePendingRequests(uint32_t resourceLoadPriority);
  • trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in

    r166728 r167635  
    2828    PerformSynchronousLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters) -> (WebCore::ResourceError error, WebCore::ResourceResponse response, Vector<char> data) Delayed
    2929    RemoveLoadIdentifier(uint64_t resourceLoadIdentifier)
     30    SetDefersLoading(uint64_t resourceLoadIdentifier, bool defers)
    3031   
    3132    ServePendingRequests(uint32_t resourceLoadPriority)
  • trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp

    r166697 r167635  
    6868    , m_shouldClearReferrerOnHTTPSToHTTPRedirect(parameters.shouldClearReferrerOnHTTPSToHTTPRedirect)
    6969    , m_isLoadingMainResource(parameters.isMainResource)
     70    , m_defersLoading(parameters.defersLoading)
    7071    , m_sandboxExtensionsAreConsumed(false)
    7172    , m_connection(connection)
     
    130131    m_networkingContext = RemoteNetworkingContext::create(m_sessionID, m_shouldClearReferrerOnHTTPSToHTTPRedirect);
    131132
     133    if (m_defersLoading) {
     134        m_deferredRequest = m_request;
     135        return;
     136    }
     137
    132138    consumeSandboxExtensions();
    133139
    134140    // FIXME (NetworkProcess): Pass an actual value for defersLoading
    135141    m_handle = ResourceHandle::create(m_networkingContext.get(), m_request, this, false /* defersLoading */, m_contentSniffingPolicy == SniffContent);
     142}
     143
     144void NetworkResourceLoader::setDefersLoading(bool defers)
     145{
     146    m_defersLoading = defers;
     147    if (m_handle)
     148        m_handle->setDefersLoading(defers);
     149    if (!defers && !m_deferredRequest.isNull()) {
     150        m_request = m_deferredRequest;
     151        m_deferredRequest = ResourceRequest();
     152        start();
     153    }
    136154}
    137155
  • trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h

    r165117 r167635  
    8181    void abort();
    8282
     83    void setDefersLoading(bool);
     84    bool defersLoading() const { return m_defersLoading; }
     85
    8386    // ResourceHandleClient methods
    8487    virtual void willSendRequestAsync(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) override;
     
    178181    WebCore::SessionID m_sessionID;
    179182    WebCore::ResourceRequest m_request;
     183    WebCore::ResourceRequest m_deferredRequest;
    180184    WebCore::ResourceLoadPriority m_priority;
    181185    WebCore::ContentSniffingPolicy m_contentSniffingPolicy;
     
    184188    bool m_shouldClearReferrerOnHTTPSToHTTPRedirect;
    185189    bool m_isLoadingMainResource;
     190    bool m_defersLoading;
    186191
    187192    Vector<RefPtr<SandboxExtension>> m_requestBodySandboxExtensions;
  • trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp

    r164726 r167635  
    4949    , shouldClearReferrerOnHTTPSToHTTPRedirect(true)
    5050    , isMainResource(false)
     51    , defersLoading(false)
    5152{
    5253}
     
    9899    encoder << shouldClearReferrerOnHTTPSToHTTPRedirect;
    99100    encoder << isMainResource;
     101    encoder << defersLoading;
    100102}
    101103
     
    149151    if (!decoder.decode(result.isMainResource))
    150152        return false;
     153    if (!decoder.decode(result.defersLoading))
     154        return false;
    151155
    152156    return true;
  • trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.h

    r164726 r167635  
    6464    bool shouldClearReferrerOnHTTPSToHTTPRedirect;
    6565    bool isMainResource;
     66    bool defersLoading;
    6667};
    6768
  • trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp

    r166847 r167635  
    136136    loadParameters.shouldClearReferrerOnHTTPSToHTTPRedirect = shouldClearReferrerOnHTTPSToHTTPRedirect;
    137137    loadParameters.isMainResource = resource && resource->type() == CachedResource::MainResource;
     138    loadParameters.defersLoading = resourceLoader->defersLoading();
    138139
    139140    ASSERT((loadParameters.webPageID && loadParameters.webFrameID) || loadParameters.clientCredentialPolicy == DoNotAskClientForAnyCredentials);
     
    194195}
    195196
     197void WebResourceLoadScheduler::setDefersLoading(ResourceLoader* resourceLoader, bool defers)
     198{
     199    ResourceLoadIdentifier identifier = resourceLoader->identifier();
     200    WebProcess::shared().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::SetDefersLoading(identifier, defers), 0);
     201}
     202
    196203void WebResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader*, const URL&)
    197204{
  • trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h

    r162139 r167635  
    5050   
    5151    virtual void remove(WebCore::ResourceLoader*) override;
     52    virtual void setDefersLoading(WebCore::ResourceLoader*, bool) override;
    5253    virtual void crossOriginRedirectReceived(WebCore::ResourceLoader*, const WebCore::URL& redirectURL) override;
    5354   
Note: See TracChangeset for help on using the changeset viewer.