| OLD | NEW |
| 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file was forked off the Mac port. | 5 // This file was forked off the Mac port. |
| 6 | 6 |
| 7 #include "webkit/tools/test_shell/test_webview_delegate.h" | 7 #include "webkit/tools/test_shell/test_webview_delegate.h" |
| 8 | 8 |
| 9 #include <gtk/gtk.h> | 9 #include <gtk/gtk.h> |
| 10 #include <gdk/gdkx.h> | 10 #include <gdk/gdkx.h> |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 reinterpret_cast<const guchar*>(selection.data()), | 75 reinterpret_cast<const guchar*>(selection.data()), |
| 76 selection.length()); | 76 selection.length()); |
| 77 } else { | 77 } else { |
| 78 gtk_selection_data_set_text(selection_data, selection.data(), | 78 gtk_selection_data_set_text(selection_data, selection.data(), |
| 79 selection.length()); | 79 selection.length()); |
| 80 } | 80 } |
| 81 } | 81 } |
| 82 | 82 |
| 83 } // namespace | 83 } // namespace |
| 84 | 84 |
| 85 // WebViewDelegate ----------------------------------------------------------- | 85 // WebViewDelegate ------------------------------------------------------------ |
| 86 | |
| 87 WebPluginDelegate* TestWebViewDelegate::CreatePluginDelegate( | |
| 88 WebView* webview, | |
| 89 const GURL& url, | |
| 90 const std::string& mime_type, | |
| 91 const std::string& clsid, | |
| 92 std::string* actual_mime_type) { | |
| 93 bool allow_wildcard = true; | |
| 94 WebPluginInfo info; | |
| 95 if (!NPAPI::PluginList::Singleton()->GetPluginInfo(url, mime_type, clsid, | |
| 96 allow_wildcard, &info, | |
| 97 actual_mime_type)) | |
| 98 return NULL; | |
| 99 | |
| 100 const std::string& mtype = | |
| 101 (actual_mime_type && !actual_mime_type->empty()) ? *actual_mime_type | |
| 102 : mime_type; | |
| 103 // TODO(evanm): we probably shouldn't be doing this mapping to X ids at | |
| 104 // this level. | |
| 105 GdkNativeWindow plugin_parent = | |
| 106 GDK_WINDOW_XWINDOW(shell_->webViewHost()->view_handle()->window); | |
| 107 | |
| 108 return WebPluginDelegateImpl::Create(info.path, mtype, plugin_parent); | |
| 109 } | |
| 110 | |
| 111 void TestWebViewDelegate::CreatedPluginWindow(gfx::PluginWindowHandle id) { | |
| 112 shell_->webViewHost()->CreatePluginContainer(id); | |
| 113 } | |
| 114 | |
| 115 void TestWebViewDelegate::WillDestroyPluginWindow(gfx::PluginWindowHandle id) { | |
| 116 shell_->webViewHost()->DestroyPluginContainer(id); | |
| 117 } | |
| 118 | 86 |
| 119 void TestWebViewDelegate::ShowJavaScriptAlert(const std::wstring& message) { | 87 void TestWebViewDelegate::ShowJavaScriptAlert(const std::wstring& message) { |
| 120 GtkWidget* dialog = gtk_message_dialog_new( | 88 GtkWidget* dialog = gtk_message_dialog_new( |
| 121 shell_->mainWnd(), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, | 89 shell_->mainWnd(), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, |
| 122 GTK_BUTTONS_OK, "%s", WideToUTF8(message).c_str()); | 90 GTK_BUTTONS_OK, "%s", WideToUTF8(message).c_str()); |
| 123 gtk_window_set_title(GTK_WINDOW(dialog), "JavaScript Alert"); | 91 gtk_window_set_title(GTK_WINDOW(dialog), "JavaScript Alert"); |
| 124 gtk_dialog_run(GTK_DIALOG(dialog)); // Runs a nested message loop. | 92 gtk_dialog_run(GTK_DIALOG(dialog)); // Runs a nested message loop. |
| 125 gtk_widget_destroy(dialog); | 93 gtk_widget_destroy(dialog); |
| 126 } | 94 } |
| 127 | 95 |
| 96 // WebWidgetClient ------------------------------------------------------------ |
| 97 |
| 128 void TestWebViewDelegate::show(WebNavigationPolicy policy) { | 98 void TestWebViewDelegate::show(WebNavigationPolicy policy) { |
| 129 WebWidgetHost* host = GetWidgetHost(); | 99 WebWidgetHost* host = GetWidgetHost(); |
| 130 GtkWidget* drawing_area = host->view_handle(); | 100 GtkWidget* drawing_area = host->view_handle(); |
| 131 GtkWidget* window = | 101 GtkWidget* window = |
| 132 gtk_widget_get_parent(gtk_widget_get_parent(drawing_area)); | 102 gtk_widget_get_parent(gtk_widget_get_parent(drawing_area)); |
| 133 gtk_widget_show_all(window); | 103 gtk_widget_show_all(window); |
| 134 } | 104 } |
| 135 | 105 |
| 136 void TestWebViewDelegate::closeWidgetSoon() { | 106 void TestWebViewDelegate::closeWidgetSoon() { |
| 137 if (this == shell_->delegate()) { | 107 if (this == shell_->delegate()) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 return WebRect(x, y, width, height); | 183 return WebRect(x, y, width, height); |
| 214 } | 184 } |
| 215 return WebRect(); | 185 return WebRect(); |
| 216 } | 186 } |
| 217 | 187 |
| 218 WebRect TestWebViewDelegate::windowResizerRect() { | 188 WebRect TestWebViewDelegate::windowResizerRect() { |
| 219 // Not necessary on Linux. | 189 // Not necessary on Linux. |
| 220 return WebRect(); | 190 return WebRect(); |
| 221 } | 191 } |
| 222 | 192 |
| 223 void TestWebViewDelegate::DidMovePlugin(const WebPluginGeometry& move) { | 193 void TestWebViewDelegate::runModal() { |
| 194 NOTIMPLEMENTED(); |
| 195 } |
| 196 |
| 197 // WebPluginPageDelegate ------------------------------------------------------ |
| 198 |
| 199 webkit_glue::WebPluginDelegate* TestWebViewDelegate::CreatePluginDelegate( |
| 200 const GURL& url, |
| 201 const std::string& mime_type, |
| 202 const std::string& clsid, |
| 203 std::string* actual_mime_type) { |
| 204 bool allow_wildcard = true; |
| 205 WebPluginInfo info; |
| 206 if (!NPAPI::PluginList::Singleton()->GetPluginInfo(url, mime_type, clsid, |
| 207 allow_wildcard, &info, |
| 208 actual_mime_type)) |
| 209 return NULL; |
| 210 |
| 211 const std::string& mtype = |
| 212 (actual_mime_type && !actual_mime_type->empty()) ? *actual_mime_type |
| 213 : mime_type; |
| 214 // TODO(evanm): we probably shouldn't be doing this mapping to X ids at |
| 215 // this level. |
| 216 GdkNativeWindow plugin_parent = |
| 217 GDK_WINDOW_XWINDOW(shell_->webViewHost()->view_handle()->window); |
| 218 |
| 219 return WebPluginDelegateImpl::Create(info.path, mtype, plugin_parent); |
| 220 } |
| 221 |
| 222 void TestWebViewDelegate::CreatedPluginWindow( |
| 223 gfx::PluginWindowHandle id) { |
| 224 shell_->webViewHost()->CreatePluginContainer(id); |
| 225 } |
| 226 |
| 227 void TestWebViewDelegate::WillDestroyPluginWindow( |
| 228 gfx::PluginWindowHandle id) { |
| 229 shell_->webViewHost()->DestroyPluginContainer(id); |
| 230 } |
| 231 |
| 232 void TestWebViewDelegate::DidMovePlugin( |
| 233 const webkit_glue::WebPluginGeometry& move) { |
| 224 WebWidgetHost* host = GetWidgetHost(); | 234 WebWidgetHost* host = GetWidgetHost(); |
| 225 GtkPluginContainerManager* plugin_container_manager = | 235 GtkPluginContainerManager* plugin_container_manager = |
| 226 static_cast<WebViewHost*>(host)->plugin_container_manager(); | 236 static_cast<WebViewHost*>(host)->plugin_container_manager(); |
| 227 plugin_container_manager->MovePluginContainer(move); | 237 plugin_container_manager->MovePluginContainer(move); |
| 228 } | 238 } |
| 229 | 239 |
| 230 void TestWebViewDelegate::runModal() { | 240 // Public methods ------------------------------------------------------------- |
| 231 NOTIMPLEMENTED(); | |
| 232 } | |
| 233 | 241 |
| 234 void TestWebViewDelegate::UpdateSelectionClipboard(bool is_empty_selection) { | 242 void TestWebViewDelegate::UpdateSelectionClipboard(bool is_empty_selection) { |
| 235 if (is_empty_selection) | 243 if (is_empty_selection) |
| 236 return; | 244 return; |
| 237 | 245 |
| 238 GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); | 246 GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); |
| 239 // Put data on the X clipboard. This doesn't actually grab the text from | 247 // Put data on the X clipboard. This doesn't actually grab the text from |
| 240 // the HTML, it just registers a callback for when someone tries to paste. | 248 // the HTML, it just registers a callback for when someone tries to paste. |
| 241 GtkTargetList* target_list = gtk_target_list_new(NULL, 0); | 249 GtkTargetList* target_list = gtk_target_list_new(NULL, 0); |
| 242 gtk_target_list_add(target_list, GetTextHtmlAtom(), 0, TEXT_HTML); | 250 gtk_target_list_add(target_list, GetTextHtmlAtom(), 0, TEXT_HTML); |
| 243 gtk_target_list_add_text_targets(target_list, PLAIN_TEXT); | 251 gtk_target_list_add_text_targets(target_list, PLAIN_TEXT); |
| 244 | 252 |
| 245 gint num_targets = 0; | 253 gint num_targets = 0; |
| 246 GtkTargetEntry* targets = gtk_target_table_new_from_list(target_list, | 254 GtkTargetEntry* targets = gtk_target_table_new_from_list(target_list, |
| 247 &num_targets); | 255 &num_targets); |
| 248 gtk_clipboard_set_with_data(clipboard, targets, num_targets, | 256 gtk_clipboard_set_with_data(clipboard, targets, num_targets, |
| 249 SelectionClipboardGetContents, NULL, | 257 SelectionClipboardGetContents, NULL, |
| 250 shell_->webView()); | 258 shell_->webView()); |
| 251 gtk_target_list_unref(target_list); | 259 gtk_target_list_unref(target_list); |
| 252 gtk_target_table_free(targets, num_targets); | 260 gtk_target_table_free(targets, num_targets); |
| 253 } | 261 } |
| 254 | 262 |
| 255 // Private methods ----------------------------------------------------------- | 263 // Private methods ------------------------------------------------------------ |
| 256 | 264 |
| 257 void TestWebViewDelegate::SetPageTitle(const std::wstring& title) { | 265 void TestWebViewDelegate::SetPageTitle(const std::wstring& title) { |
| 258 gtk_window_set_title(GTK_WINDOW(shell_->mainWnd()), | 266 gtk_window_set_title(GTK_WINDOW(shell_->mainWnd()), |
| 259 ("Test Shell - " + WideToUTF8(title)).c_str()); | 267 ("Test Shell - " + WideToUTF8(title)).c_str()); |
| 260 } | 268 } |
| 261 | 269 |
| 262 void TestWebViewDelegate::SetAddressBarURL(const GURL& url) { | 270 void TestWebViewDelegate::SetAddressBarURL(const GURL& url) { |
| 263 gtk_entry_set_text(GTK_ENTRY(shell_->editWnd()), url.spec().c_str()); | 271 gtk_entry_set_text(GTK_ENTRY(shell_->editWnd()), url.spec().c_str()); |
| 264 } | 272 } |
| OLD | NEW |