Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(737)

Unified Diff: Source/core/inspector/InspectorResourceAgent.cpp

Issue 1259393002: DevTools: add support for logging fetch requests when XHR logging is enabled (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InspectorResourceAgent.cpp
diff --git a/Source/core/inspector/InspectorResourceAgent.cpp b/Source/core/inspector/InspectorResourceAgent.cpp
index 1c91c5db15b7fadeedf15542431b0db3333e1186..fc13867addfaa7518141815ec42d17061403f3d3 100644
--- a/Source/core/inspector/InspectorResourceAgent.cpp
+++ b/Source/core/inspector/InspectorResourceAgent.cpp
@@ -311,7 +311,7 @@ DEFINE_TRACE(InspectorResourceAgent)
visitor->trace(m_replayXHRsToBeDeleted);
#if ENABLE(OILPAN)
- visitor->trace(m_pendingXHRReplayData);
+ visitor->trace(m_pendingRequest);
#endif
InspectorBaseAgent::trace(visitor);
}
@@ -486,29 +486,25 @@ void InspectorResourceAgent::didReceiveScriptResponse(unsigned long identifier)
void InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient(unsigned long identifier, ThreadableLoaderClient* client)
{
- if (!client)
+ if (!client || client != m_pendingRequest)
return;
- if (client == m_pendingEventSource) {
- m_eventSourceRequestIdMap.set(client, identifier);
- m_pendingEventSource = nullptr;
- }
-
- if (client == m_pendingXHR) {
- String requestId = IdentifiersFactory::requestId(identifier);
- m_resourcesData->setResourceType(requestId, InspectorPageAgent::XHRResource);
+ m_knownRequestIdMap.set(client, identifier);
+ String requestId = IdentifiersFactory::requestId(identifier);
+ m_resourcesData->setResourceType(requestId, m_pendingRequestType);
+ if (m_pendingRequestType == InspectorPageAgent::XHRResource) {
m_resourcesData->setXHRReplayData(requestId, m_pendingXHRReplayData.get());
- m_xhrRequestIdMap.set(client, identifier);
- m_pendingXHR = nullptr;
m_pendingXHRReplayData.clear();
}
+ m_pendingRequest = nullptr;
}
void InspectorResourceAgent::willLoadXHR(XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const KURL& url, bool async, PassRefPtr<FormData> formData, const HTTPHeaderMap& headers, bool includeCredentials)
{
ASSERT(xhr);
- ASSERT(!m_pendingXHR);
- m_pendingXHR = client;
+ ASSERT(!m_pendingRequest);
+ m_pendingRequest = client;
+ m_pendingRequestType = InspectorPageAgent::XHRResource;
m_pendingXHRReplayData = XHRReplayData::create(xhr->executionContext(), method, urlWithoutFragment(url), async, formData.get(), includeCredentials);
for (const auto& header : headers)
m_pendingXHRReplayData->addHeader(header.key, header.value);
@@ -536,15 +532,15 @@ void InspectorResourceAgent::didFinishXHRLoading(ExecutionContext* context, XMLH
void InspectorResourceAgent::didFinishXHRInternal(ExecutionContext* context, XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const String& url, bool success)
{
- m_pendingXHR = nullptr;
+ m_pendingRequest = nullptr;
dgozman 2015/07/29 15:26:07 I think didFinishXHR may come asynchronously after
m_pendingXHRReplayData.clear();
// This method will be called from the XHR.
// We delay deleting the replay XHR, as deleting here may delete the caller.
delayedRemoveReplayXHR(xhr);
- ThreadableLoaderClientRequestIdMap::iterator it = m_xhrRequestIdMap.find(client);
- if (it == m_xhrRequestIdMap.end())
+ ThreadableLoaderClientRequestIdMap::iterator it = m_knownRequestIdMap.find(client);
+ if (it == m_knownRequestIdMap.end())
return;
if (m_state->getBoolean(ResourceAgentState::monitoringXHR)) {
@@ -553,28 +549,60 @@ void InspectorResourceAgent::didFinishXHRInternal(ExecutionContext* context, XML
consoleMessage->setRequestIdentifier(it->value);
m_pageAgent->frameHost()->consoleMessageStorage().reportMessage(context, consoleMessage.release());
}
- m_xhrRequestIdMap.remove(client);
+ m_knownRequestIdMap.remove(client);
+}
+
+void InspectorResourceAgent::willStartFetch(ThreadableLoaderClient* client)
+{
+ ASSERT(!m_pendingRequest);
+ m_pendingRequest = client;
+ m_pendingRequestType = InspectorPageAgent::FetchResource;
+}
+
+void InspectorResourceAgent::didFailFetch(ThreadableLoaderClient* client)
+{
+ completeFetch(client);
+}
+
+void InspectorResourceAgent::didFinishFetch(ExecutionContext* context, ThreadableLoaderClient* client, const AtomicString& method, const String& url)
+{
+ ThreadableLoaderClientRequestIdMap::iterator it = m_knownRequestIdMap.find(client);
+ if (it == m_knownRequestIdMap.end())
+ return;
+
+ if (m_state->getBoolean(ResourceAgentState::monitoringXHR)) {
+ String message = "Fetch complete: " + method + " \"" + url + "\".";
+ RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(NetworkMessageSource, DebugMessageLevel, message);
+ consoleMessage->setRequestIdentifier(it->value);
+ m_pageAgent->frameHost()->consoleMessageStorage().reportMessage(context, consoleMessage.release());
+ }
+ completeFetch(client);
+}
+
+void InspectorResourceAgent::completeFetch(ThreadableLoaderClient* client)
dgozman 2015/07/29 15:26:07 Inline this?
+{
+ m_knownRequestIdMap.remove(client);
}
void InspectorResourceAgent::willSendEventSourceRequest(ThreadableLoaderClient* eventSource)
{
- ASSERT(!m_pendingEventSource);
- m_pendingEventSource = eventSource;
+ ASSERT(!m_pendingRequest);
+ m_pendingRequest = eventSource;
+ m_pendingRequestType = InspectorPageAgent::EventSourceResource;
}
void InspectorResourceAgent::willDispachEventSourceEvent(ThreadableLoaderClient* eventSource, const AtomicString& eventName, const AtomicString& eventId, const Vector<UChar>& data)
{
- ThreadableLoaderClientRequestIdMap::iterator it = m_eventSourceRequestIdMap.find(eventSource);
- if (it == m_eventSourceRequestIdMap.end())
+ ThreadableLoaderClientRequestIdMap::iterator it = m_knownRequestIdMap.find(eventSource);
+ if (it == m_knownRequestIdMap.end())
return;
frontend()->eventSourceMessageReceived(IdentifiersFactory::requestId(it->value), monotonicallyIncreasingTime(), eventName.string(), eventId.string(), String(data));
}
void InspectorResourceAgent::didFinishEventSourceRequest(ThreadableLoaderClient* eventSource)
{
- m_eventSourceRequestIdMap.remove(eventSource);
- if (eventSource == m_pendingEventSource)
- m_pendingEventSource = nullptr;
+ m_knownRequestIdMap.remove(eventSource);
+ m_pendingRequest = nullptr;
}
void InspectorResourceAgent::willDestroyResource(Resource* cachedResource)
@@ -723,8 +751,7 @@ void InspectorResourceAgent::enable()
void InspectorResourceAgent::disable(ErrorString*)
{
- ASSERT(!m_pendingXHR);
- ASSERT(!m_pendingEventSource);
+ ASSERT(!m_pendingRequest);
dgozman 2015/07/29 15:26:07 Should we clear |m_knownRequestIdMap| here?
m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, false);
m_state->setString(ResourceAgentState::userAgentOverride, "");
m_instrumentingAgents->setInspectorResourceAgent(0);
@@ -924,8 +951,7 @@ InspectorResourceAgent::InspectorResourceAgent(InspectorPageAgent* pageAgent)
: InspectorBaseAgent<InspectorResourceAgent, InspectorFrontend::Network>("Network")
, m_pageAgent(pageAgent)
, m_resourcesData(adoptPtr(new NetworkResourcesData()))
- , m_pendingXHR(nullptr)
- , m_pendingEventSource(nullptr)
+ , m_pendingRequest(nullptr)
, m_isRecalculatingStyle(false)
, m_removeFinishedReplayXHRTimer(this, &InspectorResourceAgent::removeFinishedReplayXHRFired)
{

Powered by Google App Engine
This is Rietveld 408576698