Title: [230820] trunk
Revision
230820
Author
you...@apple.com
Date
2018-04-19 14:27:02 -0700 (Thu, 19 Apr 2018)

Log Message

Web Inspector backend should get headers & cookies from network process separately from resource requests
https://bugs.webkit.org/show_bug.cgi?id=184396
<rdar://problem/38877384>

Reviewed by Brian Burg.

Source/WebCore:

Add two new loader strategies to get response and network metrics directly from
NetworkProcess based on resource loader identifier.
Use these methods in InspectorNetworkAgent when response/metrics might be filtered.

Covered by existing tests, in particular http/tests/inspector/network/fetch-network-data.html which would fail
without this since we are now setting the sourceOrigin for NetworkResourceLoader, which is used to sanitize response headers.

* inspector/agents/InspectorNetworkAgent.cpp:
(WebCore::InspectorNetworkAgent::didReceiveResponse):
(WebCore::InspectorNetworkAgent::didFinishLoading):
* loader/LoaderStrategy.cpp:
(WebCore::LoaderStrategy::responseFromResourceLoaIdentifier):
(WebCore::LoaderStrategy::networkMetricsFromResourceLoaIdentifier):
* loader/LoaderStrategy.h:

Source/WebKit:

Add support for storing response and network metrics for every resource load.
This is made conditional on inspector being activated.
NetworkConnectionToWebProcess keeps a response and network metrics for every load.
This is cleared when inspector is going away or when a web process requests
the data.

WebLoaderStrategy gets this data through synchronous IPC.
Synchronous IPC is a temporary implementation until Inspector code gets refactored.

Updated WebLoaderStrategy to pass the sourceOrigin for every NetworkResourceLoader.
This activates additional sanitization based on cross origin status.

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::setCaptureExtraNetworkLoadMetricsEnabled):
* NetworkProcess/NetworkConnectionToWebProcess.h:
(WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationResponse):
(WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationMetrics):
(WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationResponse):
(WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics):
(WebKit::NetworkConnectionToWebProcess::removeNetworkLoadInformation):
* NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::didReceiveResponse):
(WebKit::NetworkResourceLoader::didFinishLoading):
(WebKit::NetworkResourceLoader::didFailLoading):
* WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::responseFromResourceLoadIdentifier):
(WebKit::WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier):
* WebProcess/Network/WebLoaderStrategy.h:
* WebProcess/Network/WebResourceLoader.cpp:
(WebKit::WebResourceLoader::didReceiveResponse):

LayoutTests:

* http/wpt/service-workers/header-filtering.https-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (230819 => 230820)


--- trunk/LayoutTests/ChangeLog	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/LayoutTests/ChangeLog	2018-04-19 21:27:02 UTC (rev 230820)
@@ -1,3 +1,13 @@
+2018-04-19  Youenn Fablet  <you...@apple.com>
+
+        Web Inspector backend should get headers & cookies from network process separately from resource requests
+        https://bugs.webkit.org/show_bug.cgi?id=184396
+        <rdar://problem/38877384>
+
+        Reviewed by Brian Burg.
+
+        * http/wpt/service-workers/header-filtering.https-expected.txt:
+
 2018-04-19  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [Extra zoom mode] Add a mechanism to extend the height of the layout viewport in extra zoom mode

Modified: trunk/LayoutTests/http/wpt/service-workers/header-filtering.https-expected.txt (230819 => 230820)


--- trunk/LayoutTests/http/wpt/service-workers/header-filtering.https-expected.txt	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/LayoutTests/http/wpt/service-workers/header-filtering.https-expected.txt	2018-04-19 21:27:02 UTC (rev 230820)
@@ -3,8 +3,8 @@
 PASS Prepare tests: setup worker and register the client 
 PASS Prepare tests: Add a frame controlled by service worker 
 PASS Test same-origin fetch 
-FAIL Test cors cross-origin fetch assert_array_equals: lengths differ, expected 13 got 15
-FAIL Test no-cors cross-origin fetch assert_array_equals: lengths differ, expected 13 got 15
+PASS Test cors cross-origin fetch 
+PASS Test no-cors cross-origin fetch 
 PASS Test same-origin script load 
 PASS Test no-cors script load 
 PASS Test cors script load 

Modified: trunk/Source/WebCore/ChangeLog (230819 => 230820)


