1e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke/*
2e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Copyright (C) 2010 Google Inc. All rights reserved.
3e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *
4e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Redistribution and use in source and binary forms, with or without
5e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * modification, are permitted provided that the following conditions are
6e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * met:
7e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *
8e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *     * Redistributions of source code must retain the above copyright
9e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * notice, this list of conditions and the following disclaimer.
10e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *     * Redistributions in binary form must reproduce the above
11e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * copyright notice, this list of conditions and the following disclaimer
12e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * in the documentation and/or other materials provided with the
13e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * distribution.
14e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *     * Neither the name of Google Inc. nor the names of its
15e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * contributors may be used to endorse or promote products derived from
16e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * this software without specific prior written permission.
17e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *
18e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke */
30e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
31e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "config.h"
32e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "DRTDevToolsClient.h"
33e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
34e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "DRTDevToolsAgent.h"
35e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
36a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebDevToolsAgent.h"
37a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebDevToolsFrontend.h"
38a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebFrame.h"
39a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebScriptSource.h"
40a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebView.h"
41e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "webkit/support/webkit_support.h"
42e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
43e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeusing namespace WebKit;
44e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
45e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeDRTDevToolsClient::DRTDevToolsClient(DRTDevToolsAgent* agent, WebView* webView)
46a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    : m_webView(webView)
47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    , m_drtDevToolsAgent(agent)
48e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
49e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    m_webDevToolsFrontend.set(WebDevToolsFrontend::create(m_webView,
50e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke                                                          this,
51e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke                                                          WebString::fromUTF8("en-US")));
52e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    m_drtDevToolsAgent->attach(this);
53e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
54e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
55e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeDRTDevToolsClient::~DRTDevToolsClient()
56e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
57e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // There is a chance that the page will be destroyed at detach step of
58e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // m_drtDevToolsAgent and we should clean pending requests a bit earlier.
595abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_taskList.revokeAll();
60e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    if (m_drtDevToolsAgent)
61dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        m_drtDevToolsAgent->detach();
62e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
63e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
64dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid DRTDevToolsClient::reset()
65dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    m_taskList.revokeAll();
67dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
68dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
69dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid DRTDevToolsClient::sendFrontendLoaded() {
70dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    if (m_drtDevToolsAgent)
71dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        m_drtDevToolsAgent->frontendLoaded();
72dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
73dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid DRTDevToolsClient::sendMessageToBackend(const WebString& data)
75e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
76e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    if (m_drtDevToolsAgent)
7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_drtDevToolsAgent->asyncCall(data);
78e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
79e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
80e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid DRTDevToolsClient::sendDebuggerCommandToAgent(const WebString& command)
81e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
82e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    WebDevToolsAgent::executeDebuggerCommand(command, 1);
83e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
84e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
85e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid DRTDevToolsClient::activateWindow()
86e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
87e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // Not implemented.
88e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
89e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
90e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid DRTDevToolsClient::closeWindow()
91e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
92e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // Not implemented.
93e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
94e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
95e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid DRTDevToolsClient::dockWindow()
96e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
97e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // Not implemented.
98e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
99e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
100e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid DRTDevToolsClient::undockWindow()
101e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
102e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // Not implemented.
103e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
104e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
10581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid DRTDevToolsClient::asyncCall(const WebString& args)
106e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
1075abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    postTask(new AsyncCallTask(this, args));
108e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
109e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
11081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid DRTDevToolsClient::call(const WebString& args)
111e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
11281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_webDevToolsFrontend->dispatchOnInspectorFrontend(args);
113e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
114e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
115