18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 22fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2011 Google Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 52fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * modification, are permitted provided that the following conditions are 62fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 82fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * * Redistributions of source code must retain the above copyright 92fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * notice, this list of conditions and the following disclaimer. 102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * * Redistributions in binary form must reproduce the above 112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * copyright notice, this list of conditions and the following disclaimer 122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * in the documentation and/or other materials provided with the 132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * distribution. 142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * * Neither the name of Google Inc. nor the names of its 152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * contributors may be used to endorse or promote products derived from 162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * this software without specific prior written permission. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "InspectorController.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(INSPECTOR) 35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsContext.h" 388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#include "InjectedScriptHost.h" 392bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "InjectedScriptManager.h" 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "InspectorAgent.h" 410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "InspectorBackendDispatcher.h" 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorBrowserDebuggerAgent.h" 43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "InspectorDebuggerAgent.h" 442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "InspectorClient.h" 452bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "InspectorDOMAgent.h" 465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "InspectorFrontend.h" 475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "InspectorFrontendClient.h" 48a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "InspectorInstrumentation.h" 492bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "InspectorProfilerAgent.h" 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorTimelineAgent.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "ScriptObject.h" 538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "Settings.h" 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 572fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockInspectorController::InspectorController(Page* page, InspectorClient* inspectorClient) 582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : m_injectedScriptManager(InjectedScriptManager::createForPage()) 592bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_inspectorAgent(new InspectorAgent(page, inspectorClient, m_injectedScriptManager.get())) 602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block , m_inspectorClient(inspectorClient) 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_openingFrontend(false) 622bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_startUserInitiatedDebuggingWhenFrontedIsConnected(false) 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectInspectorController::~InspectorController() 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 702fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient> inspectorFrontendClient) 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorFrontendClient = inspectorFrontendClient; 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 752fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool InspectorController::hasInspectorFrontendClient() const 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return m_inspectorFrontendClient; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid InspectorController::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) 81058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu{ 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (world != mainThreadNormalWorld()) 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // If the page is supposed to serve as InspectorFrontend notify inspector frontend 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // client that it's cleared so that the client can expose inspector bindings. 872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_inspectorFrontendClient && frame == m_inspectorAgent->inspectedPage()->mainFrame()) 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_inspectorFrontendClient->windowObjectCleared(); 89058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu} 90058ccc7ba0a4d59b9f6e92808332aa9895425fc7Andrei Popescu 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::startTimelineProfiler() 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorString error; 9481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_inspectorAgent->timelineAgent()->start(&error); 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 96bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 972fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::stopTimelineProfiler() 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorString error; 10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_inspectorAgent->timelineAgent()->stop(&error); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 103dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid InspectorController::connectFrontend() 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_openingFrontend = false; 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorFrontend = new InspectorFrontend(m_inspectorClient); 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block m_injectedScriptManager->injectedScriptHost()->setFrontend(m_inspectorFrontend.get()); 1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorAgent->setFrontend(m_inspectorFrontend.get()); 109967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 110a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!InspectorInstrumentation::hasFrontends()) 111967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch ScriptController::setCaptureCallStackForUncaughtExceptions(true); 112a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch InspectorInstrumentation::frontendCreated(); 1132bde8e466a4451c7319e3a072d118917957d6554Steve Block 1142bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(m_inspectorClient); 11554cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block m_inspectorBackendDispatcher = adoptRef(new InspectorBackendDispatcher( 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorClient, 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(OFFLINE_WEB_APPLICATIONS) 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->applicationCacheAgent(), 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1202bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 1212bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->browserDebuggerAgent(), 1222bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->cssAgent(), 1242bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->consoleAgent(), 1252bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->domAgent(), 1262bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 1272bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->domStorageAgent(), 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1292bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DATABASE) 1302bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->databaseAgent(), 1312bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1322bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->debuggerAgent(), 1342bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->resourceAgent(), 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->pageAgent(), 1372bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 1382bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->profilerAgent(), 1392bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1402bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->runtimeAgent(), 14154cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block m_inspectorAgent->timelineAgent())); 1422bde8e466a4451c7319e3a072d118917957d6554Steve Block 1432bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_startUserInitiatedDebuggingWhenFrontedIsConnected) { 1442bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorFrontend->inspector()->startUserInitiatedDebugging(); 1452bde8e466a4451c7319e3a072d118917957d6554Steve Block m_startUserInitiatedDebuggingWhenFrontedIsConnected = false; 1462bde8e466a4451c7319e3a072d118917957d6554Steve Block } 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid InspectorController::disconnectFrontend() 1505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!m_inspectorFrontend) 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 15354cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block m_inspectorBackendDispatcher->clearFrontend(); 1542bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorBackendDispatcher.clear(); 155a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorAgent->disconnectFrontend(); 1572bde8e466a4451c7319e3a072d118917957d6554Steve Block m_injectedScriptManager->injectedScriptHost()->clearFrontend(); 1582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorFrontend.clear(); 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 161a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch InspectorInstrumentation::frontendDeleted(); 162a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!InspectorInstrumentation::hasFrontends()) 163967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch ScriptController::setCaptureCallStackForUncaughtExceptions(false); 164967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1672fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::show() 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!enabled()) 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_openingFrontend) 173545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return; 174545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 1752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_inspectorFrontend) 17681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_inspectorFrontend->inspector()->bringToFront(); 1772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else { 1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_openingFrontend = true; 1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorClient->openInspectorFrontend(this); 1808a26975f9657a07318a10d481d7f332dad759325Ben Murdoch } 1818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::close() 184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!m_inspectorFrontend) 186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 18781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_inspectorFrontend->inspector()->disconnectFromBackend(); 1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block disconnectFrontend(); 189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 190231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::restoreInspectorStateFromCookie(const String& inspectorStateCookie) 192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(!m_inspectorFrontend); 1942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block connectFrontend(); 1952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorAgent->restoreInspectorStateFromCookie(inspectorStateCookie); 196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 197231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1982fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::evaluateForTestInFrontend(long callId, const String& script) 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 2002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorAgent->evaluateForTestInFrontend(callId, script); 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2032fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::drawNodeHighlight(GraphicsContext& context) const 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 2052bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->domAgent()->drawNodeHighlight(context); 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2082fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::showConsole() 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!enabled()) 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 2122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block show(); 2132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inspectorAgent->showConsole(); 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2162fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::inspect(Node* node) 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!enabled()) 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block show(); 222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2232bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->domAgent()->inspect(node); 224231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 225e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 2262fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool InspectorController::enabled() const 227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return m_inspectorAgent->enabled(); 229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2312fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPage* InspectorController::inspectedPage() const 232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return m_inspectorAgent->inspectedPage(); 234231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 235e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 2362fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool InspectorController::timelineProfilerEnabled() 237e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 23881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return m_inspectorAgent->timelineAgent()->started(); 23981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 24081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 24181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid InspectorController::setInspectorExtensionAPI(const String& source) 24281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 24381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_inspectorAgent->setInspectorExtensionAPI(source); 24481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 24581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid InspectorController::dispatchMessageFromFrontend(const String& message) 24781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 2482bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_inspectorBackendDispatcher) 2492bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorBackendDispatcher->dispatch(message); 25081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 25181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 25281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid InspectorController::hideHighlight() 25381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 25481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorString error; 2552bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->domAgent()->hideHighlight(&error); 256e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 257e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 2582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochNode* InspectorController::highlightedNode() const 2592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 2602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return m_inspectorAgent->domAgent()->highlightedNode(); 2612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(JAVASCRIPT_DEBUGGER) 2642fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::enableProfiler() 2658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 26681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorString error; 2672bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->profilerAgent()->enable(&error); 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2702fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::disableProfiler() 27168513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 27281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorString error; 2732bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->profilerAgent()->disable(&error); 27468513a70bcd92384395513322f1b801e7bf9c729Steve Block} 27568513a70bcd92384395513322f1b801e7bf9c729Steve Block 2762fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool InspectorController::profilerEnabled() 27768513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 2782bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_inspectorAgent->profilerAgent()->enabled(); 27968513a70bcd92384395513322f1b801e7bf9c729Steve Block} 28068513a70bcd92384395513322f1b801e7bf9c729Steve Block 2812fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool InspectorController::debuggerEnabled() 28268513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 28381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return m_inspectorAgent->debuggerAgent()->enabled(); 28468513a70bcd92384395513322f1b801e7bf9c729Steve Block} 28568513a70bcd92384395513322f1b801e7bf9c729Steve Block 2862fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::showAndEnableDebugger() 28768513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 28881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!enabled()) 28981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 29081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch show(); 2912bde8e466a4451c7319e3a072d118917957d6554Steve Block 2922bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_inspectorFrontend) 2932bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorFrontend->inspector()->startUserInitiatedDebugging(); 2942bde8e466a4451c7319e3a072d118917957d6554Steve Block else 2952bde8e466a4451c7319e3a072d118917957d6554Steve Block m_startUserInitiatedDebuggingWhenFrontedIsConnected = true; 29668513a70bcd92384395513322f1b801e7bf9c729Steve Block} 29768513a70bcd92384395513322f1b801e7bf9c729Steve Block 2982fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid InspectorController::disableDebugger() 2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 30081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_inspectorAgent->debuggerAgent()->disable(); 3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 303e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid InspectorController::startUserInitiatedProfiling() 3045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 3052bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->profilerAgent()->startUserInitiatedProfiling(); 3065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 3075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid InspectorController::stopUserInitiatedProfiling() 3095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 31081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!enabled()) 31181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 31281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch show(); 3132bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->profilerAgent()->stopUserInitiatedProfiling(); 3142bde8e466a4451c7319e3a072d118917957d6554Steve Block m_inspectorAgent->showProfilesPanel(); 31506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3172fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool InspectorController::isRecordingUserInitiatedProfile() const 3185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 3192bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_inspectorAgent->profilerAgent()->isRecordingUserInitiatedProfile(); 3205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 3215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 322967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid InspectorController::resume() 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (InspectorDebuggerAgent* debuggerAgent = m_inspectorAgent->debuggerAgent()) { 32581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorString error; 32681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch debuggerAgent->resume(&error); 32781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 329635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 33006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 33106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 333e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 334231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // ENABLE(INSPECTOR) 335