OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/pepper_plugin_registry.h" | 5 #include "content/common/pepper_plugin_registry.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/native_library.h" | 9 #include "base/native_library.h" |
10 #include "base/string_split.h" | 10 #include "base/string_split.h" |
11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
13 #include "content/public/common/content_client.h" | 13 #include "content/public/common/content_client.h" |
14 #include "content/public/common/content_switches.h" | 14 #include "content/public/common/content_switches.h" |
| 15 #include "ppapi/shared_impl/ppapi_permissions.h" |
15 #include "webkit/plugins/npapi/plugin_list.h" | 16 #include "webkit/plugins/npapi/plugin_list.h" |
16 | 17 |
17 namespace { | 18 namespace { |
18 | 19 |
19 // Appends any plugins from the command line to the given vector. | 20 // Appends any plugins from the command line to the given vector. |
20 void ComputePluginsFromCommandLine( | 21 void ComputePluginsFromCommandLine( |
21 std::vector<content::PepperPluginInfo>* plugins) { | 22 std::vector<content::PepperPluginInfo>* plugins) { |
22 bool out_of_process = | 23 bool out_of_process = |
23 CommandLine::ForCurrentProcess()->HasSwitch(switches::kPpapiOutOfProcess); | 24 CommandLine::ForCurrentProcess()->HasSwitch(switches::kPpapiOutOfProcess); |
24 const std::string value = | 25 const std::string value = |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 plugin.description = name_parts[2]; | 63 plugin.description = name_parts[2]; |
63 if (name_parts.size() > 3) | 64 if (name_parts.size() > 3) |
64 plugin.version = name_parts[3]; | 65 plugin.version = name_parts[3]; |
65 for (size_t j = 1; j < parts.size(); ++j) { | 66 for (size_t j = 1; j < parts.size(); ++j) { |
66 webkit::WebPluginMimeType mime_type(parts[j], | 67 webkit::WebPluginMimeType mime_type(parts[j], |
67 std::string(), | 68 std::string(), |
68 plugin.description); | 69 plugin.description); |
69 plugin.mime_types.push_back(mime_type); | 70 plugin.mime_types.push_back(mime_type); |
70 } | 71 } |
71 | 72 |
| 73 // Command-line plugins get full permissions. |
| 74 plugin.permissions = ppapi::PERMISSION_DEV | |
| 75 ppapi::PERMISSION_PRIVATE | |
| 76 ppapi::PERMISSION_BYPASS_USER_GESTURE; |
| 77 |
72 plugins->push_back(plugin); | 78 plugins->push_back(plugin); |
73 } | 79 } |
74 } | 80 } |
75 | 81 |
76 } // namespace | 82 } // namespace |
77 | 83 |
78 webkit::WebPluginInfo content::PepperPluginInfo::ToWebPluginInfo() const { | 84 webkit::WebPluginInfo content::PepperPluginInfo::ToWebPluginInfo() const { |
79 webkit::WebPluginInfo info; | 85 webkit::WebPluginInfo info; |
80 | 86 |
81 info.type = is_out_of_process ? | 87 info.type = is_out_of_process ? |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 // Note that in each case, AddLiveModule must be called before completing | 216 // Note that in each case, AddLiveModule must be called before completing |
211 // initialization. If we bail out (in the continue clauses) before saving | 217 // initialization. If we bail out (in the continue clauses) before saving |
212 // the initialized module, it will still try to unregister itself in its | 218 // the initialized module, it will still try to unregister itself in its |
213 // destructor. | 219 // destructor. |
214 for (size_t i = 0; i < plugin_list_.size(); i++) { | 220 for (size_t i = 0; i < plugin_list_.size(); i++) { |
215 const content::PepperPluginInfo& current = plugin_list_[i]; | 221 const content::PepperPluginInfo& current = plugin_list_[i]; |
216 if (current.is_out_of_process) | 222 if (current.is_out_of_process) |
217 continue; // Out of process plugins need no special pre-initialization. | 223 continue; // Out of process plugins need no special pre-initialization. |
218 | 224 |
219 scoped_refptr<webkit::ppapi::PluginModule> module = | 225 scoped_refptr<webkit::ppapi::PluginModule> module = |
220 new webkit::ppapi::PluginModule(current.name, current.path, this); | 226 new webkit::ppapi::PluginModule(current.name, current.path, this, |
| 227 ppapi::PpapiPermissions(current.permissions)); |
221 AddLiveModule(current.path, module); | 228 AddLiveModule(current.path, module); |
222 if (current.is_internal) { | 229 if (current.is_internal) { |
223 if (!module->InitAsInternalPlugin(current.internal_entry_points)) { | 230 if (!module->InitAsInternalPlugin(current.internal_entry_points)) { |
224 DLOG(ERROR) << "Failed to load pepper module: " << current.path.value(); | 231 DLOG(ERROR) << "Failed to load pepper module: " << current.path.value(); |
225 continue; | 232 continue; |
226 } | 233 } |
227 } else { | 234 } else { |
228 // Preload all external plugins we're not running out of process. | 235 // Preload all external plugins we're not running out of process. |
229 if (!module->InitAsLibrary(current.path)) { | 236 if (!module->InitAsLibrary(current.path)) { |
230 DLOG(ERROR) << "Failed to load pepper module: " << current.path.value(); | 237 DLOG(ERROR) << "Failed to load pepper module: " << current.path.value(); |
231 continue; | 238 continue; |
232 } | 239 } |
233 } | 240 } |
234 preloaded_modules_[current.path] = module; | 241 preloaded_modules_[current.path] = module; |
235 } | 242 } |
236 } | 243 } |
237 | 244 |
OLD | NEW |