Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: ppapi/proxy/host_dispatcher.cc

Issue 6486034: Share PPAPI out-of-process plugins between renderer processes.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/host_dispatcher.h ('k') | ppapi/proxy/plugin_dispatcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "ppapi/proxy/host_dispatcher.h" 5 #include "ppapi/proxy/host_dispatcher.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "ppapi/c/dev/ppb_var_deprecated.h" 10 #include "ppapi/c/dev/ppb_var_deprecated.h"
(...skipping 18 matching lines...) Expand all
29 const PPB_Var_Deprecated* var_interface = 29 const PPB_Var_Deprecated* var_interface =
30 static_cast<const PPB_Var_Deprecated*>( 30 static_cast<const PPB_Var_Deprecated*>(
31 local_get_interface(PPB_VAR_DEPRECATED_INTERFACE)); 31 local_get_interface(PPB_VAR_DEPRECATED_INTERFACE));
32 SetSerializationRules(new HostVarSerializationRules(var_interface, module)); 32 SetSerializationRules(new HostVarSerializationRules(var_interface, module));
33 33
34 memset(plugin_interface_support_, 0, 34 memset(plugin_interface_support_, 0,
35 sizeof(PluginInterfaceSupport) * INTERFACE_ID_COUNT); 35 sizeof(PluginInterfaceSupport) * INTERFACE_ID_COUNT);
36 } 36 }
37 37
38 HostDispatcher::~HostDispatcher() { 38 HostDispatcher::~HostDispatcher() {
39 // Notify the plugin that it should exit.
40 Send(new PpapiMsg_Shutdown());
41 }
42
43 bool HostDispatcher::InitializeModule() {
44 bool init_result = false;
45 Send(new PpapiMsg_InitializeModule(pp_module(), &init_result));
46 return init_result;
47 } 39 }
48 40
49 // static 41 // static
50 HostDispatcher* HostDispatcher::GetForInstance(PP_Instance instance) { 42 HostDispatcher* HostDispatcher::GetForInstance(PP_Instance instance) {
51 if (!g_instance_to_dispatcher) 43 if (!g_instance_to_dispatcher)
52 return NULL; 44 return NULL;
53 InstanceToDispatcherMap::iterator found = g_instance_to_dispatcher->find( 45 InstanceToDispatcherMap::iterator found = g_instance_to_dispatcher->find(
54 instance); 46 instance);
55 if (found == g_instance_to_dispatcher->end()) 47 if (found == g_instance_to_dispatcher->end())
56 return NULL; 48 return NULL;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 return true; 101 return true;
110 } 102 }
111 103
112 proxy = info->create_proxy(this, local_interface); 104 proxy = info->create_proxy(this, local_interface);
113 target_proxies_[info->id].reset(proxy); 105 target_proxies_[info->id].reset(proxy);
114 } 106 }
115 107
116 return proxy->OnMessageReceived(msg); 108 return proxy->OnMessageReceived(msg);
117 } 109 }
118 110
111 void HostDispatcher::OnChannelError() {
112 // TODO(brettw) plugin has crashed, handle this.
113 }
114
119 const void* HostDispatcher::GetProxiedInterface(const std::string& interface) { 115 const void* HostDispatcher::GetProxiedInterface(const std::string& interface) {
120 // First see if we even have a proxy for this interface. 116 // First see if we even have a proxy for this interface.
121 const InterfaceProxy::Info* info = GetPPPInterfaceInfo(interface); 117 const InterfaceProxy::Info* info = GetPPPInterfaceInfo(interface);
122 if (!info) 118 if (!info)
123 return NULL; 119 return NULL;
124 120
125 if (plugin_interface_support_[static_cast<int>(info->id)] != 121 if (plugin_interface_support_[static_cast<int>(info->id)] !=
126 INTERFACE_UNQUERIED) { 122 INTERFACE_UNQUERIED) {
127 // Already queried the plugin if it supports this interface. 123 // Already queried the plugin if it supports this interface.
128 if (plugin_interface_support_[info->id] == INTERFACE_SUPPORTED) 124 if (plugin_interface_support_[info->id] == INTERFACE_SUPPORTED)
129 return info->interface; 125 return info->interface;
130 return NULL; 126 return NULL;
131 } 127 }
132 128
133 // Need to re-query. Cache the result so we only do this once. 129 // Need to re-query. Cache the result so we only do this once.
134 bool supported = false; 130 bool supported = false;
135 Send(new PpapiMsg_SupportsInterface(interface, &supported)); 131 Send(new PpapiMsg_SupportsInterface(interface, &supported));
136 plugin_interface_support_[static_cast<int>(info->id)] = 132 plugin_interface_support_[static_cast<int>(info->id)] =
137 supported ? INTERFACE_SUPPORTED : INTERFACE_UNSUPPORTED; 133 supported ? INTERFACE_SUPPORTED : INTERFACE_UNSUPPORTED;
138 134
139 if (supported) 135 if (supported)
140 return info->interface; 136 return info->interface;
141 return NULL; 137 return NULL;
142 } 138 }
143 139
144 } // namespace proxy 140 } // namespace proxy
145 } // namespace pp 141 } // namespace pp
146 142
OLDNEW
« no previous file with comments | « ppapi/proxy/host_dispatcher.h ('k') | ppapi/proxy/plugin_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698