--- trunk/Source/WebCore/ChangeLog	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebCore/ChangeLog	2018-04-19 21:27:02 UTC (rev 230820)
@@ -1,3 +1,26 @@
+2018-04-19  Youenn Fablet  <you...@apple.com>
+
+        Web Inspector backend should get headers & cookies from network process separately from resource requests
+        https://bugs.webkit.org/show_bug.cgi?id=184396
+        <rdar://problem/38877384>
+
+        Reviewed by Brian Burg.
+
+        Add two new loader strategies to get response and network metrics directly from
+        NetworkProcess based on resource loader identifier.
+        Use these methods in InspectorNetworkAgent when response/metrics might be filtered.
+
+        Covered by existing tests, in particular http/tests/inspector/network/fetch-network-data.html which would fail
+        without this since we are now setting the sourceOrigin for NetworkResourceLoader, which is used to sanitize response headers.
+
+        * inspector/agents/InspectorNetworkAgent.cpp:
+        (WebCore::InspectorNetworkAgent::didReceiveResponse):
+        (WebCore::InspectorNetworkAgent::didFinishLoading):
+        * loader/LoaderStrategy.cpp:
+        (WebCore::LoaderStrategy::responseFromResourceLoaIdentifier):
+        (WebCore::LoaderStrategy::networkMetricsFromResourceLoaIdentifier):
+        * loader/LoaderStrategy.h:
+
 2018-04-19  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [Extra zoom mode] Add a mechanism to extend the height of the layout viewport in extra zoom mode

Modified: trunk/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp (230819 => 230820)


--- trunk/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp	2018-04-19 21:27:02 UTC (rev 230820)
@@ -49,15 +49,18 @@
 #include "InstrumentingAgents.h"
 #include "JSMainThreadExecState.h"
 #include "JSWebSocket.h"
+#include "LoaderStrategy.h"
 #include "MIMETypeRegistry.h"
 #include "MemoryCache.h"
 #include "NetworkResourcesData.h"
 #include "Page.h"
+#include "PlatformStrategies.h"
 #include "ProgressTracker.h"
 #include "ResourceError.h"
 #include "ResourceLoader.h"
 #include "ResourceRequest.h"
 #include "ResourceResponse.h"
+#include "RuntimeEnabledFeatures.h"
 #include "ScriptState.h"
 #include "ScriptableDocumentParser.h"
 #include "SubresourceLoader.h"
@@ -418,6 +421,23 @@
     willSendRequest(identifier, loader, request, ResourceResponse(), resourceTypeForLoadType(loadType));
 }
 
+static inline bool isResponseProbablyComingFromNetworkProcess(ResourceResponse::Source source)
+{
+    switch (source) {
+    case ResourceResponse::Source::MemoryCache:
+    case ResourceResponse::Source::MemoryCacheAfterValidation:
+    case ResourceResponse::Source::ServiceWorker:
+    case ResourceResponse::Source::ApplicationCache:
+        return false;
+    case ResourceResponse::Source::Unknown:
+    case ResourceResponse::Source::Network:
+    case ResourceResponse::Source::DiskCache:
+    case ResourceResponse::Source::DiskCacheAfterValidation:
+        return true;
+    }
+    return true;
+}
+
 void InspectorNetworkAgent::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response, ResourceLoader* resourceLoader)
 {
     if (m_hiddenRequestIdentifiers.contains(identifier))
@@ -424,8 +444,19 @@
         return;
 
     String requestId = IdentifiersFactory::requestId(identifier);
-    RefPtr<Inspector::Protocol::Network::Response> resourceResponse = buildObjectForResourceResponse(response, resourceLoader);
 
+    std::optional<ResourceResponse> realResponse;
+    if (RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess() && isResponseProbablyComingFromNetworkProcess(response.source())) {
+        callOnMainThreadAndWait([&] {
+            // We do not need to isolate response since it comes straight from IPC, but we might want to isolate it for extra safety.
+            auto response = platformStrategies()->loaderStrategy()->responseFromResourceLoadIdentifier(identifier);
+            if (!response.isNull())
+                realResponse = WTFMove(response);
+        });
+    }
+
+    RefPtr<Inspector::Protocol::Network::Response> resourceResponse = buildObjectForResourceResponse(realResponse ? *realResponse : response, resourceLoader);
+
     bool isNotModified = response.httpStatusCode() == 304;
 
     CachedResource* cachedResource = nullptr;
@@ -502,7 +533,13 @@
     if (resourceData && resourceData->cachedResource())
         sourceMappingURL = InspectorPageAgent::sourceMapURLForResource(resourceData->cachedResource());
 
-    RefPtr<Inspector::Protocol::Network::Metrics> metrics = buildObjectForMetrics(networkLoadMetrics);
+    std::optional<NetworkLoadMetrics> realMetrics;
+    if (RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess() && !networkLoadMetrics.isComplete()) {
+        callOnMainThreadAndWait([&] {
+            realMetrics = platformStrategies()->loaderStrategy()->networkMetricsFromResourceLoadIdentifier(identifier).isolatedCopy();
+        });
+    }
+    RefPtr<Inspector::Protocol::Network::Metrics> metrics = buildObjectForMetrics(realMetrics ? *realMetrics : networkLoadMetrics);
 
     m_frontendDispatcher->loadingFinished(requestId, elapsedFinishTime, !sourceMappingURL.isEmpty() ? &sourceMappingURL : nullptr, metrics);
 }

