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