OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/common/npobject_util.h" | 5 #include "content/common/npobject_util.h" |
6 | 6 |
7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "content/common/np_channel_base.h" | 8 #include "content/common/np_channel_base.h" |
9 #include "content/common/npobject_proxy.h" | 9 #include "content/common/npobject_proxy.h" |
10 #include "content/common/plugin_messages.h" | 10 #include "content/common/plugin_messages.h" |
11 #include "third_party/npapi/bindings/nphostapi.h" | 11 #include "third_party/npapi/bindings/nphostapi.h" |
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" | 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" |
13 #include "webkit/plugins/npapi/plugin_host.h" | 13 #include "webkit/plugins/npapi/plugin_host.h" |
14 #include "webkit/glue/webkit_glue.h" | 14 #include "webkit/glue/webkit_glue.h" |
15 | 15 |
16 using WebKit::WebBindings; | 16 using WebKit::WebBindings; |
17 | 17 |
18 // true if the current process is a plugin process, false if it's a renderer | 18 // true if the current process is a plugin process, false otherwise. |
| 19 static bool g_plugin_process; |
| 20 // The path of the plugin file that this process hosts, if this is a plugin |
19 // process. | 21 // process. |
20 static bool g_plugin_process; | 22 static FilePath* g_plugin_path = NULL; |
21 | 23 |
22 namespace { | 24 namespace { |
23 // The next 7 functions are called by the plugin code when it's using the | 25 // The next 7 functions are called by the plugin code when it's using the |
24 // NPObject. Plugins always ignore the functions in NPClass (except allocate | 26 // NPObject. Plugins always ignore the functions in NPClass (except allocate |
25 // and deallocate), and instead just use the function pointers that were | 27 // and deallocate), and instead just use the function pointers that were |
26 // passed in NPInitialize. | 28 // passed in NPInitialize. |
27 // When the renderer interacts with an NPObject from the plugin, it of course | 29 // When the renderer interacts with an NPObject from the plugin, it of course |
28 // uses the function pointers in its NPClass structure. | 30 // uses the function pointers in its NPClass structure. |
29 static bool NPN_HasMethodPatch(NPP npp, | 31 static bool NPN_HasMethodPatch(NPP npp, |
30 NPObject *npobj, | 32 NPObject *npobj, |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 host_funcs.hasmethod = NPN_HasMethodPatch; | 120 host_funcs.hasmethod = NPN_HasMethodPatch; |
119 host_funcs.setexception = NPN_SetExceptionPatch; | 121 host_funcs.setexception = NPN_SetExceptionPatch; |
120 host_funcs.enumerate = NPN_EnumeratePatch; | 122 host_funcs.enumerate = NPN_EnumeratePatch; |
121 | 123 |
122 init = true; | 124 init = true; |
123 return &host_funcs; | 125 return &host_funcs; |
124 } | 126 } |
125 | 127 |
126 } | 128 } |
127 | 129 |
128 void PatchNPNFunctions() { | 130 void PatchNPNFunctions(const FilePath& plugin_path) { |
129 g_plugin_process = true; | 131 g_plugin_process = true; |
| 132 DCHECK(!g_plugin_path); |
| 133 g_plugin_path = new FilePath(plugin_path); |
130 NPNetscapeFuncs* funcs = GetHostFunctions(); | 134 NPNetscapeFuncs* funcs = GetHostFunctions(); |
131 webkit::npapi::PluginHost::Singleton()->PatchNPNetscapeFuncs(funcs); | 135 webkit::npapi::PluginHost::Singleton()->PatchNPNetscapeFuncs(funcs); |
132 } | 136 } |
133 | 137 |
134 bool IsPluginProcess() { | 138 bool IsPluginProcess() { |
135 return g_plugin_process; | 139 return g_plugin_process; |
136 } | 140 } |
137 | 141 |
| 142 const FilePath& GetPluginPath() { |
| 143 DCHECK(g_plugin_process); |
| 144 return *g_plugin_path; |
| 145 } |
| 146 |
138 void CreateNPIdentifierParam(NPIdentifier id, NPIdentifier_Param* param) { | 147 void CreateNPIdentifierParam(NPIdentifier id, NPIdentifier_Param* param) { |
139 param->identifier = id; | 148 param->identifier = id; |
140 } | 149 } |
141 | 150 |
142 NPIdentifier CreateNPIdentifier(const NPIdentifier_Param& param) { | 151 NPIdentifier CreateNPIdentifier(const NPIdentifier_Param& param) { |
143 return param.identifier; | 152 return param.identifier; |
144 } | 153 } |
145 | 154 |
146 void CreateNPVariantParam(const NPVariant& variant, | 155 void CreateNPVariantParam(const NPVariant& variant, |
147 NPChannelBase* channel, | 156 NPChannelBase* channel, |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 result->type = NPVariantType_Object; | 289 result->type = NPVariantType_Object; |
281 result->value.objectValue = npobject_base->GetUnderlyingNPObject(); | 290 result->value.objectValue = npobject_base->GetUnderlyingNPObject(); |
282 WebBindings::retainObject(result->value.objectValue); | 291 WebBindings::retainObject(result->value.objectValue); |
283 break; | 292 break; |
284 } | 293 } |
285 default: | 294 default: |
286 NOTREACHED(); | 295 NOTREACHED(); |
287 } | 296 } |
288 return true; | 297 return true; |
289 } | 298 } |
OLD | NEW |