profile_io_data.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_forward.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/lock.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/chrome_url_request_context.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/storage_partition_descriptor.h"
223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "chrome/common/content_settings_types.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/content_browser_client.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/resource_context.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/cookie_monster.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_network_session.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job_factory.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeHttpUserAgentSettings;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ChromeNetworkDelegate;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieSettings;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostContentSettingsMap;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagedModeURLFilter;
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class MediaDeviceIDSalt;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProtocolHandlerRegistry;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninNamesOnIOThread;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LoadTimeStats;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourcePrefetchPredictorObserver;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace extensions {
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class InfoMap;
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
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 ServerBoundCertService;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigService;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyService;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SSLConfigService;
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TransportSecurityPersister;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TransportSecurityState;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestJobFactoryImpl;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class PolicyCertVerifier;
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class PolicyHeaderIOHelper;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLBlacklistManager;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Conceptually speaking, the ProfileIOData represents data that lives on the IO
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread that is owned by a Profile, such as, but not limited to, network
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// objects like CookieMonster, HttpTransactionFactory, etc.  Profile owns
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ProfileIOData, but will make sure to delete it on the IO thread (except
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// possibly in unit tests where there is no IO thread).
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileIOData {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ProfileIOData();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ProfileIOData* FromResourceContext(content::ResourceContext* rc);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |scheme| is handled in Chrome, or by default handlers in
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::URLRequest.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsHandledProtocol(const std::string& scheme);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |url| is handled in Chrome, or by default handlers in
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::URLRequest.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsHandledURL(const GURL& url);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Utility to install additional WebUI handlers into the |job_factory|.
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Ownership of the handlers is transfered from |protocol_handlers|
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // to the |job_factory|.
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void InstallProtocolHandlers(
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      net::URLRequestJobFactoryImpl* job_factory,
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by Profile.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::ResourceContext* GetResourceContext() const;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initializes the ProfileIOData object and primes the RequestContext
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // generation. Must be called prior to any of the Get*() methods other than
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // GetResouceContext or GetMetricsEnabledStateOnIOThread.
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Init(content::ProtocolHandlerMap* protocol_handlers) const;
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* GetMainRequestContext() const;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* GetMediaRequestContext() const;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* GetExtensionsRequestContext() const;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* GetIsolatedAppRequestContext(
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContext* main_context,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          protocol_handler_interceptor,
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers) const;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* GetIsolatedMediaRequestContext(
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContext* app_context,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor) const;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are useful when the Chrome layer is called from the content layer
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with a content::ResourceContext, and they want access to Chrome data for
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that profile.
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  extensions::InfoMap* GetExtensionInfoMap() const;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CookieSettings* GetCookieSettings() const;
121558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  HostContentSettingsMap* GetHostContentSettingsMap() const;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IntegerPrefMember* session_startup_pref() const {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &session_startup_pref_;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SigninNamesOnIOThread* signin_names() const {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return signin_names_.get();
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  StringPrefMember* google_services_account_id() const {
132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return &google_services_user_account_id_;
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember* google_services_username() const {
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &google_services_username_;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringPrefMember* google_services_username_pattern() const {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &google_services_username_pattern_;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember* reverse_autologin_enabled() const {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &reverse_autologin_enabled_;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& reverse_autologin_pending_email() const {
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return reverse_autologin_pending_email_;
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_reverse_autologin_pending_email(const std::string& email) {
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    reverse_autologin_pending_email_ = email;
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringListPrefMember* one_click_signin_rejected_email_list() const {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &one_click_signin_rejected_email_list_;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* extensions_request_context() const {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return extensions_request_context_.get();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember* safe_browsing_enabled() const {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &safe_browsing_enabled_;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember* printing_enabled() const {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return &printing_enabled_;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BooleanPrefMember* sync_disabled() const {
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return &sync_disabled_;
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BooleanPrefMember* signin_allowed() const {
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return &signin_allowed_;
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string GetMediaDeviceIDSalt() const;
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::TransportSecurityState* transport_security_state() const {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return transport_security_state_.get();
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string username_hash() const {
187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return username_hash_;
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_incognito() const {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return is_incognito_;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome_browser_net::ResourcePrefetchPredictorObserver*
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      resource_prefetch_predictor_observer() const {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return resource_prefetch_predictor_observer_.get();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  policy::PolicyHeaderIOHelper* policy_header_helper() const {
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return policy_header_helper_.get();
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const ManagedModeURLFilter* managed_mode_url_filter() const {
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return managed_mode_url_filter_.get();
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initialize the member needed to track the metrics enabled state. This is
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // only to be called on the UI thread.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitializeMetricsEnabledStateOnUIThread();
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether or not metrics reporting is enabled in the browser instance
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on which this profile resides. This is safe for use from the IO thread, and
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should only be called from there.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetMetricsEnabledStateOnIOThread() const;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A URLRequestContext for media that owns its HTTP factory, to ensure
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it is deleted.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class MediaRequestContext : public ChromeURLRequestContext {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit MediaRequestContext(
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        chrome_browser_net::LoadTimeStats* load_time_stats);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetHttpTransactionFactory(
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        scoped_ptr<net::HttpTransactionFactory> http_factory);
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~MediaRequestContext();
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::HttpTransactionFactory> http_factory_;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A URLRequestContext for apps that owns its cookie store and HTTP factory,
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to ensure they are deleted.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class AppRequestContext : public ChromeURLRequestContext {
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit AppRequestContext(
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        chrome_browser_net::LoadTimeStats* load_time_stats);
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetCookieStore(net::CookieStore* cookie_store);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetHttpTransactionFactory(
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        scoped_ptr<net::HttpTransactionFactory> http_factory);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void SetJobFactory(scoped_ptr<net::URLRequestJobFactory> job_factory);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~AppRequestContext();
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::CookieStore> cookie_store_;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::HttpTransactionFactory> http_factory_;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::URLRequestJobFactory> job_factory_;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Created on the UI thread, read on the IO thread during ProfileIOData lazy
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // initialization.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct ProfileParams {
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProfileParams();
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~ProfileParams();
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath path;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IOThread* io_thread;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<CookieSettings> cookie_settings;
267558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    scoped_refptr<HostContentSettingsMap> host_content_settings_map;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::SSLConfigService> ssl_config_service;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate;
270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    scoped_refptr<extensions::InfoMap> extension_info_map;
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<chrome_browser_net::ResourcePrefetchPredictorObserver>
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        resource_prefetch_predictor_observer_;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // This pointer exists only as a means of conveying a url job factory
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // pointer from the protocol handler registry on the UI thread to the
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // the URLRequestContext on the IO thread. The consumer MUST take
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ownership of the object by calling release() on this pointer.
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        protocol_handler_interceptor;
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // We need to initialize the ProxyConfigService from the UI thread
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // because on linux it relies on initializing things through gconf,
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // and needs to be on the main thread.
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<net::ProxyConfigService> proxy_config_service;
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_refptr<const ManagedModeURLFilter> managed_mode_url_filter;
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_CHROMEOS)
291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    std::string username_hash;
292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The profile this struct was populated from. It's passed as a void* to
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ensure it's not accidently used on the IO thread. Before using it on the
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // UI thread, call ProfileManager::IsValidProfile to ensure it's alive.
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* profile;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ProfileIOData(bool is_incognito);
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetSSLSessionCacheShard();
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitializeOnUIThread(Profile* profile);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ApplyProfileParamsToContext(ChromeURLRequestContext* context) const;
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<net::URLRequestJobFactory> SetUpJobFactoryDefaults(
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<net::URLRequestJobFactoryImpl> job_factory,
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          protocol_handler_interceptor,
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::NetworkDelegate* network_delegate,
312b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      net::FtpTransactionFactory* ftp_transaction_factory) const;
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the profile is destroyed.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShutdownOnUIThread();
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A ServerBoundCertService object is created by a derived class of
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ProfileIOData, and the derived class calls this method to set the
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // server_bound_cert_service_ member and transfers ownership to the base
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // class.
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_server_bound_cert_service(
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::ServerBoundCertService* server_bound_cert_service) const;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ChromeNetworkDelegate* network_delegate() const {
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return network_delegate_.get();
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::FraudulentCertificateReporter* fraudulent_certificate_reporter() const {
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return fraudulent_certificate_reporter_.get();
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ProxyService* proxy_service() const {
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return proxy_service_.get();
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
336ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  base::WeakPtr<net::HttpServerProperties> http_server_properties() const;
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_http_server_properties(
339ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      scoped_ptr<net::HttpServerProperties> http_server_properties) const;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeURLRequestContext* main_request_context() const {
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return main_request_context_.get();
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome_browser_net::LoadTimeStats* load_time_stats() const {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return load_time_stats_;
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool initialized() const {
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return initialized_;
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Destroys the ResourceContext first, to cancel any URLRequests that are
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // using it still, before we destroy the member variables that those
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URLRequests may be accessing.
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DestroyResourceContext();
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fills in fields of params using values from main_request_context_ and the
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IOThread associated with profile_params.
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void PopulateNetworkSessionParams(
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ProfileParams* profile_params,
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::HttpNetworkSession::Params* params) const;
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCookieSettingsForTesting(CookieSettings* cookie_settings);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_signin_names_for_testing(SigninNamesOnIOThread* signin_names);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class ResourceContext : public content::ResourceContext {
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit ResourceContext(ProfileIOData* io_data);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~ResourceContext();
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // ResourceContext implementation:
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual net::HostResolver* GetHostResolver() OVERRIDE;
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual net::URLRequestContext* GetRequestContext() OVERRIDE;
3771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    virtual scoped_ptr<net::ClientCertStore> CreateClientCertStore() OVERRIDE;
3783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    virtual bool AllowMicAccess(const GURL& origin) OVERRIDE;
3793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    virtual bool AllowCameraAccess(const GURL& origin) OVERRIDE;
380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    virtual std::string GetMediaDeviceIDSalt() OVERRIDE;
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class ProfileIOData;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3853240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    // Helper method that returns true if |type| is allowed for |origin|, false
3863240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    // otherwise.
3873240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    bool AllowContentAccess(const GURL& origin, ContentSettingsType type);
3883240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProfileIOData* const io_data_;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::HostResolver* host_resolver_;
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContext* request_context_;
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<StoragePartitionDescriptor,
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   ChromeURLRequestContext*,
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   StoragePartitionDescriptorLess>
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequestContextMap;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // --------------------------------------------
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Virtual interface for subtypes to implement:
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // --------------------------------------------
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does the actual initialization of the ProfileIOData subtype. Subtypes
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // should use the static helper functions above to implement this.
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeInternal(
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ProfileParams* profile_params,
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers) const = 0;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initializes the RequestContext for extensions.
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeExtensionsRequestContext(
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ProfileParams* profile_params) const = 0;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does an on-demand initialization of a RequestContext for the given
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // isolated app.
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext* InitializeAppRequestContext(
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContext* main_context,
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& details,
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          protocol_handler_interceptor,
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers) const = 0;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Does an on-demand initialization of a media RequestContext for the given
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // isolated app.
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext* InitializeMediaRequestContext(
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ChromeURLRequestContext* original_context,
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& details) const = 0;
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These functions are used to transfer ownership of the lazily initialized
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // context from ProfileIOData to the URLRequestContextGetter.
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext*
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireMediaRequestContext() const = 0;
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext*
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireIsolatedAppRequestContext(
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ChromeURLRequestContext* main_context,
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const StoragePartitionDescriptor& partition_descriptor,
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              protocol_handler_interceptor,
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          content::ProtocolHandlerMap* protocol_handlers) const = 0;
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ChromeURLRequestContext*
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireIsolatedMediaRequestContext(
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ChromeURLRequestContext* app_context,
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const StoragePartitionDescriptor& partition_descriptor) const = 0;
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the LoadTimeStats object to be used for this profile.
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual chrome_browser_net::LoadTimeStats* GetLoadTimeStats(
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IOThread::Globals* io_thread_globals) const = 0;
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The order *DOES* matter for the majority of these member variables, so
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // don't move them around unless you know what you're doing!
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // General rules:
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * ResourceContext references the URLRequestContexts, so
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   URLRequestContexts must outlive ResourceContext, hence ResourceContext
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   should be destroyed first.
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * URLRequestContexts reference a whole bunch of members, so
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   URLRequestContext needs to be destroyed before them.
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * Therefore, ResourceContext should be listed last, and then the
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   URLRequestContexts, and then the URLRequestContext members.
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   * Note that URLRequestContext members have a directed dependency graph
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   too, so they must themselves be ordered correctly.
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tracks whether or not we've been lazily initialized.
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable bool initialized_;
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data from the UI thread from the Profile, used to initialize ProfileIOData.
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Deleted after lazy initialization.
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ProfileParams> profile_params_;
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Provides access to the email addresses of all signed in profiles.
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<SigninNamesOnIOThread> signin_names_;
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable StringPrefMember google_services_user_account_id_;
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable StringPrefMember google_services_username_;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable StringPrefMember google_services_username_pattern_;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember reverse_autologin_enabled_;
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // During the reverse autologin request chain processing, this member saves
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the email of the google account that is being signed into.
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string reverse_autologin_pending_email_;
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable StringListPrefMember one_click_signin_rejected_email_list_;
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
482a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable scoped_ptr<MediaDeviceIDSalt> media_device_id_salt_;
483a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Member variables which are pointed to by the various context objects.
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember enable_referrers_;
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember enable_do_not_track_;
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember force_safesearch_;
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember safe_browsing_enabled_;
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable BooleanPrefMember printing_enabled_;
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable BooleanPrefMember sync_disabled_;
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable BooleanPrefMember signin_allowed_;
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(marja): Remove session_startup_pref_ if no longer needed.
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable IntegerPrefMember session_startup_pref_;
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The state of metrics reporting in the browser that this profile runs on.
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unfortunately, since ChromeOS has a separate representation of this state,
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we need to make one available based on the platform.
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool enable_metrics_;
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember enable_metrics_;
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pointed to by NetworkDelegate.
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<policy::URLBlacklistManager> url_blacklist_manager_;
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
507a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(ENABLE_CONFIGURATION_POLICY)
508a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable scoped_ptr<policy::PolicyHeaderIOHelper> policy_header_helper_;
509a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
510a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Pointed to by URLRequestContext.
512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mutable scoped_refptr<extensions::InfoMap> extension_info_map_;
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::ServerBoundCertService> server_bound_cert_service_;
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable scoped_ptr<ChromeNetworkDelegate> network_delegate_;
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::FraudulentCertificateReporter>
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fraudulent_certificate_reporter_;
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::ProxyService> proxy_service_;
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<net::TransportSecurityState> transport_security_state_;
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable scoped_ptr<net::HttpServerProperties>
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      http_server_properties_;
521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS)
522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mutable scoped_ptr<policy::PolicyCertVerifier> cert_verifier_;
523a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  mutable std::string username_hash_;
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  mutable scoped_ptr<net::TransportSecurityPersister>
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      transport_security_persister_;
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These are only valid in between LazyInitialize() and their accessor being
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // called.
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ChromeURLRequestContext> main_request_context_;
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ChromeURLRequestContext> extensions_request_context_;
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // One URLRequestContext per isolated app for main and media requests.
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable URLRequestContextMap app_request_context_map_;
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable URLRequestContextMap isolated_media_request_context_map_;
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ResourceContext> resource_context_;
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_refptr<CookieSettings> cookie_settings_;
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
541558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  mutable scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
542558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<chrome_browser_net::ResourcePrefetchPredictorObserver>
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      resource_prefetch_predictor_observer_;
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable scoped_ptr<ChromeHttpUserAgentSettings>
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome_http_user_agent_settings_;
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable chrome_browser_net::LoadTimeStats* load_time_stats_;
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS)
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mutable scoped_refptr<const ManagedModeURLFilter> managed_mode_url_filter_;
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(jhawkins): Remove once crbug.com/102004 is fixed.
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool initialized_on_UI_thread_;
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_incognito_;
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ProfileIOData);
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_
564