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 #ifndef CHROME_COMMON_EXTENSIONS_EXTENSION_H_ | 5 #ifndef CHROME_COMMON_EXTENSIONS_EXTENSION_H_ |
6 #define CHROME_COMMON_EXTENSIONS_EXTENSION_H_ | 6 #define CHROME_COMMON_EXTENSIONS_EXTENSION_H_ |
7 | 7 |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <iosfwd> | 9 #include <iosfwd> |
10 #include <map> | 10 #include <map> |
11 #include <set> | 11 #include <set> |
12 #include <string> | 12 #include <string> |
13 #include <utility> | 13 #include <utility> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/file_path.h" | 16 #include "base/file_path.h" |
17 #include "base/gtest_prod_util.h" | 17 #include "base/gtest_prod_util.h" |
18 #include "base/hash_tables.h" | 18 #include "base/hash_tables.h" |
19 #include "base/memory/linked_ptr.h" | 19 #include "base/memory/linked_ptr.h" |
20 #include "base/memory/ref_counted.h" | 20 #include "base/memory/ref_counted.h" |
21 #include "base/memory/scoped_ptr.h" | 21 #include "base/memory/scoped_ptr.h" |
22 #include "base/synchronization/lock.h" | 22 #include "base/synchronization/lock.h" |
23 #include "base/threading/thread_checker.h" | 23 #include "base/threading/thread_checker.h" |
24 #include "chrome/common/extensions/extension_constants.h" | 24 #include "chrome/common/extensions/extension_constants.h" |
25 #include "chrome/common/extensions/extension_icon_set.h" | 25 #include "chrome/common/extensions/extension_icon_set.h" |
26 #include "chrome/common/extensions/manifest.h" | 26 #include "chrome/common/extensions/manifest.h" |
27 #include "chrome/common/extensions/permissions/api_permission.h" | 27 #include "chrome/common/extensions/permissions/api_permission.h" |
28 #include "chrome/common/extensions/permissions/api_permission_set.h" | |
29 #include "chrome/common/extensions/permissions/permission_message.h" | 28 #include "chrome/common/extensions/permissions/permission_message.h" |
30 #include "chrome/common/extensions/user_script.h" | 29 #include "chrome/common/extensions/user_script.h" |
31 #include "extensions/common/install_warning.h" | 30 #include "extensions/common/install_warning.h" |
32 #include "extensions/common/url_pattern.h" | 31 #include "extensions/common/url_pattern.h" |
33 #include "extensions/common/url_pattern_set.h" | 32 #include "extensions/common/url_pattern_set.h" |
34 #include "googleurl/src/gurl.h" | 33 #include "googleurl/src/gurl.h" |
35 #include "ui/base/accelerators/accelerator.h" | 34 #include "ui/base/accelerators/accelerator.h" |
36 #include "ui/gfx/size.h" | 35 #include "ui/gfx/size.h" |
37 | 36 |
38 class ExtensionAction; | 37 class ExtensionAction; |
39 class ExtensionResource; | 38 class ExtensionResource; |
40 class SkBitmap; | 39 class SkBitmap; |
41 class Version; | 40 class Version; |
42 | 41 |
43 namespace base { | 42 namespace base { |
44 class DictionaryValue; | 43 class DictionaryValue; |
45 class ListValue; | 44 class ListValue; |
46 } | 45 } |
47 | 46 |
48 namespace gfx { | 47 namespace gfx { |
49 class ImageSkia; | 48 class ImageSkia; |
50 } | 49 } |
51 | 50 |
52 FORWARD_DECLARE_TEST(TabStripModelTest, Apps); | 51 FORWARD_DECLARE_TEST(TabStripModelTest, Apps); |
53 | 52 |
54 namespace extensions { | 53 namespace extensions { |
55 struct ActionInfo; | 54 struct ActionInfo; |
| 55 class APIPermissionSet; |
56 class PermissionSet; | 56 class PermissionSet; |
57 | 57 |
58 // Represents a Chrome extension. | 58 // Represents a Chrome extension. |
59 class Extension : public base::RefCountedThreadSafe<Extension> { | 59 class Extension : public base::RefCountedThreadSafe<Extension> { |
60 public: | 60 public: |
61 struct ManifestData; | 61 struct ManifestData; |
62 | 62 |
63 typedef std::vector<std::string> ScriptingWhitelist; | 63 typedef std::vector<std::string> ScriptingWhitelist; |
64 typedef std::map<const std::string, linked_ptr<ManifestData> > | 64 typedef std::map<const std::string, linked_ptr<ManifestData> > |
65 ManifestDataMap; | 65 ManifestDataMap; |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 } | 522 } |
523 bool has_lazy_background_page() const { | 523 bool has_lazy_background_page() const { |
524 return has_background_page() && !background_page_is_persistent_; | 524 return has_background_page() && !background_page_is_persistent_; |
525 } | 525 } |
526 const PermissionSet* optional_permission_set() const { | 526 const PermissionSet* optional_permission_set() const { |
527 return optional_permission_set_.get(); | 527 return optional_permission_set_.get(); |
528 } | 528 } |
529 const PermissionSet* required_permission_set() const { | 529 const PermissionSet* required_permission_set() const { |
530 return required_permission_set_.get(); | 530 return required_permission_set_.get(); |
531 } | 531 } |
| 532 // Returns the temporary APIPermissionSet used in initialization. |
| 533 // (NULL after initialization is completed.) |
| 534 APIPermissionSet* initial_api_permissions() { |
| 535 return initial_api_permissions_.get(); |
| 536 } |
532 // Appends |new_warning[s]| to install_warnings_. | 537 // Appends |new_warning[s]| to install_warnings_. |
533 void AddInstallWarning(const InstallWarning& new_warning); | 538 void AddInstallWarning(const InstallWarning& new_warning); |
534 void AddInstallWarnings(const std::vector<InstallWarning>& new_warnings); | 539 void AddInstallWarnings(const std::vector<InstallWarning>& new_warnings); |
535 const std::vector<InstallWarning>& install_warnings() const { | 540 const std::vector<InstallWarning>& install_warnings() const { |
536 return install_warnings_; | 541 return install_warnings_; |
537 } | 542 } |
538 const ExtensionIconSet& icons() const { return icons_; } | 543 const ExtensionIconSet& icons() const { return icons_; } |
539 const extensions::Manifest* manifest() const { | 544 const extensions::Manifest* manifest() const { |
540 return manifest_.get(); | 545 return manifest_.get(); |
541 } | 546 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 // TODO(aa): Rename to just Init()? There's no Value here anymore. | 640 // TODO(aa): Rename to just Init()? There's no Value here anymore. |
636 // TODO(aa): It is really weird the way this class essentially contains a copy | 641 // TODO(aa): It is really weird the way this class essentially contains a copy |
637 // of the underlying DictionaryValue in its members. We should decide to | 642 // of the underlying DictionaryValue in its members. We should decide to |
638 // either wrap the DictionaryValue and go with that only, or we should parse | 643 // either wrap the DictionaryValue and go with that only, or we should parse |
639 // into strong types and discard the value. But doing both is bad. | 644 // into strong types and discard the value. But doing both is bad. |
640 bool InitFromValue(int flags, string16* error); | 645 bool InitFromValue(int flags, string16* error); |
641 | 646 |
642 // The following are helpers for InitFromValue to load various features of the | 647 // The following are helpers for InitFromValue to load various features of the |
643 // extension from the manifest. | 648 // extension from the manifest. |
644 | 649 |
645 bool LoadAppIsolation(const APIPermissionSet& api_permissions, | 650 bool LoadAppIsolation(string16* error); |
646 string16* error); | |
647 | 651 |
648 bool LoadRequiredFeatures(string16* error); | 652 bool LoadRequiredFeatures(string16* error); |
649 bool LoadName(string16* error); | 653 bool LoadName(string16* error); |
650 bool LoadVersion(string16* error); | 654 bool LoadVersion(string16* error); |
651 | 655 |
652 bool LoadAppFeatures(string16* error); | 656 bool LoadAppFeatures(string16* error); |
653 bool LoadExtent(const char* key, | 657 bool LoadExtent(const char* key, |
654 URLPatternSet* extent, | 658 URLPatternSet* extent, |
655 const char* list_error, | 659 const char* list_error, |
656 const char* value_error, | 660 const char* value_error, |
657 string16* error); | 661 string16* error); |
658 bool LoadLaunchContainer(string16* error); | 662 bool LoadLaunchContainer(string16* error); |
659 bool LoadLaunchURL(string16* error); | 663 bool LoadLaunchURL(string16* error); |
660 | 664 |
661 bool LoadSharedFeatures(const APIPermissionSet& api_permissions, | 665 bool LoadSharedFeatures(string16* error); |
662 string16* error); | |
663 bool LoadDescription(string16* error); | 666 bool LoadDescription(string16* error); |
664 bool LoadManifestVersion(string16* error); | 667 bool LoadManifestVersion(string16* error); |
665 bool LoadIcons(string16* error); | 668 bool LoadIcons(string16* error); |
666 bool LoadPlugins(string16* error); | 669 bool LoadPlugins(string16* error); |
667 bool LoadNaClModules(string16* error); | 670 bool LoadNaClModules(string16* error); |
668 bool LoadSandboxedPages(string16* error); | 671 bool LoadSandboxedPages(string16* error); |
669 // Must be called after LoadPlugins(). | 672 // Must be called after LoadPlugins(). |
670 bool LoadRequirements(string16* error); | 673 bool LoadRequirements(string16* error); |
671 bool LoadOfflineEnabled(string16* error); | 674 bool LoadOfflineEnabled(string16* error); |
672 bool LoadBackgroundScripts(string16* error); | 675 bool LoadBackgroundScripts(string16* error); |
673 bool LoadBackgroundScripts(const std::string& key, string16* error); | 676 bool LoadBackgroundScripts(const std::string& key, string16* error); |
674 bool LoadBackgroundPage(const APIPermissionSet& api_permissions, | 677 bool LoadBackgroundPage(string16* error); |
| 678 bool LoadBackgroundPage(const std::string& key, |
675 string16* error); | 679 string16* error); |
676 bool LoadBackgroundPage(const std::string& key, | 680 bool LoadBackgroundPersistent(string16* error); |
677 const APIPermissionSet& api_permissions, | 681 bool LoadBackgroundAllowJSAccess(string16* error); |
678 string16* error); | 682 bool LoadExtensionFeatures(string16* error); |
679 bool LoadBackgroundPersistent( | |
680 const APIPermissionSet& api_permissions, | |
681 string16* error); | |
682 bool LoadBackgroundAllowJSAccess( | |
683 const APIPermissionSet& api_permissions, | |
684 string16* error); | |
685 bool LoadExtensionFeatures(APIPermissionSet* api_permissions, | |
686 string16* error); | |
687 bool LoadContentScripts(string16* error); | 683 bool LoadContentScripts(string16* error); |
688 bool LoadBrowserAction(string16* error); | 684 bool LoadBrowserAction(string16* error); |
689 bool LoadSystemIndicator(APIPermissionSet* api_permissions, string16* error); | 685 bool LoadSystemIndicator(string16* error); |
690 bool LoadTextToSpeechVoices(string16* error); | 686 bool LoadTextToSpeechVoices(string16* error); |
691 bool LoadIncognitoMode(string16* error); | 687 bool LoadIncognitoMode(string16* error); |
692 bool LoadContentSecurityPolicy(string16* error); | 688 bool LoadContentSecurityPolicy(string16* error); |
693 bool LoadManagedModeFeatures(string16* error); | 689 bool LoadManagedModeFeatures(string16* error); |
694 bool LoadManagedModeSites( | 690 bool LoadManagedModeSites( |
695 const base::DictionaryValue* content_pack_value, | 691 const base::DictionaryValue* content_pack_value, |
696 string16* error); | 692 string16* error); |
697 bool LoadManagedModeConfigurations( | 693 bool LoadManagedModeConfigurations( |
698 const base::DictionaryValue* content_pack_value, | 694 const base::DictionaryValue* content_pack_value, |
699 string16* error); | 695 string16* error); |
(...skipping 22 matching lines...) Expand all Loading... |
722 // |override_url|. | 718 // |override_url|. |
723 void OverrideLaunchUrl(const GURL& override_url); | 719 void OverrideLaunchUrl(const GURL& override_url); |
724 | 720 |
725 // Custom checks for the experimental permission that can't be expressed in | 721 // Custom checks for the experimental permission that can't be expressed in |
726 // _permission_features.json. | 722 // _permission_features.json. |
727 bool CanSpecifyExperimentalPermission() const; | 723 bool CanSpecifyExperimentalPermission() const; |
728 | 724 |
729 // Checks whether the host |pattern| is allowed for this extension, given API | 725 // Checks whether the host |pattern| is allowed for this extension, given API |
730 // permissions |permissions|. | 726 // permissions |permissions|. |
731 bool CanSpecifyHostPermission(const URLPattern& pattern, | 727 bool CanSpecifyHostPermission(const URLPattern& pattern, |
732 const APIPermissionSet& permissions) const; | 728 const APIPermissionSet& permissions) const; |
733 | 729 |
734 bool CheckMinimumChromeVersion(string16* error) const; | 730 bool CheckMinimumChromeVersion(string16* error) const; |
735 | 731 |
736 // Check that platform app features are valid. Called after InitFromValue. | 732 // Check that platform app features are valid. Called after InitFromValue. |
737 bool CheckPlatformAppFeatures(std::string* utf8_error) const; | 733 bool CheckPlatformAppFeatures(std::string* utf8_error) const; |
738 | 734 |
739 // Check that features don't conflict. Called after InitFromValue. | 735 // Check that features don't conflict. Called after InitFromValue. |
740 bool CheckConflictingFeatures(std::string* utf8_error) const; | 736 bool CheckConflictingFeatures(std::string* utf8_error) const; |
741 | 737 |
742 // The extension's human-readable name. Name is used for display purpose. It | 738 // The extension's human-readable name. Name is used for display purpose. It |
(...skipping 27 matching lines...) Expand all Loading... |
770 // Whether the extension or app should be enabled when offline. | 766 // Whether the extension or app should be enabled when offline. |
771 bool offline_enabled_; | 767 bool offline_enabled_; |
772 | 768 |
773 // Defines the set of URLs in the extension's web content. | 769 // Defines the set of URLs in the extension's web content. |
774 URLPatternSet extent_; | 770 URLPatternSet extent_; |
775 | 771 |
776 // The extension runtime data. | 772 // The extension runtime data. |
777 mutable base::Lock runtime_data_lock_; | 773 mutable base::Lock runtime_data_lock_; |
778 mutable RuntimeData runtime_data_; | 774 mutable RuntimeData runtime_data_; |
779 | 775 |
| 776 // The API permission set; used during extension initialization. |
| 777 // Cleared after permissions are finalized by SetActivePermissions. |
| 778 scoped_ptr<APIPermissionSet> initial_api_permissions_; |
| 779 |
780 // The set of permissions the extension can request at runtime. | 780 // The set of permissions the extension can request at runtime. |
781 scoped_refptr<const PermissionSet> optional_permission_set_; | 781 scoped_refptr<const PermissionSet> optional_permission_set_; |
782 | 782 |
783 // The extension's required / default set of permissions. | 783 // The extension's required / default set of permissions. |
784 scoped_refptr<const PermissionSet> required_permission_set_; | 784 scoped_refptr<const PermissionSet> required_permission_set_; |
785 | 785 |
786 // Any warnings that occurred when trying to create/parse the extension. | 786 // Any warnings that occurred when trying to create/parse the extension. |
787 std::vector<InstallWarning> install_warnings_; | 787 std::vector<InstallWarning> install_warnings_; |
788 | 788 |
789 // The icons for the extension. | 789 // The icons for the extension. |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
961 | 961 |
962 UpdatedExtensionPermissionsInfo( | 962 UpdatedExtensionPermissionsInfo( |
963 const Extension* extension, | 963 const Extension* extension, |
964 const PermissionSet* permissions, | 964 const PermissionSet* permissions, |
965 Reason reason); | 965 Reason reason); |
966 }; | 966 }; |
967 | 967 |
968 } // namespace extensions | 968 } // namespace extensions |
969 | 969 |
970 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_ | 970 #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_ |
OLD | NEW |