InspectorController::InspectorController(Page& page, InspectorClient* inspectorClient) : m_instrumentingAgents(InstrumentingAgents::create(*this)) , m_injectedScriptManager(std::make_unique<WebInjectedScriptManager>(*this, WebInjectedScriptHost::create())) , m_frontendRouter(FrontendRouter::create()) , m_backendDispatcher(BackendDispatcher::create(m_frontendRouter.copyRef())) , m_overlay(std::make_unique<InspectorOverlay>(page, inspectorClient)) , m_executionStopwatch(Stopwatch::create()) , m_page(page) , m_inspectorClient(inspectorClient) { ASSERT_ARG(inspectorClient, inspectorClient); AgentContext baseContext = { *this, *m_injectedScriptManager, m_frontendRouter.get(), m_backendDispatcher.get() }; WebAgentContext webContext = { baseContext, m_instrumentingAgents.get() }; PageAgentContext pageContext = { webContext, m_page }; auto inspectorAgentPtr = std::make_unique<InspectorAgent>(pageContext); m_inspectorAgent = inspectorAgentPtr.get(); m_instrumentingAgents->setInspectorAgent(m_inspectorAgent); m_agents.append(WTF::move(inspectorAgentPtr)); auto pageAgentPtr = std::make_unique<InspectorPageAgent>(pageContext, inspectorClient, m_overlay.get()); InspectorPageAgent* pageAgent = pageAgentPtr.get(); m_pageAgent = pageAgentPtr.get(); m_agents.append(WTF::move(pageAgentPtr)); auto runtimeAgentPtr = std::make_unique<PageRuntimeAgent>(pageContext, pageAgent); PageRuntimeAgent* runtimeAgent = runtimeAgentPtr.get(); m_instrumentingAgents->setPageRuntimeAgent(runtimeAgent); m_agents.append(WTF::move(runtimeAgentPtr)); auto domAgentPtr = std::make_unique<InspectorDOMAgent>(pageContext, pageAgent, m_overlay.get()); m_domAgent = domAgentPtr.get(); m_agents.append(WTF::move(domAgentPtr)); m_agents.append(std::make_unique<InspectorCSSAgent>(pageContext, m_domAgent)); auto databaseAgentPtr = std::make_unique<InspectorDatabaseAgent>(pageContext); InspectorDatabaseAgent* databaseAgent = databaseAgentPtr.get(); m_agents.append(WTF::move(databaseAgentPtr)); #if ENABLE(INDEXED_DATABASE) m_agents.append(std::make_unique<InspectorIndexedDBAgent>(pageContext, pageAgent)); #endif #if ENABLE(WEB_REPLAY) m_agents.append(std::make_unique<InspectorReplayAgent>(pageContext)); #endif auto domStorageAgentPtr = std::make_unique<InspectorDOMStorageAgent>(pageContext, m_pageAgent); InspectorDOMStorageAgent* domStorageAgent = domStorageAgentPtr.get(); m_agents.append(WTF::move(domStorageAgentPtr)); auto timelineAgentPtr = std::make_unique<InspectorTimelineAgent>(pageContext, pageAgent, InspectorTimelineAgent::PageInspector); m_timelineAgent = timelineAgentPtr.get(); m_agents.append(WTF::move(timelineAgentPtr)); auto resourceAgentPtr = std::make_unique<InspectorResourceAgent>(pageContext, pageAgent); m_resourceAgent = resourceAgentPtr.get(); m_agents.append(WTF::move(resourceAgentPtr)); auto consoleAgentPtr = std::make_unique<PageConsoleAgent>(pageContext, m_domAgent); WebConsoleAgent* consoleAgent = consoleAgentPtr.get(); m_instrumentingAgents->setWebConsoleAgent(consoleAgentPtr.get()); m_agents.append(WTF::move(consoleAgentPtr)); auto debuggerAgentPtr = std::make_unique<PageDebuggerAgent>(pageContext, pageAgent, m_overlay.get()); PageDebuggerAgent* debuggerAgent = debuggerAgentPtr.get(); m_agents.append(WTF::move(debuggerAgentPtr)); auto domDebuggerAgentPtr = std::make_unique<InspectorDOMDebuggerAgent>(pageContext, m_domAgent, debuggerAgent); m_domDebuggerAgent = domDebuggerAgentPtr.get(); m_agents.append(WTF::move(domDebuggerAgentPtr)); m_agents.append(std::make_unique<InspectorHeapAgent>(pageContext)); m_agents.append(std::make_unique<InspectorApplicationCacheAgent>(pageContext, pageAgent)); m_agents.append(std::make_unique<InspectorWorkerAgent>(pageContext)); m_agents.append(std::make_unique<InspectorLayerTreeAgent>(pageContext)); ASSERT(m_injectedScriptManager->commandLineAPIHost()); if (CommandLineAPIHost* commandLineAPIHost = m_injectedScriptManager->commandLineAPIHost()) { commandLineAPIHost->init(m_inspectorAgent , consoleAgent , m_domAgent , domStorageAgent , databaseAgent ); } runtimeAgent->setScriptDebugServer(&debuggerAgent->scriptDebugServer()); m_timelineAgent->setPageScriptDebugServer(&debuggerAgent->scriptDebugServer()); }
InspectorController::InspectorController(Page& page, InspectorClient* inspectorClient) : m_instrumentingAgents(InstrumentingAgents::create(*this)) , m_injectedScriptManager(std::make_unique<WebInjectedScriptManager>(*this, WebInjectedScriptHost::create())) , m_overlay(std::make_unique<InspectorOverlay>(page, inspectorClient)) , m_inspectorFrontendChannel(nullptr) , m_page(page) , m_inspectorClient(inspectorClient) , m_isUnderTest(false) #if ENABLE(REMOTE_INSPECTOR) , m_hasRemoteFrontend(false) #endif { ASSERT_ARG(inspectorClient, inspectorClient); auto inspectorAgentPtr = std::make_unique<InspectorAgent>(); m_inspectorAgent = inspectorAgentPtr.get(); m_instrumentingAgents->setInspectorAgent(m_inspectorAgent); m_agents.append(std::move(inspectorAgentPtr)); auto pageAgentPtr = std::make_unique<InspectorPageAgent>(m_instrumentingAgents.get(), &page, inspectorClient, m_overlay.get()); InspectorPageAgent* pageAgent = pageAgentPtr.get(); m_pageAgent = pageAgentPtr.get(); m_agents.append(std::move(pageAgentPtr)); auto runtimeAgentPtr = std::make_unique<PageRuntimeAgent>(m_injectedScriptManager.get(), &page, pageAgent); PageRuntimeAgent* runtimeAgent = runtimeAgentPtr.get(); m_instrumentingAgents->setPageRuntimeAgent(runtimeAgent); m_agents.append(std::move(runtimeAgentPtr)); auto domAgentPtr = std::make_unique<InspectorDOMAgent>(m_instrumentingAgents.get(), pageAgent, m_injectedScriptManager.get(), m_overlay.get()); m_domAgent = domAgentPtr.get(); m_agents.append(std::move(domAgentPtr)); m_agents.append(std::make_unique<InspectorCSSAgent>(m_instrumentingAgents.get(), m_domAgent)); #if ENABLE(SQL_DATABASE) auto databaseAgentPtr = std::make_unique<InspectorDatabaseAgent>(m_instrumentingAgents.get()); InspectorDatabaseAgent* databaseAgent = databaseAgentPtr.get(); m_agents.append(std::move(databaseAgentPtr)); #endif #if ENABLE(INDEXED_DATABASE) m_agents.append(std::make_unique<InspectorIndexedDBAgent>(m_instrumentingAgents.get(), m_injectedScriptManager.get(), pageAgent)); #endif auto domStorageAgentPtr = std::make_unique<InspectorDOMStorageAgent>(m_instrumentingAgents.get(), m_pageAgent); InspectorDOMStorageAgent* domStorageAgent = domStorageAgentPtr.get(); m_agents.append(std::move(domStorageAgentPtr)); m_agents.append(std::make_unique<InspectorTimelineAgent>(m_instrumentingAgents.get(), pageAgent, InspectorTimelineAgent::PageInspector, inspectorClient)); m_agents.append(std::make_unique<InspectorApplicationCacheAgent>(m_instrumentingAgents.get(), pageAgent)); auto resourceAgentPtr = std::make_unique<InspectorResourceAgent>(m_instrumentingAgents.get(), pageAgent, inspectorClient); m_resourceAgent = resourceAgentPtr.get(); m_agents.append(std::move(resourceAgentPtr)); auto consoleAgentPtr = std::make_unique<PageConsoleAgent>(m_injectedScriptManager.get(), m_domAgent); WebConsoleAgent* consoleAgent = consoleAgentPtr.get(); m_instrumentingAgents->setWebConsoleAgent(consoleAgentPtr.get()); m_agents.append(std::move(consoleAgentPtr)); auto debuggerAgentPtr = std::make_unique<PageDebuggerAgent>(m_injectedScriptManager.get(), m_instrumentingAgents.get(), pageAgent, m_overlay.get()); m_debuggerAgent = debuggerAgentPtr.get(); m_agents.append(std::move(debuggerAgentPtr)); auto domDebuggerAgentPtr = std::make_unique<InspectorDOMDebuggerAgent>(m_instrumentingAgents.get(), m_domAgent, m_debuggerAgent); m_domDebuggerAgent = domDebuggerAgentPtr.get(); m_agents.append(std::move(domDebuggerAgentPtr)); auto profilerAgentPtr = InspectorProfilerAgent::create(m_instrumentingAgents.get(), consoleAgent, &page, m_injectedScriptManager.get()); m_profilerAgent = profilerAgentPtr.get(); m_agents.append(std::move(profilerAgentPtr)); m_agents.append(std::make_unique<InspectorHeapProfilerAgent>(m_instrumentingAgents.get(), m_injectedScriptManager.get())); m_agents.append(std::make_unique<InspectorWorkerAgent>(m_instrumentingAgents.get())); m_agents.append(std::make_unique<InspectorInputAgent>(m_instrumentingAgents.get(), &page)); m_agents.append(std::make_unique<InspectorLayerTreeAgent>(m_instrumentingAgents.get())); ASSERT(m_injectedScriptManager->commandLineAPIHost()); if (CommandLineAPIHost* commandLineAPIHost = m_injectedScriptManager->commandLineAPIHost()) { commandLineAPIHost->init(m_inspectorAgent , consoleAgent , m_domAgent , domStorageAgent #if ENABLE(SQL_DATABASE) , databaseAgent #endif ); } runtimeAgent->setScriptDebugServer(&m_debuggerAgent->scriptDebugServer()); }