172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#pragma once 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <set> 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/basictypes.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/debug/stack_trace.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/file_path.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/synchronization/lock.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/net/chrome_url_request_context.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/pref_member.h" 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/profiles/profile.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/resource_context.h" 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/base/cookie_monster.h" 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass CommandLine; 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ChromeAppCacheService; 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ChromeBlobStorageContext; 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ExtensionInfoMap; 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace fileapi { 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass FileSystemContext; 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace fileapi 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass HostContentSettingsMap; 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass HostZoomMap; 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass IOThread; 32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace net { 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass DnsCertProvenanceChecker; 34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass NetLog; 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ProxyConfigService; 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ProxyService; 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass SSLConfigService; 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass TransportSecurityState; 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // namespace net 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace prerender { 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass PrerenderManager; 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; // namespace prerender 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ProtocolHandlerRegistry; 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace webkit_database { 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass DatabaseTracker; 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // webkit_database 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Conceptually speaking, the ProfileIOData represents data that lives on the IO 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// thread that is owned by a Profile, such as, but not limited to, network 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// objects like CookieMonster, HttpTransactionFactory, etc. The Profile 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// implementation will maintain a reference to the ProfileIOData. The 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// ProfileIOData will originally own a reference to the ChromeURLRequestContexts 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// that reference its members. When an accessor for a ChromeURLRequestContext is 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// invoked, then ProfileIOData will release its reference to the 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// ChromeURLRequestContext and the ChromeURLRequestContext will acquire a 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// reference to the ProfileIOData, so they exchange ownership. This is done 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// because it's possible for a context's accessor never to be invoked, so this 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// ownership reversal prevents shutdown leaks. ProfileIOData will lazily 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// initialize its members on the first invocation of a ChromeURLRequestContext 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// accessor. 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ProfileIOData : public base::RefCountedThreadSafe<ProfileIOData> { 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public: 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // These should only be called at most once each. Ownership is reversed when 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // they get called, from ProfileIOData owning ChromeURLRequestContext to vice 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // versa. 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ChromeURLRequestContext> GetMainRequestContext() const; 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ChromeURLRequestContext> GetMediaRequestContext() const; 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ChromeURLRequestContext> GetExtensionsRequestContext() const; 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<ChromeURLRequestContext> GetIsolatedAppRequestContext( 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<ChromeURLRequestContext> main_context, 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& app_id) const; 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const content::ResourceContext& GetResourceContext() const; 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen protected: 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen friend class base::RefCountedThreadSafe<ProfileIOData>; 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen class RequestContext : public ChromeURLRequestContext { 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen RequestContext(); 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ~RequestContext(); 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Setter is used to transfer ownership of the ProfileIOData to the context. 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void set_profile_io_data(const ProfileIOData* profile_io_data) { 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen profile_io_data_ = profile_io_data; 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private: 88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<const ProfileIOData> profile_io_data_; 89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen }; 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Created on the UI thread, read on the IO thread during ProfileIOData lazy 92dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // initialization. 93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen struct ProfileParams { 94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ProfileParams(); 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ~ProfileParams(); 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_incognito; 98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool clear_local_state_on_exit; 99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string accept_language; 100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string accept_charset; 101dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string referrer_charset; 102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FilePath user_script_dir_path; 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IOThread* io_thread; 104dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<HostContentSettingsMap> host_content_settings_map; 105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<HostZoomMap> host_zoom_map; 106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<net::TransportSecurityState> transport_security_state; 107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<net::SSLConfigService> ssl_config_service; 108dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate; 109dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<webkit_database::DatabaseTracker> database_tracker; 110dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<ChromeAppCacheService> appcache_service; 111dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<ChromeBlobStorageContext> blob_storage_context; 112dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<fileapi::FileSystemContext> file_system_context; 113dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<ExtensionInfoMap> extension_info_map; 114dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<prerender::PrerenderManager> prerender_manager; 115dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_refptr<ProtocolHandlerRegistry> protocol_handler_registry; 116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // We need to initialize the ProxyConfigService from the UI thread 117dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // because on linux it relies on initializing things through gconf, 118dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // and needs to be on the main thread. 119dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen scoped_ptr<net::ProxyConfigService> proxy_config_service; 120dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // The profile this struct was populated from. 121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ProfileId profile_id; 122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen }; 123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit ProfileIOData(bool is_incognito); 125dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~ProfileIOData(); 126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void InitializeProfileParams(Profile* profile); 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ApplyProfileParamsToContext(ChromeURLRequestContext* context) const; 129dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Lazy initializes the ProfileIOData object the first time a request context 131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // is requested. The lazy logic is implemented here. The actual initialization 132dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // is done in LazyInitializeInternal(), implemented by subtypes. Static helper 133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // functions have been provided to assist in common operations. 13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void LazyInitialize() const; 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Called when the profile is destroyed. 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ShutdownOnUIThread(); 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BooleanPrefMember* enable_referrers() const { 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return &enable_referrers_; 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::NetworkDelegate* network_delegate() const { 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return network_delegate_.get(); 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::DnsCertProvenanceChecker* dns_cert_checker() const { 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return dns_cert_checker_.get(); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::ProxyService* proxy_service() const { 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return proxy_service_.get(); 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen net::CookiePolicy* cookie_policy() const { 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return cookie_policy_.get(); 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ChromeURLRequestContext* main_request_context() const { 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return main_request_context_; 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ChromeURLRequestContext* extensions_request_context() const { 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return extensions_request_context_; 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen class ResourceContext : public content::ResourceContext { 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit ResourceContext(const ProfileIOData* io_data); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ResourceContext(); 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void EnsureInitialized() const; 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ProfileIOData* const io_data_; 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // -------------------------------------------- 180dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Virtual interface for subtypes to implement: 181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // -------------------------------------------- 182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Does the actual initialization of the ProfileIOData subtype. Subtypes 184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // should use the static helper functions above to implement this. 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void LazyInitializeInternal(ProfileParams* profile_params) const = 0; 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Does an on-demand initialization of a RequestContext for the given 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // isolated app. 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual scoped_refptr<RequestContext> InitializeAppRequestContext( 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<ChromeURLRequestContext> main_context, 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& app_id) const = 0; 192dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 193dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // These functions are used to transfer ownership of the lazily initialized 194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // context from ProfileIOData to the URLRequestContextGetter. 195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual scoped_refptr<ChromeURLRequestContext> 196dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen AcquireMediaRequestContext() const = 0; 197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual scoped_refptr<ChromeURLRequestContext> 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AcquireIsolatedAppRequestContext( 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<ChromeURLRequestContext> main_context, 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& app_id) const = 0; 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Tracks whether or not we've been lazily initialized. 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen mutable bool initialized_; 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Data from the UI thread from the Profile, used to initialize ProfileIOData. 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Deleted after lazy initialization. 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_ptr<ProfileParams> profile_params_; 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Member variables which are pointed to by the various context objects. 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable BooleanPrefMember enable_referrers_; 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Pointed to by URLRequestContext. 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_ptr<net::NetworkDelegate> network_delegate_; 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_ptr<net::DnsCertProvenanceChecker> dns_cert_checker_; 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<net::ProxyService> proxy_service_; 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_ptr<net::CookiePolicy> cookie_policy_; 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Pointed to by ResourceContext. 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<webkit_database::DatabaseTracker> database_tracker_; 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<ChromeAppCacheService> appcache_service_; 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<fileapi::FileSystemContext> file_system_context_; 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable ResourceContext resource_context_; 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // These are only valid in between LazyInitialize() and their accessor being 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // called. 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<RequestContext> main_request_context_; 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mutable scoped_refptr<RequestContext> extensions_request_context_; 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ProfileIOData); 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}; 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // CHROME_BROWSER_PROFILES_PROFILE_IO_DATA_H_ 235