| Index: chrome/browser/extensions/extension_service.h
|
| diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
|
| index ef7107139658a0e8e952fa39b37ade15b81b3756..56bd1ac91676e2eb24cf74d73364a7b19ece156f 100644
|
| --- a/chrome/browser/extensions/extension_service.h
|
| +++ b/chrome/browser/extensions/extension_service.h
|
| @@ -325,6 +325,10 @@ class ExtensionService
|
| const extensions::Extension* GetExtensionById(const std::string& id,
|
| int include_mask) const;
|
|
|
| + // Returns the site of the given |extension_id|. Suitable for use with
|
| + // BrowserContext::GetStoragePartitionForSite().
|
| + GURL GetSiteForExtensionId(const std::string& extension_id);
|
| +
|
| // Looks up a terminated (crashed) extension by ID.
|
| const extensions::Extension*
|
| GetTerminatedExtension(const std::string& id) const;
|
| @@ -780,10 +784,9 @@ class ExtensionService
|
| // the extension is installed, e.g., to update event handlers on background
|
| // pages; and perform other extension install tasks before calling
|
| // AddExtension.
|
| - void AddNewOrUpdatedExtension(
|
| - const extensions::Extension* extension,
|
| - const syncer::StringOrdinal& page_ordinal,
|
| - extensions::Extension::State initial_state);
|
| + void AddNewOrUpdatedExtension(const extensions::Extension* extension,
|
| + extensions::Extension::State initial_state,
|
| + const syncer::StringOrdinal& page_ordinal);
|
|
|
| // Handles sending notification that |extension| was loaded.
|
| void NotifyExtensionLoaded(const extensions::Extension* extension);
|
| @@ -847,6 +850,12 @@ class ExtensionService
|
| bool ShouldDelayExtensionUpdate(const std::string& extension_id,
|
| bool wait_for_idle) const;
|
|
|
| + // Helper to search storage directories for extensions with isolated storage
|
| + // that have been orphaned by an uninstall.
|
| + void GarbageCollectIsolatedStorage();
|
| + void OnGarbageCollectIsolatedStorageFinished();
|
| + void OnNeedsToGarbageCollectIsolatedStorage();
|
| +
|
| // extensions::Blacklist::Observer implementation.
|
| virtual void OnBlacklistUpdated() OVERRIDE;
|
|
|
| @@ -855,6 +864,10 @@ class ExtensionService
|
| void ManageBlacklist(const std::set<std::string>& old_blacklisted_ids,
|
| const std::set<std::string>& new_blacklisted_ids);
|
|
|
| + // Controls if installs are delayed. See comment for |installs_delayed_|.
|
| + void set_installs_delayed(bool value) { installs_delayed_ = value; }
|
| + bool installs_delayed() const { return installs_delayed_; }
|
| +
|
| // The normal profile associated with this ExtensionService.
|
| Profile* profile_;
|
|
|
| @@ -885,8 +898,14 @@ class ExtensionService
|
| // they can easily be un-blacklisted.
|
| ExtensionSet blacklisted_extensions_;
|
|
|
| - // The list of extension updates that are waiting to be installed.
|
| - ExtensionSet pending_extension_updates_;
|
| + // The list of extension updates that have had their installs delayed because
|
| + // they are waiting for idle.
|
| + ExtensionSet delayed_updates_for_idle_;
|
| +
|
| + // The list of extension installs delayed by |installs_delayed_|.
|
| + // This is a disjoint set from |delayed_updates_for_idle_|. Extensions in
|
| + // the |delayed_installs_| do not need to wait for idle.
|
| + ExtensionSet delayed_installs_;
|
|
|
| // Hold the set of pending extensions.
|
| extensions::PendingExtensionManager pending_extension_manager_;
|
| @@ -1000,6 +1019,12 @@ class ExtensionService
|
| // decide to abort.
|
| bool browser_terminating_;
|
|
|
| + // Set to true to delay all new extension installations. Acts as a lock
|
| + // to allow background processing of tasks such as garbage collection of
|
| + // on-disk state without needing to worry about race conditions caused
|
| + // by extension installation and reinstallation.
|
| + bool installs_delayed_;
|
| +
|
| // Whether any extension should be considered for wipeout.
|
| bool wipeout_is_active_;
|
|
|
|
|