| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This class is misnamed. Conceptually, this class owns features which are |
| // scoped to the entire process. The features must span multiple profiles. If a |
| // feature is scoped to a single profile it should instead be added as a |
| // BrowserContextKeyedServiceFactory. |
| // |
| // Historically, members of this class were lazily instantiated. Furthermore, |
| // some members would not be created in tests, resulting in production code |
| // adding nullptr checks to make tests pass. This is an anti-pattern and should |
| // be avoided. This is not making a statement about lazy initialization (e.g. |
| // performing non-trivial setup). This is about having precise lifetime |
| // semantics. |
| // |
| // New members should be added to GlobalFeatures, and be unconditionally |
| // instantiated. |
| |
| #ifndef CHROME_BROWSER_BROWSER_PROCESS_H_ |
| #define CHROME_BROWSER_BROWSER_PROCESS_H_ |
| |
| #include <stdint.h> |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "build/build_config.h" |
| #include "chrome/common/buildflags.h" |
| #include "components/safe_browsing/buildflags.h" |
| #include "media/media_buildflags.h" |
| |
| class BackgroundModeManager; |
| class BrowserProcessPlatformPart; |
| class BuildState; |
| class DownloadRequestLimiter; |
| class DownloadStatusUpdater; |
| class GlobalFeatures; |
| class GpuModeManager; |
| class IconManager; |
| class MediaFileSystemRegistry; |
| class NotificationPlatformBridge; |
| class NotificationUIManager; |
| class PrefService; |
| class ProfileManager; |
| class SerialPolicyAllowedPorts; |
| class StartupData; |
| class StatusTray; |
| class SystemNetworkContextManager; |
| class WebRtcLogUploader; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| class HidSystemTrayIcon; |
| class UsbSystemTrayIcon; |
| class IntranetRedirectDetector; |
| #endif |
| |
| namespace embedder_support { |
| class OriginTrialsSettingsStorage; |
| } |
| |
| namespace network { |
| class NetworkQualityTracker; |
| class SharedURLLoaderFactory; |
| } |
| |
| #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) |
| namespace safe_browsing { |
| class SafeBrowsingService; |
| } |
| #endif |
| |
| namespace signin { |
| class ActivePrimaryAccountsMetricsRecorder; |
| } |
| |
| namespace subresource_filter { |
| class RulesetService; |
| } |
| |
| namespace variations { |
| class VariationsService; |
| } |
| |
| namespace component_updater { |
| class ComponentUpdateService; |
| } |
| |
| namespace gcm { |
| class GCMDriver; |
| } |
| |
| namespace metrics { |
| class MetricsService; |
| } |
| |
| namespace metrics_services_manager { |
| class MetricsServicesManager; |
| } |
| |
| namespace network_time { |
| class NetworkTimeTracker; |
| } |
| |
| namespace os_crypt_async { |
| class KeyProvider; |
| class OSCryptAsync; |
| } |
| |
| namespace policy { |
| class ChromeBrowserPolicyConnector; |
| class PolicyService; |
| } |
| |
| namespace printing { |
| class BackgroundPrintingManager; |
| class PrintJobManager; |
| class PrintPreviewDialogController; |
| } |
| |
| namespace resource_coordinator { |
| class ResourceCoordinatorParts; |
| class TabManager; |
| } |
| |
| // NOT THREAD SAFE, call only from the main thread. |
| // These functions shouldn't return NULL unless otherwise noted. |
| class BrowserProcess { |
| public: |
| BrowserProcess(); |
| |
| BrowserProcess(const BrowserProcess&) = delete; |
| BrowserProcess& operator=(const BrowserProcess&) = delete; |
| |
| virtual ~BrowserProcess(); |
| |
| // Invoked when the user is logging out/shutting down. When logging off we may |
| // not have enough time to do a normal shutdown. This method is invoked prior |
| // to normal shutdown and saves any state that must be saved before system |
| // shutdown. |
| virtual void EndSession() = 0; |
| |
| // Ensures |local_state()| was flushed to disk and then posts |reply| back on |
| // the current sequence. |
| virtual void FlushLocalStateAndReply(base::OnceClosure reply) = 0; |
| |
| // Gets the manager for the various metrics-related services, constructing it |
| // if necessary. |
| virtual metrics_services_manager::MetricsServicesManager* |
| GetMetricsServicesManager() = 0; |
| |
| // Gets the OriginTrialsSettingsStorage, constructing it if necessary. |
| virtual embedder_support::OriginTrialsSettingsStorage* |
| GetOriginTrialsSettingsStorage() = 0; |
| |
| // Services: any of these getters may return null. |
| virtual metrics::MetricsService* metrics_service() = 0; |
| virtual ProfileManager* profile_manager() = 0; |
| virtual PrefService* local_state() = 0; |
| virtual scoped_refptr<network::SharedURLLoaderFactory> |
| shared_url_loader_factory() = 0; |
| virtual signin::ActivePrimaryAccountsMetricsRecorder* |
| active_primary_accounts_metrics_recorder() = 0; |
| virtual variations::VariationsService* variations_service() = 0; |
| |
| virtual BrowserProcessPlatformPart* platform_part() = 0; |
| |
| // Returns the manager for desktop notifications. |
| // TODO(miguelg) This is in the process of being deprecated in favour of |
| // NotificationPlatformBridge + NotificationDisplayService |
| virtual NotificationUIManager* notification_ui_manager() = 0; |
| virtual NotificationPlatformBridge* notification_platform_bridge() = 0; |
| |
| // Replacement for IOThread. It owns and manages the |
| // NetworkContext which will use the network service when the network service |
| // is enabled. When the network service is not enabled, its NetworkContext is |
| // backed by the IOThread's URLRequestContext. |
| virtual SystemNetworkContextManager* system_network_context_manager() = 0; |
| |
| // Returns a NetworkQualityTracker that can be used to subscribe for |
| // network quality change events. |
| virtual network::NetworkQualityTracker* network_quality_tracker() = 0; |
| |
| // Starts and manages the policy system. |
| virtual policy::ChromeBrowserPolicyConnector* browser_policy_connector() = 0; |
| |
| // This is the main interface for chromium components to retrieve policy |
| // information from the policy system. |
| virtual policy::PolicyService* policy_service() = 0; |
| |
| virtual IconManager* icon_manager() = 0; |
| |
| virtual GpuModeManager* gpu_mode_manager() = 0; |
| |
| virtual void CreateDevToolsProtocolHandler() = 0; |
| |
| virtual void CreateDevToolsAutoOpener() = 0; |
| |
| virtual bool IsShuttingDown() = 0; |
| |
| virtual printing::PrintJobManager* print_job_manager() = 0; |
| virtual printing::PrintPreviewDialogController* |
| print_preview_dialog_controller() = 0; |
| virtual printing::BackgroundPrintingManager* |
| background_printing_manager() = 0; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| virtual IntranetRedirectDetector* intranet_redirect_detector() = 0; |
| #endif |
| |
| // Sets or gets the locale used by the application. It is the IETF language |
| // tag, defined in BCP 47. The region subtag is not included when it adds no |
| // distinguishing information to the language tag (e.g. both "en-US" and "fr" |
| // are correct here). |
| // |
| // Setting the locale updates a few core places where this information is |
| // stored, but does not reload any resources or refresh any UI. |
| |
| // DEPRECATED: Please use GetFeatures()->application_locale_storage()->Get(). |
| // TODO(crbug.com/407832571): Replace existing usages and remove this. |
| virtual const std::string& GetApplicationLocale() = 0; |
| // DEPRECATED: Please use GetFeatures()->application_locale_storage()->Set(). |
| // TODO(crbug.com/407832571): Replace existing usages and remove this. |
| virtual void SetApplicationLocale(const std::string& actual_locale) = 0; |
| |
| virtual DownloadStatusUpdater* download_status_updater() = 0; |
| virtual DownloadRequestLimiter* download_request_limiter() = 0; |
| |
| #if BUILDFLAG(ENABLE_BACKGROUND_MODE) |
| // Returns the object that manages background applications. |
| virtual BackgroundModeManager* background_mode_manager() = 0; |
| virtual void set_background_mode_manager_for_test( |
| std::unique_ptr<BackgroundModeManager> manager) = 0; |
| #endif |
| |
| // Returns the StatusTray, which provides an API for displaying status icons |
| // in the system status tray. Returns NULL if status icons are not supported |
| // on this platform (or this is a unit test). |
| virtual StatusTray* status_tray() = 0; |
| |
| #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) |
| // Returns the SafeBrowsing service. |
| virtual safe_browsing::SafeBrowsingService* safe_browsing_service() = 0; |
| #endif |
| |
| // Returns the service providing versioned storage for rules used by the Safe |
| // Browsing subresource filter. |
| virtual subresource_filter::RulesetService* |
| subresource_filter_ruleset_service() = 0; |
| |
| // Returns the service providing versioned storage for rules used by the |
| // Fingerprinting Protection subresource filter. |
| virtual subresource_filter::RulesetService* |
| fingerprinting_protection_ruleset_service() = 0; |
| |
| // Returns the StartupData which owns any pre-created objects in //chrome |
| // before the full browser starts. |
| virtual StartupData* startup_data() = 0; |
| |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) |
| // This will start a timer that, if Chrome is in persistent mode, will check |
| // whether an update is available, and if that's the case, restart the |
| // browser. Note that restart code will strip some of the command line keys |
| // and all loose values from the cl this instance of Chrome was launched with, |
| // and add the command line key that will force Chrome to start in the |
| // background mode. For the full list of "blacklisted" keys, refer to |
| // |kSwitchesToRemoveOnAutorestart| array in browser_process_impl.cc. |
| virtual void StartAutoupdateTimer() = 0; |
| #endif |
| |
| virtual component_updater::ComponentUpdateService* component_updater() = 0; |
| |
| virtual MediaFileSystemRegistry* media_file_system_registry() = 0; |
| |
| virtual WebRtcLogUploader* webrtc_log_uploader() = 0; |
| |
| virtual network_time::NetworkTimeTracker* network_time_tracker() = 0; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| // Avoid using this. Prefer using GCMProfileServiceFactory. |
| virtual gcm::GCMDriver* gcm_driver() = 0; |
| #endif |
| |
| // Returns the tab manager. On non-supported platforms, this returns null. |
| // TODO(sebmarchand): Update callers to |
| // resource_coordinator_parts()->tab_manager() and remove this. |
| virtual resource_coordinator::TabManager* GetTabManager() = 0; |
| |
| virtual resource_coordinator::ResourceCoordinatorParts* |
| resource_coordinator_parts() = 0; |
| |
| // Returns the object which keeps track of serial port permissions configured |
| // through the policy engine. |
| virtual SerialPolicyAllowedPorts* serial_policy_allowed_ports() = 0; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| // Returns the object which maintains Human Interface Device (HID) system tray |
| // icon. |
| virtual HidSystemTrayIcon* hid_system_tray_icon() = 0; |
| |
| // Returns the object which maintains Universal Serial Bus (USB) system tray |
| // icon. |
| virtual UsbSystemTrayIcon* usb_system_tray_icon() = 0; |
| #endif |
| |
| // Obtain the browser instance of OSCryptAsync, which should be used for data |
| // encryption. |
| virtual os_crypt_async::OSCryptAsync* os_crypt_async() = 0; |
| |
| // Add an additional OSCryptAsync provider for use in tests. Should only be |
| // called once, during startup. |
| virtual void set_additional_os_crypt_async_provider_for_test( |
| size_t precedence, |
| std::unique_ptr<os_crypt_async::KeyProvider> provider) = 0; |
| |
| virtual BuildState* GetBuildState() = 0; |
| // Returns the feature controllers scoped to this browser process. |
| virtual GlobalFeatures* GetFeatures() = 0; |
| |
| // Create GlobalFeatures scoped to this browser process. Should only be used |
| // in unit tests to create GlobalFeatures after modifying feature flags. |
| virtual void CreateGlobalFeaturesForTesting() = 0; |
| |
| // Do not add new members to this class. Instead use GlobalFeatures. See file |
| // level comment for details. |
| }; |
| |
| extern BrowserProcess* g_browser_process; |
| |
| #endif // CHROME_BROWSER_BROWSER_PROCESS_H_ |