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

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

Issue 15947007: Move application restart and relaunch code out of ExtensionService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pafooey Created 7 years, 6 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 | Annotate | Revision Log
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_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 7
8 #include <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 virtual bool UpdateExtension( 321 virtual bool UpdateExtension(
322 const std::string& id, 322 const std::string& id,
323 const base::FilePath& extension_path, 323 const base::FilePath& extension_path,
324 const GURL& download_url, 324 const GURL& download_url,
325 extensions::CrxInstaller** out_crx_installer) OVERRIDE; 325 extensions::CrxInstaller** out_crx_installer) OVERRIDE;
326 326
327 // Reloads the specified extension, sending the onLaunched() event to it if it 327 // Reloads the specified extension, sending the onLaunched() event to it if it
328 // currently has any window showing. 328 // currently has any window showing.
329 void ReloadExtension(const std::string& extension_id); 329 void ReloadExtension(const std::string& extension_id);
330 330
331 // Reloads an extension and sends it the onRestarted() event.
332 void RestartExtension(const std::string& extension_id);
333
334 // Uninstalls the specified extension. Callers should only call this method 331 // Uninstalls the specified extension. Callers should only call this method
335 // with extensions that exist. |external_uninstall| is a magical parameter 332 // with extensions that exist. |external_uninstall| is a magical parameter
336 // that is only used to send information to ExtensionPrefs, which external 333 // that is only used to send information to ExtensionPrefs, which external
337 // callers should never set to true. 334 // callers should never set to true.
338 // 335 //
339 // We pass the |extension_id| by value to avoid having it deleted from under 336 // We pass the |extension_id| by value to avoid having it deleted from under
340 // us incase someone calls it with Extension::id() or another string that we 337 // us incase someone calls it with Extension::id() or another string that we
341 // are going to delete in this function. 338 // are going to delete in this function.
342 // 339 //
343 // TODO(aa): Remove |external_uninstall| -- this information should be passed 340 // TODO(aa): Remove |external_uninstall| -- this information should be passed
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 // Adds |extension| to this ExtensionService and notifies observers that the 409 // Adds |extension| to this ExtensionService and notifies observers that the
413 // extensions have been loaded. 410 // extensions have been loaded.
414 virtual void AddExtension(const extensions::Extension* extension) OVERRIDE; 411 virtual void AddExtension(const extensions::Extension* extension) OVERRIDE;
415 412
416 // Check if we have preferences for the component extension and, if not or if 413 // Check if we have preferences for the component extension and, if not or if
417 // the stored version differs, install the extension (without requirements 414 // the stored version differs, install the extension (without requirements
418 // checking) before calling AddExtension. 415 // checking) before calling AddExtension.
419 virtual void AddComponentExtension(const extensions::Extension* extension) 416 virtual void AddComponentExtension(const extensions::Extension* extension)
420 OVERRIDE; 417 OVERRIDE;
421 418
422 // Launch an extension the next time it is loaded.
423 void ScheduleLaunchOnLoad(const std::string& extension_id);
424
425 // Informs the service that an extension's files are in place for loading. 419 // Informs the service that an extension's files are in place for loading.
426 // 420 //
427 // Please make sure the Blacklist is checked some time before calling this 421 // Please make sure the Blacklist is checked some time before calling this
428 // method. 422 // method.
429 void OnExtensionInstalled( 423 void OnExtensionInstalled(
430 const extensions::Extension* extension, 424 const extensions::Extension* extension,
431 const syncer::StringOrdinal& page_ordinal, 425 const syncer::StringOrdinal& page_ordinal,
432 bool has_requirement_errors, 426 bool has_requirement_errors,
433 bool wait_for_idle); 427 bool wait_for_idle);
434 428
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 void OnExtensionInstallPrefChanged(); 706 void OnExtensionInstallPrefChanged();
713 707
714 // Handles setting the extension specific values in |extension_sync_data| to 708 // Handles setting the extension specific values in |extension_sync_data| to
715 // the current system. 709 // the current system.
716 // Returns false if the changes were not completely applied and need to be 710 // Returns false if the changes were not completely applied and need to be
717 // tried again later. 711 // tried again later.
718 bool ProcessExtensionSyncDataHelper( 712 bool ProcessExtensionSyncDataHelper(
719 const extensions::ExtensionSyncData& extension_sync_data, 713 const extensions::ExtensionSyncData& extension_sync_data,
720 syncer::ModelType type); 714 syncer::ModelType type);
721 715
722 // Events to be fired after an extension is reloaded.
723 enum PostReloadEvents {
724 EVENT_NONE = 0,
725 EVENT_LAUNCHED = 1 << 0,
726 EVENT_RESTARTED = 1 << 1,
727 };
728
729 // Adds the given extension to the list of terminated extensions if 716 // Adds the given extension to the list of terminated extensions if
730 // it is not already there and unloads it. 717 // it is not already there and unloads it.
731 void TrackTerminatedExtension(const extensions::Extension* extension); 718 void TrackTerminatedExtension(const extensions::Extension* extension);
732 719
733 // Removes the extension with the given id from the list of 720 // Removes the extension with the given id from the list of
734 // terminated extensions if it is there. 721 // terminated extensions if it is there.
735 void UntrackTerminatedExtension(const std::string& id); 722 void UntrackTerminatedExtension(const std::string& id);
736 723
737 // Update preferences for a new or updated extension; notify observers that 724 // Update preferences for a new or updated extension; notify observers that
738 // the extension is installed, e.g., to update event handlers on background 725 // the extension is installed, e.g., to update event handlers on background
739 // pages; and perform other extension install tasks before calling 726 // pages; and perform other extension install tasks before calling
740 // AddExtension. 727 // AddExtension.
741 void AddNewOrUpdatedExtension(const extensions::Extension* extension, 728 void AddNewOrUpdatedExtension(const extensions::Extension* extension,
742 extensions::Extension::State initial_state, 729 extensions::Extension::State initial_state,
743 const syncer::StringOrdinal& page_ordinal); 730 const syncer::StringOrdinal& page_ordinal);
744 731
745 // Handles sending notification that |extension| was loaded. 732 // Handles sending notification that |extension| was loaded.
746 void NotifyExtensionLoaded(const extensions::Extension* extension); 733 void NotifyExtensionLoaded(const extensions::Extension* extension);
747 734
748 // Handles sending notification that |extension| was unloaded. 735 // Handles sending notification that |extension| was unloaded.
749 void NotifyExtensionUnloaded(const extensions::Extension* extension, 736 void NotifyExtensionUnloaded(const extensions::Extension* extension,
750 extension_misc::UnloadedExtensionReason reason); 737 extension_misc::UnloadedExtensionReason reason);
751 738
752 // Common helper to finish installing the given extension. 739 // Common helper to finish installing the given extension.
753 void FinishInstallation(const extensions::Extension* extension); 740 void FinishInstallation(const extensions::Extension* extension);
754 741
755 // Reloads |extension_id| and then dispatches to it the PostReloadEvents
756 // indicated by |events|.
757 void ReloadExtensionWithEvents(const std::string& extension_id,
758 int events);
759
760 // Updates the |extension|'s active permission set to include only permissions 742 // Updates the |extension|'s active permission set to include only permissions
761 // currently requested by the extension and all the permissions required by 743 // currently requested by the extension and all the permissions required by
762 // the extension. 744 // the extension.
763 void UpdateActivePermissions(const extensions::Extension* extension); 745 void UpdateActivePermissions(const extensions::Extension* extension);
764 746
765 // Disables the extension if the privilege level has increased 747 // Disables the extension if the privilege level has increased
766 // (e.g., due to an upgrade). 748 // (e.g., due to an upgrade).
767 void CheckPermissionsIncrease(const extensions::Extension* extension, 749 void CheckPermissionsIncrease(const extensions::Extension* extension,
768 bool is_upgrade); 750 bool is_upgrade);
769 751
770 // Returns true if the app with id |extension_id| has any shell windows open.
771 bool HasShellWindows(const std::string& extension_id);
772
773 // Helper that updates the active extension list used for crash reporting. 752 // Helper that updates the active extension list used for crash reporting.
774 void UpdateActiveExtensionsInCrashReporter(); 753 void UpdateActiveExtensionsInCrashReporter();
775 754
776 // We implement some Pepper plug-ins using NaCl to take advantage of NaCl's 755 // We implement some Pepper plug-ins using NaCl to take advantage of NaCl's
777 // strong sandbox. Typically, these NaCl modules are stored in extensions 756 // strong sandbox. Typically, these NaCl modules are stored in extensions
778 // and registered here. Not all NaCl modules need to register for a MIME 757 // and registered here. Not all NaCl modules need to register for a MIME
779 // type, just the ones that are responsible for rendering a particular MIME 758 // type, just the ones that are responsible for rendering a particular MIME
780 // type, like application/pdf. Note: We only register NaCl modules in the 759 // type, like application/pdf. Note: We only register NaCl modules in the
781 // browser process. 760 // browser process.
782 void RegisterNaClModule(const GURL& url, const std::string& mime_type); 761 void RegisterNaClModule(const GURL& url, const std::string& mime_type);
783 void UnregisterNaClModule(const GURL& url); 762 void UnregisterNaClModule(const GURL& url);
784 763
785 // Call UpdatePluginListWithNaClModules() after registering or unregistering 764 // Call UpdatePluginListWithNaClModules() after registering or unregistering
786 // a NaCl module to see those changes reflected in the PluginList. 765 // a NaCl module to see those changes reflected in the PluginList.
787 void UpdatePluginListWithNaClModules(); 766 void UpdatePluginListWithNaClModules();
788 767
789 NaClModuleInfoList::iterator FindNaClModule(const GURL& url); 768 NaClModuleInfoList::iterator FindNaClModule(const GURL& url);
790 769
791 // Performs tasks requested to occur after |extension| loads.
792 void DoPostLoadTasks(const extensions::Extension* extension);
793
794 // Launches the platform app associated with |extension_host|.
795 static void LaunchApplication(extensions::ExtensionHost* extension_host);
796
797 // Dispatches a restart event to the platform app associated with
798 // |extension_host|.
799 static void RestartApplication(extensions::ExtensionHost* extension_host);
800
801 // Helper to inspect an ExtensionHost after it has been loaded. 770 // Helper to inspect an ExtensionHost after it has been loaded.
802 void InspectExtensionHost(extensions::ExtensionHost* host); 771 void InspectExtensionHost(extensions::ExtensionHost* host);
803 772
804 // Helper to determine whether we should initially enable an installed 773 // Helper to determine whether we should initially enable an installed
805 // (or upgraded) extension. 774 // (or upgraded) extension.
806 bool ShouldEnableOnInstall(const extensions::Extension* extension); 775 bool ShouldEnableOnInstall(const extensions::Extension* extension);
807 776
808 // Helper to determine if an extension is idle, and it should be safe 777 // Helper to determine if an extension is idle, and it should be safe
809 // to update the extension. 778 // to update the extension.
810 bool IsExtensionIdle(const std::string& extension_id) const; 779 bool IsExtensionIdle(const std::string& extension_id) const;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 UnloadedExtensionPathMap unloaded_extension_paths_; 878 UnloadedExtensionPathMap unloaded_extension_paths_;
910 879
911 // Store the ids of reloading extensions. 880 // Store the ids of reloading extensions.
912 std::set<std::string> reloading_extensions_; 881 std::set<std::string> reloading_extensions_;
913 882
914 // Map of inspector cookies that are detached, waiting for an extension to be 883 // Map of inspector cookies that are detached, waiting for an extension to be
915 // reloaded. 884 // reloaded.
916 typedef std::map<std::string, std::string> OrphanedDevTools; 885 typedef std::map<std::string, std::string> OrphanedDevTools;
917 OrphanedDevTools orphaned_dev_tools_; 886 OrphanedDevTools orphaned_dev_tools_;
918 887
919 // Maps extension ids to a bitmask that indicates which events should be
920 // dispatched to the extension when it is loaded.
921 std::map<std::string, int> on_load_events_;
922
923 content::NotificationRegistrar registrar_; 888 content::NotificationRegistrar registrar_;
924 PrefChangeRegistrar pref_change_registrar_; 889 PrefChangeRegistrar pref_change_registrar_;
925 890
926 // Keeps track of loading and unloading component extensions. 891 // Keeps track of loading and unloading component extensions.
927 scoped_ptr<extensions::ComponentLoader> component_loader_; 892 scoped_ptr<extensions::ComponentLoader> component_loader_;
928 893
929 // Keeps track of menu items added by extensions. 894 // Keeps track of menu items added by extensions.
930 extensions::MenuManager menu_manager_; 895 extensions::MenuManager menu_manager_;
931 896
932 // Flag to make sure event routers are only initialized once. 897 // Flag to make sure event routers are only initialized once.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 ObserverList<extensions::UpdateObserver, true> update_observers_; 948 ObserverList<extensions::UpdateObserver, true> update_observers_;
984 949
985 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, 950 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest,
986 InstallAppsWithUnlimtedStorage); 951 InstallAppsWithUnlimtedStorage);
987 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, 952 FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest,
988 InstallAppsAndCheckStorageProtection); 953 InstallAppsAndCheckStorageProtection);
989 DISALLOW_COPY_AND_ASSIGN(ExtensionService); 954 DISALLOW_COPY_AND_ASSIGN(ExtensionService);
990 }; 955 };
991 956
992 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_ 957 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698