2007-12-06 Xan Lopez <xan@gnome.org>
[WebKit-https.git] / WebKit / gtk / WebCoreSupport / ChromeClientGtk.cpp
1 /*
2  * Copyright (C) 2007 Holger Hans Peter Freyther
3  * Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer. 
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution. 
14  * 3.  Neither the name of Apple, Inc. ("Apple") nor the names of
15  *     its contributors may be used to endorse or promote products derived
16  *     from this software without specific prior written permission. 
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #include "config.h"
31 #include "ChromeClientGtk.h"
32 #include "FloatRect.h"
33 #include "IntRect.h"
34 #include "PlatformString.h"
35 #include "CString.h"
36 #include "HitTestResult.h"
37 #include "KURL.h"
38 #include "webkitwebview.h"
39 #include "webkitprivate.h"
40 #include "NotImplemented.h"
41 #include "WindowFeatures.h"
42
43 using namespace WebCore;
44
45 namespace WebKit {
46 ChromeClient::ChromeClient(WebKitWebView* webView)
47     : m_webView(webView)
48 {
49 }
50
51 void ChromeClient::chromeDestroyed()
52 {
53     notImplemented();
54 }
55
56 FloatRect ChromeClient::windowRect()
57 {
58     notImplemented();
59     return FloatRect();
60 }
61
62 void ChromeClient::setWindowRect(const FloatRect& r)
63 {
64     notImplemented();
65 }
66
67 FloatRect ChromeClient::pageRect()
68 {
69     notImplemented();
70     return FloatRect();
71 }
72
73 float ChromeClient::scaleFactor()
74 {
75     notImplemented();
76     return 1.0;
77 }
78
79 void ChromeClient::focus()
80 {
81     notImplemented();
82 }
83
84 void ChromeClient::unfocus()
85 {
86     notImplemented();
87 }
88
89 Page* ChromeClient::createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures& features)
90 {
91     if (features.dialog) {
92         notImplemented();
93         return 0;
94     } else {
95         /* TODO: FrameLoadRequest is not used */
96         WebKitWebView* webView = WEBKIT_WEB_VIEW_GET_CLASS(m_webView)->create_web_view(m_webView);
97         if (!webView)
98             return 0;
99
100         WebKitWebViewPrivate* privateData = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
101         return privateData->corePage;
102     }
103 }
104
105 void ChromeClient::show()
106 {
107     notImplemented();
108 }
109
110 bool ChromeClient::canRunModal()
111 {
112     notImplemented();
113     return false;
114 }
115
116 void ChromeClient::runModal()
117 {
118     notImplemented();
119 }
120
121 void ChromeClient::setToolbarsVisible(bool)
122 {
123     notImplemented();
124 }
125
126 bool ChromeClient::toolbarsVisible()
127 {
128     notImplemented();
129     return false;
130 }
131
132 void ChromeClient::setStatusbarVisible(bool)
133 {
134     notImplemented();
135 }
136
137 bool ChromeClient::statusbarVisible()
138 {
139     notImplemented();
140     return false;
141 }
142
143 void ChromeClient::setScrollbarsVisible(bool)
144 {
145     notImplemented();
146 }
147
148 bool ChromeClient::scrollbarsVisible() {
149     notImplemented();
150     return false;
151 }
152
153 void ChromeClient::setMenubarVisible(bool)
154 {
155     notImplemented();
156 }
157
158 bool ChromeClient::menubarVisible()
159 {
160     notImplemented();
161     return false;
162 }
163
164 void ChromeClient::setResizable(bool)
165 {
166     notImplemented();
167 }
168
169 void ChromeClient::closeWindowSoon()
170 {
171     notImplemented();
172 }
173
174 bool ChromeClient::canTakeFocus(FocusDirection)
175 {
176     notImplemented();
177     return true;
178 }
179
180 void ChromeClient::takeFocus(FocusDirection)
181 {
182     notImplemented();
183 }
184
185 bool ChromeClient::canRunBeforeUnloadConfirmPanel()
186 {
187     notImplemented();
188     return false;
189 }
190
191 bool ChromeClient::runBeforeUnloadConfirmPanel(const WebCore::String&, WebCore::Frame*)
192 {
193     notImplemented();
194     return false;
195 }
196
197 void ChromeClient::addMessageToConsole(const WebCore::String& message, unsigned int lineNumber, const WebCore::String& sourceId)
198 {
199     gboolean retval;
200     g_signal_emit_by_name(m_webView, "console-message", message.utf8().data(), lineNumber, sourceId.utf8().data(), &retval);
201 }
202
203 void ChromeClient::runJavaScriptAlert(Frame* frame, const String& message)
204 {
205     gboolean retval;
206     g_signal_emit_by_name(m_webView, "script-alert", kit(frame), message.utf8().data(), &retval);
207 }
208
209 bool ChromeClient::runJavaScriptConfirm(Frame* frame, const String& message)
210 {
211     gboolean retval;
212     gboolean didConfirm;
213     g_signal_emit_by_name(m_webView, "script-confirm", kit(frame), message.utf8().data(), &didConfirm, &retval);
214     return didConfirm == TRUE;
215 }
216
217 bool ChromeClient::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result)
218 {
219     gboolean retval;
220     gchar* value = 0;
221     g_signal_emit_by_name(m_webView, "script-prompt", kit(frame), message.utf8().data(), defaultValue.utf8().data(), &value, &retval);
222     if (value) {
223         result = String::fromUTF8(value);
224         g_free(value);
225         return true;
226     }
227     return false;
228 }
229
230 void ChromeClient::setStatusbarText(const String& string)
231 {
232     CString stringMessage = string.utf8();
233     g_signal_emit_by_name(m_webView, "status-bar-text-changed", stringMessage.data());
234 }
235
236 bool ChromeClient::shouldInterruptJavaScript()
237 {
238     notImplemented();
239     return false;
240 }
241
242 bool ChromeClient::tabsToLinks() const
243 {
244     return true;
245 }
246
247 IntRect ChromeClient::windowResizerRect() const
248 {
249     notImplemented();
250     return IntRect();
251 }
252
253 void ChromeClient::addToDirtyRegion(const IntRect&)
254 {
255     notImplemented();
256 }
257
258 void ChromeClient::scrollBackingStore(int dx, int dy, const IntRect& scrollViewRect, const IntRect& clipRect)
259 {
260     notImplemented();
261 }
262
263 void ChromeClient::updateBackingStore()
264 {
265     notImplemented();
266 }
267
268 void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags)
269 {
270     // check if the element is a link...
271     bool isLink = hit.isLiveLink();
272     if (isLink) {
273         KURL url = hit.absoluteLinkURL();
274         if (!url.isEmpty() && url != m_hoveredLinkURL) {
275             CString titleString = hit.title().utf8();
276             DeprecatedCString urlString = url.prettyURL().utf8();
277             g_signal_emit_by_name(m_webView, "hovering-over-link", titleString.data(), urlString.data());
278             m_hoveredLinkURL = url;
279         }
280     } else if (!isLink && !m_hoveredLinkURL.isEmpty()) {
281         g_signal_emit_by_name(m_webView, "hovering-over-link", 0, 0);
282         m_hoveredLinkURL = KURL();
283     }
284 }
285
286 void ChromeClient::setToolTip(const String& toolTip)
287 {
288 #if GTK_CHECK_VERSION(2,12,0)
289     if (toolTip.isEmpty())
290         g_object_set(G_OBJECT(m_webView), "has-tooltip", FALSE, NULL);
291     else
292         gtk_widget_set_tooltip_text(GTK_WIDGET(m_webView), toolTip.utf8().data());
293 #else
294     // TODO: Support older GTK+ versions
295     // See http://bugs.webkit.org/show_bug.cgi?id=15793
296     notImplemented();
297 #endif
298 }
299
300 void ChromeClient::print(Frame*)
301 {
302     notImplemented();
303 }
304
305 unsigned long long ChromeClient::requestQuotaIncreaseForNewDatabase(Frame*, const SecurityOriginData&, const String&, unsigned long long)
306 {
307     notImplemented();
308     return 0;
309 }
310
311 unsigned long long ChromeClient::requestQuotaIncreaseForDatabaseOperation(Frame*, const SecurityOriginData&, const String&, unsigned long long)
312 {
313     notImplemented();
314     return 0;
315 }
316         
317 }