Chromium Code Reviews| Index: Source/core/inspector/InspectorController.cpp |
| diff --git a/Source/core/inspector/InspectorController.cpp b/Source/core/inspector/InspectorController.cpp |
| index 93fb08161d9b11297b7ebe9a75bff565b149ca3f..cb0f5d9080df13bc77faa97c87af60e3aa149c07 100644 |
| --- a/Source/core/inspector/InspectorController.cpp |
| +++ b/Source/core/inspector/InspectorController.cpp |
| @@ -34,6 +34,7 @@ |
| #include "InspectorBackendDispatcher.h" |
| #include "InspectorFrontend.h" |
| #include "bindings/v8/DOMWrapperWorld.h" |
| +#include "core/html/VoidCallback.h" |
| #include "core/inspector/IdentifiersFactory.h" |
| #include "core/inspector/InjectedScriptHost.h" |
| #include "core/inspector/InjectedScriptManager.h" |
| @@ -56,6 +57,7 @@ |
| #include "core/inspector/InspectorPageAgent.h" |
| #include "core/inspector/InspectorProfilerAgent.h" |
| #include "core/inspector/InspectorResourceAgent.h" |
| +#include "core/inspector/InspectorResourceContentLoader.h" |
| #include "core/inspector/InspectorState.h" |
| #include "core/inspector/InspectorTimelineAgent.h" |
| #include "core/inspector/InspectorTracingAgent.h" |
| @@ -70,6 +72,25 @@ |
| namespace WebCore { |
| +class InspectorController::InspectorResourceContentLoaderCallback FINAL : public VoidCallback { |
| +public: |
| + InspectorResourceContentLoaderCallback(InspectorController*); |
| + virtual void handleEvent() OVERRIDE; |
| + |
| +private: |
| + InspectorController* m_inspectorController; |
| +}; |
| + |
| +InspectorController::InspectorResourceContentLoaderCallback::InspectorResourceContentLoaderCallback(InspectorController* inspectorController) |
| + : m_inspectorController(inspectorController) |
| +{ |
| +} |
| + |
| +void InspectorController::InspectorResourceContentLoaderCallback::handleEvent() |
| +{ |
| + m_inspectorController->resourcesContentLoaded(); |
| +} |
| + |
| InspectorController::InspectorController(Page* page, InspectorClient* inspectorClient) |
| : m_instrumentingAgents(InstrumentingAgents::create()) |
| , m_injectedScriptManager(InjectedScriptManager::createForPage()) |
| @@ -149,11 +170,7 @@ void InspectorController::initializeDeferredAgents() |
| InjectedScriptManager* injectedScriptManager = m_injectedScriptManager.get(); |
| InspectorOverlay* overlay = m_overlay.get(); |
| - OwnPtr<InspectorResourceAgent> resourceAgentPtr(InspectorResourceAgent::create(m_pageAgent)); |
| - InspectorResourceAgent* resourceAgent = resourceAgentPtr.get(); |
| - m_agents.append(resourceAgentPtr.release()); |
| - |
| - m_agents.append(InspectorCSSAgent::create(m_domAgent, m_pageAgent, resourceAgent)); |
| + m_agents.append(InspectorCSSAgent::create(m_domAgent, m_pageAgent)); |
| m_agents.append(InspectorDOMStorageAgent::create(m_pageAgent)); |
| @@ -161,6 +178,8 @@ void InspectorController::initializeDeferredAgents() |
| m_agents.append(InspectorApplicationCacheAgent::create(m_pageAgent)); |
| + m_agents.append(InspectorResourceAgent::create(m_pageAgent)); |
| + |
| PageScriptDebugServer* pageScriptDebugServer = &PageScriptDebugServer::shared(); |
| OwnPtr<InspectorDebuggerAgent> debuggerAgentPtr(PageDebuggerAgent::create(pageScriptDebugServer, m_pageAgent, injectedScriptManager, overlay)); |
| @@ -207,7 +226,7 @@ void InspectorController::didClearDocumentOfWindowObject(LocalFrame* frame) |
| m_inspectorFrontendClient->windowObjectCleared(); |
| } |
| -void InspectorController::connectFrontend(InspectorFrontendChannel* frontendChannel) |
| +void InspectorController::connectFrontend(InspectorFrontendChannel* frontendChannel, bool isReusing) |
| { |
| ASSERT(frontendChannel); |
| @@ -226,12 +245,23 @@ void InspectorController::connectFrontend(InspectorFrontendChannel* frontendChan |
| m_inspectorBackendDispatcher = InspectorBackendDispatcher::create(frontendChannel); |
| m_agents.registerInDispatcher(m_inspectorBackendDispatcher.get()); |
| + |
| + if (!isReusing) |
| + m_inspectorResourceContentLoader = adoptPtr(new InspectorResourceContentLoader(m_page, adoptPtr(new InspectorResourceContentLoaderCallback(this)))); |
| +} |
| + |
| +void InspectorController::resourcesContentLoaded() |
| +{ |
| + for (Vector<String>::const_iterator it = m_messages.begin(); it != m_messages.end(); ++it) |
|
pfeldman
2014/05/20 19:50:49
You want to iterate a copy just in case.
|
| + dispatchMessageFromFrontend(*it); |
| + m_messages.clear(); |
| } |
| void InspectorController::disconnectFrontend() |
| { |
| if (!m_inspectorFrontend) |
| return; |
| + m_inspectorResourceContentLoader.clear(); |
| m_inspectorBackendDispatcher->clearFrontend(); |
| m_inspectorBackendDispatcher.clear(); |
| @@ -261,7 +291,7 @@ void InspectorController::reconnectFrontend() |
| void InspectorController::reuseFrontend(InspectorFrontendChannel* frontendChannel, const String& inspectorStateCookie) |
| { |
| ASSERT(!m_inspectorFrontend); |
| - connectFrontend(frontendChannel); |
| + connectFrontend(frontendChannel, true); |
| m_state->loadFromCookie(inspectorStateCookie); |
| m_agents.restore(); |
| } |
| @@ -328,6 +358,11 @@ void InspectorController::setInjectedScriptForOrigin(const String& origin, const |
| void InspectorController::dispatchMessageFromFrontend(const String& message) |
| { |
| + if (m_inspectorResourceContentLoader && !m_inspectorResourceContentLoader->hasFinished()) { |
| + m_messages.append(message); |
| + return; |
| + } |
| + |
| if (m_inspectorBackendDispatcher) |
| m_inspectorBackendDispatcher->dispatch(message); |
| } |
| @@ -425,6 +460,7 @@ void InspectorController::flushPendingFrontendMessages() |
| void InspectorController::didCommitLoadForMainFrame() |
| { |
| + m_inspectorResourceContentLoader.clear(); |
| Vector<InspectorAgent*> agents = m_moduleAgents; |
| for (size_t i = 0; i < agents.size(); i++) |
| agents[i]->didCommitLoadForMainFrame(); |