Modified: trunk/Source/WebCore/loader/LoaderStrategy.cpp (230819 => 230820)


--- trunk/Source/WebCore/loader/LoaderStrategy.cpp	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebCore/loader/LoaderStrategy.cpp	2018-04-19 21:27:02 UTC (rev 230820)
@@ -26,12 +26,24 @@
 #include "config.h"
 #include "LoaderStrategy.h"
 
+#include "NetworkLoadMetrics.h"
 #include "PlatformStrategies.h"
+#include "ResourceResponse.h"
 
 namespace WebCore {
 
 LoaderStrategy::~LoaderStrategy() = default;
 
+ResourceResponse LoaderStrategy::responseFromResourceLoadIdentifier(uint64_t /* resourceLoadIdentifier */)
+{
+    return { };
+}
+
+NetworkLoadMetrics LoaderStrategy::networkMetricsFromResourceLoadIdentifier(uint64_t /* resourceLoadIdentifier */)
+{
+    return { };
+}
+
 } // namespace WebCore
 
 

Modified: trunk/Source/WebCore/loader/LoaderStrategy.h (230819 => 230820)


--- trunk/Source/WebCore/loader/LoaderStrategy.h	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebCore/loader/LoaderStrategy.h	2018-04-19 21:27:02 UTC (rev 230820)
@@ -42,6 +42,7 @@
 class HTTPHeaderMap;
 class NetscapePlugInStreamLoader;
 class NetscapePlugInStreamLoaderClient;
+class NetworkLoadMetrics;
 class ResourceError;
 class ResourceLoader;
 class ResourceRequest;
@@ -81,6 +82,9 @@
 
     virtual bool isDoingLoadingSecurityChecks() const { return false; }
 
+    virtual ResourceResponse responseFromResourceLoadIdentifier(uint64_t resourceLoadIdentifier);
+    virtual NetworkLoadMetrics networkMetricsFromResourceLoadIdentifier(uint64_t resourceLoadIdentifier);
+
 protected:
     virtual ~LoaderStrategy();
 };

Modified: trunk/Source/WebKit/ChangeLog (230819 => 230820)


--- trunk/Source/WebKit/ChangeLog	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/ChangeLog	2018-04-19 21:27:02 UTC (rev 230820)
@@ -1,3 +1,43 @@
+2018-04-19  Youenn Fablet  <you...@apple.com>
+
+        Web Inspector backend should get headers & cookies from network process separately from resource requests
+        https://bugs.webkit.org/show_bug.cgi?id=184396
+        <rdar://problem/38877384>
+
+        Reviewed by Brian Burg.
+
+        Add support for storing response and network metrics for every resource load.
+        This is made conditional on inspector being activated.
+        NetworkConnectionToWebProcess keeps a response and network metrics for every load.
+        This is cleared when inspector is going away or when a web process requests
+        the data.
+
+        WebLoaderStrategy gets this data through synchronous IPC.
+        Synchronous IPC is a temporary implementation until Inspector code gets refactored.
+
+        Updated WebLoaderStrategy to pass the sourceOrigin for every NetworkResourceLoader.
+        This activates additional sanitization based on cross origin status.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::setCaptureExtraNetworkLoadMetricsEnabled):
+        * NetworkProcess/NetworkConnectionToWebProcess.h:
+        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationResponse):
+        (WebKit::NetworkConnectionToWebProcess::takeNetworkLoadInformationMetrics):
+        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationResponse):
+        (WebKit::NetworkConnectionToWebProcess::addNetworkLoadInformationMetrics):
+        (WebKit::NetworkConnectionToWebProcess::removeNetworkLoadInformation):
+        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::didReceiveResponse):
+        (WebKit::NetworkResourceLoader::didFinishLoading):
+        (WebKit::NetworkResourceLoader::didFailLoading):
+        * WebProcess/Network/WebLoaderStrategy.cpp:
+        (WebKit::WebLoaderStrategy::responseFromResourceLoadIdentifier):
+        (WebKit::WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier):
+        * WebProcess/Network/WebLoaderStrategy.h:
+        * WebProcess/Network/WebResourceLoader.cpp:
+        (WebKit::WebResourceLoader::didReceiveResponse):
+
 2018-04-19  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [Extra zoom mode] Add a mechanism to extend the height of the layout viewport in extra zoom mode

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (230819 => 230820)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2018-04-19 21:27:02 UTC (rev 230820)
@@ -484,6 +484,8 @@
 void NetworkConnectionToWebProcess::setCaptureExtraNetworkLoadMetricsEnabled(bool enabled)
 {
     m_captureExtraNetworkLoadMetricsEnabled = enabled;
+    if (!m_captureExtraNetworkLoadMetricsEnabled)
+        m_networkLoadInformationByID.clear();
 }
 
 void NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession()

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (230819 => 230820)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2018-04-19 21:27:02 UTC (rev 230820)
@@ -75,6 +75,41 @@
     void cleanupForSuspension(Function<void()>&&);
     void endSuspension();
 
