OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/file_browser_handlers/file_browser_handle
r.h" | 5 #include "chrome/common/extensions/api/file_browser_handlers/file_browser_handle
r.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "chrome/common/extensions/extension_constants.h" | 12 #include "chrome/common/extensions/extension_constants.h" |
13 #include "extensions/common/error_utils.h" | 13 #include "extensions/common/error_utils.h" |
| 14 #include "extensions/common/install_warning.h" |
14 #include "extensions/common/manifest.h" | 15 #include "extensions/common/manifest.h" |
15 #include "extensions/common/manifest_constants.h" | 16 #include "extensions/common/manifest_constants.h" |
16 #include "extensions/common/manifest_handlers/permissions_parser.h" | 17 #include "extensions/common/manifest_handlers/permissions_parser.h" |
17 #include "extensions/common/permissions/api_permission.h" | 18 #include "extensions/common/permissions/api_permission.h" |
18 #include "extensions/common/url_pattern.h" | 19 #include "extensions/common/url_pattern.h" |
19 #include "url/url_constants.h" | 20 #include "url/url_constants.h" |
20 | 21 |
21 namespace keys = extensions::manifest_keys; | 22 namespace keys = extensions::manifest_keys; |
22 namespace errors = extensions::manifest_errors; | 23 namespace errors = extensions::manifest_errors; |
23 | 24 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 | 125 |
125 return &info->file_browser_handlers; | 126 return &info->file_browser_handlers; |
126 } | 127 } |
127 | 128 |
128 FileBrowserHandlerParser::FileBrowserHandlerParser() { | 129 FileBrowserHandlerParser::FileBrowserHandlerParser() { |
129 } | 130 } |
130 | 131 |
131 FileBrowserHandlerParser::~FileBrowserHandlerParser() { | 132 FileBrowserHandlerParser::~FileBrowserHandlerParser() { |
132 } | 133 } |
133 | 134 |
| 135 #if defined(OS_CHROMEOS) |
134 namespace { | 136 namespace { |
135 | 137 |
136 FileBrowserHandler* LoadFileBrowserHandler( | 138 FileBrowserHandler* LoadFileBrowserHandler( |
137 const std::string& extension_id, | 139 const std::string& extension_id, |
138 const base::DictionaryValue* file_browser_handler, | 140 const base::DictionaryValue* file_browser_handler, |
139 base::string16* error) { | 141 base::string16* error) { |
140 scoped_ptr<FileBrowserHandler> result(new FileBrowserHandler()); | 142 scoped_ptr<FileBrowserHandler> result(new FileBrowserHandler()); |
141 result->set_extension_id(extension_id); | 143 result->set_extension_id(extension_id); |
142 | 144 |
143 std::string handler_id; | 145 std::string handler_id; |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 extension_id, | 263 extension_id, |
262 reinterpret_cast<base::DictionaryValue*>(*iter), error)); | 264 reinterpret_cast<base::DictionaryValue*>(*iter), error)); |
263 if (!action.get()) | 265 if (!action.get()) |
264 return false; // Failed to parse file browser action definition. | 266 return false; // Failed to parse file browser action definition. |
265 result->push_back(linked_ptr<FileBrowserHandler>(action.release())); | 267 result->push_back(linked_ptr<FileBrowserHandler>(action.release())); |
266 } | 268 } |
267 return true; | 269 return true; |
268 } | 270 } |
269 | 271 |
270 } // namespace | 272 } // namespace |
| 273 #endif |
271 | 274 |
272 bool FileBrowserHandlerParser::Parse(extensions::Extension* extension, | 275 bool FileBrowserHandlerParser::Parse(extensions::Extension* extension, |
273 base::string16* error) { | 276 base::string16* error) { |
274 // If the permission is missing, then skip parsing the list of handlers. | 277 #if !defined(OS_CHROMEOS) |
275 if (!extensions::PermissionsParser::HasAPIPermission( | 278 return true; |
276 extension, extensions::APIPermission::ID::kFileBrowserHandler)) { | 279 #else |
| 280 const base::Value* file_browser_handlers_value = nullptr; |
| 281 if (!extension->manifest()->Get(keys::kFileBrowserHandlers, |
| 282 &file_browser_handlers_value)) { |
277 return true; | 283 return true; |
278 } | 284 } |
279 | 285 |
280 const base::ListValue* file_browser_handlers_value = NULL; | 286 if (!extensions::PermissionsParser::HasAPIPermission( |
281 if (!extension->manifest()->GetList(keys::kFileBrowserHandlers, | 287 extension, extensions::APIPermission::ID::kFileBrowserHandler)) { |
282 &file_browser_handlers_value)) { | 288 extension->AddInstallWarning(extensions::InstallWarning( |
| 289 errors::kInvalidFileBrowserHandlerMissingPermission)); |
| 290 return true; |
| 291 } |
| 292 |
| 293 const base::ListValue* file_browser_handlers_list_value = nullptr; |
| 294 if (!file_browser_handlers_value->GetAsList( |
| 295 &file_browser_handlers_list_value)) { |
283 *error = base::ASCIIToUTF16(errors::kInvalidFileBrowserHandler); | 296 *error = base::ASCIIToUTF16(errors::kInvalidFileBrowserHandler); |
284 return false; | 297 return false; |
285 } | 298 } |
286 | 299 |
287 scoped_ptr<FileBrowserHandlerInfo> info(new FileBrowserHandlerInfo); | 300 scoped_ptr<FileBrowserHandlerInfo> info(new FileBrowserHandlerInfo); |
288 if (!LoadFileBrowserHandlers(extension->id(), | 301 if (!LoadFileBrowserHandlers(extension->id(), |
289 file_browser_handlers_value, | 302 file_browser_handlers_list_value, |
290 &info->file_browser_handlers, | 303 &info->file_browser_handlers, error)) { |
291 error)) { | |
292 return false; // Failed to parse file browser actions definition. | 304 return false; // Failed to parse file browser actions definition. |
293 } | 305 } |
294 | 306 |
295 extension->SetManifestData(keys::kFileBrowserHandlers, info.release()); | 307 extension->SetManifestData(keys::kFileBrowserHandlers, info.release()); |
296 return true; | 308 return true; |
| 309 #endif |
297 } | 310 } |
298 | 311 |
299 const std::vector<std::string> FileBrowserHandlerParser::Keys() const { | 312 const std::vector<std::string> FileBrowserHandlerParser::Keys() const { |
300 return SingleKey(keys::kFileBrowserHandlers); | 313 return SingleKey(keys::kFileBrowserHandlers); |
301 } | 314 } |
OLD | NEW |