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

Side by Side Diff: chrome/browser/extensions/extensions_service.h

Issue 1232003: Added support for pending extensions to ExtensionsService and (Closed)
Patch Set: synced to head Created 10 years, 9 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_EXTENSIONS_SERVICE_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_ 6 #define CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 11 matching lines...) Expand all
22 #include "chrome/browser/extensions/extension_menu_manager.h" 22 #include "chrome/browser/extensions/extension_menu_manager.h"
23 #include "chrome/browser/extensions/extension_prefs.h" 23 #include "chrome/browser/extensions/extension_prefs.h"
24 #include "chrome/browser/extensions/extension_process_manager.h" 24 #include "chrome/browser/extensions/extension_process_manager.h"
25 #include "chrome/browser/extensions/extension_toolbar_model.h" 25 #include "chrome/browser/extensions/extension_toolbar_model.h"
26 #include "chrome/browser/extensions/extensions_quota_service.h" 26 #include "chrome/browser/extensions/extensions_quota_service.h"
27 #include "chrome/browser/extensions/external_extension_provider.h" 27 #include "chrome/browser/extensions/external_extension_provider.h"
28 #include "chrome/browser/extensions/sandboxed_extension_unpacker.h" 28 #include "chrome/browser/extensions/sandboxed_extension_unpacker.h"
29 #include "chrome/common/notification_observer.h" 29 #include "chrome/common/notification_observer.h"
30 #include "chrome/common/notification_registrar.h" 30 #include "chrome/common/notification_registrar.h"
31 #include "chrome/common/extensions/extension.h" 31 #include "chrome/common/extensions/extension.h"
32 #include "testing/gtest/include/gtest/gtest_prod.h"
32 33
33 class Browser; 34 class Browser;
34 class ExtensionsServiceBackend; 35 class ExtensionsServiceBackend;
35 class ExtensionToolbarModel; 36 class ExtensionToolbarModel;
36 class ExtensionUpdater; 37 class ExtensionUpdater;
37 class GURL; 38 class GURL;
38 class PrefService; 39 class PrefService;
39 class Profile; 40 class Profile;
40 class ResourceDispatcherHost; 41 class ResourceDispatcherHost;
41 class SiteInstance; 42 class SiteInstance;
43 class Version;
44
45 // A pending extension is an extension that hasn't been installed yet
46 // and is intended to be installed in the next auto-update cycle. The
47 // update URL of a pending extension may be blank, in which case a
48 // default one is assumed.
49 struct PendingExtensionInfo {
50 PendingExtensionInfo(const GURL& update_url,
51 const Version& version,
52 bool is_theme,
53 bool install_silently);
54
55 PendingExtensionInfo();
56
57 GURL update_url;
58 Version version;
59 bool is_theme;
60 bool install_silently;
61 };
62
63 // A PendingExtensionMap is a map from IDs of pending extensions to
64 // their info.
65 typedef std::map<std::string, PendingExtensionInfo> PendingExtensionMap;
42 66
43 // This is an interface class to encapsulate the dependencies that 67 // This is an interface class to encapsulate the dependencies that
44 // ExtensionUpdater has on ExtensionsService. This allows easy mocking. 68 // ExtensionUpdater has on ExtensionsService. This allows easy mocking.
45 class ExtensionUpdateService { 69 class ExtensionUpdateService {
46 public: 70 public:
47 virtual ~ExtensionUpdateService() {} 71 virtual ~ExtensionUpdateService() {}
48 virtual const ExtensionList* extensions() const = 0; 72 virtual const ExtensionList* extensions() const = 0;
73 virtual const PendingExtensionMap& pending_extensions() const = 0;
49 virtual void UpdateExtension(const std::string& id, const FilePath& path, 74 virtual void UpdateExtension(const std::string& id, const FilePath& path,
50 const GURL& download_url) = 0; 75 const GURL& download_url) = 0;
51 virtual Extension* GetExtensionById(const std::string& id, 76 virtual Extension* GetExtensionById(const std::string& id,
52 bool include_disabled) = 0; 77 bool include_disabled) = 0;
53 virtual void UpdateExtensionBlacklist( 78 virtual void UpdateExtensionBlacklist(
54 const std::vector<std::string>& blacklist) = 0; 79 const std::vector<std::string>& blacklist) = 0;
55 virtual bool HasInstalledExtensions() = 0; 80 virtual bool HasInstalledExtensions() = 0;
56 81
57 // These set/get a server-provided time representing the start of the last day 82 // These set/get a server-provided time representing the start of the last day
58 // that we sent the 'ping' parameter during an update check. 83 // that we sent the 'ping' parameter during an update check.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 PrefService* prefs, 133 PrefService* prefs,
109 const FilePath& install_directory, 134 const FilePath& install_directory,
110 bool autoupdate_enabled); 135 bool autoupdate_enabled);
111 136
112 // Gets the list of currently installed extensions. 137 // Gets the list of currently installed extensions.
113 virtual const ExtensionList* extensions() const { return &extensions_; } 138 virtual const ExtensionList* extensions() const { return &extensions_; }
114 virtual const ExtensionList* disabled_extensions() const { 139 virtual const ExtensionList* disabled_extensions() const {
115 return &disabled_extensions_; 140 return &disabled_extensions_;
116 } 141 }
117 142
143 // Gets the set of pending extensions.
144 virtual const PendingExtensionMap& pending_extensions() const {
145 return pending_extensions_;
146 }
147
118 // Registers an extension to be loaded as a component extension. 148 // Registers an extension to be loaded as a component extension.
119 void register_component_extension(const ComponentExtensionInfo& info) { 149 void register_component_extension(const ComponentExtensionInfo& info) {
120 component_extension_manifests_.push_back(info); 150 component_extension_manifests_.push_back(info);
121 } 151 }
122 152
123 // Returns true if any extensions are installed. 153 // Returns true if any extensions are installed.
124 virtual bool HasInstalledExtensions() { 154 virtual bool HasInstalledExtensions() {
125 return !(extensions_.empty() && disabled_extensions_.empty()); 155 return !(extensions_.empty() && disabled_extensions_.empty());
126 } 156 }
127 157
(...skipping 24 matching lines...) Expand all
152 void InstallExtension(const FilePath& extension_path); 182 void InstallExtension(const FilePath& extension_path);
153 183
154 // Updates a currently-installed extension with the contents from 184 // Updates a currently-installed extension with the contents from
155 // |extension_path|. 185 // |extension_path|.
156 // TODO(aa): This method can be removed. ExtensionUpdater could use 186 // TODO(aa): This method can be removed. ExtensionUpdater could use
157 // CrxInstaller directly instead. 187 // CrxInstaller directly instead.
158 virtual void UpdateExtension(const std::string& id, 188 virtual void UpdateExtension(const std::string& id,
159 const FilePath& extension_path, 189 const FilePath& extension_path,
160 const GURL& download_url); 190 const GURL& download_url);
161 191
192 // If an extension with the given id is already installed,
193 // does nothing. Otherwise, the extension will be installed in the
194 // next auto-update cycle.
195 //
196 // TODO(akalin): Make sure that all the places that check for
197 // existing versions also consult the pending extension info.
198 void AddPendingExtension(
199 const std::string& id, const GURL& update_url,
200 const Version& version, bool is_theme, bool install_silently);
201
162 // Reloads the specified extension. 202 // Reloads the specified extension.
163 void ReloadExtension(const std::string& extension_id); 203 void ReloadExtension(const std::string& extension_id);
164 204
165 // Uninstalls the specified extension. Callers should only call this method 205 // Uninstalls the specified extension. Callers should only call this method
166 // with extensions that exist. |external_uninstall| is a magical parameter 206 // with extensions that exist. |external_uninstall| is a magical parameter
167 // that is only used to send information to ExtensionPrefs, which external 207 // that is only used to send information to ExtensionPrefs, which external
168 // callers should never set to true. 208 // callers should never set to true.
169 // TODO(aa): Remove |external_uninstall| -- this information should be passed 209 // TODO(aa): Remove |external_uninstall| -- this information should be passed
170 // to ExtensionPrefs some other way. 210 // to ExtensionPrefs some other way.
171 void UninstallExtension(const std::string& extension_id, 211 void UninstallExtension(const std::string& extension_id,
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 335
296 // Clear all persistent data that may have been stored by the extension. 336 // Clear all persistent data that may have been stored by the extension.
297 void ClearExtensionData(const GURL& extension_url); 337 void ClearExtensionData(const GURL& extension_url);
298 338
299 // Look up an extension by ID, optionally including either or both of enabled 339 // Look up an extension by ID, optionally including either or both of enabled
300 // and disabled extensions. 340 // and disabled extensions.
301 Extension* GetExtensionByIdInternal(const std::string& id, 341 Extension* GetExtensionByIdInternal(const std::string& id,
302 bool include_enabled, 342 bool include_enabled,
303 bool include_disabled); 343 bool include_disabled);
304 344
345 // Like AddPendingExtension() but assumes an extension with the same
346 // id is not already installed.
347 void AddPendingExtensionInternal(
348 const std::string& id, const GURL& update_url,
349 const Version& version, bool is_theme, bool install_silently);
350
305 // Handles sending notification that |extension| was loaded. 351 // Handles sending notification that |extension| was loaded.
306 void NotifyExtensionLoaded(Extension* extension); 352 void NotifyExtensionLoaded(Extension* extension);
307 353
308 // Handles sending notification that |extension| was unloaded. 354 // Handles sending notification that |extension| was unloaded.
309 void NotifyExtensionUnloaded(Extension* extension); 355 void NotifyExtensionUnloaded(Extension* extension);
310 356
311 // Helper that updates the active extension list used for crash reporting. 357 // Helper that updates the active extension list used for crash reporting.
312 void UpdateActiveExtensionsInCrashReporter(); 358 void UpdateActiveExtensionsInCrashReporter();
313 359
314 // Helper method. Loads extension from prefs. 360 // Helper method. Loads extension from prefs.
315 void LoadInstalledExtension(const ExtensionInfo& info, bool relocalize); 361 void LoadInstalledExtension(const ExtensionInfo& info, bool relocalize);
316 362
317 // The profile this ExtensionsService is part of. 363 // The profile this ExtensionsService is part of.
318 Profile* profile_; 364 Profile* profile_;
319 365
320 // Preferences for the owning profile. 366 // Preferences for the owning profile.
321 scoped_ptr<ExtensionPrefs> extension_prefs_; 367 scoped_ptr<ExtensionPrefs> extension_prefs_;
322 368
323 // The current list of installed extensions. 369 // The current list of installed extensions.
324 ExtensionList extensions_; 370 ExtensionList extensions_;
325 371
326 // The list of installed extensions that have been disabled. 372 // The list of installed extensions that have been disabled.
327 ExtensionList disabled_extensions_; 373 ExtensionList disabled_extensions_;
328 374
375 // The set of pending extensions.
376 PendingExtensionMap pending_extensions_;
377
329 // The full path to the directory where extensions are installed. 378 // The full path to the directory where extensions are installed.
330 FilePath install_directory_; 379 FilePath install_directory_;
331 380
332 // Whether or not extensions are enabled. 381 // Whether or not extensions are enabled.
333 bool extensions_enabled_; 382 bool extensions_enabled_;
334 383
335 // Whether to notify users when they attempt to install an extension. 384 // Whether to notify users when they attempt to install an extension.
336 bool show_extensions_prompts_; 385 bool show_extensions_prompts_;
337 386
338 // The backend that will do IO on behalf of this instance. 387 // The backend that will do IO on behalf of this instance.
(...skipping 24 matching lines...) Expand all
363 412
364 NotificationRegistrar registrar_; 413 NotificationRegistrar registrar_;
365 414
366 // Keeps track of menu items added by extensions. 415 // Keeps track of menu items added by extensions.
367 ExtensionMenuManager menu_manager_; 416 ExtensionMenuManager menu_manager_;
368 417
369 // List of registered component extensions (see Extension::Location). 418 // List of registered component extensions (see Extension::Location).
370 typedef std::vector<ComponentExtensionInfo> RegisteredComponentExtensions; 419 typedef std::vector<ComponentExtensionInfo> RegisteredComponentExtensions;
371 RegisteredComponentExtensions component_extension_manifests_; 420 RegisteredComponentExtensions component_extension_manifests_;
372 421
422 FRIEND_TEST(ExtensionsServiceTest, UpdatePendingExtensionAlreadyInstalled);
423
373 DISALLOW_COPY_AND_ASSIGN(ExtensionsService); 424 DISALLOW_COPY_AND_ASSIGN(ExtensionsService);
374 }; 425 };
375 426
376 // Implements IO for the ExtensionsService. 427 // Implements IO for the ExtensionsService.
377 // TODO(aa): This can probably move into the .cc file. 428 // TODO(aa): This can probably move into the .cc file.
378 class ExtensionsServiceBackend 429 class ExtensionsServiceBackend
379 : public base::RefCountedThreadSafe<ExtensionsServiceBackend>, 430 : public base::RefCountedThreadSafe<ExtensionsServiceBackend>,
380 public ExternalExtensionProvider::Visitor { 431 public ExternalExtensionProvider::Visitor {
381 public: 432 public:
382 // |rdh| can be NULL in the case of test environment. 433 // |rdh| can be NULL in the case of test environment.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 521
471 // A map of all external extension providers. 522 // A map of all external extension providers.
472 typedef std::map<Extension::Location, 523 typedef std::map<Extension::Location,
473 linked_ptr<ExternalExtensionProvider> > ProviderMap; 524 linked_ptr<ExternalExtensionProvider> > ProviderMap;
474 ProviderMap external_extension_providers_; 525 ProviderMap external_extension_providers_;
475 526
476 DISALLOW_COPY_AND_ASSIGN(ExtensionsServiceBackend); 527 DISALLOW_COPY_AND_ASSIGN(ExtensionsServiceBackend);
477 }; 528 };
478 529
479 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_ 530 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_updater_unittest.cc ('k') | chrome/browser/extensions/extensions_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698