OLD | NEW |
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 "extensions/common/extension.h" | 5 #include "extensions/common/extension.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
11 #include "base/i18n/rtl.h" | 11 #include "base/i18n/rtl.h" |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/memory/singleton.h" | 13 #include "base/memory/singleton.h" |
14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
15 #include "base/strings/string16.h" | 15 #include "base/strings/string16.h" |
16 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
17 #include "base/strings/string_piece.h" | 17 #include "base/strings/string_piece.h" |
18 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
19 #include "base/strings/stringprintf.h" | 19 #include "base/strings/stringprintf.h" |
20 #include "base/strings/utf_string_conversions.h" | 20 #include "base/strings/utf_string_conversions.h" |
21 #include "base/values.h" | 21 #include "base/values.h" |
22 #include "base/version.h" | 22 #include "base/version.h" |
23 #include "content/public/common/url_constants.h" | 23 #include "content/public/common/url_constants.h" |
24 #include "extensions/common/constants.h" | 24 #include "extensions/common/constants.h" |
25 #include "extensions/common/error_utils.h" | 25 #include "extensions/common/error_utils.h" |
26 #include "extensions/common/id_util.h" | 26 #include "extensions/common/id_util.h" |
27 #include "extensions/common/manifest.h" | 27 #include "extensions/common/manifest.h" |
28 #include "extensions/common/manifest_constants.h" | 28 #include "extensions/common/manifest_constants.h" |
29 #include "extensions/common/manifest_handler.h" | 29 #include "extensions/common/manifest_handler.h" |
| 30 #include "extensions/common/manifest_handlers/permissions_parser.h" |
30 #include "extensions/common/permissions/api_permission_set.h" | 31 #include "extensions/common/permissions/api_permission_set.h" |
31 #include "extensions/common/permissions/permission_set.h" | 32 #include "extensions/common/permissions/permission_set.h" |
32 #include "extensions/common/permissions/permissions_data.h" | 33 #include "extensions/common/permissions/permissions_data.h" |
33 #include "extensions/common/permissions/permissions_info.h" | 34 #include "extensions/common/permissions/permissions_info.h" |
34 #include "extensions/common/switches.h" | 35 #include "extensions/common/switches.h" |
35 #include "extensions/common/url_pattern_set.h" | 36 #include "extensions/common/url_pattern_set.h" |
36 #include "net/base/filename_util.h" | 37 #include "net/base/filename_util.h" |
37 #include "url/url_util.h" | 38 #include "url/url_util.h" |
38 | 39 |
39 namespace extensions { | 40 namespace extensions { |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 return true; | 281 return true; |
281 } | 282 } |
282 | 283 |
283 // static | 284 // static |
284 GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) { | 285 GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) { |
285 return GURL(std::string(extensions::kExtensionScheme) + | 286 return GURL(std::string(extensions::kExtensionScheme) + |
286 content::kStandardSchemeSeparator + extension_id + "/"); | 287 content::kStandardSchemeSeparator + extension_id + "/"); |
287 } | 288 } |
288 | 289 |
289 bool Extension::HasAPIPermission(APIPermission::ID permission) const { | 290 bool Extension::HasAPIPermission(APIPermission::ID permission) const { |
290 return PermissionsData::HasAPIPermission(this, permission); | 291 return PermissionsData::ForExtension(this)->HasAPIPermission(permission); |
291 } | 292 } |
292 | 293 |
293 bool Extension::HasAPIPermission(const std::string& permission_name) const { | 294 bool Extension::HasAPIPermission(const std::string& permission_name) const { |
294 return PermissionsData::HasAPIPermission(this, permission_name); | 295 return PermissionsData::ForExtension(this)->HasAPIPermission(permission_name); |
295 } | 296 } |
296 | 297 |
297 scoped_refptr<const PermissionSet> Extension::GetActivePermissions() const { | 298 scoped_refptr<const PermissionSet> Extension::GetActivePermissions() const { |
298 return PermissionsData::GetActivePermissions(this); | 299 return PermissionsData::ForExtension(this)->active_permissions(); |
299 } | 300 } |
300 | 301 |
301 bool Extension::ShowConfigureContextMenus() const { | 302 bool Extension::ShowConfigureContextMenus() const { |
302 // Don't show context menu for component extensions. We might want to show | 303 // Don't show context menu for component extensions. We might want to show |
303 // options for component extension button but now there is no component | 304 // options for component extension button but now there is no component |
304 // extension with options. All other menu items like uninstall have | 305 // extension with options. All other menu items like uninstall have |
305 // no sense for component extensions. | 306 // no sense for component extensions. |
306 return location() != Manifest::COMPONENT && | 307 return location() != Manifest::COMPONENT && |
307 location() != Manifest::EXTERNAL_COMPONENT; | 308 location() != Manifest::EXTERNAL_COMPONENT; |
308 } | 309 } |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 manifest_->GetString(keys::kPublicKey, &public_key_); | 535 manifest_->GetString(keys::kPublicKey, &public_key_); |
535 | 536 |
536 extension_url_ = Extension::GetBaseURLFromExtensionId(id()); | 537 extension_url_ = Extension::GetBaseURLFromExtensionId(id()); |
537 | 538 |
538 // Load App settings. LoadExtent at least has to be done before | 539 // Load App settings. LoadExtent at least has to be done before |
539 // ParsePermissions(), because the valid permissions depend on what type of | 540 // ParsePermissions(), because the valid permissions depend on what type of |
540 // package this is. | 541 // package this is. |
541 if (is_app() && !LoadAppFeatures(error)) | 542 if (is_app() && !LoadAppFeatures(error)) |
542 return false; | 543 return false; |
543 | 544 |
544 permissions_data_.reset(new PermissionsData); | 545 permissions_parser_.reset(new PermissionsParser()); |
545 if (!permissions_data_->ParsePermissions(this, error)) | 546 if (!permissions_parser_->Parse(this, error)) |
546 return false; | 547 return false; |
547 | 548 |
548 if (manifest_->HasKey(keys::kConvertedFromUserScript)) { | 549 if (manifest_->HasKey(keys::kConvertedFromUserScript)) { |
549 manifest_->GetBoolean(keys::kConvertedFromUserScript, | 550 manifest_->GetBoolean(keys::kConvertedFromUserScript, |
550 &converted_from_user_script_); | 551 &converted_from_user_script_); |
551 } | 552 } |
552 | 553 |
553 if (!LoadSharedFeatures(error)) | 554 if (!LoadSharedFeatures(error)) |
554 return false; | 555 return false; |
555 | 556 |
| 557 permissions_parser_->Finalize(this); |
| 558 permissions_parser_.reset(); |
| 559 |
556 finished_parsing_manifest_ = true; | 560 finished_parsing_manifest_ = true; |
557 | 561 |
558 permissions_data_->InitializeManifestPermissions(this); | 562 permissions_data_.reset(new PermissionsData(this)); |
559 permissions_data_->FinalizePermissions(this); | |
560 | 563 |
561 return true; | 564 return true; |
562 } | 565 } |
563 | 566 |
564 bool Extension::LoadRequiredFeatures(base::string16* error) { | 567 bool Extension::LoadRequiredFeatures(base::string16* error) { |
565 if (!LoadName(error) || | 568 if (!LoadName(error) || |
566 !LoadVersion(error)) | 569 !LoadVersion(error)) |
567 return false; | 570 return false; |
568 return true; | 571 return true; |
569 } | 572 } |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 | 788 |
786 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 789 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
787 const Extension* extension, | 790 const Extension* extension, |
788 const PermissionSet* permissions, | 791 const PermissionSet* permissions, |
789 Reason reason) | 792 Reason reason) |
790 : reason(reason), | 793 : reason(reason), |
791 extension(extension), | 794 extension(extension), |
792 permissions(permissions) {} | 795 permissions(permissions) {} |
793 | 796 |
794 } // namespace extensions | 797 } // namespace extensions |
OLD | NEW |