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)#ifndef CHROME_BROWSER_PROFILES_OFF_THE_RECORD_PROFILE_IMPL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PROFILES_OFF_THE_RECORD_PROFILE_IMPL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/off_the_record_profile_io_data.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/domain_reliability/clear_mode.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/content_browser_client.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/host_zoom_map.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefServiceSyncable;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OffTheRecordProfileImpl is a profile subclass that wraps an existing profile
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to make it suitable for the incognito mode.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: This class is a leaf class and is not intended for subclassing.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Providing this header file is for unit testing.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class OffTheRecordProfileImpl : public Profile {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit OffTheRecordProfileImpl(Profile* real_profile);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~OffTheRecordProfileImpl();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Profile implementation.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetProfileName() OVERRIDE;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ProfileType GetProfileType() const OVERRIDE;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual Profile* GetOffTheRecordProfile() OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyOffTheRecordProfile() OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasOffTheRecordProfile() OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual Profile* GetOriginalProfile() OVERRIDE;
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual bool IsSupervised() OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExtensionSpecialStoragePolicy*
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetExtensionSpecialStoragePolicy() OVERRIDE;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PrefService* GetPrefs() OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PrefService* GetOffTheRecordPrefs() OVERRIDE;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter*
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetRequestContextForExtensions() OVERRIDE;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLRequestContextGetter* CreateRequestContext(
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual net::URLRequestContextGetter* CreateRequestContextForStoragePartition(
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& partition_path,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool in_memory,
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::SSLConfigService* GetSSLConfigService() OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual HostContentSettingsMap* GetHostContentSettingsMap() OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsSameProfile(Profile* profile) OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual Time GetStartTime() const OVERRIDE;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual history::TopSites* GetTopSitesWithoutCreating() OVERRIDE;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual history::TopSites* GetTopSites() OVERRIDE;
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::FilePath last_selected_directory() OVERRIDE;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void set_last_selected_directory(const base::FilePath& path) OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool WasCreatedByVersionOrLater(const std::string& version) OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetExitType(ExitType exit_type) OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExitType GetLastSessionExitType() OVERRIDE;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ChangeAppLocale(const std::string& locale,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               AppLocaleChangedVia) OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnLogin() OVERRIDE;
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void InitChromeOSPreferences() OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PrefProxyConfigTracker* GetProxyConfigTracker() OVERRIDE;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual chrome_browser_net::Predictor* GetNetworkPredictor() OVERRIDE;
8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual DevToolsNetworkController* GetDevToolsNetworkController() OVERRIDE;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearNetworkingHistorySince(
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time time,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::Closure& completion) OVERRIDE;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual GURL GetHomePage() OVERRIDE;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::BrowserContext implementation:
897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual base::FilePath GetPath() const OVERRIDE;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual scoped_refptr<base::SequencedTaskRunner> GetIOTaskRunner() OVERRIDE;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsOffTheRecord() const OVERRIDE;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::DownloadManagerDelegate*
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetDownloadManagerDelegate() OVERRIDE;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess(
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int renderer_child_id) OVERRIDE;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaRequestContext() OVERRIDE;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetMediaRequestContextForRenderProcess(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int renderer_child_id) OVERRIDE;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::URLRequestContextGetter*
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetMediaRequestContextForStoragePartition(
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          const base::FilePath& partition_path,
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          bool in_memory) OVERRIDE;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual content::ResourceContext* GetResourceContext() OVERRIDE;
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual content::BrowserPluginGuestManager* GetGuestManager() OVERRIDE;
10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual storage::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE;
107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual content::PushMessagingService* GetPushMessagingService() OVERRIDE;
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual content::SSLHostStateDelegate* GetSSLHostStateDelegate() OVERRIDE;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(OffTheRecordProfileImplTest, GetHostZoomMap);
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void InitIoData();
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitHostZoomMap();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) || defined(OS_IOS)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UseSystemProxy();
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // defined(OS_ANDROID) || defined(OS_IOS)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change);
1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefProxyConfigTracker* CreateProxyConfigTracker();
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The real underlying profile.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Weak pointer owned by |profile_|.
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefServiceSyncable* prefs_;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<OffTheRecordProfileIOData::Handle> io_data_;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We use a non-persistent content settings map for OTR.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Time we were started.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Time start_time_;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath last_selected_directory_;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<content::HostZoomMap::Subscription> zoom_subscription_;
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OffTheRecordProfileImpl);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PROFILES_OFF_THE_RECORD_PROFILE_IMPL_H_
146