Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
[WebKit-https.git] / Source / WebKit / efl / WebCoreSupport / InspectorClientEfl.cpp
1 /*
2  *  Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
3  *  Copyright (C) 2009-2010 ProFUSION embedded systems
4  *  Copyright (C) 2009-2010 Samsung Electronics
5  *
6  *  This library is free software; you can redistribute it and/or
7  *  modify it under the terms of the GNU Lesser General Public
8  *  License as published by the Free Software Foundation; either
9  *  version 2 of the License, or (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  *  Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public
17  *  License along with this library; if not, write to the Free Software
18  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #include "config.h"
22 #include "InspectorClientEfl.h"
23
24 #if ENABLE(INSPECTOR)
25
26 #include "EflInspectorUtilities.h"
27 #include "InspectorController.h"
28 #include "MainFrame.h"
29 #include "NotImplemented.h"
30 #include "ewk_view_private.h"
31 #include <inspector/InspectorAgentBase.h>
32 #include <wtf/text/CString.h>
33 #include <wtf/text/WTFString.h>
34
35 namespace WebCore {
36
37 static void notifyInspectorDestroy(void* userData, Evas_Object* /*webview*/, void* /*eventInfo*/)
38 {
39     InspectorFrontendClientEfl* inspectorFrontendClient = static_cast<InspectorFrontendClientEfl*>(userData);
40     if (inspectorFrontendClient)
41         inspectorFrontendClient->destroyInspectorWindow(true);
42 }
43
44 static void invalidateView(Evas_Object* webView)
45 {
46     Evas_Coord width, height;
47     Evas_Object* mainFrame = ewk_view_frame_main_get(webView);
48     if (mainFrame && ewk_frame_contents_size_get(mainFrame, &width, &height)) {
49         WebCore::Page* page = EWKPrivate::corePage(webView);
50         if (page)
51             page->mainFrame().view()->invalidateRect(WebCore::IntRect(0, 0, width, height));
52     }
53 }
54
55 class InspectorFrontendSettingsEfl : public InspectorFrontendClientLocal::Settings {
56 public:
57     virtual String getProperty(const String& /*name*/)
58     {
59         notImplemented();
60         return String();
61     }
62
63     virtual void setProperty(const String& /*name*/, const String& /*value*/)
64     {
65         notImplemented();
66     }
67 };
68
69 InspectorClientEfl::InspectorClientEfl(Evas_Object* webView)
70     : m_inspectedView(webView)
71     , m_inspectorView(0)
72     , m_frontendClient(0)
73 {
74 }
75
76 InspectorClientEfl::~InspectorClientEfl()
77 {
78     if (m_frontendClient) {
79         m_frontendClient->disconnectInspectorClient();
80         m_frontendClient = 0;
81     }
82 }
83
84 void InspectorClientEfl::inspectorDestroyed()
85 {
86     closeInspectorFrontend();
87     delete this;
88 }
89
90 InspectorFrontendChannel* InspectorClientEfl::openInspectorFrontend(InspectorController*)
91 {
92     evas_object_smart_callback_call(m_inspectedView, "inspector,view,create", 0);
93
94     Evas_Object* inspectorView = ewk_view_inspector_view_get(m_inspectedView);
95     if (!inspectorView)
96         return 0;
97
98     m_inspectorView = inspectorView;
99
100     String inspectorUri = inspectorFilesPath() + "/Main.html";
101     ewk_view_uri_set(m_inspectorView, inspectorUri.utf8().data());
102
103     auto frontendClient = std::make_unique<InspectorFrontendClientEfl>(m_inspectedView, m_inspectorView, this);
104     m_frontendClient = frontendClient.get();
105
106     InspectorController& controller = EWKPrivate::corePage(m_inspectorView)->inspectorController();
107     controller.setInspectorFrontendClient(std::move(frontendClient));
108     
109     return this;
110 }
111
112 void InspectorClientEfl::closeInspectorFrontend()
113 {
114     if (m_frontendClient)
115         m_frontendClient->destroyInspectorWindow(false);
116 }
117
118 void InspectorClientEfl::bringFrontendToFront()
119 {
120     m_frontendClient->bringToFront();
121 }
122
123 void InspectorClientEfl::highlight()
124 {
125     invalidateView(m_inspectedView);
126 }
127
128 void InspectorClientEfl::hideHighlight()
129 {
130     invalidateView(m_inspectedView);
131 }
132
133 bool InspectorClientEfl::sendMessageToFrontend(const String& message)
134 {
135     Page* frontendPage = EWKPrivate::corePage(m_inspectorView);
136     return doDispatchMessageOnFrontendPage(frontendPage, message);
137 }
138
139 void InspectorClientEfl::releaseFrontendPage()
140 {
141     m_inspectorView = 0;
142     m_frontendClient = 0;
143 }
144
145 String InspectorClientEfl::inspectorFilesPath()
146 {
147     return "file://" + inspectorResourcePath();
148 }
149
150 InspectorFrontendClientEfl::InspectorFrontendClientEfl(Evas_Object* inspectedView, Evas_Object* inspectorView, InspectorClientEfl* inspectorClient)
151     : InspectorFrontendClientLocal(&EWKPrivate::corePage(inspectedView)->inspectorController(), EWKPrivate::corePage(inspectorView), adoptPtr(new InspectorFrontendSettingsEfl()))
152     , m_inspectedView(inspectedView)
153     , m_inspectorView(inspectorView)
154     , m_inspectorClient(inspectorClient)
155 {
156     evas_object_smart_callback_add(m_inspectorView, "inspector,view,destroy", notifyInspectorDestroy, this);
157 }
158
159 InspectorFrontendClientEfl::~InspectorFrontendClientEfl()
160 {
161     evas_object_smart_callback_del(m_inspectorView, "inspector,view,destroy", notifyInspectorDestroy);
162
163     if (m_inspectorClient) {
164         m_inspectorClient->releaseFrontendPage();
165         m_inspectorClient = 0;
166     }
167 }
168
169 String InspectorFrontendClientEfl::localizedStringsURL()
170 {
171     return m_inspectorClient->inspectorFilesPath() + "/localizedStrings.js";
172 }
173
174 void InspectorFrontendClientEfl::bringToFront()
175 {
176     evas_object_focus_set(m_inspectorView, true);
177 }
178
179 void InspectorFrontendClientEfl::closeWindow()
180 {
181     destroyInspectorWindow(true);
182 }
183
184 void InspectorFrontendClientEfl::inspectedURLChanged(const String&)
185 {
186     notImplemented();
187 }
188
189 void InspectorFrontendClientEfl::attachWindow(DockSide)
190 {
191     notImplemented();
192 }
193
194 void InspectorFrontendClientEfl::detachWindow()
195 {
196     notImplemented();
197 }
198
199 void InspectorFrontendClientEfl::setAttachedWindowHeight(unsigned)
200 {
201     notImplemented();
202 }
203
204 void InspectorFrontendClientEfl::setAttachedWindowWidth(unsigned)
205 {
206     notImplemented();
207 }
208
209 void InspectorFrontendClientEfl::setToolbarHeight(unsigned)
210 {
211     notImplemented();
212 }
213
214 void InspectorFrontendClientEfl::destroyInspectorWindow(bool notifyInspectorController)
215 {
216     if (notifyInspectorController)
217         EWKPrivate::corePage(m_inspectedView)->inspectorController().disconnectFrontend(Inspector::InspectorDisconnectReason::InspectorDestroyed);
218
219     if (m_inspectorClient)
220         m_inspectorClient->releaseFrontendPage();
221
222     evas_object_smart_callback_call(m_inspectedView, "inspector,view,close", m_inspectorView);
223 }
224
225 }
226 #endif