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/native_library.h" | 8 #include "base/native_library.h" |
9 #include "base/strings/string_split.h" | 9 #include "base/strings/string_split.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "content/public/common/content_client.h" | 12 #include "content/public/common/content_client.h" |
13 #include "content/public/common/content_switches.h" | 13 #include "content/public/common/content_switches.h" |
14 #include "ppapi/shared_impl/ppapi_permissions.h" | 14 #include "ppapi/shared_impl/ppapi_permissions.h" |
15 | 15 |
16 using webkit::WebPluginInfo; | |
17 | |
18 namespace content { | 16 namespace content { |
19 namespace { | 17 namespace { |
20 | 18 |
21 // Appends any plugins from the command line to the given vector. | 19 // Appends any plugins from the command line to the given vector. |
22 void ComputePluginsFromCommandLine(std::vector<PepperPluginInfo>* plugins) { | 20 void ComputePluginsFromCommandLine(std::vector<PepperPluginInfo>* plugins) { |
23 bool out_of_process = true; | 21 bool out_of_process = true; |
24 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kPpapiInProcess)) | 22 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kPpapiInProcess)) |
25 out_of_process = false; | 23 out_of_process = false; |
26 | 24 |
27 const std::string value = | 25 const std::string value = |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 #else | 57 #else |
60 plugin.path = base::FilePath(name_parts[0]); | 58 plugin.path = base::FilePath(name_parts[0]); |
61 #endif | 59 #endif |
62 if (name_parts.size() > 1) | 60 if (name_parts.size() > 1) |
63 plugin.name = name_parts[1]; | 61 plugin.name = name_parts[1]; |
64 if (name_parts.size() > 2) | 62 if (name_parts.size() > 2) |
65 plugin.description = name_parts[2]; | 63 plugin.description = name_parts[2]; |
66 if (name_parts.size() > 3) | 64 if (name_parts.size() > 3) |
67 plugin.version = name_parts[3]; | 65 plugin.version = name_parts[3]; |
68 for (size_t j = 1; j < parts.size(); ++j) { | 66 for (size_t j = 1; j < parts.size(); ++j) { |
69 webkit::WebPluginMimeType mime_type(parts[j], | 67 WebPluginMimeType mime_type(parts[j], |
70 std::string(), | 68 std::string(), |
71 plugin.description); | 69 plugin.description); |
72 plugin.mime_types.push_back(mime_type); | 70 plugin.mime_types.push_back(mime_type); |
73 } | 71 } |
74 | 72 |
75 // If the plugin name is empty, use the filename. | 73 // If the plugin name is empty, use the filename. |
76 if (plugin.name.empty()) | 74 if (plugin.name.empty()) |
77 plugin.name = UTF16ToUTF8(plugin.path.BaseName().LossyDisplayName()); | 75 plugin.name = UTF16ToUTF8(plugin.path.BaseName().LossyDisplayName()); |
78 | 76 |
79 // Command-line plugins get full permissions. | 77 // Command-line plugins get full permissions. |
80 plugin.permissions = ppapi::PERMISSION_ALL_BITS; | 78 plugin.permissions = ppapi::PERMISSION_ALL_BITS; |
81 | 79 |
82 plugins->push_back(plugin); | 80 plugins->push_back(plugin); |
83 } | 81 } |
84 } | 82 } |
85 | 83 |
86 } // namespace | 84 } // namespace |
87 | 85 |
88 bool MakePepperPluginInfo(const webkit::WebPluginInfo& webplugin_info, | 86 bool MakePepperPluginInfo(const WebPluginInfo& webplugin_info, |
89 PepperPluginInfo* pepper_info) { | 87 PepperPluginInfo* pepper_info) { |
90 if (!webplugin_info.is_pepper_plugin()) | 88 if (!webplugin_info.is_pepper_plugin()) |
91 return false; | 89 return false; |
92 | 90 |
93 pepper_info->is_out_of_process = | 91 pepper_info->is_out_of_process = |
94 webplugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS || | 92 webplugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS || |
95 webplugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_UNSANDBOXED; | 93 webplugin_info.type == WebPluginInfo::PLUGIN_TYPE_PEPPER_UNSANDBOXED; |
96 pepper_info->is_sandboxed = webplugin_info.type != | 94 pepper_info->is_sandboxed = webplugin_info.type != |
97 webkit::WebPluginInfo::PLUGIN_TYPE_PEPPER_UNSANDBOXED; | 95 WebPluginInfo::PLUGIN_TYPE_PEPPER_UNSANDBOXED; |
98 | 96 |
99 pepper_info->path = base::FilePath(webplugin_info.path); | 97 pepper_info->path = base::FilePath(webplugin_info.path); |
100 pepper_info->name = UTF16ToASCII(webplugin_info.name); | 98 pepper_info->name = UTF16ToASCII(webplugin_info.name); |
101 pepper_info->description = UTF16ToASCII(webplugin_info.desc); | 99 pepper_info->description = UTF16ToASCII(webplugin_info.desc); |
102 pepper_info->version = UTF16ToASCII(webplugin_info.version); | 100 pepper_info->version = UTF16ToASCII(webplugin_info.version); |
103 pepper_info->mime_types = webplugin_info.mime_types; | 101 pepper_info->mime_types = webplugin_info.mime_types; |
104 pepper_info->permissions = webplugin_info.pepper_permissions; | 102 pepper_info->permissions = webplugin_info.pepper_permissions; |
105 | 103 |
106 return true; | 104 return true; |
107 } | 105 } |
(...skipping 25 matching lines...) Expand all Loading... |
133 &error); | 131 &error); |
134 DLOG_IF(WARNING, !library) << "Unable to load plugin " | 132 DLOG_IF(WARNING, !library) << "Unable to load plugin " |
135 << plugins[i].path.value() << " " | 133 << plugins[i].path.value() << " " |
136 << error; | 134 << error; |
137 (void)library; // Prevent release-mode warning. | 135 (void)library; // Prevent release-mode warning. |
138 } | 136 } |
139 } | 137 } |
140 } | 138 } |
141 | 139 |
142 const PepperPluginInfo* PepperPluginRegistry::GetInfoForPlugin( | 140 const PepperPluginInfo* PepperPluginRegistry::GetInfoForPlugin( |
143 const webkit::WebPluginInfo& info) { | 141 const WebPluginInfo& info) { |
144 for (size_t i = 0; i < plugin_list_.size(); ++i) { | 142 for (size_t i = 0; i < plugin_list_.size(); ++i) { |
145 if (info.path == plugin_list_[i].path) | 143 if (info.path == plugin_list_[i].path) |
146 return &plugin_list_[i]; | 144 return &plugin_list_[i]; |
147 } | 145 } |
148 // We did not find the plugin in our list. But wait! the plugin can also | 146 // We did not find the plugin in our list. But wait! the plugin can also |
149 // be a latecomer, as it happens with pepper flash. This information | 147 // be a latecomer, as it happens with pepper flash. This information |
150 // is actually in |info| and we can use it to construct it and add it to | 148 // is actually in |info| and we can use it to construct it and add it to |
151 // the list. This same deal needs to be done in the browser side in | 149 // the list. This same deal needs to be done in the browser side in |
152 // PluginService. | 150 // PluginService. |
153 PepperPluginInfo plugin; | 151 PepperPluginInfo plugin; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 if (!module->InitAsLibrary(current.path)) { | 222 if (!module->InitAsLibrary(current.path)) { |
225 DLOG(ERROR) << "Failed to load pepper module: " << current.path.value(); | 223 DLOG(ERROR) << "Failed to load pepper module: " << current.path.value(); |
226 continue; | 224 continue; |
227 } | 225 } |
228 } | 226 } |
229 preloaded_modules_[current.path] = module; | 227 preloaded_modules_[current.path] = module; |
230 } | 228 } |
231 } | 229 } |
232 | 230 |
233 } // namespace content | 231 } // namespace content |
OLD | NEW |