Changeset 220888 in webkit


Ignore:
Timestamp:
Aug 17, 2017 3:56:59 PM (7 years ago)
Author:
Chris Dumez
Message:

Regression(r220817): We should only copy the original request headers for Ping loads
https://bugs.webkit.org/show_bug.cgi?id=175679

Reviewed by Youenn Fablet.

Source/WebCore:

For performance reason, we should only copy the original request headers for Ping loads
(Beacon at the moment), not for all CachedResourceRequests.

  • loader/LoaderStrategy.h:
  • loader/cache/CachedResource.cpp:

(WebCore::CachedResource::CachedResource):
(WebCore::CachedResource::load):

  • loader/cache/CachedResource.h:

(WebCore::CachedResource::shouldUsePingLoad):
(WebCore::CachedResource::setOriginalRequestHeaders):

  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::requestResource):

  • loader/cache/CachedResourceRequest.cpp:

(WebCore::CachedResourceRequest::CachedResourceRequest):

  • loader/cache/CachedResourceRequest.h:

(WebCore::CachedResourceRequest::releaseResourceRequest):
(WebCore::CachedResourceRequest::releaseOriginalRequestHeaders): Deleted.

Source/WebKit:

For performance reason, we should only copy the original request headers for Ping loads
(Beacon at the moment), not for all CachedResourceRequests.

  • NetworkProcess/NetworkConnectionToWebProcess.cpp:

(WebKit::NetworkConnectionToWebProcess::loadPing):

  • NetworkProcess/NetworkConnectionToWebProcess.h:
  • NetworkProcess/NetworkConnectionToWebProcess.messages.in:
  • NetworkProcess/NetworkResourceLoadParameters.cpp:

(WebKit::NetworkResourceLoadParameters::encode const):
(WebKit::NetworkResourceLoadParameters::decode):

  • NetworkProcess/NetworkResourceLoadParameters.h:
  • NetworkProcess/PingLoad.cpp:

(WebKit::PingLoad::PingLoad):
(WebKit::PingLoad::willPerformHTTPRedirection):
(WebKit::PingLoad::makeCrossOriginAccessRequest):
(WebKit::PingLoad::makeSimpleCrossOriginAccessRequest):
(WebKit::PingLoad::originalRequestHeaders const): Deleted.

  • NetworkProcess/PingLoad.h:
  • WebProcess/Network/WebLoaderStrategy.cpp:

(WebKit::WebLoaderStrategy::createPingHandle):

  • WebProcess/Network/WebLoaderStrategy.h:

Source/WebKitLegacy:

  • WebCoreSupport/WebResourceLoadScheduler.cpp:

(WebResourceLoadScheduler::createPingHandle):

  • WebCoreSupport/WebResourceLoadScheduler.h:
