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

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

Issue 8417012: Refactor loading out of ExtensionService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: aa's Created 9 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 class AppNotificationManager; 47 class AppNotificationManager;
48 class BookmarkExtensionEventRouter; 48 class BookmarkExtensionEventRouter;
49 class CrxInstaller; 49 class CrxInstaller;
50 class ExtensionBrowserEventRouter; 50 class ExtensionBrowserEventRouter;
51 class ExtensionContentSettingsStore; 51 class ExtensionContentSettingsStore;
52 class ExtensionCookiesEventRouter; 52 class ExtensionCookiesEventRouter;
53 class ExtensionDownloadsEventRouter; 53 class ExtensionDownloadsEventRouter;
54 class ExtensionFileBrowserEventRouter; 54 class ExtensionFileBrowserEventRouter;
55 class ExtensionGlobalError; 55 class ExtensionGlobalError;
56 class HistoryExtensionEventRouter;
57 class ExtensionInstallUI; 56 class ExtensionInstallUI;
58 class ExtensionManagementEventRouter; 57 class ExtensionManagementEventRouter;
59 class ExtensionPreferenceEventRouter; 58 class ExtensionPreferenceEventRouter;
60 class ExtensionServiceBackend;
61 class ExtensionSyncData; 59 class ExtensionSyncData;
62 class ExtensionToolbarModel; 60 class ExtensionToolbarModel;
63 class ExtensionUpdater; 61 class ExtensionUpdater;
64 class ExtensionWebNavigationEventRouter; 62 class ExtensionWebNavigationEventRouter;
63 class HistoryExtensionEventRouter;
65 class GURL; 64 class GURL;
66 class PendingExtensionManager; 65 class PendingExtensionManager;
67 class Profile; 66 class Profile;
68 class SyncData; 67 class SyncData;
69 class Version; 68 class Version;
70 69
71 namespace chromeos { 70 namespace chromeos {
72 class ExtensionInputMethodEventRouter; 71 class ExtensionInputMethodEventRouter;
73 } // namespace chromeos 72 }
73
74 namespace extensions {
75 class ComponentLoader;
76 class InstalledExtensionLoader;
77 class UnpackedInstaller;
78 }
74 79
75 // This is an interface class to encapsulate the dependencies that 80 // This is an interface class to encapsulate the dependencies that
76 // various classes have on ExtensionService. This allows easy mocking. 81 // various classes have on ExtensionService. This allows easy mocking.
77 class ExtensionServiceInterface : public SyncableService { 82 class ExtensionServiceInterface : public SyncableService {
78 public: 83 public:
79 // A function that returns true if the given extension should be 84 // A function that returns true if the given extension should be
80 // included and false if it should be filtered out. Identical to 85 // included and false if it should be filtered out. Identical to
81 // PendingExtensionInfo::ShouldAllowInstallPredicate. 86 // PendingExtensionInfo::ShouldAllowInstallPredicate.
82 typedef bool (*ExtensionFilter)(const Extension&); 87 typedef bool (*ExtensionFilter)(const Extension&);
83 88
(...skipping 27 matching lines...) Expand all
111 // themes sync to not use it directly. 116 // themes sync to not use it directly.
112 virtual void CheckForUpdatesSoon() = 0; 117 virtual void CheckForUpdatesSoon() = 0;
113 }; 118 };
114 119
115 // Manages installed and running Chromium extensions. 120 // Manages installed and running Chromium extensions.
116 class ExtensionService 121 class ExtensionService
117 : public ExtensionServiceInterface, 122 : public ExtensionServiceInterface,
118 public ExternalExtensionProviderInterface::VisitorInterface, 123 public ExternalExtensionProviderInterface::VisitorInterface,
119 public content::NotificationObserver { 124 public content::NotificationObserver {
120 public: 125 public:
121 // Information about a registered component extension.
122 struct ComponentExtensionInfo {
123 ComponentExtensionInfo(const std::string& manifest,
124 const FilePath& root_directory)
125 : manifest(manifest),
126 root_directory(root_directory) {
127 }
128
129 bool Equals(const ComponentExtensionInfo& other) const;
130
131 // The extension's manifest. This is required for component extensions so
132 // that ExtensionService doesn't need to go to disk to load them.
133 std::string manifest;
134
135 // Directory where the extension is stored.
136 FilePath root_directory;
137 };
138
139 // The name of the directory inside the profile where extensions are 126 // The name of the directory inside the profile where extensions are
140 // installed to. 127 // installed to.
141 static const char* kInstallDirectoryName; 128 static const char* kInstallDirectoryName;
142 129
143 // If auto-updates are turned on, default to running every 5 hours. 130 // If auto-updates are turned on, default to running every 5 hours.
144 static const int kDefaultUpdateFrequencySeconds = 60 * 60 * 5; 131 static const int kDefaultUpdateFrequencySeconds = 60 * 60 * 5;
145 132
146 // The name of the directory inside the profile where per-extension settings 133 // The name of the directory inside the profile where per-extension settings
147 // are stored. 134 // are stored.
148 static const char* kSettingsDirectoryName; 135 static const char* kSettingsDirectoryName;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 virtual ~ExtensionService(); 170 virtual ~ExtensionService();
184 171
185 // Gets the list of currently installed extensions. 172 // Gets the list of currently installed extensions.
186 virtual const ExtensionList* extensions() const OVERRIDE; 173 virtual const ExtensionList* extensions() const OVERRIDE;
187 const ExtensionList* disabled_extensions() const; 174 const ExtensionList* disabled_extensions() const;
188 const ExtensionList* terminated_extensions() const; 175 const ExtensionList* terminated_extensions() const;
189 176
190 // Gets the object managing the set of pending extensions. 177 // Gets the object managing the set of pending extensions.
191 virtual PendingExtensionManager* pending_extension_manager() OVERRIDE; 178 virtual PendingExtensionManager* pending_extension_manager() OVERRIDE;
192 179
193 // Registers an extension to be loaded as a component extension.
194 void register_component_extension(const ComponentExtensionInfo& info) {
195 component_extension_manifests_.push_back(info);
196 }
197
198 // Unregisters a component extension from the list of extensions to be loaded
199 void UnregisterComponentExtension(const ComponentExtensionInfo& info);
200
201 const FilePath& install_directory() const { return install_directory_; } 180 const FilePath& install_directory() const { return install_directory_; }
202 181
203 AppsPromo* apps_promo() { return &apps_promo_; } 182 AppsPromo* apps_promo() { return &apps_promo_; }
204 183
205 // Whether this extension can run in an incognito window. 184 // Whether this extension can run in an incognito window.
206 virtual bool IsIncognitoEnabled(const std::string& extension_id) const; 185 virtual bool IsIncognitoEnabled(const std::string& extension_id) const;
207 virtual void SetIsIncognitoEnabled(const std::string& extension_id, 186 virtual void SetIsIncognitoEnabled(const std::string& extension_id,
208 bool enabled); 187 bool enabled);
209 188
210 // Returns true if the given extension can see events and data from another 189 // Returns true if the given extension can see events and data from another
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 287
309 // Updates the |extension|'s granted permissions lists to include all 288 // Updates the |extension|'s granted permissions lists to include all
310 // permissions in the |extension|'s manifest and re-enables the 289 // permissions in the |extension|'s manifest and re-enables the
311 // extension. 290 // extension.
312 void GrantPermissionsAndEnableExtension(const Extension* extension); 291 void GrantPermissionsAndEnableExtension(const Extension* extension);
313 292
314 // Sets the |extension|'s active permissions to |permissions|. 293 // Sets the |extension|'s active permissions to |permissions|.
315 void UpdateActivePermissions(const Extension* extension, 294 void UpdateActivePermissions(const Extension* extension,
316 const ExtensionPermissionSet* permissions); 295 const ExtensionPermissionSet* permissions);
317 296
318 // Loads the extension from the directory |extension_path|.
319 void LoadExtension(const FilePath& extension_path);
320
321 // Loads the extension from the directory |extension_path|.
322 // This version of this method is intended for testing only.
323 void LoadExtension(const FilePath& extension_path, bool prompt_for_plugins);
324
325 // Same as above, but for use with command line switch --load-extension=path.
326 void LoadExtensionFromCommandLine(const FilePath& extension_path);
327
328 // Loads any component extensions.
329 void LoadComponentExtensions();
330
331 // Loads particular component extension.
332 const Extension* LoadComponentExtension(const ComponentExtensionInfo& info);
333
334 // Unloads particular component extension.
335 void UnloadComponentExtension(const ComponentExtensionInfo& info);
336
337 // Loads all known extensions (used by startup and testing code).
338 void LoadAllExtensions();
339
340 // Check for updates (or potentially new extensions from external providers) 297 // Check for updates (or potentially new extensions from external providers)
341 void CheckForExternalUpdates(); 298 void CheckForExternalUpdates();
342 299
343 // Unload the specified extension. 300 // Unload the specified extension.
344 void UnloadExtension(const std::string& extension_id, 301 void UnloadExtension(const std::string& extension_id,
345 extension_misc::UnloadedExtensionReason reason); 302 extension_misc::UnloadedExtensionReason reason);
346 303
347 // Unload all extensions. This is currently only called on shutdown, and 304 // Unload all extensions. This is currently only called on shutdown, and
348 // does not send notifications. 305 // does not send notifications.
349 void UnloadAllExtensions(); 306 void UnloadAllExtensions();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 const SkBitmap& GetOmniboxPopupIcon(const std::string& extension_id); 341 const SkBitmap& GetOmniboxPopupIcon(const std::string& extension_id);
385 342
386 // Called when the initial extensions load has completed. 343 // Called when the initial extensions load has completed.
387 virtual void OnLoadedInstalledExtensions(); 344 virtual void OnLoadedInstalledExtensions();
388 345
389 // Adds |extension| to this ExtensionService and notifies observers than an 346 // Adds |extension| to this ExtensionService and notifies observers than an
390 // extension has been loaded. Called by the backend after an extension has 347 // extension has been loaded. Called by the backend after an extension has
391 // been loaded from a file and installed. 348 // been loaded from a file and installed.
392 void AddExtension(const Extension* extension); 349 void AddExtension(const Extension* extension);
393 350
394 // Called by the backend when an unpacked extension has been loaded.
395 void OnLoadSingleExtension(const Extension* extension,
396 bool prompt_for_plugins);
397
398 // Called by the backend when an extension has been installed. 351 // Called by the backend when an extension has been installed.
399 void OnExtensionInstalled( 352 void OnExtensionInstalled(
400 const Extension* extension, bool from_webstore, int page_index); 353 const Extension* extension, bool from_webstore, int page_index);
401 354
402 // Initializes the |extension|'s active permission set and disables the 355 // Initializes the |extension|'s active permission set and disables the
403 // extension if the privilege level has increased (e.g., due to an upgrade). 356 // extension if the privilege level has increased (e.g., due to an upgrade).
404 void InitializePermissions(const Extension* extension); 357 void InitializePermissions(const Extension* extension);
405 358
406 // Go through each extensions in pref, unload blacklisted extensions 359 // Go through each extensions in pref, unload blacklisted extensions
407 // and update the blacklist state in pref. 360 // and update the blacklist state in pref.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 ExtensionPrefs* extension_prefs(); 397 ExtensionPrefs* extension_prefs();
445 398
446 ExtensionSettingsFrontend* extension_settings_frontend(); 399 ExtensionSettingsFrontend* extension_settings_frontend();
447 400
448 ExtensionContentSettingsStore* GetExtensionContentSettingsStore(); 401 ExtensionContentSettingsStore* GetExtensionContentSettingsStore();
449 402
450 // Whether the extension service is ready. 403 // Whether the extension service is ready.
451 // TODO(skerner): Get rid of this method. crbug.com/63756 404 // TODO(skerner): Get rid of this method. crbug.com/63756
452 bool is_ready() { return ready_; } 405 bool is_ready() { return ready_; }
453 406
407 extensions::ComponentLoader* component_loader() {
408 return component_loader_.get();
409 }
410
454 // Note that this may return NULL if autoupdate is not turned on. 411 // Note that this may return NULL if autoupdate is not turned on.
455 ExtensionUpdater* updater(); 412 ExtensionUpdater* updater();
456 413
457 ExtensionToolbarModel* toolbar_model() { return &toolbar_model_; } 414 ExtensionToolbarModel* toolbar_model() { return &toolbar_model_; }
458 415
459 ExtensionsQuotaService* quota_service() { return &quota_service_; } 416 ExtensionsQuotaService* quota_service() { return &quota_service_; }
460 417
461 ExtensionMenuManager* menu_manager() { return &menu_manager_; } 418 ExtensionMenuManager* menu_manager() { return &menu_manager_; }
462 419
463 AppNotificationManager* app_notification_manager() { 420 AppNotificationManager* app_notification_manager() {
(...skipping 11 matching lines...) Expand all
475 #if defined(OS_CHROMEOS) 432 #if defined(OS_CHROMEOS)
476 ExtensionFileBrowserEventRouter* file_browser_event_router() { 433 ExtensionFileBrowserEventRouter* file_browser_event_router() {
477 return file_browser_event_router_.get(); 434 return file_browser_event_router_.get();
478 } 435 }
479 chromeos::ExtensionInputMethodEventRouter* input_method_event_router() { 436 chromeos::ExtensionInputMethodEventRouter* input_method_event_router() {
480 return input_method_event_router_.get(); 437 return input_method_event_router_.get();
481 } 438 }
482 #endif 439 #endif
483 440
484 // Notify the frontend that there was an error loading an extension. 441 // Notify the frontend that there was an error loading an extension.
485 // This method is public because ExtensionServiceBackend can post to here. 442 // This method is public because ExtensionLoadTask can post to here.
486 void ReportExtensionLoadError(const FilePath& extension_path, 443 void ReportExtensionLoadError(const FilePath& extension_path,
487 const std::string& error, 444 const std::string& error,
488 bool be_noisy); 445 bool be_noisy);
489 446
490 // ExtensionHost of background page calls this method right after its render 447 // ExtensionHost of background page calls this method right after its render
491 // view has been created. 448 // view has been created.
492 void DidCreateRenderViewForBackgroundPage(ExtensionHost* host); 449 void DidCreateRenderViewForBackgroundPage(ExtensionHost* host);
493 450
494 // For the extension in |version_path| with |id|, check to see if it's an 451 // For the extension in |version_path| with |id|, check to see if it's an
495 // externally managed extension. If so, uninstall it. 452 // externally managed extension. If so, uninstall it.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 // Record a histogram using the PermissionMessage enum values for each 508 // Record a histogram using the PermissionMessage enum values for each
552 // permission in |e|. 509 // permission in |e|.
553 // NOTE: If this is ever called with high frequency, the implementation may 510 // NOTE: If this is ever called with high frequency, the implementation may
554 // need to be made more efficient. 511 // need to be made more efficient.
555 static void RecordPermissionMessagesHistogram( 512 static void RecordPermissionMessagesHistogram(
556 const Extension* e, const char* histogram); 513 const Extension* e, const char* histogram);
557 514
558 // |client| can be NULL for a silent install. 515 // |client| can be NULL for a silent install.
559 scoped_refptr<CrxInstaller> MakeCrxInstaller(ExtensionInstallUI* client); 516 scoped_refptr<CrxInstaller> MakeCrxInstaller(ExtensionInstallUI* client);
560 517
518 scoped_refptr<extensions::UnpackedInstaller> MakeUnpackedInstaller();
519
520 scoped_refptr<extensions::InstalledExtensionLoader>
521 MakeInstalledExtensionLoader();
522
561 #if defined(UNIT_TEST) 523 #if defined(UNIT_TEST)
562 void TrackTerminatedExtensionForTest(const Extension* extension) { 524 void TrackTerminatedExtensionForTest(const Extension* extension) {
563 TrackTerminatedExtension(extension); 525 TrackTerminatedExtension(extension);
564 } 526 }
565 #endif 527 #endif
566 528
567 ExtensionWarningSet* extension_warnings() { 529 ExtensionWarningSet* extension_warnings() {
568 return &extension_warnings_; 530 return &extension_warnings_;
569 } 531 }
570 532
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 // Handles sending notification that |extension| was loaded. 624 // Handles sending notification that |extension| was loaded.
663 void NotifyExtensionLoaded(const Extension* extension); 625 void NotifyExtensionLoaded(const Extension* extension);
664 626
665 // Handles sending notification that |extension| was unloaded. 627 // Handles sending notification that |extension| was unloaded.
666 void NotifyExtensionUnloaded(const Extension* extension, 628 void NotifyExtensionUnloaded(const Extension* extension,
667 extension_misc::UnloadedExtensionReason reason); 629 extension_misc::UnloadedExtensionReason reason);
668 630
669 // Helper that updates the active extension list used for crash reporting. 631 // Helper that updates the active extension list used for crash reporting.
670 void UpdateActiveExtensionsInCrashReporter(); 632 void UpdateActiveExtensionsInCrashReporter();
671 633
672 // Helper method. Loads extension from prefs.
673 void LoadInstalledExtension(const ExtensionInfo& info, bool write_to_prefs);
674
675 // We implement some Pepper plug-ins using NaCl to take advantage of NaCl's 634 // We implement some Pepper plug-ins using NaCl to take advantage of NaCl's
676 // strong sandbox. Typically, these NaCl modules are stored in extensions 635 // strong sandbox. Typically, these NaCl modules are stored in extensions
677 // and registered here. Not all NaCl modules need to register for a MIME 636 // and registered here. Not all NaCl modules need to register for a MIME
678 // type, just the ones that are responsible for rendering a particular MIME 637 // type, just the ones that are responsible for rendering a particular MIME
679 // type, like application/pdf. Note: We only register NaCl modules in the 638 // type, like application/pdf. Note: We only register NaCl modules in the
680 // browser process. 639 // browser process.
681 void RegisterNaClModule(const GURL& url, const std::string& mime_type); 640 void RegisterNaClModule(const GURL& url, const std::string& mime_type);
682 void UnregisterNaClModule(const GURL& url); 641 void UnregisterNaClModule(const GURL& url);
683 642
684 // Call UpdatePluginListWithNaClModules() after registering or unregistering 643 // Call UpdatePluginListWithNaClModules() after registering or unregistering
685 // a NaCl module to see those changes reflected in the PluginList. 644 // a NaCl module to see those changes reflected in the PluginList.
686 void UpdatePluginListWithNaClModules(); 645 void UpdatePluginListWithNaClModules();
687 646
688 NaClModuleInfoList::iterator FindNaClModule(const GURL& url); 647 NaClModuleInfoList::iterator FindNaClModule(const GURL& url);
689 648
690 // Returns the flags that should be used with Extension::Create() for an
691 // extension that is already installed.
692 int GetExtensionCreateFlagsForInstalledExtension(
693 const ExtensionInfo* info);
694
695 base::WeakPtrFactory<ExtensionService> weak_ptr_factory_; 649 base::WeakPtrFactory<ExtensionService> weak_ptr_factory_;
696 650
697 // The profile this ExtensionService is part of. 651 // The profile this ExtensionService is part of.
698 Profile* profile_; 652 Profile* profile_;
699 653
700 // Preferences for the owning profile (weak reference). 654 // Preferences for the owning profile (weak reference).
701 ExtensionPrefs* extension_prefs_; 655 ExtensionPrefs* extension_prefs_;
702 656
703 // Settings for the owning profile. 657 // Settings for the owning profile.
704 ExtensionSettingsFrontend extension_settings_frontend_; 658 ExtensionSettingsFrontend extension_settings_frontend_;
(...skipping 24 matching lines...) Expand all
729 683
730 // The full path to the directory where extensions are installed. 684 // The full path to the directory where extensions are installed.
731 FilePath install_directory_; 685 FilePath install_directory_;
732 686
733 // Whether or not extensions are enabled. 687 // Whether or not extensions are enabled.
734 bool extensions_enabled_; 688 bool extensions_enabled_;
735 689
736 // Whether to notify users when they attempt to install an extension. 690 // Whether to notify users when they attempt to install an extension.
737 bool show_extensions_prompts_; 691 bool show_extensions_prompts_;
738 692
739 // The backend that will do IO on behalf of this instance. 693 // For loading and unloading component extensions.
740 scoped_refptr<ExtensionServiceBackend> backend_; 694 scoped_ptr<extensions::ComponentLoader> component_loader_;
741 695
742 // Used by dispatchers to limit API quota for individual extensions. 696 // Used by dispatchers to limit API quota for individual extensions.
743 ExtensionsQuotaService quota_service_; 697 ExtensionsQuotaService quota_service_;
744 698
745 // Record that Init() has been called, and chrome::EXTENSIONS_READY 699 // Record that Init() has been called, and chrome::EXTENSIONS_READY
746 // has fired. 700 // has fired.
747 bool ready_; 701 bool ready_;
748 702
749 // Our extension updater, if updates are turned on. 703 // Our extension updater, if updates are turned on.
750 scoped_ptr<ExtensionUpdater> updater_; 704 scoped_ptr<ExtensionUpdater> updater_;
(...skipping 27 matching lines...) Expand all
778 // Keeps track of app notifications. 732 // Keeps track of app notifications.
779 scoped_refptr<AppNotificationManager> app_notification_manager_; 733 scoped_refptr<AppNotificationManager> app_notification_manager_;
780 734
781 // Keeps track of extension permissions. 735 // Keeps track of extension permissions.
782 ExtensionPermissionsManager permissions_manager_; 736 ExtensionPermissionsManager permissions_manager_;
783 737
784 // Keeps track of favicon-sized omnibox icons for extensions. 738 // Keeps track of favicon-sized omnibox icons for extensions.
785 ExtensionIconManager omnibox_icon_manager_; 739 ExtensionIconManager omnibox_icon_manager_;
786 ExtensionIconManager omnibox_popup_icon_manager_; 740 ExtensionIconManager omnibox_popup_icon_manager_;
787 741
788 // List of registered component extensions (see Extension::Location).
789 typedef std::vector<ComponentExtensionInfo> RegisteredComponentExtensions;
790 RegisteredComponentExtensions component_extension_manifests_;
791
792 // Manages the promotion of the web store. 742 // Manages the promotion of the web store.
793 AppsPromo apps_promo_; 743 AppsPromo apps_promo_;
794 744
795 // Flag to make sure event routers are only initialized once. 745 // Flag to make sure event routers are only initialized once.
796 bool event_routers_initialized_; 746 bool event_routers_initialized_;
797 747
798 scoped_ptr<ExtensionDownloadsEventRouter> downloads_event_router_; 748 scoped_ptr<ExtensionDownloadsEventRouter> downloads_event_router_;
799 749
800 scoped_ptr<HistoryExtensionEventRouter> history_event_router_; 750 scoped_ptr<HistoryExtensionEventRouter> history_event_router_;
801 751
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 ExtensionWarningSet extension_warnings_; 786 ExtensionWarningSet extension_warnings_;
837 787
838 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, 788 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest,
839 InstallAppsWithUnlimtedStorage); 789 InstallAppsWithUnlimtedStorage);
840 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, 790 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest,
841 InstallAppsAndCheckStorageProtection); 791 InstallAppsAndCheckStorageProtection);
842 DISALLOW_COPY_AND_ASSIGN(ExtensionService); 792 DISALLOW_COPY_AND_ASSIGN(ExtensionService);
843 }; 793 };
844 794
845 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ 795 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698