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 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ |
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
320 }; | 320 }; |
321 | 321 |
322 // Look up an extension by ID, selecting which sets to look in: | 322 // Look up an extension by ID, selecting which sets to look in: |
323 // * extensions() --> INCLUDE_ENABLED | 323 // * extensions() --> INCLUDE_ENABLED |
324 // * disabled_extensions() --> INCLUDE_DISABLED | 324 // * disabled_extensions() --> INCLUDE_DISABLED |
325 // * terminated_extensions() --> INCLUDE_TERMINATED | 325 // * terminated_extensions() --> INCLUDE_TERMINATED |
326 // * blacklisted_extensions() --> INCLUDE_BLACKLISTED | 326 // * blacklisted_extensions() --> INCLUDE_BLACKLISTED |
327 const extensions::Extension* GetExtensionById(const std::string& id, | 327 const extensions::Extension* GetExtensionById(const std::string& id, |
328 int include_mask) const; | 328 int include_mask) const; |
329 | 329 |
330 // Returns the site of the given |extension_id|. Suitable for use with | |
331 // BrowserContext::GetStoragePartitionForSite() | |
332 GURL GetSiteForExtensionId(const std::string& extension_id); | |
333 | |
330 // Looks up a terminated (crashed) extension by ID. | 334 // Looks up a terminated (crashed) extension by ID. |
331 const extensions::Extension* | 335 const extensions::Extension* |
332 GetTerminatedExtension(const std::string& id) const; | 336 GetTerminatedExtension(const std::string& id) const; |
333 | 337 |
334 // Looks up an extension by ID, regardless of whether it's enabled, | 338 // Looks up an extension by ID, regardless of whether it's enabled, |
335 // disabled, blacklisted, or terminated. | 339 // disabled, blacklisted, or terminated. |
336 virtual const extensions::Extension* GetInstalledExtension( | 340 virtual const extensions::Extension* GetInstalledExtension( |
337 const std::string& id) const OVERRIDE; | 341 const std::string& id) const OVERRIDE; |
338 | 342 |
339 // Updates a currently-installed extension with the contents from | 343 // Updates a currently-installed extension with the contents from |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
771 void TrackTerminatedExtension(const extensions::Extension* extension); | 775 void TrackTerminatedExtension(const extensions::Extension* extension); |
772 | 776 |
773 // Removes the extension with the given id from the list of | 777 // Removes the extension with the given id from the list of |
774 // terminated extensions if it is there. | 778 // terminated extensions if it is there. |
775 void UntrackTerminatedExtension(const std::string& id); | 779 void UntrackTerminatedExtension(const std::string& id); |
776 | 780 |
777 // Update preferences for a new or updated extension; notify observers that | 781 // Update preferences for a new or updated extension; notify observers that |
778 // the extension is installed, e.g., to update event handlers on background | 782 // the extension is installed, e.g., to update event handlers on background |
779 // pages; and perform other extension install tasks before calling | 783 // pages; and perform other extension install tasks before calling |
780 // AddExtension. | 784 // AddExtension. |
781 void AddNewOrUpdatedExtension( | 785 void AddNewOrUpdatedExtension(const extensions::Extension* extension, |
782 const extensions::Extension* extension, | 786 extensions::Extension::State initial_state, |
783 const syncer::StringOrdinal& page_ordinal, | 787 const syncer::StringOrdinal& page_ordinal); |
784 extensions::Extension::State initial_state); | |
785 | 788 |
786 // Handles sending notification that |extension| was loaded. | 789 // Handles sending notification that |extension| was loaded. |
787 void NotifyExtensionLoaded(const extensions::Extension* extension); | 790 void NotifyExtensionLoaded(const extensions::Extension* extension); |
788 | 791 |
789 // Handles sending notification that |extension| was unloaded. | 792 // Handles sending notification that |extension| was unloaded. |
790 void NotifyExtensionUnloaded(const extensions::Extension* extension, | 793 void NotifyExtensionUnloaded(const extensions::Extension* extension, |
791 extension_misc::UnloadedExtensionReason reason); | 794 extension_misc::UnloadedExtensionReason reason); |
792 | 795 |
793 // Common helper to finish installing the given extension. | 796 // Common helper to finish installing the given extension. |
794 void FinishInstallation(const extensions::Extension* extension); | 797 void FinishInstallation(const extensions::Extension* extension); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
838 | 841 |
839 // Helper to determine if an extension is idle, and it should be safe | 842 // Helper to determine if an extension is idle, and it should be safe |
840 // to update the extension. | 843 // to update the extension. |
841 bool IsExtensionIdle(const std::string& extension_id) const; | 844 bool IsExtensionIdle(const std::string& extension_id) const; |
842 | 845 |
843 // Helper to determine if updating an extensions should proceed immediately, | 846 // Helper to determine if updating an extensions should proceed immediately, |
844 // or if we should delay the update until further notice. | 847 // or if we should delay the update until further notice. |
845 bool ShouldDelayExtensionUpdate(const std::string& extension_id, | 848 bool ShouldDelayExtensionUpdate(const std::string& extension_id, |
846 bool wait_for_idle) const; | 849 bool wait_for_idle) const; |
847 | 850 |
851 // Helper to search storage directories for extensions with isolated storage | |
852 // that have been orphaned by an uninstall. | |
853 void GarbageCollectIsolatedStorage(); | |
854 void OnGarbageCollectIsolatedStorageFinished(); | |
855 void OnNeedsToGarbageCollectedIsolatedStorage(); | |
856 | |
848 // extensions::Blacklist::Observer implementation. | 857 // extensions::Blacklist::Observer implementation. |
849 virtual void OnBlacklistUpdated() OVERRIDE; | 858 virtual void OnBlacklistUpdated() OVERRIDE; |
850 | 859 |
851 // Manages the blacklisted extensions, intended as callback from | 860 // Manages the blacklisted extensions, intended as callback from |
852 // Blacklist::GetBlacklistedIDs. | 861 // Blacklist::GetBlacklistedIDs. |
853 void ManageBlacklist(const std::set<std::string>& old_blacklisted_ids, | 862 void ManageBlacklist(const std::set<std::string>& old_blacklisted_ids, |
854 const std::set<std::string>& new_blacklisted_ids); | 863 const std::set<std::string>& new_blacklisted_ids); |
855 | 864 |
865 // Controls if installs are delayed. See comment for |installs_delayed_|. | |
866 void set_installs_delayed(bool value) { installs_delayed_ = value; } | |
867 bool installs_delayed() const { return installs_delayed_; } | |
868 | |
856 // The normal profile associated with this ExtensionService. | 869 // The normal profile associated with this ExtensionService. |
857 Profile* profile_; | 870 Profile* profile_; |
858 | 871 |
859 // The ExtensionSystem for the profile above. | 872 // The ExtensionSystem for the profile above. |
860 extensions::ExtensionSystem* system_; | 873 extensions::ExtensionSystem* system_; |
861 | 874 |
862 // Preferences for the owning profile. | 875 // Preferences for the owning profile. |
863 extensions::ExtensionPrefs* extension_prefs_; | 876 extensions::ExtensionPrefs* extension_prefs_; |
864 | 877 |
865 // Blacklist for the owning profile. | 878 // Blacklist for the owning profile. |
(...skipping 10 matching lines...) Expand all Loading... | |
876 | 889 |
877 // The list of installed extensions that have been terminated. | 890 // The list of installed extensions that have been terminated. |
878 ExtensionSet terminated_extensions_; | 891 ExtensionSet terminated_extensions_; |
879 | 892 |
880 // The list of installed extensions that have been blacklisted. Generally | 893 // The list of installed extensions that have been blacklisted. Generally |
881 // these shouldn't be considered as installed by the extension platform: we | 894 // these shouldn't be considered as installed by the extension platform: we |
882 // only keep them around so that if extensions are blacklisted by mistake | 895 // only keep them around so that if extensions are blacklisted by mistake |
883 // they can easily be un-blacklisted. | 896 // they can easily be un-blacklisted. |
884 ExtensionSet blacklisted_extensions_; | 897 ExtensionSet blacklisted_extensions_; |
885 | 898 |
886 // The list of extension updates that are waiting to be installed. | 899 // The list of extension updates that have had their installs delayed because |
887 ExtensionSet pending_extension_updates_; | 900 // they are waiting for idle. |
901 ExtensionSet delayed_for_idle_updates_; | |
Matt Perry
2012/12/08 01:55:33
nit: delayed_updates_for_idle_
(otherwise it sound
awong
2012/12/08 02:11:09
Done.
| |
902 | |
903 // The list of extension installs delayed by |installs_delayed_|. | |
904 // This is a disjoint set from |delayed_for_idle_updates_|. Extensions in | |
905 // the |delayed_installs_| do not need to wait for idle. | |
906 ExtensionSet delayed_installs_; | |
888 | 907 |
889 // Hold the set of pending extensions. | 908 // Hold the set of pending extensions. |
890 extensions::PendingExtensionManager pending_extension_manager_; | 909 extensions::PendingExtensionManager pending_extension_manager_; |
891 | 910 |
892 // The map of extension IDs to their runtime data. | 911 // The map of extension IDs to their runtime data. |
893 ExtensionRuntimeDataMap extension_runtime_data_; | 912 ExtensionRuntimeDataMap extension_runtime_data_; |
894 | 913 |
895 // The full path to the directory where extensions are installed. | 914 // The full path to the directory where extensions are installed. |
896 FilePath install_directory_; | 915 FilePath install_directory_; |
897 | 916 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
995 // has to wait for the external providers. Used in | 1014 // has to wait for the external providers. Used in |
996 // OnAllExternalProvidersReady() to determine if an update check is needed to | 1015 // OnAllExternalProvidersReady() to determine if an update check is needed to |
997 // install pending extensions. | 1016 // install pending extensions. |
998 bool update_once_all_providers_are_ready_; | 1017 bool update_once_all_providers_are_ready_; |
999 | 1018 |
1000 // Set when the browser is terminating. Prevents us from installing or | 1019 // Set when the browser is terminating. Prevents us from installing or |
1001 // updating additional extensions and allows in-progress installations to | 1020 // updating additional extensions and allows in-progress installations to |
1002 // decide to abort. | 1021 // decide to abort. |
1003 bool browser_terminating_; | 1022 bool browser_terminating_; |
1004 | 1023 |
1024 // Set to true to delay all new extension installations. Acts as a lock | |
1025 // to allow background processing of tasks such as garbage collection of | |
1026 // on-disk state without needing to worry about race conditions caused | |
1027 // by extension installation and reinstallation. | |
1028 bool installs_delayed_; | |
1029 | |
1005 NaClModuleInfoList nacl_module_list_; | 1030 NaClModuleInfoList nacl_module_list_; |
1006 | 1031 |
1007 extensions::AppSyncBundle app_sync_bundle_; | 1032 extensions::AppSyncBundle app_sync_bundle_; |
1008 extensions::ExtensionSyncBundle extension_sync_bundle_; | 1033 extensions::ExtensionSyncBundle extension_sync_bundle_; |
1009 | 1034 |
1010 extensions::ProcessMap process_map_; | 1035 extensions::ProcessMap process_map_; |
1011 | 1036 |
1012 extensions::AppShortcutManager app_shortcut_manager_; | 1037 extensions::AppShortcutManager app_shortcut_manager_; |
1013 | 1038 |
1014 scoped_ptr<ExtensionErrorUI> extension_error_ui_; | 1039 scoped_ptr<ExtensionErrorUI> extension_error_ui_; |
1015 // Sequenced task runner for extension related file operations. | 1040 // Sequenced task runner for extension related file operations. |
1016 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; | 1041 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; |
1017 | 1042 |
1018 #if defined(ENABLE_EXTENSIONS) | 1043 #if defined(ENABLE_EXTENSIONS) |
1019 scoped_ptr<extensions::ExtensionActionStorageManager> | 1044 scoped_ptr<extensions::ExtensionActionStorageManager> |
1020 extension_action_storage_manager_; | 1045 extension_action_storage_manager_; |
1021 #endif | 1046 #endif |
1022 | 1047 |
1023 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, | 1048 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, |
1024 InstallAppsWithUnlimtedStorage); | 1049 InstallAppsWithUnlimtedStorage); |
1025 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, | 1050 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, |
1026 InstallAppsAndCheckStorageProtection); | 1051 InstallAppsAndCheckStorageProtection); |
1027 DISALLOW_COPY_AND_ASSIGN(ExtensionService); | 1052 DISALLOW_COPY_AND_ASSIGN(ExtensionService); |
1028 }; | 1053 }; |
1029 | 1054 |
1030 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ | 1055 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ |
OLD | NEW |