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)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_impl_io_data.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/content_browser_client.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/host_zoom_map.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetPrefObserver;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefServiceSyncable;
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class ShortcutsBackend;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SSLConfigServiceManager;
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TrackedPreferenceValidationDelegate;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class KioskTest;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocaleChangeGuard;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Preferences;
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUserTestBase;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SequencedTaskRunner;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace data_reduction_proxy {
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DataReductionProxyParams;
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DataReductionProxyChromeSettings;
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace domain_reliability {
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass DomainReliabilityMonitor;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionSystem;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy {
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CloudPolicyManager;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ProfilePolicyConnector;
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SchemaRegistryService;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs {
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class refRegistrySyncable;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The default profile implementation.
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ProfileImpl : public Profile {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Value written to prefs when the exit type is EXIT_NORMAL. Public for tests.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char* const kPrefExitTypeNormal;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ProfileImpl();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::BrowserContext implementation:
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual base::FilePath GetPath() const OVERRIDE;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::DownloadManagerDelegate*
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetDownloadManagerDelegate() OVERRIDE;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess(
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int renderer_child_id) OVERRIDE;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaRequestContext() OVERRIDE;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaRequestContextForRenderProcess(
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int renderer_child_id) OVERRIDE;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter*
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetMediaRequestContextForStoragePartition(
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          const base::FilePath& partition_path,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          bool in_memory) OVERRIDE;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::ResourceContext* GetResourceContext() OVERRIDE;
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual content::BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual storage::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual content::PushMessagingService* GetPushMessagingService() OVERRIDE;
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual content::SSLHostStateDelegate* GetSSLHostStateDelegate() OVERRIDE;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Profile implementation:
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual scoped_refptr<base::SequencedTaskRunner> GetIOTaskRunner() OVERRIDE;
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Note that this implementation returns the Google-services username, if any,
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // not the Chrome user's display name.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetProfileName() OVERRIDE;
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ProfileType GetProfileType() const OVERRIDE;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsOffTheRecord() const OVERRIDE;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual Profile* GetOffTheRecordProfile() OVERRIDE;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyOffTheRecordProfile() OVERRIDE;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasOffTheRecordProfile() OVERRIDE;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual Profile* GetOriginalProfile() OVERRIDE;
108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual bool IsSupervised() OVERRIDE;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual history::TopSites* GetTopSites() OVERRIDE;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual history::TopSites* GetTopSitesWithoutCreating() OVERRIDE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExtensionSpecialStoragePolicy*
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetExtensionSpecialStoragePolicy() OVERRIDE;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PrefService* GetPrefs() OVERRIDE;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PrefService* GetOffTheRecordPrefs() OVERRIDE;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter*
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetRequestContextForExtensions() OVERRIDE;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::SSLConfigService* GetSSLConfigService() OVERRIDE;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual HostContentSettingsMap* GetHostContentSettingsMap() OVERRIDE;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsSameProfile(Profile* profile) OVERRIDE;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual base::Time GetStartTime() const OVERRIDE;
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLRequestContextGetter* CreateRequestContext(
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& partition_path,
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool in_memory,
127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::FilePath last_selected_directory() OVERRIDE;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void set_last_selected_directory(const base::FilePath& path) OVERRIDE;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual chrome_browser_net::Predictor* GetNetworkPredictor() OVERRIDE;
13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual DevToolsNetworkController* GetDevToolsNetworkController() OVERRIDE;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearNetworkingHistorySince(
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time time,
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::Closure& completion) OVERRIDE;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual GURL GetHomePage() OVERRIDE;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool WasCreatedByVersionOrLater(const std::string& version) OVERRIDE;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetExitType(ExitType exit_type) OVERRIDE;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExitType GetLastSessionExitType() OVERRIDE;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ChangeAppLocale(const std::string& locale,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               AppLocaleChangedVia) OVERRIDE;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnLogin() OVERRIDE;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitChromeOSPreferences() OVERRIDE;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PrefProxyConfigTracker* GetProxyConfigTracker() OVERRIDE;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_CHROMEOS)
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  friend class chromeos::KioskTest;
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class chromeos::SupervisedUserTestBase;
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class Profile;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class BetterSessionRestoreCrashTest;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(StartupBrowserCreatorTest,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           ProfilesLaunchedAfterCrash);
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FRIEND_TEST_ALL_PREFIXES(ProfileBrowserTest, DISABLED_ProfileReadmeCreated);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(ProfileBrowserTest,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           ProfileDeletedBeforeReadmeCreated);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delay, in milliseconds, before README file is created for a new profile.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is non-const for testing purposes.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int create_readme_delay_ms;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileImpl(const base::FilePath& path,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              Delegate* delegate,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              CreateMode create_mode,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              base::SequencedTaskRunner* sequenced_task_runner);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does final initialization. Should be called after prefs were loaded.
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void DoFinalInit();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitHostZoomMap();
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnDefaultZoomLevelChanged();
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnZoomLevelChanged(
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const content::HostZoomMap::ZoomLevelChange& change);
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does final prefs initialization and calls Init().
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnPrefsLoaded(bool success);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_SESSION_SERVICE)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StopCreateSessionServiceTimer();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void EnsureSessionServiceCreated();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void EnsureRequestContextCreated() {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetRequestContext();
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the ProfileInfoCache with data from this profile.
1965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void UpdateProfileUserNameCache();
197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void UpdateProfileSupervisedUserIdCache();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateProfileNameCache();
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateProfileAvatarCache();
2008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void UpdateProfileIsEphemeralCache();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetCacheParameters(bool is_media_context,
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          base::FilePath* cache_path,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          int* max_size);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefProxyConfigTracker* CreateProxyConfigTracker();
2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<domain_reliability::DomainReliabilityMonitor>
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      CreateDomainReliabilityMonitor(PrefService* local_state);
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<content::HostZoomMap::Subscription> zoom_subscription_;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefChangeRegistrar pref_change_registrar_;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path_;
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath base_cache_path_;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // !!! BIG HONKING WARNING !!!
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  The order of the members below is important. Do not change it unless
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  you know what you're doing. Also, if adding a new member here make sure
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  that the declaration occurs AFTER things it depends on as destruction
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  happens in reverse order of declaration.
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(mnissler, joaodasilva): The |profile_policy_connector_| provides the
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // PolicyService that the |prefs_| depend on, and must outlive |prefs_|.
225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This can be removed once |prefs_| becomes a KeyedService too.
226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// |profile_policy_connector_| in turn depends on |cloud_policy_manager_|,
227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// which depends on |schema_registry_service_|.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<policy::SchemaRegistryService> schema_registry_service_;
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<policy::CloudPolicyManager> cloud_policy_manager_;
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<policy::ProfilePolicyConnector> profile_policy_connector_;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Keep |pref_validation_delegate_| above |prefs_| so that the former outlives
235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // the latter.
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<TrackedPreferenceValidationDelegate> pref_validation_delegate_;
237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Keep |prefs_| on top for destruction order because |extension_prefs_|,
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |net_pref_observer_|, |io_data_| and others store pointers to |prefs_| and
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // shall be destructed first.
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_;
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<PrefServiceSyncable> prefs_;
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<PrefServiceSyncable> otr_prefs_;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileImplIOData::Handle io_data_;
2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<ExtensionSpecialStoragePolicy>
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      extension_special_storage_policy_;
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<NetPrefObserver> net_pref_observer_;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<SSLConfigServiceManager> ssl_config_service_manager_;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
25223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  scoped_refptr<ShortcutsBackend> shortcuts_backend_;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Exit type the last time the profile was opened. This is set only once from
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // prefs.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExitType last_session_exit_type_;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_SESSION_SERVICE)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::OneShotTimer<ProfileImpl> create_session_service_timer_;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Profile> off_the_record_profile_;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See GetStartTime for details.
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time start_time_;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<history::TopSites> top_sites_;  // For history and thumbnails.
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<chromeos::Preferences> chromeos_preferences_;
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<chromeos::LocaleChangeGuard> locale_change_guard_;
2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool is_login_profile_;
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // STOP!!!! DO NOT ADD ANY MORE ITEMS HERE!!!!
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Instead, make your Service/Manager/whatever object you're hanging off the
28290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Profile use our new BrowserContextKeyedServiceFactory system instead.
28390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // You can find the design document here:
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   https://sites.google.com/a/chromium.org/dev/developers/design-documents/profile-architecture
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and you can read the raw headers here:
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // components/keyed_service/content/browser_context_dependency_manager.*
290a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // components/keyed_service/core/keyed_service.h
291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // components/keyed_service/content/browser_context_keyed_service_factory.*
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile::Delegate* delegate_;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome_browser_net::Predictor* predictor_;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ProfileImpl);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PROFILES_PROFILE_IMPL_H_
301