+    // FIXME: We should store all redirected request/responses.
+    struct NetworkLoadInformation {
+        WebCore::ResourceResponse response;
+        WebCore::NetworkLoadMetrics metrics;
+    };
+
+    void takeNetworkLoadInformationResponse(ResourceLoadIdentifier identifier, WebCore::ResourceResponse& response)
+    {
+        response = m_networkLoadInformationByID.get(identifier).response;
+    }
+
+    void takeNetworkLoadInformationMetrics(ResourceLoadIdentifier identifier, WebCore::NetworkLoadMetrics& metrics)
+    {
+        metrics = m_networkLoadInformationByID.take(identifier).metrics;
+    }
+
+    void addNetworkLoadInformationResponse(ResourceLoadIdentifier identifier, const WebCore::ResourceResponse& response)
+    {
+        ASSERT(!m_networkLoadInformationByID.contains(identifier));
+        m_networkLoadInformationByID.add(identifier, NetworkLoadInformation { response, { } });
+    }
+
+    void addNetworkLoadInformationMetrics(ResourceLoadIdentifier identifier, const WebCore::NetworkLoadMetrics& metrics)
+    {
+        ASSERT(m_networkLoadInformationByID.contains(identifier));
+        m_networkLoadInformationByID.ensure(identifier, [] {
+            return NetworkLoadInformation { };
+        }).iterator->value.metrics = metrics;
+    }
+
+    void removeNetworkLoadInformation(ResourceLoadIdentifier identifier)
+    {
+        m_networkLoadInformationByID.remove(identifier);
+    }
+
 private:
     NetworkConnectionToWebProcess(IPC::Connection::Identifier);
 
@@ -150,6 +185,9 @@
     HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader>> m_networkResourceLoaders;
     HashMap<String, RefPtr<WebCore::BlobDataFileReference>> m_blobDataFileReferences;
 
+    HashMap<ResourceLoadIdentifier, NetworkLoadInformation> m_networkLoadInformationByID;
+
+
 #if USE(LIBWEBRTC)
     RefPtr<NetworkRTCProvider> m_rtcProvider;
 #endif

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (230819 => 230820)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2018-04-19 21:27:02 UTC (rev 230820)
@@ -64,4 +64,7 @@
     AddOriginAccessWhitelistEntry(String sourceOrigin, String destinationProtocol, String destinationHost, bool allowDestinationSubdomains);
     RemoveOriginAccessWhitelistEntry(String sourceOrigin, String destinationProtocol, String destinationHost, bool allowDestinationSubdomains);
     ResetOriginAccessWhitelists();
+
+    TakeNetworkLoadInformationResponse(uint64_t resourceLoadIdentifier) -> (WebCore::ResourceResponse response);
+    TakeNetworkLoadInformationMetrics(uint64_t resourceLoadIdentifier) -> (WebCore::NetworkLoadMetrics networkMetrics);
 }

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (230819 => 230820)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2018-04-19 21:27:02 UTC (rev 230820)
@@ -357,6 +357,9 @@
 
     m_response = WTFMove(receivedResponse);
 
+    if (shouldCaptureExtraNetworkLoadMetrics())
+        m_connection->addNetworkLoadInformationResponse(identifier(), m_response);
+
     // For multipart/x-mixed-replace didReceiveResponseAsync gets called multiple times and buffering would require special handling.
     if (!isSynchronous() && m_response.isMultipart())
         m_bufferedData = nullptr;
