browser(webkit): amend method & postData upon continue (#702)

This commit is contained in:
Pavel Feldman 2020-01-27 23:26:34 -08:00 committed by Andrey Lushnikov
parent 023fa01e32
commit 45e88f7b85
2 changed files with 43 additions and 22 deletions

View file

@ -1 +1 @@
1118 1119

View file

@ -887,7 +887,7 @@ index 0000000000000000000000000000000000000000..34909cce9f6d8d7c74be4c96e40f80ca
+ ] + ]
+} +}
diff --git a/Source/JavaScriptCore/inspector/protocol/Network.json b/Source/JavaScriptCore/inspector/protocol/Network.json diff --git a/Source/JavaScriptCore/inspector/protocol/Network.json b/Source/JavaScriptCore/inspector/protocol/Network.json
index 658f14f8af68073b99a01dd7332628223b67fcd7..bf7c6b49ac403a3b877f60b0f2e236971dc3b592 100644 index 658f14f8af68073b99a01dd7332628223b67fcd7..cd28887b9a01826c2d374bdada487c81467fdade 100644
--- a/Source/JavaScriptCore/inspector/protocol/Network.json --- a/Source/JavaScriptCore/inspector/protocol/Network.json
+++ b/Source/JavaScriptCore/inspector/protocol/Network.json +++ b/Source/JavaScriptCore/inspector/protocol/Network.json
@@ -231,7 +231,8 @@ @@ -231,7 +231,8 @@
@ -900,13 +900,15 @@ index 658f14f8af68073b99a01dd7332628223b67fcd7..bf7c6b49ac403a3b877f60b0f2e23697
] ]
}, },
{ {
@@ -258,7 +259,16 @@ @@ -258,7 +259,18 @@
"name": "interceptContinue", "name": "interceptContinue",
"description": "Continue an interception with no modifications.", "description": "Continue an interception with no modifications.",
"parameters": [ "parameters": [
- { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network request or response to continue." } - { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network request or response to continue." }
+ { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network request or response to continue." }, + { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network request or response to continue." },
+ { "name": "headers", "$ref": "Headers", "optional": true, "description": "HTTP response headers. Pass through original values if unmodified." } + { "name": "method", "type": "string", "optional": true,"description": "HTTP request method." },
+ { "name": "headers", "$ref": "Headers", "optional": true, "description": "HTTP response headers. Pass through original values if unmodified." },
+ { "name": "postData", "type": "string", "optional": true, "description": "HTTP POST request data." }
+ ] + ]
+ }, + },
+ { + {
@ -918,7 +920,7 @@ index 658f14f8af68073b99a01dd7332628223b67fcd7..bf7c6b49ac403a3b877f60b0f2e23697
] ]
}, },
{ {
@@ -266,13 +276,20 @@ @@ -266,13 +278,20 @@
"description": "Provide response content for an intercepted response.", "description": "Provide response content for an intercepted response.",
"parameters": [ "parameters": [
{ "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network response to modify." }, { "name": "requestId", "$ref": "RequestId", "description": "Identifier for the intercepted Network response to modify." },
@ -941,7 +943,7 @@ index 658f14f8af68073b99a01dd7332628223b67fcd7..bf7c6b49ac403a3b877f60b0f2e23697
} }
], ],
"events": [ "events": [
@@ -356,6 +373,14 @@ @@ -356,6 +375,14 @@
{ "name": "response", "$ref": "Response", "description": "Original response content that would proceed if this is continued." } { "name": "response", "$ref": "Response", "description": "Original response content that would proceed if this is continued." }
] ]
}, },
@ -2117,10 +2119,18 @@ index b578660fbb3ce176e4e0aeb5a22021dc880e47f0..a7c968bc9f88c7d26e1887bb53106b4a
class Page; class Page;
class SecurityOrigin; class SecurityOrigin;
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5088d2531 100644 index 31382c765d05a28ca7e787e20730c303f67b8776..c7321a9af1a52eea7a02a818d2a75f68fafccb9e 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp --- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp +++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
@@ -56,6 +56,7 @@ @@ -44,6 +44,7 @@
#include "DocumentLoader.h"
#include "DocumentThreadableLoader.h"
#include "Frame.h"
+#include "FormData.h"
#include "FrameLoader.h"
#include "HTTPHeaderMap.h"
#include "HTTPHeaderNames.h"
@@ -56,6 +57,7 @@
#include "MIMETypeRegistry.h" #include "MIMETypeRegistry.h"
#include "MemoryCache.h" #include "MemoryCache.h"
#include "NetworkResourcesData.h" #include "NetworkResourcesData.h"
@ -2128,7 +2138,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
#include "Page.h" #include "Page.h"
#include "PlatformStrategies.h" #include "PlatformStrategies.h"
#include "ProgressTracker.h" #include "ProgressTracker.h"
@@ -99,6 +100,23 @@ using namespace Inspector; @@ -99,6 +101,23 @@ using namespace Inspector;
namespace { namespace {
@ -2152,7 +2162,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
class InspectorThreadableLoaderClient final : public ThreadableLoaderClient { class InspectorThreadableLoaderClient final : public ThreadableLoaderClient {
WTF_MAKE_NONCOPYABLE(InspectorThreadableLoaderClient); WTF_MAKE_NONCOPYABLE(InspectorThreadableLoaderClient);
public: public:
@@ -438,6 +456,13 @@ void InspectorNetworkAgent::willSendRequest(unsigned long identifier, DocumentLo @@ -438,6 +457,13 @@ void InspectorNetworkAgent::willSendRequest(unsigned long identifier, DocumentLo
for (auto& entry : m_extraRequestHeaders) for (auto& entry : m_extraRequestHeaders)
request.setHTTPHeaderField(entry.key, entry.value); request.setHTTPHeaderField(entry.key, entry.value);
@ -2166,7 +2176,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
auto protocolResourceType = InspectorPageAgent::resourceTypeJSON(type); auto protocolResourceType = InspectorPageAgent::resourceTypeJSON(type);
Document* document = loader && loader->frame() ? loader->frame()->document() : nullptr; Document* document = loader && loader->frame() ? loader->frame()->document() : nullptr;
@@ -770,24 +795,12 @@ void InspectorNetworkAgent::didCloseWebSocket(unsigned long identifier) @@ -770,24 +796,12 @@ void InspectorNetworkAgent::didCloseWebSocket(unsigned long identifier)
void InspectorNetworkAgent::didReceiveWebSocketFrame(unsigned long identifier, const WebSocketFrame& frame) void InspectorNetworkAgent::didReceiveWebSocketFrame(unsigned long identifier, const WebSocketFrame& frame)
{ {
@ -2193,7 +2203,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
} }
void InspectorNetworkAgent::didReceiveWebSocketFrameError(unsigned long identifier, const String& errorMessage) void InspectorNetworkAgent::didReceiveWebSocketFrameError(unsigned long identifier, const String& errorMessage)
@@ -839,6 +852,7 @@ void InspectorNetworkAgent::disable(ErrorString&) @@ -839,6 +853,7 @@ void InspectorNetworkAgent::disable(ErrorString&)
m_resourcesData->clear(); m_resourcesData->clear();
m_extraRequestHeaders.clear(); m_extraRequestHeaders.clear();
@ -2201,7 +2211,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
continuePendingResponses(); continuePendingResponses();
setResourceCachingDisabled(false); setResourceCachingDisabled(false);
@@ -862,6 +876,16 @@ bool InspectorNetworkAgent::shouldIntercept(URL url) @@ -862,6 +877,16 @@ bool InspectorNetworkAgent::shouldIntercept(URL url)
return false; return false;
} }
@ -2218,7 +2228,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
void InspectorNetworkAgent::continuePendingResponses() void InspectorNetworkAgent::continuePendingResponses()
{ {
for (auto& pendingInterceptResponse : m_pendingInterceptResponses.values()) for (auto& pendingInterceptResponse : m_pendingInterceptResponses.values())
@@ -1018,17 +1042,15 @@ void InspectorNetworkAgent::resolveWebSocket(ErrorString& errorString, const Str @@ -1018,17 +1043,15 @@ void InspectorNetworkAgent::resolveWebSocket(ErrorString& errorString, const Str
result = injectedScript.wrapObject(webSocketAsScriptValue(state, webSocket), objectGroupName); result = injectedScript.wrapObject(webSocketAsScriptValue(state, webSocket), objectGroupName);
} }
@ -2240,7 +2250,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
} }
void InspectorNetworkAgent::addInterception(ErrorString& errorString, const String& url, const bool* optionalCaseSensitive, const bool* optionalIsRegex, const String* networkStageString) void InspectorNetworkAgent::addInterception(ErrorString& errorString, const String& url, const bool* optionalCaseSensitive, const bool* optionalIsRegex, const String* networkStageString)
@@ -1110,19 +1132,117 @@ void InspectorNetworkAgent::interceptResponse(const ResourceResponse& response, @@ -1110,19 +1133,128 @@ void InspectorNetworkAgent::interceptResponse(const ResourceResponse& response,
m_frontendDispatcher->responseIntercepted(requestId, buildObjectForResourceResponse(response, nullptr)); m_frontendDispatcher->responseIntercepted(requestId, buildObjectForResourceResponse(response, nullptr));
} }
@ -2258,7 +2268,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
+ return true; + return true;
+} +}
+ +
+void InspectorNetworkAgent::interceptContinue(ErrorString& errorString, const String& requestId, const JSON::Object* headers) +void InspectorNetworkAgent::interceptContinue(ErrorString& errorString, const String& requestId, const String* method, const JSON::Object* headers, const String* postData)
+{ +{
+ auto pendingRequest = m_pendingInterceptRequests.take(requestId); + auto pendingRequest = m_pendingInterceptRequests.take(requestId);
+ if (pendingRequest) { + if (pendingRequest) {
@ -2267,9 +2277,11 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
+ // Do not throw upon continue of canceled requests. + // Do not throw upon continue of canceled requests.
+ return; + return;
+ } + }
+ // Safe to const cast at this point, we are only adjusting the method / headers / post.
+ ResourceRequest* request = const_cast<ResourceRequest*>(&loader->request());
+ if (method)
+ request->setHTTPMethod(*method);
+ if (headers) { + if (headers) {
+ // Safe to const cast at this point, we are only adjusting the headers.
+ ResourceRequest* request = const_cast<ResourceRequest*>(&loader->request());
+ HTTPHeaderMap explicitHeaders; + HTTPHeaderMap explicitHeaders;
+ for (auto& header : *headers) { + for (auto& header : *headers) {
+ String headerValue; + String headerValue;
@ -2278,6 +2290,15 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
+ } + }
+ request->setHTTPHeaderFields(WTFMove(explicitHeaders)); + request->setHTTPHeaderFields(WTFMove(explicitHeaders));
+ } + }
+ if (postData) {
+ Vector<uint8_t> buffer;
+ if (!base64Decode(*postData, buffer)) {
+ errorString = "Unable to decode given postData"_s;
+ return;
+ }
+ Ref<FormData> data = FormData::create(buffer);
+ request->setHTTPBody(WTFMove(data));
+ }
+ pendingRequest->m_callback(false); + pendingRequest->m_callback(false);
+ return; + return;
+ } + }
@ -2364,7 +2385,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
auto pendingInterceptResponse = m_pendingInterceptResponses.take(requestId); auto pendingInterceptResponse = m_pendingInterceptResponses.take(requestId);
if (!pendingInterceptResponse) { if (!pendingInterceptResponse) {
errorString = "Missing pending intercept response for given requestId"_s; errorString = "Missing pending intercept response for given requestId"_s;
@@ -1150,20 +1270,26 @@ void InspectorNetworkAgent::interceptWithResponse(ErrorString& errorString, cons @@ -1150,20 +1282,26 @@ void InspectorNetworkAgent::interceptWithResponse(ErrorString& errorString, cons
} }
RefPtr<SharedBuffer> overrideData; RefPtr<SharedBuffer> overrideData;
@ -2395,7 +2416,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
bool InspectorNetworkAgent::shouldTreatAsText(const String& mimeType) bool InspectorNetworkAgent::shouldTreatAsText(const String& mimeType)
{ {
return startsWithLettersIgnoringASCIICase(mimeType, "text/") return startsWithLettersIgnoringASCIICase(mimeType, "text/")
@@ -1293,6 +1419,11 @@ void InspectorNetworkAgent::searchInRequest(ErrorString& errorString, const Stri @@ -1293,6 +1431,11 @@ void InspectorNetworkAgent::searchInRequest(ErrorString& errorString, const Stri
results = ContentSearchUtilities::searchInTextByLines(resourceData->content(), query, caseSensitive, isRegex); results = ContentSearchUtilities::searchInTextByLines(resourceData->content(), query, caseSensitive, isRegex);
} }
@ -2408,7 +2429,7 @@ index 31382c765d05a28ca7e787e20730c303f67b8776..f062a480d834479a0d993923073b35d5
{ {
m_resourcesData->clear(loaderIdentifier(&loader)); m_resourcesData->clear(loaderIdentifier(&loader));
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
index a68f84520736977c8b9216616c5a178fbf5275d6..b839460cf769887f49d1944d780a526fcb681b90 100644 index a68f84520736977c8b9216616c5a178fbf5275d6..8d6ed7188bca75fb46d1a5963983f08838a48cbe 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h --- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h +++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
@@ -87,11 +87,13 @@ public: @@ -87,11 +87,13 @@ public:
@ -2421,7 +2442,7 @@ index a68f84520736977c8b9216616c5a178fbf5275d6..b839460cf769887f49d1944d780a526f
void removeInterception(ErrorString&, const String& url, const bool* caseSensitive, const bool* isRegex, const String* networkStageString) final; void removeInterception(ErrorString&, const String& url, const bool* caseSensitive, const bool* isRegex, const String* networkStageString) final;
- void interceptContinue(ErrorString&, const String& requestId) final; - void interceptContinue(ErrorString&, const String& requestId) final;
- void interceptWithResponse(ErrorString&, const String& requestId, const String& content, bool base64Encoded, const String* mimeType, const int* status, const String* statusText, const JSON::Object* headers) final; - void interceptWithResponse(ErrorString&, const String& requestId, const String& content, bool base64Encoded, const String* mimeType, const int* status, const String* statusText, const JSON::Object* headers) final;
+ void interceptContinue(ErrorString&, const String& requestId, const JSON::Object* headers) final; + void interceptContinue(ErrorString&, const String& requestId, const String* method, const JSON::Object* headers, const String* postData) final;
+ void interceptAsError(ErrorString&, const String& requestId, const String& reason) final; + void interceptAsError(ErrorString&, const String& requestId, const String& reason) final;
+ void interceptWithResponse(ErrorString&, const String& requestId, const String* content, const bool* base64Encoded, const String* mimeType, const int* status, const String* statusText, const JSON::Object* headers) final; + void interceptWithResponse(ErrorString&, const String& requestId, const String* content, const bool* base64Encoded, const String* mimeType, const int* status, const String* statusText, const JSON::Object* headers) final;
+ void setEmulateOfflineState(ErrorString&, bool offline) final; + void setEmulateOfflineState(ErrorString&, bool offline) final;