Home | History | Annotate | Download | only in profiles
      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
      3 // found in the LICENSE file.
      4 
      5 // This class gathers state related to a single user profile.
      6 
      7 #ifndef CHROME_BROWSER_PROFILES_PROFILE_H_
      8 #define CHROME_BROWSER_PROFILES_PROFILE_H_
      9 #pragma once
     10 
     11 #ifdef ANDROID
     12 #include "base/base_api.h"
     13 #endif
     14 #include "base/basictypes.h"
     15 #include "base/logging.h"
     16 #ifndef ANDROID
     17 #include "chrome/common/extensions/extension.h"
     18 #endif
     19 
     20 namespace base {
     21 class Time;
     22 }
     23 
     24 namespace content {
     25 class ResourceContext;
     26 }
     27 
     28 namespace fileapi {
     29 class FileSystemContext;
     30 class SandboxedFileSystemContext;
     31 }
     32 
     33 namespace history {
     34 class TopSites;
     35 }
     36 
     37 namespace net {
     38 class TransportSecurityState;
     39 class SSLConfigService;
     40 }
     41 
     42 namespace policy {
     43 class ProfilePolicyConnector;
     44 }
     45 
     46 namespace prerender {
     47 class PrerenderManager;
     48 }
     49 
     50 namespace webkit_database {
     51 class DatabaseTracker;
     52 }
     53 
     54 #ifdef ANDROID
     55 struct UnloadedExtensionInfo {
     56   enum Reason {
     57     DISABLE,    // The extension is being disabled.
     58     UPDATE,     // The extension is being updated to a newer version.
     59     UNINSTALL,  // The extension is being uninstalled.
     60   };
     61 };
     62 #endif
     63 
     64 class AutocompleteClassifier;
     65 class BookmarkModel;
     66 class BrowserSignin;
     67 class ChromeAppCacheService;
     68 class ChromeBlobStorageContext;
     69 class ChromeURLDataManager;
     70 class CloudPrintProxyService;
     71 class DownloadManager;
     72 class Extension;
     73 class ExtensionDevToolsManager;
     74 class ExtensionEventRouter;
     75 class ExtensionInfoMap;
     76 class ExtensionMessageService;
     77 class ExtensionPrefValueMap;
     78 class ExtensionProcessManager;
     79 class ExtensionService;
     80 class ExtensionSpecialStoragePolicy;
     81 class FaviconService;
     82 class FilePath;
     83 class FindBarState;
     84 class GeolocationContentSettingsMap;
     85 class GeolocationPermissionContext;
     86 class HistoryService;
     87 class HostContentSettingsMap;
     88 class HostZoomMap;
     89 class NTPResourceCache;
     90 class NavigationController;
     91 class PasswordStore;
     92 class PersonalDataManager;
     93 class PrefProxyConfigTracker;
     94 class PrefService;
     95 class ProfileSyncFactory;
     96 class ProfileSyncService;
     97 class PromoCounter;
     98 class ProtocolHandlerRegistry;
     99 class SQLitePersistentCookieStore;
    100 class SSLConfigServiceManager;
    101 class SSLHostState;
    102 class SessionService;
    103 class SpellCheckHost;
    104 class StatusTray;
    105 class TabRestoreService;
    106 class TemplateURLFetcher;
    107 class TemplateURLModel;
    108 class TokenService;
    109 class TransportSecurityPersister;
    110 class UserScriptMaster;
    111 class UserStyleSheetWatcher;
    112 class VisitedLinkEventListener;
    113 class VisitedLinkMaster;
    114 class WebDataService;
    115 class WebKitContext;
    116 class PromoResourceService;
    117 
    118 namespace net {
    119 class URLRequestContextGetter;
    120 }
    121 
    122 typedef intptr_t ProfileId;
    123 
    124 class
    125 #ifdef ANDROID
    126 BASE_API
    127 #endif
    128 Profile {
    129  public:
    130   // Profile services are accessed with the following parameter. This parameter
    131   // defines what the caller plans to do with the service.
    132   // The caller is responsible for not performing any operation that would
    133   // result in persistent implicit records while using an OffTheRecord profile.
    134   // This flag allows the profile to perform an additional check.
    135   //
    136   // It also gives us an opportunity to perform further checks in the future. We
    137   // could, for example, return an history service that only allow some specific
    138   // methods.
    139   enum ServiceAccessType {
    140     // The caller plans to perform a read or write that takes place as a result
    141     // of the user input. Use this flag when the operation you are doing can be
    142     // performed while incognito. (ex: creating a bookmark)
    143     //
    144     // Since EXPLICIT_ACCESS means "as a result of a user action", this request
    145     // always succeeds.
    146     EXPLICIT_ACCESS,
    147 
    148     // The caller plans to call a method that will permanently change some data
    149     // in the profile, as part of Chrome's implicit data logging. Use this flag
    150     // when you are about to perform an operation which is incompatible with the
    151     // incognito mode.
    152     IMPLICIT_ACCESS
    153   };
    154 
    155   class Delegate {
    156    public:
    157     // Called when creation of the profile is finished.
    158     virtual void OnProfileCreated(Profile* profile, bool success) = 0;
    159 #ifdef ANDROID
    160     virtual ~Delegate() {}
    161 #endif
    162   };
    163 
    164   // Key used to bind profile to the widget with which it is associated.
    165   static const char* kProfileKey;
    166 
    167   // Value that represents no profile Id.
    168   static const ProfileId kInvalidProfileId;
    169 
    170   Profile();
    171   virtual ~Profile() {}
    172 
    173   // Profile prefs are registered as soon as the prefs are loaded for the first
    174   // time.
    175   static void RegisterUserPrefs(PrefService* prefs);
    176 
    177   // Create a new profile given a path.
    178   static Profile* CreateProfile(const FilePath& path);
    179 
    180   // Same as above, but uses async initialization.
    181   static Profile* CreateProfileAsync(const FilePath& path,
    182                                      Delegate* delegate);
    183 
    184   // Returns the request context for the "default" profile.  This may be called
    185   // from any thread.  This CAN return NULL if a first request context has not
    186   // yet been created.  If necessary, listen on the UI thread for
    187   // NOTIFY_DEFAULT_REQUEST_CONTEXT_AVAILABLE.
    188   static net::URLRequestContextGetter* GetDefaultRequestContext();
    189 
    190   // Returns a unique Id that can be used to identify this profile at runtime.
    191   // This Id is not persistent and will not survive a restart of the browser.
    192   virtual ProfileId GetRuntimeId() = 0;
    193 
    194   // Returns the path of the directory where this profile's data is stored.
    195   virtual FilePath GetPath() = 0;
    196 
    197   // Return whether this profile is incognito. Default is false.
    198   virtual bool IsOffTheRecord() = 0;
    199 
    200   // Return the incognito version of this profile. The returned pointer
    201   // is owned by the receiving profile. If the receiving profile is off the
    202   // record, the same profile is returned.
    203   virtual Profile* GetOffTheRecordProfile() = 0;
    204 
    205   // Destroys the incognito profile.
    206   virtual void DestroyOffTheRecordProfile() = 0;
    207 
    208   // True if an incognito profile exists.
    209   virtual bool HasOffTheRecordProfile() = 0;
    210 
    211   // Return the original "recording" profile. This method returns this if the
    212   // profile is not incognito.
    213   virtual Profile* GetOriginalProfile() = 0;
    214 
    215   // Returns a pointer to the ChromeAppCacheService instance for this profile.
    216   virtual ChromeAppCacheService* GetAppCacheService() = 0;
    217 
    218   // Returns a pointer to the DatabaseTracker instance for this profile.
    219   virtual webkit_database::DatabaseTracker* GetDatabaseTracker() = 0;
    220 
    221   // Returns a pointer to the TopSites (thumbnail manager) instance
    222   // for this profile.
    223   virtual history::TopSites* GetTopSites() = 0;
    224 
    225   // Variant of GetTopSites that doesn't force creation.
    226   virtual history::TopSites* GetTopSitesWithoutCreating() = 0;
    227 
    228   // Retrieves a pointer to the VisitedLinkMaster associated with this
    229   // profile.  The VisitedLinkMaster is lazily created the first time
    230   // that this method is called.
    231   virtual VisitedLinkMaster* GetVisitedLinkMaster() = 0;
    232 
    233   // Retrieves a pointer to the ExtensionService associated with this
    234   // profile. The ExtensionService is created at startup.
    235   virtual ExtensionService* GetExtensionService() = 0;
    236 
    237   // Retrieves a pointer to the UserScriptMaster associated with this
    238   // profile.  The UserScriptMaster is lazily created the first time
    239   // that this method is called.
    240   virtual UserScriptMaster* GetUserScriptMaster() = 0;
    241 
    242   // Retrieves a pointer to the ExtensionDevToolsManager associated with this
    243   // profile.  The instance is created at startup.
    244   virtual ExtensionDevToolsManager* GetExtensionDevToolsManager() = 0;
    245 
    246   // Retrieves a pointer to the ExtensionProcessManager associated with this
    247   // profile.  The instance is created at startup.
    248   virtual ExtensionProcessManager* GetExtensionProcessManager() = 0;
    249 
    250   // Retrieves a pointer to the ExtensionMessageService associated with this
    251   // profile.  The instance is created at startup.
    252   virtual ExtensionMessageService* GetExtensionMessageService() = 0;
    253 
    254   // Accessor. The instance is created at startup.
    255   virtual ExtensionEventRouter* GetExtensionEventRouter() = 0;
    256 
    257   // Accessor. The instance is created upon first access.
    258   virtual ExtensionSpecialStoragePolicy*
    259       GetExtensionSpecialStoragePolicy() = 0;
    260 
    261   // Retrieves a pointer to the SSLHostState associated with this profile.
    262   // The SSLHostState is lazily created the first time that this method is
    263   // called.
    264   virtual SSLHostState* GetSSLHostState() = 0;
    265 
    266   // Retrieves a pointer to the TransportSecurityState associated with
    267   // this profile.  The TransportSecurityState is lazily created the
    268   // first time that this method is called.
    269   virtual net::TransportSecurityState* GetTransportSecurityState() = 0;
    270 
    271   // Retrieves a pointer to the FaviconService associated with this
    272   // profile.  The FaviconService is lazily created the first time
    273   // that this method is called.
    274   //
    275   // Although FaviconService is refcounted, this will not addref, and callers
    276   // do not need to do any reference counting as long as they keep the pointer
    277   // only for the local scope (which they should do anyway since the browser
    278   // process may decide to shut down).
    279   //
    280   // |access| defines what the caller plans to do with the service. See
    281   // the ServiceAccessType definition above.
    282   virtual FaviconService* GetFaviconService(ServiceAccessType access) = 0;
    283 
    284   // Retrieves a pointer to the HistoryService associated with this
    285   // profile.  The HistoryService is lazily created the first time
    286   // that this method is called.
    287   //
    288   // Although HistoryService is refcounted, this will not addref, and callers
    289   // do not need to do any reference counting as long as they keep the pointer
    290   // only for the local scope (which they should do anyway since the browser
    291   // process may decide to shut down).
    292   //
    293   // |access| defines what the caller plans to do with the service. See
    294   // the ServiceAccessType definition above.
    295   virtual HistoryService* GetHistoryService(ServiceAccessType access) = 0;
    296 
    297   // Similar to GetHistoryService(), but won't create the history service if it
    298   // doesn't already exist.
    299   virtual HistoryService* GetHistoryServiceWithoutCreating() = 0;
    300 
    301   // Retrieves a pointer to the AutocompleteClassifier associated with this
    302   // profile. The AutocompleteClassifier is lazily created the first time that
    303   // this method is called.
    304   virtual AutocompleteClassifier* GetAutocompleteClassifier() = 0;
    305 
    306   // Returns the WebDataService for this profile. This is owned by
    307   // the Profile. Callers that outlive the life of this profile need to be
    308   // sure they refcount the returned value.
    309   //
    310   // |access| defines what the caller plans to do with the service. See
    311   // the ServiceAccessType definition above.
    312   virtual WebDataService* GetWebDataService(ServiceAccessType access) = 0;
    313 
    314   // Similar to GetWebDataService(), but won't create the web data service if it
    315   // doesn't already exist.
    316   virtual WebDataService* GetWebDataServiceWithoutCreating() = 0;
    317 
    318   // Returns the PasswordStore for this profile. This is owned by the Profile.
    319   virtual PasswordStore* GetPasswordStore(ServiceAccessType access) = 0;
    320 
    321   // Retrieves a pointer to the PrefService that manages the preferences
    322   // for this user profile.  The PrefService is lazily created the first
    323   // time that this method is called.
    324   virtual PrefService* GetPrefs() = 0;
    325 
    326   // Retrieves a pointer to the PrefService that manages the preferences
    327   // for OffTheRecord Profiles.  This PrefService is lazily created the first
    328   // time that this method is called.
    329   virtual PrefService* GetOffTheRecordPrefs() = 0;
    330 
    331   // Returns the TemplateURLModel for this profile. This is owned by the
    332   // the Profile.
    333   virtual TemplateURLModel* GetTemplateURLModel() = 0;
    334 
    335   // Returns the TemplateURLFetcher for this profile. This is owned by the
    336   // profile.
    337   virtual TemplateURLFetcher* GetTemplateURLFetcher() = 0;
    338 
    339   // Returns the DownloadManager associated with this profile.
    340   virtual DownloadManager* GetDownloadManager() = 0;
    341   virtual bool HasCreatedDownloadManager() const = 0;
    342 
    343   // Returns the PersonalDataManager associated with this profile.
    344   virtual PersonalDataManager* GetPersonalDataManager() = 0;
    345 
    346   // Returns the FileSystemContext associated to this profile.  The context
    347   // is lazily created the first time this method is called.  This is owned
    348   // by the profile.
    349   virtual fileapi::FileSystemContext* GetFileSystemContext() = 0;
    350 
    351   // Returns the BrowserSignin object assigned to this profile.
    352   virtual BrowserSignin* GetBrowserSignin() = 0;
    353 
    354   // Returns the request context information associated with this profile.  Call
    355   // this only on the UI thread, since it can send notifications that should
    356   // happen on the UI thread.
    357   virtual net::URLRequestContextGetter* GetRequestContext() = 0;
    358 
    359   // Returns the request context appropriate for the given app. If installed_app
    360   // is null or installed_app->is_storage_isolated() returns false, this is
    361   // equivalent to calling GetRequestContext().
    362   // TODO(creis): After isolated app storage is no longer an experimental
    363   // feature, consider making this the default contract for GetRequestContext.
    364   virtual net::URLRequestContextGetter* GetRequestContextForPossibleApp(
    365       const Extension* installed_app) = 0;
    366 
    367   // Returns the request context for media resources asociated with this
    368   // profile.
    369   virtual net::URLRequestContextGetter* GetRequestContextForMedia() = 0;
    370 
    371   // Returns the request context used for extension-related requests.  This
    372   // is only used for a separate cookie store currently.
    373   virtual net::URLRequestContextGetter* GetRequestContextForExtensions() = 0;
    374 
    375   // Returns the request context used within an installed app that has
    376   // requested isolated storage.
    377   virtual net::URLRequestContextGetter* GetRequestContextForIsolatedApp(
    378       const std::string& app_id) = 0;
    379 
    380 #ifndef ANDROID
    381   virtual const content::ResourceContext& GetResourceContext() = 0;
    382 #endif
    383 
    384   // Called by the ExtensionService that lives in this profile. Gives the
    385   // profile a chance to react to the load event before the EXTENSION_LOADED
    386   // notification has fired. The purpose for handling this event first is to
    387   // avoid race conditions by making sure URLRequestContexts learn about new
    388   // extensions before anything else needs them to know.
    389   virtual void RegisterExtensionWithRequestContexts(
    390       const Extension* extension) {}
    391 
    392   // Called by the ExtensionService that lives in this profile. Lets the
    393   // profile clean up its RequestContexts once all the listeners to the
    394   // EXTENSION_UNLOADED notification have finished running.
    395   virtual void UnregisterExtensionWithRequestContexts(
    396       const std::string& extension_id,
    397       const UnloadedExtensionInfo::Reason) {}
    398 
    399   // Returns the SSLConfigService for this profile.
    400   virtual net::SSLConfigService* GetSSLConfigService() = 0;
    401 
    402   // Returns the Hostname <-> Content settings map for this profile.
    403   virtual HostContentSettingsMap* GetHostContentSettingsMap() = 0;
    404 
    405   // Returns the Hostname <-> Zoom Level map for this profile.
    406   virtual HostZoomMap* GetHostZoomMap() = 0;
    407 
    408   // Returns the geolocation settings map for this profile.
    409   virtual GeolocationContentSettingsMap* GetGeolocationContentSettingsMap() = 0;
    410 
    411   // Returns the geolocation permission context for this profile.
    412   virtual GeolocationPermissionContext* GetGeolocationPermissionContext() = 0;
    413 
    414   // Returns the user style sheet watcher.
    415   virtual UserStyleSheetWatcher* GetUserStyleSheetWatcher() = 0;
    416 
    417   // Returns the find bar state for this profile.  The find bar state is lazily
    418   // created the first time that this method is called.
    419   virtual FindBarState* GetFindBarState() = 0;
    420 
    421   // Returns the session service for this profile. This may return NULL. If
    422   // this profile supports a session service (it isn't incognito), and
    423   // the session service hasn't yet been created, this forces creation of
    424   // the session service.
    425   //
    426   // This returns NULL in two situations: the profile is incognito, or the
    427   // session service has been explicitly shutdown (browser is exiting). Callers
    428   // should always check the return value for NULL.
    429   virtual SessionService* GetSessionService() = 0;
    430 
    431   // If this profile has a session service, it is shut down. To properly record
    432   // the current state this forces creation of the session service, then shuts
    433   // it down.
    434   virtual void ShutdownSessionService() = 0;
    435 
    436   // Returns true if this profile has a session service.
    437   virtual bool HasSessionService() const = 0;
    438 
    439   // Returns true if this profile has a profile sync service.
    440   virtual bool HasProfileSyncService() const = 0;
    441 
    442   // Returns true if the last time this profile was open it was exited cleanly.
    443   virtual bool DidLastSessionExitCleanly() = 0;
    444 
    445   // Returns the BookmarkModel, creating if not yet created.
    446   virtual BookmarkModel* GetBookmarkModel() = 0;
    447 
    448   // Returns the ProtocolHandlerRegistry, creating if not yet created.
    449   virtual ProtocolHandlerRegistry* GetProtocolHandlerRegistry() = 0;
    450 
    451   // Returns the Gaia Token Service, creating if not yet created.
    452   virtual TokenService* GetTokenService() = 0;
    453 
    454   // Returns the ProfileSyncService, creating if not yet created.
    455   virtual ProfileSyncService* GetProfileSyncService() = 0;
    456 
    457   // Returns the ProfileSyncService, creating if not yet created, with
    458   // the specified CrOS username.
    459   virtual ProfileSyncService* GetProfileSyncService(
    460       const std::string& cros_user) = 0;
    461 
    462   // Returns the CloudPrintProxyService, creating if not yet created.
    463   virtual CloudPrintProxyService* GetCloudPrintProxyService() = 0;
    464 
    465   // Return whether 2 profiles are the same. 2 profiles are the same if they
    466   // represent the same profile. This can happen if there is pointer equality
    467   // or if one profile is the incognito version of another profile (or vice
    468   // versa).
    469   virtual bool IsSameProfile(Profile* profile) = 0;
    470 
    471   // Returns the time the profile was started. This is not the time the profile
    472   // was created, rather it is the time the user started chrome and logged into
    473   // this profile. For the single profile case, this corresponds to the time
    474   // the user started chrome.
    475   virtual base::Time GetStartTime() const = 0;
    476 
    477   // Returns the TabRestoreService. This returns NULL when incognito.
    478   virtual TabRestoreService* GetTabRestoreService() = 0;
    479 
    480   virtual void ResetTabRestoreService() = 0;
    481 
    482   // May return NULL.
    483   virtual SpellCheckHost* GetSpellCheckHost() = 0;
    484 
    485   // If |force| is false, and the spellchecker is already initialized (or is in
    486   // the process of initializing), then do nothing. Otherwise clobber the
    487   // current spellchecker and replace it with a new one.
    488   virtual void ReinitializeSpellCheckHost(bool force) = 0;
    489 
    490   // Returns the WebKitContext assigned to this profile.
    491   virtual WebKitContext* GetWebKitContext() = 0;
    492 
    493   // Returns the StatusTray, which provides an API for displaying status icons
    494   // in the system status tray. Returns NULL if status icons are not supported
    495   // on this platform (or this is a unit test).
    496   virtual StatusTray* GetStatusTray() = 0;
    497 
    498   // Marks the profile as cleanly shutdown.
    499   //
    500   // NOTE: this is invoked internally on a normal shutdown, but is public so
    501   // that it can be invoked when the user logs out/powers down (WM_ENDSESSION).
    502   virtual void MarkAsCleanShutdown() = 0;
    503 
    504   // Initializes extensions machinery.
    505   // Component extensions are always enabled, external and user extensions
    506   // are controlled by |extensions_enabled|.
    507   virtual void InitExtensions(bool extensions_enabled) = 0;
    508 
    509   // Start up service that gathers data from a promo resource feed.
    510   virtual void InitPromoResources() = 0;
    511 
    512   // Register URLRequestFactories for protocols registered with
    513   // registerProtocolHandler.
    514   virtual void InitRegisteredProtocolHandlers() = 0;
    515 
    516   // Returns the new tab page resource cache.
    517   virtual NTPResourceCache* GetNTPResourceCache() = 0;
    518 
    519   // Returns the last directory that was chosen for uploading or opening a file.
    520   virtual FilePath last_selected_directory() = 0;
    521   virtual void set_last_selected_directory(const FilePath& path) = 0;
    522 
    523   // Returns a pointer to the ChromeBlobStorageContext instance for this
    524   // profile.
    525   virtual ChromeBlobStorageContext* GetBlobStorageContext() = 0;
    526 
    527   // Returns the IO-thread-accessible profile data for this profile.
    528   virtual ExtensionInfoMap* GetExtensionInfoMap() = 0;
    529 
    530   // Returns the PromoCounter for Instant, or NULL if not applicable.
    531   virtual PromoCounter* GetInstantPromoCounter() = 0;
    532 
    533   // Gets the policy connector associated with this profile.
    534   virtual policy::ProfilePolicyConnector* GetPolicyConnector() = 0;
    535 
    536   // Returns the ChromeURLDataManager for this profile.
    537   virtual ChromeURLDataManager* GetChromeURLDataManager() = 0;
    538 
    539 #if defined(OS_CHROMEOS)
    540   enum AppLocaleChangedVia {
    541     // Caused by chrome://settings change.
    542     APP_LOCALE_CHANGED_VIA_SETTINGS,
    543     // Locale has been reverted via LocaleChangeGuard.
    544     APP_LOCALE_CHANGED_VIA_REVERT,
    545     // From login screen.
    546     APP_LOCALE_CHANGED_VIA_LOGIN,
    547     // Source unknown.
    548     APP_LOCALE_CHANGED_VIA_UNKNOWN
    549   };
    550 
    551   // Changes application locale for a profile.
    552   virtual void ChangeAppLocale(
    553       const std::string& locale, AppLocaleChangedVia via) = 0;
    554 
    555   // Called after login.
    556   virtual void OnLogin() = 0;
    557 
    558   // Creates ChromeOS's EnterpriseExtensionListener.
    559   virtual void SetupChromeOSEnterpriseExtensionObserver() = 0;
    560 
    561   // Initializes Chrome OS's preferences.
    562   virtual void InitChromeOSPreferences() = 0;
    563 #endif  // defined(OS_CHROMEOS)
    564 
    565   // Returns the helper object that provides the proxy configuration service
    566   // access to the the proxy configuration possibly defined by preferences.
    567   virtual PrefProxyConfigTracker* GetProxyConfigTracker() = 0;
    568 
    569   // Returns the PrerenderManager used to prerender entire webpages for this
    570   // profile.
    571   virtual prerender::PrerenderManager* GetPrerenderManager() = 0;
    572 
    573   // Returns whether it is a guest session.
    574   static bool IsGuestSession();
    575 
    576 #ifdef UNIT_TEST
    577   // Use with caution.  GetDefaultRequestContext may be called on any thread!
    578   static void set_default_request_context(net::URLRequestContextGetter* c) {
    579     default_request_context_ = c;
    580   }
    581 #endif
    582 
    583   // Did the user restore the last session? This is set by SessionRestore.
    584   void set_restored_last_session(bool restored_last_session) {
    585     restored_last_session_ = restored_last_session;
    586   }
    587   bool restored_last_session() const {
    588     return restored_last_session_;
    589   }
    590 
    591   // Stop sending accessibility events until ResumeAccessibilityEvents().
    592   // Calls to Pause nest; no events will be sent until the number of
    593   // Resume calls matches the number of Pause calls received.
    594   void PauseAccessibilityEvents() {
    595     accessibility_pause_level_++;
    596   }
    597 
    598   void ResumeAccessibilityEvents() {
    599     DCHECK(accessibility_pause_level_ > 0);
    600     accessibility_pause_level_--;
    601   }
    602 
    603   bool ShouldSendAccessibilityEvents() {
    604     return 0 == accessibility_pause_level_;
    605   }
    606 
    607   // Checks whether sync is configurable by the user. Returns false if sync is
    608   // disabled or controlled by configuration management.
    609   bool IsSyncAccessible();
    610 
    611   // Creates an OffTheRecordProfile which points to this Profile.
    612   Profile* CreateOffTheRecordProfile();
    613 
    614  protected:
    615   friend class OffTheRecordProfileImpl;
    616 
    617   static net::URLRequestContextGetter* default_request_context_;
    618 
    619  private:
    620   bool restored_last_session_;
    621 
    622   // Accessibility events will only be propagated when the pause
    623   // level is zero.  PauseAccessibilityEvents and ResumeAccessibilityEvents
    624   // increment and decrement the level, respectively, rather than set it to
    625   // true or false, so that calls can be nested.
    626   int accessibility_pause_level_;
    627 };
    628 
    629 #endif  // CHROME_BROWSER_PROFILES_PROFILE_H_
    630