Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: chrome/browser/extensions/updater/extension_updater.h

Issue 1887253002: Rate limit programmatic update checks for extensions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix for idleness waiting problem caused by crrev.com/388245 Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_UPDATER_EXTENSION_UPDATER_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_UPDATER_H_
6 #define CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_UPDATER_H_ 6 #define CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_UPDATER_H_
7 7
8 #include <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 // ExtensionUpdater* updater = new ExtensionUpdater(my_extensions_service, 49 // ExtensionUpdater* updater = new ExtensionUpdater(my_extensions_service,
50 // extension_prefs, 50 // extension_prefs,
51 // pref_service, 51 // pref_service,
52 // profile, 52 // profile,
53 // update_frequency_secs, 53 // update_frequency_secs,
54 // downloader_factory); 54 // downloader_factory);
55 // updater->Start(); 55 // updater->Start();
56 // .... 56 // ....
57 // updater->Stop(); 57 // updater->Stop();
58 class ExtensionUpdater : public ExtensionDownloaderDelegate, 58 class ExtensionUpdater : public ExtensionDownloaderDelegate,
59 public ExtensionRegistryObserver,
60 public content::NotificationObserver { 59 public content::NotificationObserver {
61 public: 60 public:
62 typedef base::Closure FinishedCallback; 61 typedef base::Closure FinishedCallback;
63 62
64 struct CheckParams { 63 struct CheckParams {
65 // Creates a default CheckParams instance that checks for all extensions. 64 // Creates a default CheckParams instance that checks for all extensions.
66 CheckParams(); 65 CheckParams();
67 ~CheckParams(); 66 ~CheckParams();
68 67
69 // The set of extensions that should be checked for updates. If empty 68 // The set of extensions that should be checked for updates. If empty
(...skipping 27 matching lines...) Expand all
97 void Start(); 96 void Start();
98 97
99 // Stops the updater running, cancelling any outstanding update manifest and 98 // Stops the updater running, cancelling any outstanding update manifest and
100 // crx downloads. Does not cancel any in-progress installs. 99 // crx downloads. Does not cancel any in-progress installs.
101 void Stop(); 100 void Stop();
102 101
103 // Posts a task to do an update check. Does nothing if there is 102 // Posts a task to do an update check. Does nothing if there is
104 // already a pending task that has not yet run. 103 // already a pending task that has not yet run.
105 void CheckSoon(); 104 void CheckSoon();
106 105
107 // Starts an update check for the specified extension soon. If a check 106 // Starts an update check for the specified extension soon.
108 // is already running, or finished too recently without an update being 107 void CheckExtensionSoon(const std::string& extension_id,
109 // installed, this method returns false and the check won't be scheduled.
110 bool CheckExtensionSoon(const std::string& extension_id,
111 const FinishedCallback& callback); 108 const FinishedCallback& callback);
112 109
113 // Starts an update check right now, instead of waiting for the next 110 // Starts an update check right now, instead of waiting for the next
114 // regularly scheduled check or a pending check from CheckSoon(). 111 // regularly scheduled check or a pending check from CheckSoon().
115 void CheckNow(const CheckParams& params); 112 void CheckNow(const CheckParams& params);
116 113
117 // Returns true iff CheckSoon() has been called but the update check 114 // Returns true iff CheckSoon() has been called but the update check
118 // hasn't been performed yet. This is used mostly by tests; calling 115 // hasn't been performed yet. This is used mostly by tests; calling
119 // code should just call CheckSoon(). 116 // code should just call CheckSoon().
120 bool WillCheckSoon() const; 117 bool WillCheckSoon() const;
(...skipping 30 matching lines...) Expand all
151 InProgressCheck(); 148 InProgressCheck();
152 InProgressCheck(const InProgressCheck& other); 149 InProgressCheck(const InProgressCheck& other);
153 ~InProgressCheck(); 150 ~InProgressCheck();
154 151
155 bool install_immediately; 152 bool install_immediately;
156 FinishedCallback callback; 153 FinishedCallback callback;
157 // The ids of extensions that have in-progress update checks. 154 // The ids of extensions that have in-progress update checks.
158 std::list<std::string> in_progress_ids_; 155 std::list<std::string> in_progress_ids_;
159 }; 156 };
160 157
161 struct ThrottleInfo;
162
163 // Ensure that we have a valid ExtensionDownloader instance referenced by 158 // Ensure that we have a valid ExtensionDownloader instance referenced by
164 // |downloader|. 159 // |downloader|.
165 void EnsureDownloaderCreated(); 160 void EnsureDownloaderCreated();
166 161
167 // Computes when to schedule the first update check. 162 // Computes when to schedule the first update check.
168 base::TimeDelta DetermineFirstCheckDelay(); 163 base::TimeDelta DetermineFirstCheckDelay();
169 164
170 // Sets the timer to call TimerFired after roughly |target_delay| from now. 165 // Sets the timer to call TimerFired after roughly |target_delay| from now.
171 // To help spread load evenly on servers, this method adds some random 166 // To help spread load evenly on servers, this method adds some random
172 // jitter. It also saves the scheduled time so it can be reloaded on 167 // jitter. It also saves the scheduled time so it can be reloaded on
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 void UpdatePingData(const std::string& id, const PingResult& ping_result); 202 void UpdatePingData(const std::string& id, const PingResult& ping_result);
208 203
209 // Starts installing a crx file that has been fetched but not installed yet. 204 // Starts installing a crx file that has been fetched but not installed yet.
210 void MaybeInstallCRXFile(); 205 void MaybeInstallCRXFile();
211 206
212 // content::NotificationObserver implementation. 207 // content::NotificationObserver implementation.
213 void Observe(int type, 208 void Observe(int type,
214 const content::NotificationSource& source, 209 const content::NotificationSource& source,
215 const content::NotificationDetails& details) override; 210 const content::NotificationDetails& details) override;
216 211
217 // Implementation of ExtensionRegistryObserver.
218 void OnExtensionWillBeInstalled(content::BrowserContext* browser_context,
219 const Extension* extension,
220 bool is_update,
221 const std::string& old_name) override;
222
223 // Send a notification that update checks are starting. 212 // Send a notification that update checks are starting.
224 void NotifyStarted(); 213 void NotifyStarted();
225 214
226 // Send a notification if we're finished updating. 215 // Send a notification if we're finished updating.
227 void NotifyIfFinished(int request_id); 216 void NotifyIfFinished(int request_id);
228 217
229 void ExtensionCheckFinished(const std::string& extension_id, 218 void ExtensionCheckFinished(const std::string& extension_id,
230 const FinishedCallback& callback); 219 const FinishedCallback& callback);
231 220
232 // Whether Start() has been called but not Stop(). 221 // Whether Start() has been called but not Stop().
(...skipping 16 matching lines...) Expand all
249 ExtensionPrefs* extension_prefs_; 238 ExtensionPrefs* extension_prefs_;
250 PrefService* prefs_; 239 PrefService* prefs_;
251 Profile* profile_; 240 Profile* profile_;
252 241
253 std::map<int, InProgressCheck> requests_in_progress_; 242 std::map<int, InProgressCheck> requests_in_progress_;
254 int next_request_id_; 243 int next_request_id_;
255 244
256 // Observes CRX installs we initiate. 245 // Observes CRX installs we initiate.
257 content::NotificationRegistrar registrar_; 246 content::NotificationRegistrar registrar_;
258 247
259 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
260 extension_registry_observer_;
261
262 // True when a CrxInstaller is doing an install. Used in MaybeUpdateCrxFile() 248 // True when a CrxInstaller is doing an install. Used in MaybeUpdateCrxFile()
263 // to keep more than one install from running at once. 249 // to keep more than one install from running at once.
264 bool crx_install_is_running_; 250 bool crx_install_is_running_;
265 251
266 // Fetched CRX files waiting to be installed. 252 // Fetched CRX files waiting to be installed.
267 std::stack<FetchedCRXFile> fetched_crx_files_; 253 std::stack<FetchedCRXFile> fetched_crx_files_;
268 FetchedCRXFile current_crx_file_; 254 FetchedCRXFile current_crx_file_;
269 255
270 ExtensionCache* extension_cache_; 256 ExtensionCache* extension_cache_;
271 257
272 // Keeps track of when an extension tried to update itself, so we can throttle
273 // checks to prevent too many requests from being made.
274 std::map<std::string, ThrottleInfo> throttle_info_;
275
276 base::WeakPtrFactory<ExtensionUpdater> weak_ptr_factory_; 258 base::WeakPtrFactory<ExtensionUpdater> weak_ptr_factory_;
277 259
278 DISALLOW_COPY_AND_ASSIGN(ExtensionUpdater); 260 DISALLOW_COPY_AND_ASSIGN(ExtensionUpdater);
279 }; 261 };
280 262
281 } // namespace extensions 263 } // namespace extensions
282 264
283 #endif // CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_UPDATER_H_ 265 #endif // CHROME_BROWSER_EXTENSIONS_UPDATER_EXTENSION_UPDATER_H_
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.cc ('k') | chrome/browser/extensions/updater/extension_updater.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698