| Index: chrome/browser/extensions/updater/extension_updater.h | 
| diff --git a/chrome/browser/extensions/updater/extension_updater.h b/chrome/browser/extensions/updater/extension_updater.h | 
| index 92851e8c351fb8c2f26e6ec63bc845454399e542..d2568296e1b6fc520220de2e2b083c9269d51ea7 100644 | 
| --- a/chrome/browser/extensions/updater/extension_updater.h | 
| +++ b/chrome/browser/extensions/updater/extension_updater.h | 
| @@ -56,6 +56,7 @@ | 
| // .... | 
| // updater->Stop(); | 
| class ExtensionUpdater : public ExtensionDownloaderDelegate, | 
| +                         public ExtensionRegistryObserver, | 
| public content::NotificationObserver { | 
| public: | 
| typedef base::Closure FinishedCallback; | 
| @@ -103,8 +104,10 @@ | 
| // already a pending task that has not yet run. | 
| void CheckSoon(); | 
|  | 
| -  // Starts an update check for the specified extension soon. | 
| -  void CheckExtensionSoon(const std::string& extension_id, | 
| +  // Starts an update check for the specified extension soon. If a check | 
| +  // is already running, or finished too recently without an update being | 
| +  // installed, this method returns false and the check won't be scheduled. | 
| +  bool CheckExtensionSoon(const std::string& extension_id, | 
| const FinishedCallback& callback); | 
|  | 
| // Starts an update check right now, instead of waiting for the next | 
| @@ -154,6 +157,8 @@ | 
| // The ids of extensions that have in-progress update checks. | 
| std::list<std::string> in_progress_ids_; | 
| }; | 
| + | 
| +  struct ThrottleInfo; | 
|  | 
| // Ensure that we have a valid ExtensionDownloader instance referenced by | 
| // |downloader|. | 
| @@ -209,6 +214,12 @@ | 
| const content::NotificationSource& source, | 
| const content::NotificationDetails& details) override; | 
|  | 
| +  // Implementation of ExtensionRegistryObserver. | 
| +  void OnExtensionWillBeInstalled(content::BrowserContext* browser_context, | 
| +                                  const Extension* extension, | 
| +                                  bool is_update, | 
| +                                  const std::string& old_name) override; | 
| + | 
| // Send a notification that update checks are starting. | 
| void NotifyStarted(); | 
|  | 
| @@ -245,6 +256,9 @@ | 
| // Observes CRX installs we initiate. | 
| content::NotificationRegistrar registrar_; | 
|  | 
| +  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> | 
| +      extension_registry_observer_; | 
| + | 
| // True when a CrxInstaller is doing an install.  Used in MaybeUpdateCrxFile() | 
| // to keep more than one install from running at once. | 
| bool crx_install_is_running_; | 
| @@ -255,6 +269,10 @@ | 
|  | 
| ExtensionCache* extension_cache_; | 
|  | 
| +  // Keeps track of when an extension tried to update itself, so we can throttle | 
| +  // checks to prevent too many requests from being made. | 
| +  std::map<std::string, ThrottleInfo> throttle_info_; | 
| + | 
| base::WeakPtrFactory<ExtensionUpdater> weak_ptr_factory_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(ExtensionUpdater); | 
|  |