chrome_url_request_context.h revision 731df977c0511bca2206b5f333555b1205ff1f43
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_NET_CHROME_URL_REQUEST_CONTEXT_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_NET_CHROME_URL_REQUEST_CONTEXT_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/appcache/chrome_appcache_service.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chrome_blob_storage_context.h" 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/extensions/extension_info_map.h" 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/file_system/file_system_host_context.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/host_content_settings_map.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/host_zoom_map.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/io_thread.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/net/chrome_cookie_policy.h" 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_change_registrar.h" 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h" 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/extensions/extension_icon_set.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/net/url_request_context_getter.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_registrar.h" 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/cookie_monster.h" 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/cookie_policy.h" 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/url_request/url_request_context.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/database/database_tracker.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CommandLine; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PrefService; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace net { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NetworkDelegate; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ProxyConfig; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ChromeURLRequestContext; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ChromeURLRequestContextFactory; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Subclass of URLRequestContext which can be used to store extra information 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// for requests. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// All methods of this class must be called from the IO thread, 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// including the constructor and destructor. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ChromeURLRequestContext : public URLRequestContext { 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeURLRequestContext(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Gets the path to the directory user scripts are stored in. 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath user_script_dir_path() const { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return user_script_dir_path_; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Gets the appcache service to be used for requests in this context. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // May be NULL if requests for this context aren't subject to appcaching. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeAppCacheService* appcache_service() const { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return appcache_service_.get(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Gets the database tracker associated with this context's profile. 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch webkit_database::DatabaseTracker* database_tracker() const { 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return database_tracker_.get(); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Gets the blob storage context associated with this context's profile. 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ChromeBlobStorageContext* blob_storage_context() const { 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return blob_storage_context_.get(); 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Gets the file system host context with this context's profile. 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick FileSystemHostContext* file_system_host_context() const { 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return file_system_host_context_.get(); 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_off_the_record() const { 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return is_off_the_record_; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_media() const { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return is_media_; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const std::string& GetUserAgent(const GURL& url) const; 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HostContentSettingsMap* host_content_settings_map() { 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return host_content_settings_map_; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const HostZoomMap* host_zoom_map() const { return host_zoom_map_; } 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const ExtensionInfoMap* extension_info_map() const { 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return extension_info_map_; 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if this context is an external request context, like 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ChromeFrame. 993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual bool IsExternal() const; 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Copies the dependencies from |other| into |this|. If you use this 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // constructor, then you should hold a reference to |other|, as we 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // depend on |other| being alive. 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit ChromeURLRequestContext(ChromeURLRequestContext* other); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~ChromeURLRequestContext(); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Setters to simplify initializing from factory objects. 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_accept_language(const std::string& accept_language) { 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch accept_language_ = accept_language; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_accept_charset(const std::string& accept_charset) { 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch accept_charset_ = accept_charset; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_referrer_charset(const std::string& referrer_charset) { 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch referrer_charset_ = referrer_charset; 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_transport_security_state( 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::TransportSecurityState* state) { 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch transport_security_state_ = state; 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_ssl_config_service(net::SSLConfigService* service) { 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ssl_config_service_ = service; 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_host_resolver(net::HostResolver* resolver) { 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host_resolver_ = resolver; 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void set_dnsrr_resolver(net::DnsRRResolver* dnsrr_resolver) { 131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick dnsrr_resolver_ = dnsrr_resolver; 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_http_transaction_factory(net::HttpTransactionFactory* factory) { 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch http_transaction_factory_ = factory; 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_ftp_transaction_factory(net::FtpTransactionFactory* factory) { 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ftp_transaction_factory_ = factory; 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_http_auth_handler_factory(net::HttpAuthHandlerFactory* factory) { 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch http_auth_handler_factory_ = factory; 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_cookie_store(net::CookieStore* cookie_store) { 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch cookie_store_ = cookie_store; 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_cookie_policy(ChromeCookiePolicy* cookie_policy) { 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch chrome_cookie_policy_ = cookie_policy; // Take a strong reference. 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch cookie_policy_ = cookie_policy; 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_proxy_service(net::ProxyService* service) { 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch proxy_service_ = service; 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_user_script_dir_path(const FilePath& path) { 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch user_script_dir_path_ = path; 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_is_off_the_record(bool is_off_the_record) { 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_off_the_record_ = is_off_the_record; 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_is_media(bool is_media) { 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch is_media_ = is_media; 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_host_content_settings_map( 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HostContentSettingsMap* host_content_settings_map) { 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host_content_settings_map_ = host_content_settings_map; 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_host_zoom_map(HostZoomMap* host_zoom_map) { 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host_zoom_map_ = host_zoom_map; 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_appcache_service(ChromeAppCacheService* service) { 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch appcache_service_ = service; 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_database_tracker(webkit_database::DatabaseTracker* tracker) { 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch database_tracker_ = tracker; 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void set_blob_storage_context(ChromeBlobStorageContext* context) { 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick blob_storage_context_ = context; 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void set_file_system_host_context(FileSystemHostContext* context) { 1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick file_system_host_context_ = context; 1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 180731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void set_extension_info_map(ExtensionInfoMap* map) { 181731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick extension_info_map_ = map; 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_net_log(net::NetLog* net_log) { 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net_log_ = net_log; 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_network_delegate( 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::HttpNetworkDelegate* network_delegate) { 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch network_delegate_ = network_delegate; 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback for when the accept language changes. 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnAcceptLanguageChange(const std::string& accept_language); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback for when the default charset changes. 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnDefaultCharsetChange(const std::string& default_charset); 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Path to the directory user scripts are stored in. 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath user_script_dir_path_; 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<ChromeAppCacheService> appcache_service_; 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<webkit_database::DatabaseTracker> database_tracker_; 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<ChromeCookiePolicy> chrome_cookie_policy_; 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HostContentSettingsMap> host_content_settings_map_; 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HostZoomMap> host_zoom_map_; 2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; 2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<FileSystemHostContext> file_system_host_context_; 208731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_refptr<ExtensionInfoMap> extension_info_map_; 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_media_; 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_off_the_record_; 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ChromeURLRequestContext); 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A URLRequestContextGetter subclass used by the browser. This returns a 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// subclass of URLRequestContext which can be used to store extra information 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// about requests. 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Most methods are expected to be called on the UI thread, except for 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the destructor and GetURLRequestContext(). 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ChromeURLRequestContextGetter : public URLRequestContextGetter, 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public NotificationObserver { 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Constructs a ChromeURLRequestContextGetter that will use |factory| to 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // create the ChromeURLRequestContext. If |profile| is non-NULL, then the 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ChromeURLRequestContextGetter will additionally watch the preferences for 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // changes to charset/language and CleanupOnUIThread() will need to be 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // called to unregister. 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeURLRequestContextGetter(Profile* profile, 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeURLRequestContextFactory* factory); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void RegisterUserPrefs(PrefService* user_prefs); 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Note that GetURLRequestContext() can only be called from the IO 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // thread (it will assert otherwise). GetCookieStore() and 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // GetIOMessageLoopProxy however can be called from any thread. 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // URLRequestContextGetter implementation. 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual URLRequestContext* GetURLRequestContext(); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual net::CookieStore* GetCookieStore(); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy(); 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Convenience overload of GetURLRequestContext() that returns a 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ChromeURLRequestContext* rather than a URLRequestContext*. 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ChromeURLRequestContext* GetIOContext() { 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return reinterpret_cast<ChromeURLRequestContext*>(GetURLRequestContext()); 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an instance for use with an 'original' (non-OTR) profile. This is 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // expected to get called on the UI thread. 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ChromeURLRequestContextGetter* CreateOriginal( 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const FilePath& cookie_store_path, 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& disk_cache_path, int cache_size); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an instance for an original profile for media. This is expected to 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // get called on UI thread. This method takes a profile and reuses the 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 'original' URLRequestContext for common files. 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ChromeURLRequestContextGetter* CreateOriginalForMedia( 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const FilePath& disk_cache_path, int cache_size); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an instance for an original profile for extensions. This is expected 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to get called on UI thread. 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ChromeURLRequestContextGetter* CreateOriginalForExtensions( 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const FilePath& cookie_store_path); 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an instance for use with an OTR profile. This is expected to get 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // called on the UI thread. 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ChromeURLRequestContextGetter* CreateOffTheRecord(Profile* profile); 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Create an instance for an OTR profile for extensions. This is expected 2733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // to get called on UI thread. 2743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static ChromeURLRequestContextGetter* CreateOffTheRecordForExtensions( 2753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Profile* profile); 2763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Clean up UI thread resources. This is expected to get called on the UI 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // thread before the instance is deleted on the IO thread. 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CleanupOnUIThread(); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver implementation. 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Must be called on the IO thread. 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~ChromeURLRequestContextGetter(); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Registers an observer on |profile|'s preferences which will be used 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to update the context when the default language and charset change. 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RegisterPrefsObserver(Profile* profile); 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a request context for media resources from a regular request 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // context. This helper method is called from CreateOriginalForMedia and 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // CreateOffTheRecordForMedia. 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static ChromeURLRequestContextGetter* CreateRequestContextForMedia( 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile, const FilePath& disk_cache_path, int cache_size, 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool off_the_record); 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // These methods simply forward to the corresponding method on 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ChromeURLRequestContext. 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnAcceptLanguageChange(const std::string& accept_language); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnDefaultCharsetChange(const std::string& default_charset); 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Saves the cookie store to |result| and signals |completion|. 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GetCookieStoreAsyncHelper(base::WaitableEvent* completion, 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::CookieStore** result); 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PrefChangeRegistrar registrar_; 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Deferred logic for creating a ChromeURLRequestContext. 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Access only from the IO thread. 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<ChromeURLRequestContextFactory> factory_; 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NULL if not yet initialized. Otherwise, it is the URLRequestContext 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // instance that was lazilly created by GetURLRequestContext. 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Access only from the IO thread. 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<URLRequestContext> url_request_context_; 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ChromeURLRequestContextGetter); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Base class for a ChromeURLRequestContext factory. This includes 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the shared functionality like extracting the default language/charset 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// from a profile. 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Except for the constructor, all methods of this class must be called from 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the IO thread. 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ChromeURLRequestContextFactory { 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Extract properties of interested from |profile|, for setting later into 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a ChromeURLRequestContext using ApplyProfileParametersToContext(). 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit ChromeURLRequestContextFactory(Profile* profile); 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~ChromeURLRequestContextFactory(); 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called to create a new instance (will only be called once). 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ChromeURLRequestContext* Create() = 0; 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IOThread* io_thread() { return io_thread_; } 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Assigns this factory's properties to |context|. 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ApplyProfileParametersToContext(ChromeURLRequestContext* context); 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Values extracted from the Profile. 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: If you add any parameters here, keep it in sync with 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ApplyProfileParametersToContext(). 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_media_; 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_off_the_record_; 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string accept_language_; 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string accept_charset_; 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string referrer_charset_; 356731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(aa): I think this can go away now as we no longer support standalone 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // user scripts. 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath user_script_dir_path_; 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HostContentSettingsMap> host_content_settings_map_; 3613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<ChromeAppCacheService> appcache_service_; 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<webkit_database::DatabaseTracker> database_tracker_; 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<HostZoomMap> host_zoom_map_; 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<net::TransportSecurityState> transport_security_state_; 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<net::SSLConfigService> ssl_config_service_; 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<net::CookieMonster::Delegate> cookie_monster_delegate_; 3673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<FileSystemHostContext> file_system_host_context_; 369731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_refptr<ExtensionInfoMap> extension_info_map_; 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath profile_dir_path_; 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IOThread* const io_thread_; 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ChromeURLRequestContextFactory); 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates a proxy configuration from proxy-related preferences fetched 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// from |pref_service|. The relevant preferences in |pref_service| are 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// initialized from the process' command line or by applicable proxy policies. 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnet::ProxyConfig* CreateProxyConfig(const PrefService* pref_service); 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_NET_CHROME_URL_REQUEST_CONTEXT_H_ 385