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(); |