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