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

Side by Side Diff: extensions/common/manifest_handlers/plugins_handler.cc

Issue 2783813002: Move ChromeRequirementsChecker to //extensions as a PreloadCheck (Closed)
Patch Set: rebase? Created 3 years, 8 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/common/extensions/api/plugins/plugins_handler.h" 5 #include "extensions/common/manifest_handlers/plugins_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/files/file_util.h" 11 #include "base/files/file_util.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "build/build_config.h" 15 #include "build/build_config.h"
16 #include "chrome/grit/generated_resources.h"
17 #include "extensions/common/error_utils.h" 16 #include "extensions/common/error_utils.h"
18 #include "extensions/common/manifest.h" 17 #include "extensions/common/manifest.h"
19 #include "extensions/common/manifest_constants.h" 18 #include "extensions/common/manifest_constants.h"
20 #include "extensions/common/manifest_handlers/permissions_parser.h" 19 #include "extensions/common/manifest_handlers/permissions_parser.h"
21 #include "extensions/common/permissions/api_permission.h" 20 #include "extensions/common/permissions/api_permission.h"
22 #include "extensions/common/permissions/api_permission_set.h" 21 #include "extensions/common/permissions/api_permission_set.h"
22 #include "extensions/strings/grit/extensions_strings.h"
23 #include "ui/base/l10n/l10n_util.h" 23 #include "ui/base/l10n/l10n_util.h"
24 24
25 namespace extensions { 25 namespace extensions {
26 26
27 namespace keys = manifest_keys; 27 namespace keys = manifest_keys;
28 28
29 namespace { 29 namespace {
30 30
31 struct PluginManifestData : Extension::ManifestData { 31 struct PluginManifestData : Extension::ManifestData {
32 // Optional list of NPAPI plugins and associated properties for an extension. 32 // Optional list of NPAPI plugins and associated properties for an extension.
33 PluginInfo::PluginVector plugins; 33 PluginInfo::PluginVector plugins;
34 }; 34 };
35 35
36 } // namespace 36 } // namespace
37 37
38 PluginInfo::PluginInfo(const base::FilePath& plugin_path, bool plugin_is_public) 38 PluginInfo::PluginInfo(const base::FilePath& plugin_path, bool plugin_is_public)
39 : path(plugin_path), is_public(plugin_is_public) { 39 : path(plugin_path), is_public(plugin_is_public) {}
40 }
41 40
42 PluginInfo::~PluginInfo() { 41 PluginInfo::~PluginInfo() {}
43 }
44 42
45 // static 43 // static
46 const PluginInfo::PluginVector* PluginInfo::GetPlugins( 44 const PluginInfo::PluginVector* PluginInfo::GetPlugins(
47 const Extension* extension) { 45 const Extension* extension) {
48 PluginManifestData* data = static_cast<PluginManifestData*>( 46 PluginManifestData* data = static_cast<PluginManifestData*>(
49 extension->GetManifestData(keys::kPlugins)); 47 extension->GetManifestData(keys::kPlugins));
50 return data ? &data->plugins : NULL; 48 return data ? &data->plugins : NULL;
51 } 49 }
52 50
53 // static 51 // static
54 bool PluginInfo::HasPlugins(const Extension* extension) { 52 bool PluginInfo::HasPlugins(const Extension* extension) {
55 PluginManifestData* data = static_cast<PluginManifestData*>( 53 PluginManifestData* data = static_cast<PluginManifestData*>(
56 extension->GetManifestData(keys::kPlugins)); 54 extension->GetManifestData(keys::kPlugins));
57 return data && !data->plugins.empty() ? true : false; 55 return data && !data->plugins.empty() ? true : false;
58 } 56 }
59 57
60 PluginsHandler::PluginsHandler() { 58 PluginsHandler::PluginsHandler() {}
61 }
62 59
63 PluginsHandler::~PluginsHandler() { 60 PluginsHandler::~PluginsHandler() {}
64 }
65 61
66 const std::vector<std::string> PluginsHandler::Keys() const { 62 const std::vector<std::string> PluginsHandler::Keys() const {
67 return SingleKey(keys::kPlugins); 63 return SingleKey(keys::kPlugins);
68 } 64 }
69 65
70 bool PluginsHandler::Parse(Extension* extension, base::string16* error) { 66 bool PluginsHandler::Parse(Extension* extension, base::string16* error) {
71 const base::ListValue* list_value = NULL; 67 const base::ListValue* list_value = NULL;
72 if (!extension->manifest()->GetList(keys::kPlugins, &list_value)) { 68 if (!extension->manifest()->GetList(keys::kPlugins, &list_value)) {
73 *error = base::ASCIIToUTF16(manifest_errors::kInvalidPlugins); 69 *error = base::ASCIIToUTF16(manifest_errors::kInvalidPlugins);
74 return false; 70 return false;
(...skipping 18 matching lines...) Expand all
93 // Get plugins[i].content (optional). 89 // Get plugins[i].content (optional).
94 bool is_public = false; 90 bool is_public = false;
95 if (plugin_value->HasKey(keys::kPluginsPublic)) { 91 if (plugin_value->HasKey(keys::kPluginsPublic)) {
96 if (!plugin_value->GetBoolean(keys::kPluginsPublic, &is_public)) { 92 if (!plugin_value->GetBoolean(keys::kPluginsPublic, &is_public)) {
97 *error = ErrorUtils::FormatErrorMessageUTF16( 93 *error = ErrorUtils::FormatErrorMessageUTF16(
98 manifest_errors::kInvalidPluginsPublic, base::SizeTToString(i)); 94 manifest_errors::kInvalidPluginsPublic, base::SizeTToString(i));
99 return false; 95 return false;
100 } 96 }
101 } 97 }
102 98
103 // We don't allow extensions to load NPAPI plugins on Chrome OS, but still 99 // We don't allow extensions to load NPAPI plugins on Chrome OS, but still
104 // parse the entries to display consistent error messages. If the extension 100 // parse the entries to display consistent error messages. If the extension
105 // actually requires the plugins then LoadRequirements will prevent it 101 // actually requires the plugins then LoadRequirements will prevent it
106 // loading. 102 // loading.
107 #if defined(OS_CHROMEOS) 103 #if defined(OS_CHROMEOS)
108 continue; 104 continue;
109 #endif // defined(OS_CHROMEOS). 105 #endif // defined(OS_CHROMEOS).
110 plugins_data->plugins.push_back(PluginInfo( 106 plugins_data->plugins.push_back(PluginInfo(
111 extension->path().Append(base::FilePath::FromUTF8Unsafe(path_str)), 107 extension->path().Append(base::FilePath::FromUTF8Unsafe(path_str)),
112 is_public)); 108 is_public));
113 } 109 }
114 110
115 if (!plugins_data->plugins.empty()) { 111 if (!plugins_data->plugins.empty()) {
116 extension->SetManifestData(keys::kPlugins, std::move(plugins_data)); 112 extension->SetManifestData(keys::kPlugins, std::move(plugins_data));
117 PermissionsParser::AddAPIPermission(extension, APIPermission::kPlugin); 113 PermissionsParser::AddAPIPermission(extension, APIPermission::kPlugin);
118 } 114 }
119 115
120 return true; 116 return true;
121 } 117 }
122 118
123 bool PluginsHandler::Validate(const Extension* extension, 119 bool PluginsHandler::Validate(const Extension* extension,
124 std::string* error, 120 std::string* error,
125 std::vector<InstallWarning>* warnings) const { 121 std::vector<InstallWarning>* warnings) const {
126 // Validate claimed plugin paths. 122 // Validate claimed plugin paths.
127 if (extensions::PluginInfo::HasPlugins(extension)) { 123 if (extensions::PluginInfo::HasPlugins(extension)) {
128 const extensions::PluginInfo::PluginVector* plugins = 124 const extensions::PluginInfo::PluginVector* plugins =
129 extensions::PluginInfo::GetPlugins(extension); 125 extensions::PluginInfo::GetPlugins(extension);
130 CHECK(plugins); 126 CHECK(plugins);
131 for (std::vector<extensions::PluginInfo>::const_iterator plugin = 127 for (std::vector<extensions::PluginInfo>::const_iterator plugin =
132 plugins->begin(); 128 plugins->begin();
133 plugin != plugins->end(); ++plugin) { 129 plugin != plugins->end(); ++plugin) {
134 if (!base::PathExists(plugin->path)) { 130 if (!base::PathExists(plugin->path)) {
135 *error = l10n_util::GetStringFUTF8( 131 *error =
136 IDS_EXTENSION_LOAD_PLUGIN_PATH_FAILED, 132 l10n_util::GetStringFUTF8(IDS_EXTENSION_LOAD_PLUGIN_PATH_FAILED,
137 plugin->path.LossyDisplayName()); 133 plugin->path.LossyDisplayName());
138 return false; 134 return false;
139 } 135 }
140 } 136 }
141 } 137 }
142 return true; 138 return true;
143 } 139 }
144 140
145 } // namespace extensions 141 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/manifest_handlers/plugins_handler.h ('k') | extensions/strings/extensions_strings.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698