profile_io_data.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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_PROFILE_IO_DATA_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_forward.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/lock.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h"
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/storage_partition_descriptor.h"
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/content_settings/core/common/content_settings_types.h"
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/content_browser_client.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_monster.h"
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "net/http/http_cache.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_network_session.h"
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/url_request/url_request_context.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job_factory.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeHttpUserAgentSettings;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ChromeNetworkDelegate;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieSettings;
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DevToolsNetworkController;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostContentSettingsMap;
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class MediaDeviceIDSalt;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProtocolHandlerRegistry;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninNamesOnIOThread;
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SupervisedUserURLFilter;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace extensions {
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class InfoMap;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ChannelIDService;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieStore;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FraudulentCertificateReporter;
51b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class FtpTransactionFactory;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class HttpServerProperties;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpTransactionFactory;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigService;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyService;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SSLConfigService;
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TransportSecurityPersister;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TransportSecurityState;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestJobFactoryImpl;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class PolicyCertVerifier;
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class PolicyHeaderIOHelper;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistManager;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace prerender {
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PrerenderTracker;
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Conceptually speaking, the ProfileIOData represents data that lives on the IO
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread that is owned by a Profile, such as, but not limited to, network
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// objects like CookieMonster, HttpTransactionFactory, etc.  Profile owns
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ProfileIOData, but will make sure to delete it on the IO thread (except
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// possibly in unit tests where there is no IO thread).
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileIOData {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ProfileIOData();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ProfileIOData* FromResourceContext(content::ResourceContext* rc);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |scheme| is handled in Chrome, or by default handlers in
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::URLRequest.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsHandledProtocol(const std::string& scheme);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |url| is handled in Chrome, or by default handlers in
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::URLRequest.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsHandledURL(const GURL& url);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Utility to install additional WebUI handlers into the |job_factory|.
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Ownership of the handlers is transfered from |protocol_handlers|
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // to the |job_factory|.
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void InstallProtocolHandlers(
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      net::URLRequestJobFactoryImpl* job_factory,
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers);
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by Profile.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::ResourceContext* GetResourceContext() const;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initializes the ProfileIOData object and primes the RequestContext
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // generation. Must be called prior to any of the Get*() methods other than
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GetResouceContext or GetMetricsEnabledStateOnIOThread.
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void Init(
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) const;
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* GetMainRequestContext() const;
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* GetMediaRequestContext() const;
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* GetExtensionsRequestContext() const;
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* GetIsolatedAppRequestContext(
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* main_context,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor,
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          protocol_handler_interceptor,
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors) const;
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* GetIsolatedMediaRequestContext(
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* app_context,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor) const;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are useful when the Chrome layer is called from the content layer
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with a content::ResourceContext, and they want access to Chrome data for
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that profile.
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  extensions::InfoMap* GetExtensionInfoMap() const;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CookieSettings* GetCookieSettings() const;
127558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  HostContentSettingsMap* GetHostContentSettingsMap() const;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember* session_startup_pref() const {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &session_startup_pref_;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SigninNamesOnIOThread* signin_names() const {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return signin_names_.get();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  StringPrefMember* google_services_account_id() const {
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return &google_services_user_account_id_;
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember* google_services_username() const {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &google_services_username_;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember* google_services_username_pattern() const {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &google_services_username_pattern_;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember* reverse_autologin_enabled() const {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &reverse_autologin_enabled_;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& reverse_autologin_pending_email() const {
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return reverse_autologin_pending_email_;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_reverse_autologin_pending_email(const std::string& email) {
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    reverse_autologin_pending_email_ = email;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringListPrefMember* one_click_signin_rejected_email_list() const {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &one_click_signin_rejected_email_list_;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* extensions_request_context() const {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return extensions_request_context_.get();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember* safe_browsing_enabled() const {
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &safe_browsing_enabled_;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID)
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TODO(feng): move the function to protected area.
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // IsDataReductionProxyEnabled() should be used as public API.
176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  BooleanPrefMember* data_reduction_proxy_enabled() const {
177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return &data_reduction_proxy_enabled_;
178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember* printing_enabled() const {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &printing_enabled_;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BooleanPrefMember* sync_disabled() const {
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return &sync_disabled_;
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BooleanPrefMember* signin_allowed() const {
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return &signin_allowed_;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // TODO(bnc): remove per https://crbug.com/334602.
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  BooleanPrefMember* network_prediction_enabled() const {
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return &network_prediction_enabled_;
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  IntegerPrefMember* network_prediction_options() const {
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return &network_prediction_options_;
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::ResourceContext::SaltCallback GetMediaDeviceIDSalt() const;
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DevToolsNetworkController* network_controller() const {
20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return network_controller_.get();
20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::TransportSecurityState* transport_security_state() const {
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return transport_security_state_.get();
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string username_hash() const {
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return username_hash_;
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool use_system_key_slot() const { return use_system_key_slot_; }
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  Profile::ProfileType profile_type() const {
221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return profile_type_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool IsOffTheRecord() const;
225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  IntegerPrefMember* incognito_availibility() const {
2275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return &incognito_availibility_pref_;
2285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
2295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  policy::PolicyHeaderIOHelper* policy_header_helper() const {
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return policy_header_helper_.get();
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const SupervisedUserURLFilter* supervised_user_url_filter() const {
238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return supervised_user_url_filter_.get();
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initialize the member needed to track the metrics enabled state. This is
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // only to be called on the UI thread.
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitializeMetricsEnabledStateOnUIThread();
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether or not metrics reporting is enabled in the browser instance
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on which this profile resides. This is safe for use from the IO thread, and
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should only be called from there.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetMetricsEnabledStateOnIOThread() const;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID)
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns whether or not data reduction proxy is enabled in the browser
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // instance on which this profile resides.
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool IsDataReductionProxyEnabled() const;
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_client_cert_store_factory_for_testing(
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::Callback<scoped_ptr<net::ClientCertStore>()>& factory) {
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      client_cert_store_factory_ = factory;
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A URLRequestContext for media that owns its HTTP factory, to ensure
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it is deleted.
2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  class MediaRequestContext : public net::URLRequestContext {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    MediaRequestContext();
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetHttpTransactionFactory(
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        scoped_ptr<net::HttpTransactionFactory> http_factory);
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~MediaRequestContext();
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::HttpTransactionFactory> http_factory_;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A URLRequestContext for apps that owns its cookie store and HTTP factory,
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to ensure they are deleted.
2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  class AppRequestContext : public net::URLRequestContext {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    AppRequestContext();
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetCookieStore(net::CookieStore* cookie_store);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetHttpTransactionFactory(
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        scoped_ptr<net::HttpTransactionFactory> http_factory);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetJobFactory(scoped_ptr<net::URLRequestJobFactory> job_factory);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~AppRequestContext();
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::CookieStore> cookie_store_;
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::HttpTransactionFactory> http_factory_;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::URLRequestJobFactory> job_factory_;
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Created on the UI thread, read on the IO thread during ProfileIOData lazy
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // initialization.
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct ProfileParams {
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProfileParams();
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~ProfileParams();
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath path;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IOThread* io_thread;
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<CookieSettings> cookie_settings;
306558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    scoped_refptr<HostContentSettingsMap> host_content_settings_map;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::SSLConfigService> ssl_config_service;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate;
3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS)
310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    scoped_refptr<extensions::InfoMap> extension_info_map;
3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // This pointer exists only as a means of conveying a url job factory
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // pointer from the protocol handler registry on the UI thread to the
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // the URLRequestContext on the IO thread. The consumer MUST take
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ownership of the object by calling release() on this pointer.
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        protocol_handler_interceptor;
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // We need to initialize the ProxyConfigService from the UI thread
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // because on linux it relies on initializing things through gconf,
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // and needs to be on the main thread.
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::ProxyConfigService> proxy_config_service;
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    scoped_refptr<const SupervisedUserURLFilter> supervised_user_url_filter;
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
329a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
330a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    std::string username_hash;
3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    bool use_system_key_slot;
332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
333a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The profile this struct was populated from. It's passed as a void* to
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ensure it's not accidently used on the IO thread. Before using it on the
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // UI thread, call ProfileManager::IsValidProfile to ensure it's alive.
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* profile;
338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    prerender::PrerenderTracker* prerender_tracker;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit ProfileIOData(Profile::ProfileType profile_type);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetSSLSessionCacheShard();
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitializeOnUIThread(Profile* profile);
3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void ApplyProfileParamsToContext(net::URLRequestContext* context) const;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID)
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(SPDY_PROXY_AUTH_ORIGIN)
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void SetDataReductionProxyUsageStatsOnIOThread(IOThread* io_thread,
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                 Profile* profile);
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void SetDataReductionProxyUsageStatsOnUIThread(Profile* profile,
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      data_reduction_proxy::DataReductionProxyUsageStats* usage_stats);
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<net::URLRequestJobFactory> SetUpJobFactoryDefaults(
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<net::URLRequestJobFactoryImpl> job_factory,
360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors,
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          protocol_handler_interceptor,
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::NetworkDelegate* network_delegate,
364b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      net::FtpTransactionFactory* ftp_transaction_factory) const;
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the profile is destroyed.
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShutdownOnUIThread();
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // A ChannelIDService object is created by a derived class of
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ProfileIOData, and the derived class calls this method to set the
3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // channel_id_service_ member and transfers ownership to the base
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // class.
3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void set_channel_id_service(
3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::ChannelIDService* channel_id_service) const;
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ChromeNetworkDelegate* network_delegate() const {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return network_delegate_.get();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::FraudulentCertificateReporter* fraudulent_certificate_reporter() const {
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return fraudulent_certificate_reporter_.get();
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ProxyService* proxy_service() const {
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return proxy_service_.get();
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
388ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  base::WeakPtr<net::HttpServerProperties> http_server_properties() const;
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_http_server_properties(
391ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      scoped_ptr<net::HttpServerProperties> http_server_properties) const;
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  net::URLRequestContext* main_request_context() const {
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return main_request_context_.get();
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool initialized() const {
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return initialized_;
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Destroys the ResourceContext first, to cancel any URLRequests that are
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // using it still, before we destroy the member variables that those
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URLRequests may be accessing.
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DestroyResourceContext();
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Creates network session and main network transaction factory.
40746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<net::HttpCache> CreateMainHttpFactory(
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ProfileParams* profile_params,
40946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      net::HttpCache::BackendFactory* main_backend) const;
41046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
41146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Creates network transaction factory.
41246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<net::HttpCache> CreateHttpFactory(
41346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      net::HttpNetworkSession* shared_session,
41446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      net::HttpCache::BackendFactory* backend) const;
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCookieSettingsForTesting(CookieSettings* cookie_settings);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_signin_names_for_testing(SigninNamesOnIOThread* signin_names);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class ResourceContext : public content::ResourceContext {
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit ResourceContext(ProfileIOData* io_data);
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~ResourceContext();
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ResourceContext implementation:
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual net::HostResolver* GetHostResolver() OVERRIDE;
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual net::URLRequestContext* GetRequestContext() OVERRIDE;
4291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    virtual scoped_ptr<net::ClientCertStore> CreateClientCertStore() OVERRIDE;
4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual void CreateKeygenHandler(
4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        uint32 key_size_in_bits,
4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const std::string& challenge_string,
4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const GURL& url,
4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const base::Callback<void(scoped_ptr<net::KeygenHandler>)>& callback)
4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        OVERRIDE;
4363240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    virtual bool AllowMicAccess(const GURL& origin) OVERRIDE;
4373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    virtual bool AllowCameraAccess(const GURL& origin) OVERRIDE;
4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual SaltCallback GetMediaDeviceIDSalt() OVERRIDE;
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class ProfileIOData;
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4433240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    // Helper method that returns true if |type| is allowed for |origin|, false
4443240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    // otherwise.
4453240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    bool AllowContentAccess(const GURL& origin, ContentSettingsType type);
4463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProfileIOData* const io_data_;
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::HostResolver* host_resolver_;
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContext* request_context_;
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<StoragePartitionDescriptor,
4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   net::URLRequestContext*,
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   StoragePartitionDescriptorLess>
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequestContextMap;
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // --------------------------------------------
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Virtual interface for subtypes to implement:
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // --------------------------------------------
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does the actual initialization of the ProfileIOData subtype. Subtypes
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should use the static helper functions above to implement this.
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeInternal(
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ProfileParams* profile_params,
466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector
468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          request_interceptors) const = 0;
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initializes the RequestContext for extensions.
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeExtensionsRequestContext(
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ProfileParams* profile_params) const = 0;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does an on-demand initialization of a RequestContext for the given
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // isolated app.
4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext* InitializeAppRequestContext(
4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* main_context,
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& details,
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          protocol_handler_interceptor,
480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
481cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector
482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          request_interceptors) const = 0;
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does an on-demand initialization of a media RequestContext for the given
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // isolated app.
4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext* InitializeMediaRequestContext(
4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* original_context,
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& details) const = 0;
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These functions are used to transfer ownership of the lazily initialized
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // context from ProfileIOData to the URLRequestContextGetter.
4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext*
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireMediaRequestContext() const = 0;
4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext* AcquireIsolatedAppRequestContext(
4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* main_context,
496a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor,
497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          protocol_handler_interceptor,
499a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
500cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector
501cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          request_interceptors) const = 0;
5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext*
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireIsolatedMediaRequestContext(
5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          net::URLRequestContext* app_context,
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const StoragePartitionDescriptor& partition_descriptor) const = 0;
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The order *DOES* matter for the majority of these member variables, so
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // don't move them around unless you know what you're doing!
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // General rules:
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * ResourceContext references the URLRequestContexts, so
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   URLRequestContexts must outlive ResourceContext, hence ResourceContext
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   should be destroyed first.
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * URLRequestContexts reference a whole bunch of members, so
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   URLRequestContext needs to be destroyed before them.
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * Therefore, ResourceContext should be listed last, and then the
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   URLRequestContexts, and then the URLRequestContext members.
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * Note that URLRequestContext members have a directed dependency graph
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   too, so they must themselves be ordered correctly.
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tracks whether or not we've been lazily initialized.
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable bool initialized_;
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data from the UI thread from the Profile, used to initialize ProfileIOData.
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Deleted after lazy initialization.
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ProfileParams> profile_params_;
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Provides access to the email addresses of all signed in profiles.
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<SigninNamesOnIOThread> signin_names_;
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Used for testing.
5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  mutable base::Callback<scoped_ptr<net::ClientCertStore>()>
5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      client_cert_store_factory_;
5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
534a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable StringPrefMember google_services_user_account_id_;
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable StringPrefMember google_services_username_;
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable StringPrefMember google_services_username_pattern_;
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember reverse_autologin_enabled_;
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // During the reverse autologin request chain processing, this member saves
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the email of the google account that is being signed into.
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string reverse_autologin_pending_email_;
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable StringListPrefMember one_click_signin_rejected_email_list_;
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  mutable scoped_refptr<MediaDeviceIDSalt> media_device_id_salt_;
546a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Member variables which are pointed to by the various context objects.
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember enable_referrers_;
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember enable_do_not_track_;
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember force_safesearch_;
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember safe_browsing_enabled_;
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_ANDROID)
553f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  mutable BooleanPrefMember data_reduction_proxy_enabled_;
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember printing_enabled_;
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable BooleanPrefMember sync_disabled_;
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable BooleanPrefMember signin_allowed_;
5585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  mutable BooleanPrefMember network_prediction_enabled_;
559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  mutable IntegerPrefMember network_prediction_options_;
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(marja): Remove session_startup_pref_ if no longer needed.
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable IntegerPrefMember session_startup_pref_;
5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  mutable BooleanPrefMember quick_check_enabled_;
5635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  mutable IntegerPrefMember incognito_availibility_pref_;
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The state of metrics reporting in the browser that this profile runs on.
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unfortunately, since ChromeOS has a separate representation of this state,
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we need to make one available based on the platform.
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enable_metrics_;
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember enable_metrics_;
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pointed to by NetworkDelegate.
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<policy::URLBlacklistManager> url_blacklist_manager_;
577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable scoped_ptr<policy::PolicyHeaderIOHelper> policy_header_helper_;
578a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
579a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pointed to by URLRequestContext.
5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS)
582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mutable scoped_refptr<extensions::InfoMap> extension_info_map_;
5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mutable scoped_ptr<net::ChannelIDService> channel_id_service_;
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable scoped_ptr<ChromeNetworkDelegate> network_delegate_;
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::FraudulentCertificateReporter>
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fraudulent_certificate_reporter_;
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::ProxyService> proxy_service_;
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::TransportSecurityState> transport_security_state_;
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable scoped_ptr<net::HttpServerProperties>
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      http_server_properties_;
592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS)
593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mutable scoped_ptr<policy::PolicyCertVerifier> cert_verifier_;
594a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable std::string username_hash_;
5955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mutable bool use_system_key_slot_;
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mutable scoped_ptr<net::TransportSecurityPersister>
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      transport_security_persister_;
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are only valid in between LazyInitialize() and their accessor being
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // called.
6035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mutable scoped_ptr<net::URLRequestContext> main_request_context_;
6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  mutable scoped_ptr<net::URLRequestContext> extensions_request_context_;
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // One URLRequestContext per isolated app for main and media requests.
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable URLRequestContextMap app_request_context_map_;
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable URLRequestContextMap isolated_media_request_context_map_;
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ResourceContext> resource_context_;
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_refptr<CookieSettings> cookie_settings_;
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
613558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  mutable scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
614558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ChromeHttpUserAgentSettings>
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome_http_user_agent_settings_;
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
619f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  mutable scoped_refptr<const SupervisedUserURLFilter>
620f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      supervised_user_url_filter_;
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  mutable scoped_ptr<DevToolsNetworkController> network_controller_;
62446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(jhawkins): Remove once crbug.com/102004 is fixed.
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool initialized_on_UI_thread_;
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const Profile::ProfileType profile_type_;
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ProfileIOData);
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_
634