OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-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 #include <gtk/gtk.h> | 5 #include <gtk/gtk.h> |
6 | 6 |
7 #include "webkit/tools/test_shell/webview_host.h" | 7 #include "webkit/tools/test_shell/webview_host.h" |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/gfx/rect.h" | 10 #include "base/gfx/rect.h" |
11 #include "base/gfx/size.h" | 11 #include "base/gfx/size.h" |
12 #include "skia/ext/platform_canvas.h" | 12 #include "skia/ext/platform_canvas.h" |
13 #include "webkit/glue/plugins/gtk_plugin_container.h" | 13 #include "webkit/glue/plugins/gtk_plugin_container.h" |
14 #include "webkit/glue/webview.h" | 14 #include "webkit/glue/webview.h" |
15 | 15 |
16 // static | 16 // static |
17 WebViewHost* WebViewHost::Create(GtkWidget* parent_view, | 17 WebViewHost* WebViewHost::Create(GtkWidget* parent_view, |
18 WebViewDelegate* delegate, | 18 WebViewDelegate* delegate, |
19 const WebPreferences& prefs) { | 19 const WebPreferences& prefs) { |
20 WebViewHost* host = new WebViewHost(); | 20 WebViewHost* host = new WebViewHost(); |
21 | 21 |
22 host->view_ = WebWidgetHost::CreateWidget(parent_view, host); | 22 host->view_ = WebWidgetHost::CreateWidget(parent_view, host); |
| 23 host->plugin_container_host_.set_host_widget(host->view_); |
23 g_object_set_data(G_OBJECT(host->view_), "webwidgethost", host); | 24 g_object_set_data(G_OBJECT(host->view_), "webwidgethost", host); |
24 | 25 |
25 host->webwidget_ = WebView::Create(delegate, prefs); | 26 host->webwidget_ = WebView::Create(delegate, prefs); |
26 host->webwidget_->Layout(); | 27 host->webwidget_->Layout(); |
27 | 28 |
28 return host; | 29 return host; |
29 } | 30 } |
30 | 31 |
31 WebView* WebViewHost::webview() const { | 32 WebView* WebViewHost::webview() const { |
32 return static_cast<WebView*>(webwidget_); | 33 return static_cast<WebView*>(webwidget_); |
33 } | 34 } |
34 | 35 |
35 GdkNativeWindow WebViewHost::CreatePluginContainer() { | 36 GdkNativeWindow WebViewHost::CreatePluginContainer() { |
36 GtkWidget* plugin_container = gtk_plugin_container_new(); | 37 return plugin_container_host_.CreatePluginContainer(); |
37 g_signal_connect(G_OBJECT(plugin_container), "plug-removed", | |
38 G_CALLBACK(OnPlugRemovedThunk), this); | |
39 gtk_container_add(GTK_CONTAINER(view_handle()), plugin_container); | |
40 gtk_widget_show(plugin_container); | |
41 gtk_widget_realize(plugin_container); | |
42 | |
43 GdkNativeWindow id = gtk_socket_get_id(GTK_SOCKET(plugin_container)); | |
44 | |
45 native_window_to_widget_map_.insert(std::make_pair(id, plugin_container)); | |
46 | |
47 return id; | |
48 } | |
49 | |
50 GtkWidget* WebViewHost::MapIDToWidget(GdkNativeWindow id) { | |
51 NativeWindowToWidgetMap::const_iterator i = | |
52 native_window_to_widget_map_.find(id); | |
53 if (i != native_window_to_widget_map_.end()) | |
54 return i->second; | |
55 | |
56 LOG(ERROR) << "Request for widget host for unknown window id " << id; | |
57 | |
58 return NULL; | |
59 } | 38 } |
60 | 39 |
61 void WebViewHost::OnPluginWindowDestroyed(GdkNativeWindow id) { | 40 void WebViewHost::OnPluginWindowDestroyed(GdkNativeWindow id) { |
62 GtkWidget* plugin_container = MapIDToWidget(id); | 41 plugin_container_host_.DestroyPluginContainer(id); |
63 if (!plugin_container) | |
64 return; | |
65 | |
66 native_window_to_widget_map_.erase(id); | |
67 gtk_widget_destroy(plugin_container); | |
68 } | 42 } |
69 | |
70 gboolean WebViewHost::OnPlugRemoved(GtkSocket* socket) { | |
71 return TRUE; // Don't destroy our widget; we manage it ourselves. | |
72 } | |
73 | |
OLD | NEW |