browser(webkit): abort interception if loader reached termial state (#2776)

This commit is contained in:
Yury Semikhatsky 2020-06-30 16:47:10 -07:00 committed by GitHub
parent 55a07dbf4d
commit c6df8fd507
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 5 deletions

View File

@ -1 +1 @@
1294
1295

View File

@ -2614,7 +2614,7 @@ index ddbb5d5347f3beabe3cfab201d6838c896d21e39..25f1798cad5a4ef135a27d3bd5146798
class Page;
class SecurityOrigin;
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
index 1ccc5f5de274bd263c8bec5c72fe417ea99534fd..5dac8d209b4d2f19eee3471ba4a3cd530a691b65 100644
index 1ccc5f5de274bd263c8bec5c72fe417ea99534fd..f1c538d44e1a33dc4d5159007392c765cc3920e7 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
@@ -44,6 +44,7 @@
@ -2660,7 +2660,19 @@ index 1ccc5f5de274bd263c8bec5c72fe417ea99534fd..5dac8d209b4d2f19eee3471ba4a3cd53
}
bool InspectorNetworkAgent::shouldInterceptRequest(const ResourceRequest& request)
@@ -1291,6 +1298,8 @@ void InspectorNetworkAgent::interceptRequestWithResponse(ErrorString& errorStrin
@@ -1179,6 +1186,11 @@ void InspectorNetworkAgent::interceptWithRequest(ErrorString& errorString, const
}
auto& loader = *pendingRequest->m_loader;
+ if (loader.reachedTerminalState()) {
+ errorString = "Unable to intercept request, it has already been processed"_s;
+ return;
+ }
+
ResourceRequest request = loader.request();
if (url)
request.setURL(URL({ }, *url));
@@ -1291,6 +1303,8 @@ void InspectorNetworkAgent::interceptRequestWithResponse(ErrorString& errorStrin
response.setHTTPHeaderFields(WTFMove(explicitHeaders));
response.setHTTPHeaderField(HTTPHeaderName::ContentType, response.mimeType());
loader->didReceiveResponse(response, [loader, buffer = data.releaseNonNull()]() mutable {
@ -2669,7 +2681,7 @@ index 1ccc5f5de274bd263c8bec5c72fe417ea99534fd..5dac8d209b4d2f19eee3471ba4a3cd53
if (buffer->size())
loader->didReceiveBuffer(WTFMove(buffer), buffer->size(), DataPayloadWholeResource);
loader->didFinishLoading(NetworkLoadMetrics());
@@ -1335,6 +1344,11 @@ void InspectorNetworkAgent::interceptRequestWithError(ErrorString& errorString,
@@ -1335,6 +1349,11 @@ void InspectorNetworkAgent::interceptRequestWithError(ErrorString& errorString,
loader.didFail(error);
}
@ -2681,7 +2693,7 @@ index 1ccc5f5de274bd263c8bec5c72fe417ea99534fd..5dac8d209b4d2f19eee3471ba4a3cd53
bool InspectorNetworkAgent::shouldTreatAsText(const String& mimeType)
{
return startsWithLettersIgnoringASCIICase(mimeType, "text/")
@@ -1376,6 +1390,12 @@ Optional<String> InspectorNetworkAgent::textContentForCachedResource(CachedResou
@@ -1376,6 +1395,12 @@ Optional<String> InspectorNetworkAgent::textContentForCachedResource(CachedResou
return WTF::nullopt;
}