@@ -432,6 +435,9 @@
 {
     RELEASE_LOG_IF_ALLOWED("didFinishLoading: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", length = %zd)", m_parameters.webPageID, m_parameters.webFrameID, m_parameters.identifier, m_numBytesReceived);
 
+    if (shouldCaptureExtraNetworkLoadMetrics())
+        m_connection->addNetworkLoadInformationMetrics(identifier(), networkLoadMetrics);
+
     if (m_cacheEntryForValidation) {
         // 304 Not Modified
         ASSERT(m_response.httpStatusCode() == 304);
@@ -464,6 +470,9 @@
 {
     RELEASE_LOG_IF_ALLOWED("didFailLoading: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isTimeout = %d, isCancellation = %d, errCode = %d)", m_parameters.webPageID, m_parameters.webFrameID, m_parameters.identifier, error.isTimeout(), error.isCancellation(), error.errorCode());
 
+    if (shouldCaptureExtraNetworkLoadMetrics())
+        m_connection->removeNetworkLoadInformation(identifier());
+
     ASSERT(!error.isNull());
 
     m_cacheEntryForValidation = nullptr;

Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (230819 => 230820)


--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2018-04-19 21:27:02 UTC (rev 230820)
@@ -275,6 +275,27 @@
     loadParameters.derivedCachedDataTypesToRetrieve = resourceLoader.options().derivedCachedDataTypesToRetrieve;
     loadParameters.options = resourceLoader.options();
 
+    if (loadParameters.options.mode != FetchOptions::Mode::Navigate) {
+        // FIXME: All loaders should provide their origin if navigation mode is cors/no-cors/same-origin.
+        // As a temporary approach, we use the document origin if available or the HTTP Origin header otherwise.
+        if (resourceLoader.isSubresourceLoader())
+            loadParameters.sourceOrigin = static_cast<SubresourceLoader&>(resourceLoader).origin();
+
+        auto* document = resourceLoader.frame() ? resourceLoader.frame()->document() : nullptr;
+        if (!loadParameters.sourceOrigin && document)
+            loadParameters.sourceOrigin = &document->securityOrigin();
+        if (!loadParameters.sourceOrigin) {
+            auto origin = request.httpOrigin();
+            if (!origin.isNull())
+                loadParameters.sourceOrigin = SecurityOrigin::createFromString(origin);
+        }
+        ASSERT(loadParameters.sourceOrigin);
+        if (!loadParameters.sourceOrigin) {
+            scheduleInternallyFailedLoad(resourceLoader);
+            return;
+        }
+    }
+
     // FIXME: We should also sanitize redirect response for navigations.
     loadParameters.shouldRestrictHTTPResponseAccess = RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess() && resourceLoader.options().mode != FetchOptions::Mode::Navigate;
 
@@ -588,4 +609,18 @@
     WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::SetCaptureExtraNetworkLoadMetricsEnabled(enabled), 0);
 }
 
+ResourceResponse WebLoaderStrategy::responseFromResourceLoadIdentifier(uint64_t resourceLoadIdentifier)
+{
+    ResourceResponse response;
+    WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::TakeNetworkLoadInformationResponse { resourceLoadIdentifier }, Messages::NetworkConnectionToWebProcess::TakeNetworkLoadInformationResponse::Reply { response }, 0);
+    return response;
+}
+
+NetworkLoadMetrics WebLoaderStrategy::networkMetricsFromResourceLoadIdentifier(uint64_t resourceLoadIdentifier)
+{
+    NetworkLoadMetrics networkMetrics;
+    WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::TakeNetworkLoadInformationMetrics { resourceLoadIdentifier }, Messages::NetworkConnectionToWebProcess::TakeNetworkLoadInformationMetrics::Reply { networkMetrics }, 0);
+    return networkMetrics;
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h (230819 => 230820)


--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h	2018-04-19 21:00:50 UTC (rev 230819)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h	2018-04-19 21:27:02 UTC (rev 230820)
@@ -92,6 +92,9 @@
     void startLocalLoad(WebCore::ResourceLoader&);
     bool tryLoadingUsingURLSchemeHandler(WebCore::ResourceLoader&);
 
+    WebCore::ResourceResponse responseFromResourceLoadIdentifier(uint64_t resourceLoadIdentifier) final;
+    WebCore::NetworkLoadMetrics networkMetricsFromResourceLoadIdentifier(uint64_t resourceLoadIdentifier) final;
+
     HashSet<RefPtr<WebCore::ResourceLoader>> m_internallyFailedResourceLoaders;
     RunLoop::Timer<WebLoaderStrategy> m_internallyFailedLoadTimer;
     
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to