| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/plugin/webplugin_proxy.h" | 5 #include "chrome/plugin/webplugin_proxy.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 | 8 |
| 9 #if defined(OS_WIN) | 9 #if defined(OS_WIN) |
| 10 #include "app/win_util.h" | 10 #include "app/win_util.h" |
| 11 #endif | 11 #endif |
| 12 #include "base/lazy_instance.h" |
| 12 #if defined(OS_MACOSX) | 13 #if defined(OS_MACOSX) |
| 13 #include "base/mac_util.h" | 14 #include "base/mac_util.h" |
| 14 #include "base/mac/scoped_cftyperef.h" | 15 #include "base/mac/scoped_cftyperef.h" |
| 15 #endif | 16 #endif |
| 16 #include "base/scoped_handle.h" | 17 #include "base/scoped_handle.h" |
| 17 #include "base/shared_memory.h" | 18 #include "base/shared_memory.h" |
| 18 #include "base/singleton.h" | |
| 19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
| 20 #include "chrome/common/child_process_logging.h" | 20 #include "chrome/common/child_process_logging.h" |
| 21 #include "chrome/common/plugin_messages.h" | 21 #include "chrome/common/plugin_messages.h" |
| 22 #include "chrome/common/url_constants.h" | 22 #include "chrome/common/url_constants.h" |
| 23 #include "chrome/plugin/npobject_proxy.h" | 23 #include "chrome/plugin/npobject_proxy.h" |
| 24 #include "chrome/plugin/npobject_util.h" | 24 #include "chrome/plugin/npobject_util.h" |
| 25 #include "chrome/plugin/plugin_channel.h" | 25 #include "chrome/plugin/plugin_channel.h" |
| 26 #include "chrome/plugin/plugin_thread.h" | 26 #include "chrome/plugin/plugin_thread.h" |
| 27 #if defined(OS_MACOSX) | 27 #if defined(OS_MACOSX) |
| 28 #include "chrome/plugin/webplugin_accelerated_surface_proxy_mac.h" | 28 #include "chrome/plugin/webplugin_accelerated_surface_proxy_mac.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 40 #include "app/x11_util_internal.h" | 40 #include "app/x11_util_internal.h" |
| 41 #endif | 41 #endif |
| 42 | 42 |
| 43 using WebKit::WebBindings; | 43 using WebKit::WebBindings; |
| 44 using webkit_glue::WebPluginResourceClient; | 44 using webkit_glue::WebPluginResourceClient; |
| 45 #if defined(OS_MACOSX) | 45 #if defined(OS_MACOSX) |
| 46 using webkit_glue::WebPluginAcceleratedSurface; | 46 using webkit_glue::WebPluginAcceleratedSurface; |
| 47 #endif | 47 #endif |
| 48 | 48 |
| 49 typedef std::map<CPBrowsingContext, WebPluginProxy*> ContextMap; | 49 typedef std::map<CPBrowsingContext, WebPluginProxy*> ContextMap; |
| 50 static ContextMap& GetContextMap() { | 50 static base::LazyInstance<ContextMap> g_context_map(base::LINKER_INITIALIZED); |
| 51 return *Singleton<ContextMap>::get(); | |
| 52 } | |
| 53 | 51 |
| 54 WebPluginProxy::WebPluginProxy( | 52 WebPluginProxy::WebPluginProxy( |
| 55 PluginChannel* channel, | 53 PluginChannel* channel, |
| 56 int route_id, | 54 int route_id, |
| 57 const GURL& page_url, | 55 const GURL& page_url, |
| 58 gfx::NativeViewId containing_window, | 56 gfx::NativeViewId containing_window, |
| 59 int host_render_view_routing_id) | 57 int host_render_view_routing_id) |
| 60 : channel_(channel), | 58 : channel_(channel), |
| 61 route_id_(route_id), | 59 route_id_(route_id), |
| 62 cp_browsing_context_(0), | 60 cp_browsing_context_(0), |
| (...skipping 23 matching lines...) Expand all Loading... |
| 86 if (vis->red_mask == 0xff0000 && | 84 if (vis->red_mask == 0xff0000 && |
| 87 vis->green_mask == 0xff00 && | 85 vis->green_mask == 0xff00 && |
| 88 vis->blue_mask == 0xff) | 86 vis->blue_mask == 0xff) |
| 89 use_shm_pixmap_ = true; | 87 use_shm_pixmap_ = true; |
| 90 } | 88 } |
| 91 #endif | 89 #endif |
| 92 } | 90 } |
| 93 | 91 |
| 94 WebPluginProxy::~WebPluginProxy() { | 92 WebPluginProxy::~WebPluginProxy() { |
| 95 if (cp_browsing_context_) | 93 if (cp_browsing_context_) |
| 96 GetContextMap().erase(cp_browsing_context_); | 94 g_context_map.Get().erase(cp_browsing_context_); |
| 97 | 95 |
| 98 #if defined(USE_X11) | 96 #if defined(USE_X11) |
| 99 if (windowless_shm_pixmap_ != None) | 97 if (windowless_shm_pixmap_ != None) |
| 100 XFreePixmap(x11_util::GetXDisplay(), windowless_shm_pixmap_); | 98 XFreePixmap(x11_util::GetXDisplay(), windowless_shm_pixmap_); |
| 101 #endif | 99 #endif |
| 102 | 100 |
| 103 #if defined(OS_MACOSX) | 101 #if defined(OS_MACOSX) |
| 104 // Destroy the surface early, since it may send messages during cleanup. | 102 // Destroy the surface early, since it may send messages during cleanup. |
| 105 if (accelerated_surface_.get()) | 103 if (accelerated_surface_.get()) |
| 106 accelerated_surface_.reset(); | 104 accelerated_surface_.reset(); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 } | 262 } |
| 265 | 263 |
| 266 void WebPluginProxy::OnMissingPluginStatus(int status) { | 264 void WebPluginProxy::OnMissingPluginStatus(int status) { |
| 267 Send(new PluginHostMsg_MissingPluginStatus(route_id_, status)); | 265 Send(new PluginHostMsg_MissingPluginStatus(route_id_, status)); |
| 268 } | 266 } |
| 269 | 267 |
| 270 CPBrowsingContext WebPluginProxy::GetCPBrowsingContext() { | 268 CPBrowsingContext WebPluginProxy::GetCPBrowsingContext() { |
| 271 if (cp_browsing_context_ == 0) { | 269 if (cp_browsing_context_ == 0) { |
| 272 Send(new PluginHostMsg_GetCPBrowsingContext(route_id_, | 270 Send(new PluginHostMsg_GetCPBrowsingContext(route_id_, |
| 273 &cp_browsing_context_)); | 271 &cp_browsing_context_)); |
| 274 GetContextMap()[cp_browsing_context_] = this; | 272 g_context_map.Get()[cp_browsing_context_] = this; |
| 275 } | 273 } |
| 276 return cp_browsing_context_; | 274 return cp_browsing_context_; |
| 277 } | 275 } |
| 278 | 276 |
| 279 WebPluginProxy* WebPluginProxy::FromCPBrowsingContext( | 277 WebPluginProxy* WebPluginProxy::FromCPBrowsingContext( |
| 280 CPBrowsingContext context) { | 278 CPBrowsingContext context) { |
| 281 return GetContextMap()[context]; | 279 return g_context_map.Get()[context]; |
| 282 } | 280 } |
| 283 | 281 |
| 284 WebPluginResourceClient* WebPluginProxy::GetResourceClient(int id) { | 282 WebPluginResourceClient* WebPluginProxy::GetResourceClient(int id) { |
| 285 ResourceClientMap::iterator iterator = resource_clients_.find(id); | 283 ResourceClientMap::iterator iterator = resource_clients_.find(id); |
| 286 // The IPC messages which deal with streams are now asynchronous. It is | 284 // The IPC messages which deal with streams are now asynchronous. It is |
| 287 // now possible to receive stream messages from the renderer for streams | 285 // now possible to receive stream messages from the renderer for streams |
| 288 // which may have been cancelled by the plugin. | 286 // which may have been cancelled by the plugin. |
| 289 if (iterator == resource_clients_.end()) { | 287 if (iterator == resource_clients_.end()) { |
| 290 return NULL; | 288 return NULL; |
| 291 } | 289 } |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 } else { | 727 } else { |
| 730 index++; | 728 index++; |
| 731 } | 729 } |
| 732 } | 730 } |
| 733 } | 731 } |
| 734 | 732 |
| 735 void WebPluginProxy::URLRedirectResponse(bool allow, int resource_id) { | 733 void WebPluginProxy::URLRedirectResponse(bool allow, int resource_id) { |
| 736 Send(new PluginHostMsg_URLRedirectResponse(route_id_, allow, resource_id)); | 734 Send(new PluginHostMsg_URLRedirectResponse(route_id_, allow, resource_id)); |
| 737 } | 735 } |
| 738 | 736 |
| OLD | NEW |