Chromium Code Reviews| 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) |
| { |