1 /*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #include "config.h"
27 #include "WebInspectorProxy.h"
28
29 #if ENABLE(INSPECTOR)
30
31 #include "WebInspectorMessages.h"
32 #include "WebPageProxy.h"
33 #include "WebPageCreationParameters.h"
34 #include "WebProcessProxy.h"
35 #include "WebPageGroup.h"
36
37 #if PLATFORM(WIN)
38 #include "WebView.h"
39 #endif
40
41 #include <WebCore/NotImplemented.h>
42
43 using namespace WebCore;
44
45 namespace WebKit {
46
inspectorPageGroup()47 WebPageGroup* WebInspectorProxy::inspectorPageGroup()
48 {
49 static WebPageGroup* pageGroup = WebPageGroup::create("__WebInspectorPageGroup__", false, false).leakRef();
50 return pageGroup;
51 }
52
WebInspectorProxy(WebPageProxy * page)53 WebInspectorProxy::WebInspectorProxy(WebPageProxy* page)
54 : m_page(page)
55 , m_isVisible(false)
56 , m_isAttached(false)
57 , m_isDebuggingJavaScript(false)
58 , m_isProfilingJavaScript(false)
59 , m_isProfilingPage(false)
60 #if PLATFORM(WIN)
61 , m_inspectorWindow(0)
62 #endif
63 {
64 }
65
~WebInspectorProxy()66 WebInspectorProxy::~WebInspectorProxy()
67 {
68 }
69
invalidate()70 void WebInspectorProxy::invalidate()
71 {
72 m_page->close();
73 platformClose();
74
75 m_page = 0;
76
77 m_isVisible = false;
78 m_isDebuggingJavaScript = false;
79 m_isProfilingJavaScript = false;
80 m_isProfilingPage = false;
81 }
82
83 // Public APIs
show()84 void WebInspectorProxy::show()
85 {
86 if (!m_page)
87 return;
88
89 m_page->process()->send(Messages::WebInspector::Show(), m_page->pageID());
90 }
91
close()92 void WebInspectorProxy::close()
93 {
94 if (!m_page)
95 return;
96
97 m_page->process()->send(Messages::WebInspector::Close(), m_page->pageID());
98 }
99
showConsole()100 void WebInspectorProxy::showConsole()
101 {
102 if (!m_page)
103 return;
104
105 m_page->process()->send(Messages::WebInspector::ShowConsole(), m_page->pageID());
106 }
107
attach()108 void WebInspectorProxy::attach()
109 {
110 notImplemented();
111 }
112
detach()113 void WebInspectorProxy::detach()
114 {
115 notImplemented();
116 }
117
toggleJavaScriptDebugging()118 void WebInspectorProxy::toggleJavaScriptDebugging()
119 {
120 if (!m_page)
121 return;
122
123 if (m_isDebuggingJavaScript)
124 m_page->process()->send(Messages::WebInspector::StopJavaScriptDebugging(), m_page->pageID());
125 else
126 m_page->process()->send(Messages::WebInspector::StartJavaScriptDebugging(), m_page->pageID());
127
128 // FIXME: have the WebProcess notify us on state changes.
129 m_isDebuggingJavaScript = !m_isDebuggingJavaScript;
130 }
131
toggleJavaScriptProfiling()132 void WebInspectorProxy::toggleJavaScriptProfiling()
133 {
134 if (!m_page)
135 return;
136
137 if (m_isProfilingJavaScript)
138 m_page->process()->send(Messages::WebInspector::StopJavaScriptProfiling(), m_page->pageID());
139 else
140 m_page->process()->send(Messages::WebInspector::StartJavaScriptProfiling(), m_page->pageID());
141
142 // FIXME: have the WebProcess notify us on state changes.
143 m_isProfilingJavaScript = !m_isProfilingJavaScript;
144 }
145
togglePageProfiling()146 void WebInspectorProxy::togglePageProfiling()
147 {
148 if (!m_page)
149 return;
150
151 if (m_isProfilingPage)
152 m_page->process()->send(Messages::WebInspector::StopPageProfiling(), m_page->pageID());
153 else
154 m_page->process()->send(Messages::WebInspector::StartPageProfiling(), m_page->pageID());
155
156 // FIXME: have the WebProcess notify us on state changes.
157 m_isProfilingPage = !m_isProfilingPage;
158 }
159
isInspectorPage(WebPageProxy * page)160 bool WebInspectorProxy::isInspectorPage(WebPageProxy* page)
161 {
162 return page->pageGroup() == inspectorPageGroup();
163 }
164
165 // Called by WebInspectorProxy messages
createInspectorPage(uint64_t & inspectorPageID,WebPageCreationParameters & inspectorPageParameters)166 void WebInspectorProxy::createInspectorPage(uint64_t& inspectorPageID, WebPageCreationParameters& inspectorPageParameters)
167 {
168 inspectorPageID = 0;
169
170 if (!m_page)
171 return;
172
173 WebPageProxy* inspectorPage = platformCreateInspectorPage();
174 ASSERT(inspectorPage);
175 if (!inspectorPage)
176 return;
177
178 inspectorPageID = inspectorPage->pageID();
179 inspectorPageParameters = inspectorPage->creationParameters();
180
181 inspectorPage->loadURL(inspectorPageURL());
182 }
183
didLoadInspectorPage()184 void WebInspectorProxy::didLoadInspectorPage()
185 {
186 m_isVisible = true;
187
188 platformOpen();
189 }
190
didClose()191 void WebInspectorProxy::didClose()
192 {
193 platformClose();
194
195 m_isVisible = false;
196 }
197
inspectedURLChanged(const String & urlString)198 void WebInspectorProxy::inspectedURLChanged(const String& urlString)
199 {
200 platformInspectedURLChanged(urlString);
201 }
202
203 } // namespace WebKit
204
205 #endif // ENABLE(INSPECTOR)
206