Location:
trunk/Source
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r220887 r220888  
     12017-08-17  Chris Dumez  <cdumez@apple.com>
     2
     3        Regression(r220817): We should only copy the original request headers for Ping loads
     4        https://bugs.webkit.org/show_bug.cgi?id=175679
     5
     6        Reviewed by Youenn Fablet.
     7
     8        For performance reason, we should only copy the original request headers for Ping loads
     9        (Beacon at the moment), not for all CachedResourceRequests.
     10
     11        * loader/LoaderStrategy.h:
     12        * loader/cache/CachedResource.cpp:
     13        (WebCore::CachedResource::CachedResource):
     14        (WebCore::CachedResource::load):
     15        * loader/cache/CachedResource.h:
     16        (WebCore::CachedResource::shouldUsePingLoad):
     17        (WebCore::CachedResource::setOriginalRequestHeaders):
     18        * loader/cache/CachedResourceLoader.cpp:
     19        (WebCore::CachedResourceLoader::requestResource):
     20        * loader/cache/CachedResourceRequest.cpp:
     21        (WebCore::CachedResourceRequest::CachedResourceRequest):
     22        * loader/cache/CachedResourceRequest.h:
     23        (WebCore::CachedResourceRequest::releaseResourceRequest):
     24        (WebCore::CachedResourceRequest::releaseOriginalRequestHeaders): Deleted.
     25
    1262017-08-17  Don Olmstead  <don.olmstead@sony.com>
    227
  • trunk/Source/WebCore/loader/LoaderStrategy.h

    r220817 r220888  
    6565    virtual void resumePendingRequests() = 0;
    6666
    67     virtual void createPingHandle(NetworkingContext*, ResourceRequest&, HTTPHeaderMap&& originalRequestHeaders, Ref<SecurityOrigin>&& sourceOrigin, ContentSecurityPolicy*, const FetchOptions&) = 0;
     67    virtual void createPingHandle(NetworkingContext*, ResourceRequest&, const HTTPHeaderMap& originalRequestHeaders, Ref<SecurityOrigin>&& sourceOrigin, ContentSecurityPolicy*, const FetchOptions&) = 0;
    6868
    6969    virtual void storeDerivedDataToCache(const SHA1::Digest& bodyKey, const String& type, const String& partition, WebCore::SharedBuffer&) = 0;
  • trunk/Source/WebCore/loader/cache/CachedResource.cpp

    r220857 r220888  
    118118CachedResource::CachedResource(CachedResourceRequest&& request, Type type, PAL::SessionID sessionID)
    119119    : m_resourceRequest(request.releaseResourceRequest())
    120     , m_originalRequestHeaders(request.releaseOriginalRequestHeaders())
    121120    , m_options(request.options())
    122121    , m_decodedDataDeletionTimer(*this, &CachedResource::destroyDecodedData, deadDecodedDataDeletionIntervalForResourceType(type))
     
    269268        }
    270269        // FIXME: We should not special-case Beacon here.
    271         if (type() == CachedResource::Beacon) {
     270        if (shouldUsePingLoad(type())) {
    272271        ASSERT(m_origin);
    273272            // Beacon is not exposed to workers so it is safe to rely on the document here.
    274273            auto* document = cachedResourceLoader.document();
    275274            auto* contentSecurityPolicy = document && !document->shouldBypassMainWorldContentSecurityPolicy() ? document->contentSecurityPolicy() : nullptr;
    276             platformStrategies()->loaderStrategy()->createPingHandle(frame.loader().networkingContext(), request, HTTPHeaderMap(m_originalRequestHeaders), *m_origin, contentSecurityPolicy, m_options);
     275            ASSERT(m_originalRequestHeaders);
     276            platformStrategies()->loaderStrategy()->createPingHandle(frame.loader().networkingContext(), request, *m_originalRequestHeaders, *m_origin, contentSecurityPolicy, m_options);
    277277            // FIXME: We currently do not get notified when ping loads finish so we treat them as finishing right away.
    278278            finishLoading(nullptr);
  • trunk/Source/WebCore/loader/cache/CachedResource.h

    r220887 r220888  
    119119    Type type() const { return m_type; }
    120120
     121    static bool shouldUsePingLoad(Type type) { return type == Type::Beacon; }
     122
    121123    ResourceLoadPriority loadPriority() const { return m_loadPriority; }
    122124    void setLoadPriority(const std::optional<ResourceLoadPriority>&);
     
    280282    static ResourceLoadPriority defaultPriorityForResourceType(Type);
    281283
     284    void setOriginalRequestHeaders(std::optional<HTTPHeaderMap>&& originalRequestHeaders) { m_originalRequestHeaders = WTFMove(originalRequestHeaders); }
     285
    282286protected:
    283287    // CachedResource constructor that may be used when the CachedResource can already be filled with response data.
     
    295299    HashCountedSet<CachedResourceClient*> m_clients;
    296300    ResourceRequest m_resourceRequest;
    297     HTTPHeaderMap m_originalRequestHeaders;
     301    std::optional<HTTPHeaderMap> m_originalRequestHeaders; // Needed by Ping loads.
    298302    RefPtr<SubresourceLoader> m_loader;
    299303    ResourceLoaderOptions m_options;
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r220887 r220888  
    699699ResourceErrorOr<CachedResourceHandle<CachedResource>> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request, ForPreload forPreload, DeferOption defer)
    700700{
     701    std::optional<HTTPHeaderMap> originalRequestHeaders;
     702    if (CachedResource::shouldUsePingLoad(type))
     703        originalRequestHeaders = request.resourceRequest().httpHeaderFields();
     704
    701705    if (Document* document = this->document())
    702706        request.upgradeInsecureRequestIfNeeded(*document);
     
    823827    }
    824828    ASSERT(resource);
     829    resource->setOriginalRequestHeaders(WTFMove(originalRequestHeaders));
    825830
    826831    if (forPreload == ForPreload::No && resource->loader() && resource->ignoreForRequestCount()) {
  • trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp

    r220817 r220888  
    4242CachedResourceRequest::CachedResourceRequest(ResourceRequest&& resourceRequest, const ResourceLoaderOptions& options, std::optional<ResourceLoadPriority> priority, String&& charset)
    4343    : m_resourceRequest(WTFMove(resourceRequest))
    44     , m_originalRequestHeaders(m_resourceRequest.httpHeaderFields())
    4544    , m_charset(WTFMove(charset))
    4645    , m_options(options)
  • trunk/Source/WebCore/loader/cache/CachedResourceRequest.h

    r220817 r220888  
    5252
    5353    ResourceRequest&& releaseResourceRequest() { return WTFMove(m_resourceRequest); }
    54     HTTPHeaderMap&& releaseOriginalRequestHeaders() { return WTFMove(m_originalRequestHeaders); }
    5554    const ResourceRequest& resourceRequest() const { return m_resourceRequest; }
    5655    const String& charset() const { return m_charset; }
     
    9695private:
    9796    ResourceRequest m_resourceRequest;
    98     HTTPHeaderMap m_originalRequestHeaders;
    9997    String m_charset;
    10098    ResourceLoaderOptions m_options;
  • trunk/Source/WebKit/ChangeLog

    r220887 r220888  
     12017-08-17  Chris Dumez  <cdumez@apple.com>
     2
     3        Regression(r220817): We should only copy the original request headers for Ping loads
     4        https://bugs.webkit.org/show_bug.cgi?id=175679
     5
     6        Reviewed by Youenn Fablet.
     7
     8        For performance reason, we should only copy the original request headers for Ping loads
     9        (Beacon at the moment), not for all CachedResourceRequests.
     10
     11        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
     12        (WebKit::NetworkConnectionToWebProcess::loadPing):
     13        * NetworkProcess/NetworkConnectionToWebProcess.h:
     14        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
     15        * NetworkProcess/NetworkResourceLoadParameters.cpp:
     16        (WebKit::NetworkResourceLoadParameters::encode const):
     17        (WebKit::NetworkResourceLoadParameters::decode):
     18        * NetworkProcess/NetworkResourceLoadParameters.h:
     19        * NetworkProcess/PingLoad.cpp:
     20        (WebKit::PingLoad::PingLoad):
     21        (WebKit::PingLoad::willPerformHTTPRedirection):
     22        (WebKit::PingLoad::makeCrossOriginAccessRequest):
     23        (WebKit::PingLoad::makeSimpleCrossOriginAccessRequest):
     24        (WebKit::PingLoad::originalRequestHeaders const): Deleted.
     25        * NetworkProcess/PingLoad.h:
     26        * WebProcess/Network/WebLoaderStrategy.cpp:
     27        (WebKit::WebLoaderStrategy::createPingHandle):
     28        * WebProcess/Network/WebLoaderStrategy.h:
     29
    1302017-08-17  Don Olmstead  <don.olmstead@sony.com>
    231
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

    r220887 r220888  
    223223}
    224224
    225 void NetworkConnectionToWebProcess::loadPing(NetworkResourceLoadParameters&& loadParameters)
     225void NetworkConnectionToWebProcess::loadPing(NetworkResourceLoadParameters&& loadParameters, HTTPHeaderMap&& originalRequestHeaders)
    226226{
    227227#if USE(NETWORK_SESSION)
    228228    // PingLoad manages its own lifetime, deleting itself when its purpose has been fulfilled.
    229     new PingLoad(WTFMove(loadParameters));
     229    new PingLoad(WTFMove(loadParameters), WTFMove(originalRequestHeaders));
    230230#else
     231    UNUSED_PARAM(originalRequestHeaders);
    231232    RefPtr<NetworkingContext> context = RemoteNetworkingContext::create(loadParameters.sessionID, loadParameters.shouldClearReferrerOnHTTPSToHTTPRedirect);
    232233
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h

    r220857 r220888  
    3737namespace WebCore {
    3838class BlobDataFileReference;
     39class HTTPHeaderMap;
    3940class ResourceRequest;
    4041}
     
    8384    void scheduleResourceLoad(const NetworkResourceLoadParameters&);
    8485    void performSynchronousLoad(const NetworkResourceLoadParameters&, Ref<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply>&&);
    85     void loadPing(NetworkResourceLoadParameters&&);
     86    void loadPing(NetworkResourceLoadParameters&&, WebCore::HTTPHeaderMap&& originalRequestHeaders);
    8687    void prefetchDNS(const String&);
    8788
  • trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in

    r220857 r220888  
    2525    ScheduleResourceLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters)
    2626    PerformSynchronousLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters) -> (WebCore::ResourceError error, WebCore::ResourceResponse response, Vector<char> data) Delayed
    27     LoadPing(WebKit::NetworkResourceLoadParameters resourceLoadParameters)
     27    LoadPing(WebKit::NetworkResourceLoadParameters resourceLoadParameters, WebCore::HTTPHeaderMap originalRequestHeaders)
    2828    RemoveLoadIdentifier(uint64_t resourceLoadIdentifier)
    2929    SetDefersLoading(uint64_t resourceLoadIdentifier, bool defers)
  • trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp

    r220817 r220888  
    8989    encoder.encodeEnum(mode);
    9090    encoder << cspResponseHeaders;
    91     encoder << originalRequestHeaders;
    9291}
    9392
     
    168167    if (!decoder.decode(result.cspResponseHeaders))
    169168        return false;
    170     if (!decoder.decode(result.originalRequestHeaders))
    171         return false;
    172169
    173170    return true;
  • trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h

    r220887 r220888  
    3131#include <WebCore/ContentSecurityPolicyResponseHeaders.h>
    3232#include <WebCore/FetchOptions.h>
    33 #include <WebCore/HTTPHeaderMap.h>
    3433#include <WebCore/ResourceHandle.h>
    3534#include <WebCore/ResourceLoaderOptions.h>
     
    6160    WebCore::FetchOptions::Mode mode;
    6261    std::optional<WebCore::ContentSecurityPolicyResponseHeaders> cspResponseHeaders;
    63     std::optional<WebCore::HTTPHeaderMap> originalRequestHeaders;
    6462};
    6563
  • trunk/Source/WebKit/NetworkProcess/PingLoad.cpp

    r220817 r220888  
    4343using namespace WebCore;
    4444
    45 PingLoad::PingLoad(NetworkResourceLoadParameters&& parameters)
     45PingLoad::PingLoad(NetworkResourceLoadParameters&& parameters, HTTPHeaderMap&& originalRequestHeaders)
    4646    : m_parameters(WTFMove(parameters))
     47    , m_originalRequestHeaders(WTFMove(originalRequestHeaders))
    4748    , m_timeoutTimer(*this, &PingLoad::timeoutTimerFired)
    4849    , m_isSameOriginRequest(securityOrigin().canRequest(m_parameters.request.url()))
    4950{
    5051    ASSERT(m_parameters.sourceOrigin);
    51     ASSERT(m_parameters.originalRequestHeaders);
    5252
    5353    // If the server never responds, this object will hang around forever.
     
    9292}
    9393
    94 const HTTPHeaderMap& PingLoad::originalRequestHeaders() const
    95 {
    96     return *m_parameters.originalRequestHeaders;
    97 }
    98 
    9994void PingLoad::willPerformHTTPRedirection(ResourceResponse&& redirectResponse, ResourceRequest&& request, RedirectCompletionHandler&& completionHandler)
    10095{
     
    133128
    134129    // Except in case where preflight is needed, loading should be able to continue on its own.
    135     if (m_isSimpleRequest && isSimpleCrossOriginAccessRequest(request.httpMethod(), originalRequestHeaders())) {
     130    if (m_isSimpleRequest && isSimpleCrossOriginAccessRequest(request.httpMethod(), m_originalRequestHeaders)) {
    136131        completionHandler(WTFMove(request));
    137132        return;
     
    220215    RELEASE_LOG_IF_ALLOWED("makeCrossOriginAccessRequest");
    221216
    222     if (isSimpleCrossOriginAccessRequest(request.httpMethod(), originalRequestHeaders())) {
     217    if (isSimpleCrossOriginAccessRequest(request.httpMethod(), m_originalRequestHeaders)) {
    223218        makeSimpleCrossOriginAccessRequest(WTFMove(request));
    224219        return;
     
    226221
    227222    m_isSimpleRequest = false;
    228     if (CrossOriginPreflightResultCache::singleton().canSkipPreflight(securityOrigin().toString(), request.url(), m_parameters.allowStoredCredentials, request.httpMethod(), originalRequestHeaders())) {
     223    if (CrossOriginPreflightResultCache::singleton().canSkipPreflight(securityOrigin().toString(), request.url(), m_parameters.allowStoredCredentials, request.httpMethod(), m_originalRequestHeaders)) {
    229224        RELEASE_LOG_IF_ALLOWED("makeCrossOriginAccessRequest - preflight can be skipped thanks to cached result");
    230225        preflightSuccess(WTFMove(request));
     
    235230void PingLoad::makeSimpleCrossOriginAccessRequest(ResourceRequest&& request)
    236231{
    237     ASSERT(isSimpleCrossOriginAccessRequest(request.httpMethod(), originalRequestHeaders()));
     232    ASSERT(isSimpleCrossOriginAccessRequest(request.httpMethod(), m_originalRequestHeaders));
    238233    RELEASE_LOG_IF_ALLOWED("makeSimpleCrossOriginAccessRequest");
    239234
  • trunk/Source/WebKit/NetworkProcess/PingLoad.h

    r220817 r220888  
    3333namespace WebCore {
    3434class ContentSecurityPolicy;
     35class HTTPHeaderMap;
    3536class URL;
    3637}
     
    4243class PingLoad final : private NetworkDataTaskClient {
    4344public:
    44     explicit PingLoad(NetworkResourceLoadParameters&&);
     45    PingLoad(NetworkResourceLoadParameters&&, WebCore::HTTPHeaderMap&& originalRequestHeaders);
    4546   
    4647private:
     
    6768
    6869    WebCore::SecurityOrigin& securityOrigin() const;
    69     const WebCore::HTTPHeaderMap& originalRequestHeaders() const; // Needed for CORS checks.
    7070   
    7171    NetworkResourceLoadParameters m_parameters;
     72    WebCore::HTTPHeaderMap m_originalRequestHeaders; // Needed for CORS checks.
    7273    RefPtr<NetworkDataTask> m_task;
    7374    WebCore::Timer m_timeoutTimer;
  • trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp

    r220887 r220888  
    387387}
    388388
    389 void WebLoaderStrategy::createPingHandle(NetworkingContext* networkingContext, ResourceRequest& request, HTTPHeaderMap&& originalRequestHeaders, Ref<SecurityOrigin>&& sourceOrigin, ContentSecurityPolicy* contentSecurityPolicy, const FetchOptions& options)
     389void WebLoaderStrategy::createPingHandle(NetworkingContext* networkingContext, ResourceRequest& request, const HTTPHeaderMap& originalRequestHeaders, Ref<SecurityOrigin>&& sourceOrigin, ContentSecurityPolicy* contentSecurityPolicy, const FetchOptions& options)
    390390{
    391391    // It's possible that call to createPingHandle might be made during initial empty Document creation before a NetworkingContext exists.
     
    401401    NetworkResourceLoadParameters loadParameters;
    402402    loadParameters.request = request;
    403     loadParameters.originalRequestHeaders = WTFMove(originalRequestHeaders);
    404403    loadParameters.sourceOrigin = WTFMove(sourceOrigin);
    405404    loadParameters.sessionID = webPage ? webPage->sessionID() : PAL::SessionID::defaultSessionID();
     
    411410        loadParameters.cspResponseHeaders = contentSecurityPolicy->responseHeaders();
    412411
    413     WebProcess::singleton().networkConnection().connection().send(Messages::NetworkConnectionToWebProcess::LoadPing(WTFMove(loadParameters)), 0);
     412    WebProcess::singleton().networkConnection().connection().send(Messages::NetworkConnectionToWebProcess::LoadPing(WTFMove(loadParameters), originalRequestHeaders), 0);
    414413}
    415414
  • trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h

    r220817 r220888  
    6060    void resumePendingRequests() final;
    6161
    62     void createPingHandle(WebCore::NetworkingContext*, WebCore::ResourceRequest&, WebCore::HTTPHeaderMap&& originalRequestHeaders, Ref<WebCore::SecurityOrigin>&& sourceOrigin, WebCore::ContentSecurityPolicy*, const WebCore::FetchOptions&) final;
     62    void createPingHandle(WebCore::NetworkingContext*, WebCore::ResourceRequest&, const WebCore::HTTPHeaderMap& originalRequestHeaders, Ref<WebCore::SecurityOrigin>&& sourceOrigin, WebCore::ContentSecurityPolicy*, const WebCore::FetchOptions&) final;
    6363
    6464    void storeDerivedDataToCache(const SHA1::Digest& bodyHash, const String& type, const String& partition, WebCore::SharedBuffer&) final;
  • trunk/Source/WebKitLegacy/ChangeLog

    r220887 r220888  
     12017-08-17  Chris Dumez  <cdumez@apple.com>
     2
     3        Regression(r220817): We should only copy the original request headers for Ping loads
     4        https://bugs.webkit.org/show_bug.cgi?id=175679
     5
     6        Reviewed by Youenn Fablet.
     7
     8        * WebCoreSupport/WebResourceLoadScheduler.cpp:
     9        (WebResourceLoadScheduler::createPingHandle):
     10        * WebCoreSupport/WebResourceLoadScheduler.h:
     11
    1122017-08-17  Don Olmstead  <don.olmstead@sony.com>
    213
  • trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.cpp

    r220817 r220888  
    364364}
    365365
    366 void WebResourceLoadScheduler::createPingHandle(NetworkingContext* networkingContext, ResourceRequest& request, HTTPHeaderMap&&, Ref<SecurityOrigin>&&, WebCore::ContentSecurityPolicy*, const FetchOptions& options)
     366void WebResourceLoadScheduler::createPingHandle(NetworkingContext* networkingContext, ResourceRequest& request, const HTTPHeaderMap&, Ref<SecurityOrigin>&&, WebCore::ContentSecurityPolicy*, const FetchOptions& options)
    367367{
    368368    // PingHandle manages its own lifetime, deleting itself when its purpose has been fulfilled.
  • trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.h

    r220817 r220888  
    6060    void resumePendingRequests() override;
    6161
    62     void createPingHandle(WebCore::NetworkingContext*, WebCore::ResourceRequest&, WebCore::HTTPHeaderMap&&, Ref<WebCore::SecurityOrigin>&& sourceOrigin, WebCore::ContentSecurityPolicy*, const WebCore::FetchOptions&) override;
     62    void createPingHandle(WebCore::NetworkingContext*, WebCore::ResourceRequest&, const WebCore::HTTPHeaderMap&, Ref<WebCore::SecurityOrigin>&& sourceOrigin, WebCore::ContentSecurityPolicy*, const WebCore::FetchOptions&) override;
    6363
    6464    void storeDerivedDataToCache(const SHA1::Digest&, const String&, const String&, WebCore::SharedBuffer&) override { }
Note: See TracChangeset for help on using the changeset viewer.