browser(webkit): require explicit interceptRequest flag to intercept requests (#421)
This commit is contained in:
parent
a18777673e
commit
25dfd61d16
|
|
@ -1 +1 @@
|
||||||
1071
|
1072
|
||||||
|
|
|
||||||
|
|
@ -875,10 +875,20 @@ 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..a8558f5093cedcec7884c6acc03b8bc3dc407163 100644
|
index 658f14f8af68073b99a01dd7332628223b67fcd7..bf7c6b49ac403a3b877f60b0f2e236971dc3b592 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
|
||||||
@@ -258,7 +258,16 @@
|
@@ -231,7 +231,8 @@
|
||||||
|
"name": "setInterceptionEnabled",
|
||||||
|
"description": "Enable interception of network requests.",
|
||||||
|
"parameters": [
|
||||||
|
- { "name": "enabled", "type": "boolean" }
|
||||||
|
+ { "name": "enabled", "type": "boolean" },
|
||||||
|
+ { "name": "interceptRequests", "type": "boolean", "optional": true }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
@@ -258,7 +259,16 @@
|
||||||
"name": "interceptContinue",
|
"name": "interceptContinue",
|
||||||
"description": "Continue an interception with no modifications.",
|
"description": "Continue an interception with no modifications.",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
|
|
@ -896,7 +906,7 @@ index 658f14f8af68073b99a01dd7332628223b67fcd7..a8558f5093cedcec7884c6acc03b8bc3
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -266,13 +275,20 @@
|
@@ -266,13 +276,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." },
|
||||||
|
|
@ -919,7 +929,7 @@ index 658f14f8af68073b99a01dd7332628223b67fcd7..a8558f5093cedcec7884c6acc03b8bc3
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
@@ -356,6 +372,14 @@
|
@@ -356,6 +373,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." }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -2003,7 +2013,7 @@ 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 ca8f169d18a697a4dea405c933398e67feef01c6..25ec31140dd0f163f6e815428c0e4673c8d9b49c 100644
|
index ca8f169d18a697a4dea405c933398e67feef01c6..f5bb8f4580cb1e1c1121b47063ce4da66aa27aef 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 @@
|
@@ -56,6 +56,7 @@
|
||||||
|
|
@ -2040,14 +2050,61 @@ index ca8f169d18a697a4dea405c933398e67feef01c6..25ec31140dd0f163f6e815428c0e4673
|
||||||
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;
|
||||||
@@ -1109,19 +1122,117 @@ void InspectorNetworkAgent::interceptResponse(const ResourceResponse& response,
|
@@ -838,6 +851,7 @@ void InspectorNetworkAgent::disable(ErrorString&)
|
||||||
|
m_resourcesData->clear();
|
||||||
|
m_extraRequestHeaders.clear();
|
||||||
|
|
||||||
|
+ continuePendingRequests();
|
||||||
|
continuePendingResponses();
|
||||||
|
|
||||||
|
setResourceCachingDisabled(false);
|
||||||
|
@@ -861,6 +875,16 @@ bool InspectorNetworkAgent::shouldIntercept(URL url)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void InspectorNetworkAgent::continuePendingRequests()
|
||||||
|
+{
|
||||||
|
+ for (auto& pendingRequest : m_pendingInterceptRequests.values()) {
|
||||||
|
+ ResourceLoader* loader = pendingRequest->m_loader.get();
|
||||||
|
+ if (loader->identifier())
|
||||||
|
+ pendingRequest->m_callback(false);
|
||||||
|
+ }
|
||||||
|
+ m_pendingInterceptRequests.clear();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void InspectorNetworkAgent::continuePendingResponses()
|
||||||
|
{
|
||||||
|
for (auto& pendingInterceptResponse : m_pendingInterceptResponses.values())
|
||||||
|
@@ -1017,17 +1041,15 @@ void InspectorNetworkAgent::resolveWebSocket(ErrorString& errorString, const Str
|
||||||
|
result = injectedScript.wrapObject(webSocketAsScriptValue(state, webSocket), objectGroupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void InspectorNetworkAgent::setInterceptionEnabled(ErrorString& errorString, bool enabled)
|
||||||
|
+void InspectorNetworkAgent::setInterceptionEnabled(ErrorString&, bool enabled, const bool* interceptRequests)
|
||||||
|
{
|
||||||
|
- if (m_interceptionEnabled == enabled) {
|
||||||
|
- errorString = m_interceptionEnabled ? "Interception already enabled"_s : "Interception already disabled"_s;
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
m_interceptionEnabled = enabled;
|
||||||
|
+ m_interceptRequests = interceptRequests && *interceptRequests;
|
||||||
|
|
||||||
|
if (!m_interceptionEnabled)
|
||||||
|
continuePendingResponses();
|
||||||
|
+ if (!m_interceptionEnabled || !m_interceptRequests)
|
||||||
|
+ continuePendingRequests();
|
||||||
|
}
|
||||||
|
|
||||||
|
void InspectorNetworkAgent::addInterception(ErrorString& errorString, const String& url, const bool* optionalCaseSensitive, const bool* optionalIsRegex, const String* networkStageString)
|
||||||
|
@@ -1109,19 +1131,117 @@ void InspectorNetworkAgent::interceptResponse(const ResourceResponse& response,
|
||||||
m_frontendDispatcher->responseIntercepted(requestId, buildObjectForResourceResponse(response, nullptr));
|
m_frontendDispatcher->responseIntercepted(requestId, buildObjectForResourceResponse(response, nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
-void InspectorNetworkAgent::interceptContinue(ErrorString& errorString, const String& requestId)
|
-void InspectorNetworkAgent::interceptContinue(ErrorString& errorString, const String& requestId)
|
||||||
-{
|
-{
|
||||||
+bool InspectorNetworkAgent::interceptRequest(ResourceLoader& loader, CompletionHandler<void(bool handled)>&& handler) {
|
+bool InspectorNetworkAgent::interceptRequest(ResourceLoader& loader, CompletionHandler<void(bool handled)>&& handler) {
|
||||||
+ if (!m_interceptionEnabled)
|
+ if (!m_interceptionEnabled || !m_interceptRequests)
|
||||||
+ return false;
|
+ return false;
|
||||||
+ String requestId = IdentifiersFactory::requestId(loader.identifier());
|
+ String requestId = IdentifiersFactory::requestId(loader.identifier());
|
||||||
+ auto pendingRequest = makeUnique<PendingInterceptRequest>();
|
+ auto pendingRequest = makeUnique<PendingInterceptRequest>();
|
||||||
|
|
@ -2164,7 +2221,7 @@ index ca8f169d18a697a4dea405c933398e67feef01c6..25ec31140dd0f163f6e815428c0e4673
|
||||||
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;
|
||||||
@@ -1149,20 +1260,26 @@ void InspectorNetworkAgent::interceptWithResponse(ErrorString& errorString, cons
|
@@ -1149,20 +1269,26 @@ void InspectorNetworkAgent::interceptWithResponse(ErrorString& errorString, cons
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<SharedBuffer> overrideData;
|
RefPtr<SharedBuffer> overrideData;
|
||||||
|
|
@ -2195,7 +2252,7 @@ index ca8f169d18a697a4dea405c933398e67feef01c6..25ec31140dd0f163f6e815428c0e4673
|
||||||
bool InspectorNetworkAgent::shouldTreatAsText(const String& mimeType)
|
bool InspectorNetworkAgent::shouldTreatAsText(const String& mimeType)
|
||||||
{
|
{
|
||||||
return startsWithLettersIgnoringASCIICase(mimeType, "text/")
|
return startsWithLettersIgnoringASCIICase(mimeType, "text/")
|
||||||
@@ -1292,6 +1409,11 @@ void InspectorNetworkAgent::searchInRequest(ErrorString& errorString, const Stri
|
@@ -1292,6 +1418,11 @@ void InspectorNetworkAgent::searchInRequest(ErrorString& errorString, const Stri
|
||||||
results = ContentSearchUtilities::searchInTextByLines(resourceData->content(), query, caseSensitive, isRegex);
|
results = ContentSearchUtilities::searchInTextByLines(resourceData->content(), query, caseSensitive, isRegex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2208,11 +2265,15 @@ index ca8f169d18a697a4dea405c933398e67feef01c6..25ec31140dd0f163f6e815428c0e4673
|
||||||
{
|
{
|
||||||
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..c36811c04d95c78b7747e6e625bf79ea33cfa0d9 100644
|
index a68f84520736977c8b9216616c5a178fbf5275d6..bee832c4c65f9a4487c0d0b7c6fd6985ae17f885 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
|
||||||
@@ -90,8 +90,10 @@ public:
|
@@ -87,11 +87,13 @@ public:
|
||||||
void setInterceptionEnabled(ErrorString&, bool enabled) final;
|
void loadResource(const String& frameId, const String& url, Ref<LoadResourceCallback>&&) final;
|
||||||
|
void getSerializedCertificate(ErrorString&, const String& requestId, String* serializedCertificate) final;
|
||||||
|
void resolveWebSocket(ErrorString&, const String& requestId, const String* objectGroup, RefPtr<Inspector::Protocol::Runtime::RemoteObject>&) final;
|
||||||
|
- void setInterceptionEnabled(ErrorString&, bool enabled) final;
|
||||||
|
+ void setInterceptionEnabled(ErrorString&, bool enabled, const bool* interceptRequests) final;
|
||||||
void addInterception(ErrorString&, const String& url, const bool* caseSensitive, const bool* isRegex, const String* networkStageString) final;
|
void addInterception(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 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;
|
||||||
|
|
@ -2238,7 +2299,15 @@ index a68f84520736977c8b9216616c5a178fbf5275d6..c36811c04d95c78b7747e6e625bf79ea
|
||||||
protected:
|
protected:
|
||||||
InspectorNetworkAgent(WebAgentContext&);
|
InspectorNetworkAgent(WebAgentContext&);
|
||||||
|
|
||||||
@@ -191,6 +196,15 @@ private:
|
@@ -141,6 +146,7 @@ private:
|
||||||
|
void willSendRequest(unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse, InspectorPageAgent::ResourceType);
|
||||||
|
|
||||||
|
bool shouldIntercept(URL);
|
||||||
|
+ void continuePendingRequests();
|
||||||
|
void continuePendingResponses();
|
||||||
|
|
||||||
|
WebSocket* webSocketForRequestId(const String& requestId);
|
||||||
|
@@ -191,6 +197,15 @@ private:
|
||||||
bool m_responded { false };
|
bool m_responded { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -2254,7 +2323,7 @@ index a68f84520736977c8b9216616c5a178fbf5275d6..c36811c04d95c78b7747e6e625bf79ea
|
||||||
std::unique_ptr<Inspector::NetworkFrontendDispatcher> m_frontendDispatcher;
|
std::unique_ptr<Inspector::NetworkFrontendDispatcher> m_frontendDispatcher;
|
||||||
RefPtr<Inspector::NetworkBackendDispatcher> m_backendDispatcher;
|
RefPtr<Inspector::NetworkBackendDispatcher> m_backendDispatcher;
|
||||||
Inspector::InjectedScriptManager& m_injectedScriptManager;
|
Inspector::InjectedScriptManager& m_injectedScriptManager;
|
||||||
@@ -214,6 +228,7 @@ private:
|
@@ -214,6 +229,7 @@ private:
|
||||||
};
|
};
|
||||||
Vector<Intercept> m_intercepts;
|
Vector<Intercept> m_intercepts;
|
||||||
HashMap<String, std::unique_ptr<PendingInterceptResponse>> m_pendingInterceptResponses;
|
HashMap<String, std::unique_ptr<PendingInterceptResponse>> m_pendingInterceptResponses;
|
||||||
|
|
@ -2262,6 +2331,14 @@ index a68f84520736977c8b9216616c5a178fbf5275d6..c36811c04d95c78b7747e6e625bf79ea
|
||||||
|
|
||||||
// FIXME: InspectorNetworkAgent should not be aware of style recalculation.
|
// FIXME: InspectorNetworkAgent should not be aware of style recalculation.
|
||||||
RefPtr<Inspector::Protocol::Network::Initiator> m_styleRecalculationInitiator;
|
RefPtr<Inspector::Protocol::Network::Initiator> m_styleRecalculationInitiator;
|
||||||
|
@@ -222,6 +238,7 @@ private:
|
||||||
|
bool m_enabled { false };
|
||||||
|
bool m_loadingXHRSynchronously { false };
|
||||||
|
bool m_interceptionEnabled { false };
|
||||||
|
+ bool m_interceptRequests { false };
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace WebCore
|
||||||
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp b/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
|
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp b/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
|
||||||
index d4e6b5d1f2151a1f4c16081b2695dd66da416ba2..8e54267226f5fe66c10f1dc7251be9c320b9b062 100644
|
index d4e6b5d1f2151a1f4c16081b2695dd66da416ba2..8e54267226f5fe66c10f1dc7251be9c320b9b062 100644
|
||||||
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
|
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.cpp
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue