• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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