InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InspectorAgent* inspectorAgent, const String& scriptName, int scriptLine) { int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorAgent); if (timelineAgent) { timelineAgent->willCallFunction(scriptName, scriptLine); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(inspectorAgent, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponseImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, const ResourceResponse& response) { int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); if (timelineAgent) { timelineAgent->willReceiveResourceResponse(identifier, response); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHRImpl(InstrumentingAgents* instrumentingAgents, XMLHttpRequest* request) { int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); if (timelineAgent && request->hasEventListeners(eventNames().loadEvent)) { timelineAgent->willLoadXHR(request->url()); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyStateImpl(InstrumentingAgents* instrumentingAgents, XMLHttpRequest* request) { int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); if (timelineAgent && request->hasEventListeners(eventNames().readystatechangeEvent)) { timelineAgent->willChangeXHRReadyState(request->url().string(), request->readyState()); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InstrumentingAgents* instrumentingAgents, const Event& event, DOMWindow* window) { int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); if (timelineAgent && window->hasEventListeners(event.type())) { timelineAgent->willDispatchEvent(event); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InstrumentingAgents* instrumentingAgents, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors) { int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); if (timelineAgent && eventHasListeners(event.type(), window, node, ancestors)) { timelineAgent->willDispatchEvent(event); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindowImpl(InstrumentingAgents* instrumentingAgents, const Event& event, DOMWindow* window) { pauseOnNativeEventIfNeeded(instrumentingAgents, listenerEventCategoryType, event.type(), false); int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); if (timelineAgent && window->hasEventListeners(event.type())) { timelineAgent->willDispatchEvent(event); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(instrumentingAgents, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willFireTimerImpl(InspectorController* inspectorController, int timerId) { pauseOnNativeEventIfNeeded(inspectorController, instrumentationEventCategoryType, timerFiredEventName, false); int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController); if (timelineAgent) { timelineAgent->willFireTimer(timerId); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(inspectorController, timelineAgentId); }
InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InspectorController* inspectorController, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors) { pauseOnNativeEventIfNeeded(inspectorController, listenerEventCategoryType, event.type(), false); int timelineAgentId = 0; InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController); if (timelineAgent && eventHasListeners(event.type(), window, node, ancestors)) { timelineAgent->willDispatchEvent(event); timelineAgentId = timelineAgent->id(); } return InspectorInstrumentationCookie(inspectorController, timelineAgentId); }
void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents* instrumentingAgents, unsigned long identifier, DocumentLoader* loader, double monotonicFinishTime) { InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent(); InspectorResourceAgent* resourceAgent = instrumentingAgents->inspectorResourceAgent(); if (!timelineAgent && !resourceAgent) return; double finishTime = 0.0; // FIXME: Expose all of the timing details to inspector and have it calculate finishTime. if (monotonicFinishTime) finishTime = loader->timing()->convertMonotonicTimeToDocumentTime(monotonicFinishTime); if (timelineAgent) timelineAgent->didFinishLoadingResource(identifier, false, finishTime); if (resourceAgent) resourceAgent->didFinishLoading(identifier, loader, finishTime); }
void ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int length, int lengthReceived) { #if ENABLE(INSPECTOR) if (InspectorTimelineAgent::instanceCount()) { InspectorTimelineAgent* timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0; if (timelineAgent) timelineAgent->willReceiveResourceData(identifier()); } #endif didReceiveData(data, length, lengthReceived, false); #if ENABLE(INSPECTOR) if (InspectorTimelineAgent::instanceCount()) { InspectorTimelineAgent* timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0; if (timelineAgent) timelineAgent->didReceiveResourceData(); } #endif }
void DOMTimer::fired() { ScriptExecutionContext* context = scriptExecutionContext(); timerNestingLevel = m_nestingLevel; #if ENABLE(INSPECTOR) InspectorTimelineAgent* timelineAgent = InspectorTimelineAgent::retrieve(context); if (timelineAgent) timelineAgent->willFireTimer(m_timeoutId); #endif // Simple case for non-one-shot timers. if (isActive()) { if (repeatInterval() && repeatInterval() < s_minTimerInterval) { m_nestingLevel++; if (m_nestingLevel >= maxTimerNestingLevel) augmentRepeatInterval(s_minTimerInterval - repeatInterval()); } // No access to member variables after this point, it can delete the timer. m_action->execute(context); #if ENABLE(INSPECTOR) if (timelineAgent) timelineAgent->didFireTimer(); #endif return; } // Delete timer before executing the action for one-shot timers. ScheduledAction* action = m_action.release(); // No access to member variables after this point. delete this; action->execute(context); #if ENABLE(INSPECTOR) if (timelineAgent) timelineAgent->didFireTimer(); #endif delete action; timerNestingLevel = 0; }
void ResourceLoader::didReceiveResponse(ResourceHandle*, const ResourceResponse& response) { #if ENABLE(INSPECTOR) if (InspectorTimelineAgent::instanceCount()) { InspectorTimelineAgent* timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0; if (timelineAgent) timelineAgent->willReceiveResourceResponse(identifier(), response); } #endif #if ENABLE(OFFLINE_WEB_APPLICATIONS) if (documentLoader()->applicationCacheHost()->maybeLoadFallbackForResponse(this, response)) return; #endif didReceiveResponse(response); #if ENABLE(INSPECTOR) if (InspectorTimelineAgent::instanceCount()) { InspectorTimelineAgent* timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0; if (timelineAgent) timelineAgent->didReceiveResourceResponse(); } #endif }
void XMLHttpRequest::callReadyStateChangeListener() { if (!scriptExecutionContext()) return; #if ENABLE(INSPECTOR) InspectorTimelineAgent* timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()); bool callTimelineAgentOnReadyStateChange = timelineAgent && hasEventListeners(eventNames().readystatechangeEvent); if (callTimelineAgentOnReadyStateChange) timelineAgent->willChangeXHRReadyState(m_url.string(), m_state); #endif if (m_async || (m_state <= OPENED || m_state == DONE)) m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().readystatechangeEvent), m_state == DONE ? FlushProgressEvent : DoNotFlushProgressEvent); #if ENABLE(INSPECTOR) if (callTimelineAgentOnReadyStateChange && (timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()))) timelineAgent->didChangeXHRReadyState(); #endif if (m_state == DONE && !m_error) { #if ENABLE(INSPECTOR) timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()); bool callTimelineAgentOnLoad = timelineAgent && hasEventListeners(eventNames().loadEvent); if (callTimelineAgentOnLoad) timelineAgent->willLoadXHR(m_url.string()); #endif m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().loadEvent)); #if ENABLE(INSPECTOR) if (callTimelineAgentOnLoad && (timelineAgent = InspectorTimelineAgent::retrieve(scriptExecutionContext()))) timelineAgent->didLoadXHR(); #endif } }
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 #if ENABLE(WEB_REPLAY) m_agents.append(std::make_unique<InspectorReplayAgent>(m_instrumentingAgents.get(), pageAgent)); #endif auto domStorageAgentPtr = std::make_unique<InspectorDOMStorageAgent>(m_instrumentingAgents.get(), m_pageAgent); InspectorDOMStorageAgent* domStorageAgent = domStorageAgentPtr.get(); m_agents.append(std::move(domStorageAgentPtr)); auto timelineAgentPtr = std::make_unique<InspectorTimelineAgent>(m_instrumentingAgents.get(), pageAgent, InspectorTimelineAgent::PageInspector, inspectorClient); InspectorTimelineAgent* timelineAgent = timelineAgentPtr.get(); m_agents.append(std::move(timelineAgentPtr)); 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 = std::make_unique<PageProfilerAgent>(m_instrumentingAgents.get(), &page); m_profilerAgent = profilerAgentPtr.get(); m_agents.append(std::move(profilerAgentPtr)); m_agents.append(std::make_unique<InspectorApplicationCacheAgent>(m_instrumentingAgents.get(), pageAgent)); m_agents.append(std::make_unique<InspectorWorkerAgent>(m_instrumentingAgents.get())); 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()); timelineAgent->setPageScriptDebugServer(&m_debuggerAgent->scriptDebugServer()); m_profilerAgent->setScriptDebugServer(&m_debuggerAgent->scriptDebugServer()); }