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