profile_impl.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class gathers state related to a single user profile.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <string>
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/files/file_path.h"
13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/gtest_prod_util.h"
14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/memory/ref_counted.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h"
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/timer/timer.h"
18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/profiles/profile.h"
19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/profiles/profile_impl_io_data.h"
20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/domain_reliability/clear_mode.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/content_browser_client.h"
22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/browser/host_zoom_map.h"
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetPrefObserver;
25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass PrefService;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefServiceSyncable;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ShortcutsBackend;
28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass SSLConfigServiceManager;
29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass TrackedPreferenceValidationDelegate;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(OS_CHROMEOS)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class KioskTest;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocaleChangeGuard;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ManagedUserTestBase;
36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass Preferences;
37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif
39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace base {
41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass SequencedTaskRunner;
42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
45ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass ExtensionSystem;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CloudPolicyManager;
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ProfilePolicyConnector;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SchemaRegistryService;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace user_prefs {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class refRegistrySyncable;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The default profile implementation.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ProfileImpl : public Profile {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Value written to prefs when the exit type is EXIT_NORMAL. Public for tests.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char* const kPrefExitTypeNormal;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ProfileImpl();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::BrowserContext implementation:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual base::FilePath GetPath() const OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::DownloadManagerDelegate*
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetDownloadManagerDelegate() OVERRIDE;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int renderer_child_id) OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaRequestContext() OVERRIDE;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaRequestContextForRenderProcess(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int renderer_child_id) OVERRIDE;
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual net::URLRequestContextGetter*
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      GetMediaRequestContextForStoragePartition(
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          const base::FilePath& partition_path,
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          bool in_memory) OVERRIDE;
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual content::ResourceContext* GetResourceContext() OVERRIDE;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual content::BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual quota::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual content::PushMessagingService* GetPushMessagingService() OVERRIDE;
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Profile implementation:
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual scoped_refptr<base::SequencedTaskRunner> GetIOTaskRunner() OVERRIDE;
89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Note that this implementation returns the Google-services username, if any,
90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // not the Chrome user's display name.
91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual std::string GetProfileName() OVERRIDE;
92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual ProfileType GetProfileType() const OVERRIDE;
93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool IsOffTheRecord() const OVERRIDE;
94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual Profile* GetOffTheRecordProfile() OVERRIDE;
95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void DestroyOffTheRecordProfile() OVERRIDE;
96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool HasOffTheRecordProfile() OVERRIDE;
97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual Profile* GetOriginalProfile() OVERRIDE;
98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool IsSupervised() OVERRIDE;
99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual history::TopSites* GetTopSites() OVERRIDE;
100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual history::TopSites* GetTopSitesWithoutCreating() OVERRIDE;
101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual ExtensionService* GetExtensionService() OVERRIDE;
102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual ExtensionSpecialStoragePolicy*
103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetExtensionSpecialStoragePolicy() OVERRIDE;
104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual PrefService* GetPrefs() OVERRIDE;
105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual PrefService* GetOffTheRecordPrefs() OVERRIDE;
106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual net::URLRequestContextGetter*
107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      GetRequestContextForExtensions() OVERRIDE;
108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual net::SSLConfigService* GetSSLConfigService() OVERRIDE;
109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual HostContentSettingsMap* GetHostContentSettingsMap() OVERRIDE;
110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool IsSameProfile(Profile* profile) OVERRIDE;
111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual base::Time GetStartTime() const OVERRIDE;
112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual net::URLRequestContextGetter* CreateRequestContext(
113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      content::ProtocolHandlerMap* protocol_handlers,
114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const base::FilePath& partition_path,
117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      bool in_memory,
118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      content::ProtocolHandlerMap* protocol_handlers,
119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual base::FilePath last_selected_directory() OVERRIDE;
121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void set_last_selected_directory(const base::FilePath& path) OVERRIDE;
122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual chrome_browser_net::Predictor* GetNetworkPredictor() OVERRIDE;
123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual DevToolsNetworkController* GetDevToolsNetworkController() OVERRIDE;
124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void ClearNetworkingHistorySince(
125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      base::Time time,
126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      const base::Closure& completion) OVERRIDE;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ClearDomainReliabilityMonitor(
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      domain_reliability::DomainReliabilityClearMode mode,
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::Closure& completion) OVERRIDE;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual GURL GetHomePage() OVERRIDE;
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool WasCreatedByVersionOrLater(const std::string& version) OVERRIDE;
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetExitType(ExitType exit_type) OVERRIDE;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ExitType GetLastSessionExitType() OVERRIDE;
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ChangeAppLocale(const std::string& locale,
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               AppLocaleChangedVia) OVERRIDE;
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnLogin() OVERRIDE;
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitChromeOSPreferences() OVERRIDE;
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual PrefProxyConfigTracker* GetProxyConfigTracker() OVERRIDE;
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class chromeos::KioskTest;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class chromeos::ManagedUserTestBase;
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class Profile;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class BetterSessionRestoreCrashTest;
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(StartupBrowserCreatorTest,
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           ProfilesLaunchedAfterCrash);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(ProfileBrowserTest, ProfileReadmeCreated);
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(ProfileBrowserTest,
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           ProfileDeletedBeforeReadmeCreated);
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Delay, in milliseconds, before README file is created for a new profile.
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // This is non-const for testing purposes.
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int create_readme_delay_ms;
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileImpl(const base::FilePath& path,
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              Delegate* delegate,
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              CreateMode create_mode,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              base::SequencedTaskRunner* sequenced_task_runner);
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Does final initialization. Should be called after prefs were loaded.
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DoFinalInit();
168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void InitHostZoomMap();
170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnDefaultZoomLevelChanged();
172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnZoomLevelChanged(
173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const content::HostZoomMap::ZoomLevelChange& change);
174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Does final prefs initialization and calls Init().
176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnPrefsLoaded(bool success);
177ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_SESSION_SERVICE)
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void StopCreateSessionServiceTimer();
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void EnsureSessionServiceCreated();
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void EnsureRequestContextCreated() {
186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    GetRequestContext();
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Updates the ProfileInfoCache with data from this profile.
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateProfileUserNameCache();
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateProfileSupervisedUserIdCache();
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateProfileNameCache();
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateProfileAvatarCache();
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateProfileIsEphemeralCache();
195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void GetCacheParameters(bool is_media_context,
197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                          base::FilePath* cache_path,
198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                          int* max_size);
199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  PrefProxyConfigTracker* CreateProxyConfigTracker();
201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<content::HostZoomMap::Subscription> zoom_subscription_;
203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  PrefChangeRegistrar pref_change_registrar_;
204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::FilePath path_;
206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::FilePath base_cache_path_;
207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // !!! BIG HONKING WARNING !!!
209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //  The order of the members below is important. Do not change it unless
210010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //  you know what you're doing. Also, if adding a new member here make sure
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //  that the declaration occurs AFTER things it depends on as destruction
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //  happens in reverse order of declaration.
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TODO(mnissler, joaodasilva): The |profile_policy_connector_| provides the
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // PolicyService that the |prefs_| depend on, and must outlive |prefs_|.
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This can be removed once |prefs_| becomes a KeyedService too.
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |profile_policy_connector_| in turn depends on |cloud_policy_manager_|,
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// which depends on |schema_registry_service_|.
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_CONFIGURATION_POLICY)
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<policy::SchemaRegistryService> schema_registry_service_;
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<policy::CloudPolicyManager> cloud_policy_manager_;
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<policy::ProfilePolicyConnector> profile_policy_connector_;
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Keep |pref_validation_delegate_| above |prefs_| so that the former outlives
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // the latter.
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<TrackedPreferenceValidationDelegate> pref_validation_delegate_;
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Keep |prefs_| on top for destruction order because |extension_prefs_|,
230ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // |net_pref_observer_|, |io_data_| and others store pointers to |prefs_| and
231ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // shall be destructed first.
232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_;
2336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<PrefServiceSyncable> prefs_;
234ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_ptr<PrefServiceSyncable> otr_prefs_;
235ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ProfileImplIOData::Handle io_data_;
236ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_refptr<ExtensionSpecialStoragePolicy>
237ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      extension_special_storage_policy_;
238ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_ptr<NetPrefObserver> net_pref_observer_;
239ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_ptr<SSLConfigServiceManager> ssl_config_service_manager_;
2406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
241ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_refptr<ShortcutsBackend> shortcuts_backend_;
242ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
243ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Exit type the last time the profile was opened. This is set only once from
2446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // prefs.
2456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ExitType last_session_exit_type_;
246ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
247ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(ENABLE_SESSION_SERVICE)
248ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::OneShotTimer<ProfileImpl> create_session_service_timer_;
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<Profile> off_the_record_profile_;
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // See GetStartTime for details.
2546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::Time start_time_;
2556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_refptr<history::TopSites> top_sites_;  // For history and thumbnails.
257ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#if defined(OS_CHROMEOS)
259ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_ptr<chromeos::Preferences> chromeos_preferences_;
260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
261ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  scoped_ptr<chromeos::LocaleChangeGuard> locale_change_guard_;
262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool is_login_profile_;
264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif
265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
268ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // STOP!!!! DO NOT ADD ANY MORE ITEMS HERE!!!!
269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Instead, make your Service/Manager/whatever object you're hanging off the
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Profile use our new BrowserContextKeyedServiceFactory system instead.
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // You can find the design document here:
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   https://sites.google.com/a/chromium.org/dev/developers/design-documents/profile-architecture
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
276  // and you can read the raw headers here:
277  //
278  // components/keyed_service/content/browser_context_dependency_manager.*
279  // components/keyed_service/core/keyed_service.h
280  // components/keyed_service/content/browser_context_keyed_service_factory.*
281
282  Profile::Delegate* delegate_;
283
284  chrome_browser_net::Predictor* predictor_;
285
286  DISALLOW_COPY_AND_ASSIGN(ProfileImpl);
287};
288
289#endif  // CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
290