Index: chrome/browser/net/chrome_url_request_context.cc |
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc |
index 2b2a40ea8c1b701d8eb324e810cda5654bd352fe..59e4586c04f1fda0c6e24e07f6588241019a38c8 100644 |
--- a/chrome/browser/net/chrome_url_request_context.cc |
+++ b/chrome/browser/net/chrome_url_request_context.cc |
@@ -77,6 +77,29 @@ class FactoryForExtensions : public ChromeURLRequestContextFactory { |
const scoped_refptr<const ProfileIOData> profile_io_data_; |
}; |
+// Factory that creates the ChromeURLRequestContext for a given isolated app. |
+class FactoryForIsolatedApp : public ChromeURLRequestContextFactory { |
+ public: |
+ FactoryForIsolatedApp(const ProfileIOData* profile_io_data, |
+ const Extension* installed_app, |
+ ChromeURLRequestContextGetter* main_context) |
+ : profile_io_data_(profile_io_data), |
+ installed_app_(installed_app), |
+ main_request_context_getter_(main_context) {} |
+ |
+ virtual scoped_refptr<ChromeURLRequestContext> Create() { |
+ // We will copy most of the state from the main request context. |
+ return profile_io_data_->GetIsolatedAppRequestContext( |
+ main_request_context_getter_->GetIOContext(), installed_app_); |
+ } |
+ |
+ private: |
+ const scoped_refptr<const ProfileIOData> profile_io_data_; |
+ const scoped_refptr<const Extension> installed_app_; |
+ scoped_refptr<ChromeURLRequestContextGetter> |
+ main_request_context_getter_; |
+}; |
+ |
// Factory that creates the ChromeURLRequestContext for media. |
class FactoryForMedia : public ChromeURLRequestContextFactory { |
public: |
@@ -215,6 +238,20 @@ ChromeURLRequestContextGetter::CreateOriginalForExtensions( |
// static |
ChromeURLRequestContextGetter* |
+ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp( |
+ Profile* profile, |
+ const ProfileIOData* profile_io_data, |
+ const Extension* installed_app) { |
+ DCHECK(!profile->IsOffTheRecord()); |
+ ChromeURLRequestContextGetter* main_context = |
+ static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); |
+ return new ChromeURLRequestContextGetter( |
+ profile, |
+ new FactoryForIsolatedApp(profile_io_data, installed_app, main_context)); |
+} |
+ |
+// static |
+ChromeURLRequestContextGetter* |
ChromeURLRequestContextGetter::CreateOffTheRecord( |
Profile* profile, const ProfileIOData* profile_io_data) { |
DCHECK(profile->IsOffTheRecord()); |
@@ -231,6 +268,20 @@ ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions( |
profile, new FactoryForExtensions(profile_io_data)); |
} |
+// static |
+ChromeURLRequestContextGetter* |
+ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp( |
+ Profile* profile, |
+ const ProfileIOData* profile_io_data, |
+ const Extension* installed_app) { |
+ DCHECK(profile->IsOffTheRecord()); |
+ ChromeURLRequestContextGetter* main_context = |
+ static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); |
+ return new ChromeURLRequestContextGetter( |
+ profile, |
+ new FactoryForIsolatedApp(profile_io_data, installed_app, main_context)); |
+} |
+ |
void ChromeURLRequestContextGetter::CleanupOnUIThread() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
// Unregister for pref notifications. |
@@ -324,6 +375,43 @@ ChromeURLRequestContext::ChromeURLRequestContext() |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
} |
+void ChromeURLRequestContext::CopyFrom(ChromeURLRequestContext* other) { |
+ // Copy ChromeURLRequestContext parameters. |
+ set_user_script_dir_path(other->user_script_dir_path()); |
+ set_appcache_service(other->appcache_service()); |
+ set_database_tracker(other->database_tracker()); |
+ set_chrome_cookie_policy(other->chrome_cookie_policy_); |
+ set_host_content_settings_map(other->host_content_settings_map()); |
+ set_host_zoom_map(other->host_zoom_map_); |
+ set_blob_storage_context(other->blob_storage_context()); |
+ set_file_system_context(other->file_system_context()); |
+ set_extension_info_map(other->extension_info_map_); |
+ set_prerender_manager(other->prerender_manager()); |
+ // ChromeURLDataManagerBackend is unique per context. |
+ set_protocol_handler_registry(other->protocol_handler_registry_); |
+ set_is_off_the_record(other->is_off_the_record()); |
+ |
+ // Copy URLRequestContext parameters. |
+ set_net_log(other->net_log()); |
+ set_host_resolver(other->host_resolver()); |
+ set_cert_verifier(other->cert_verifier()); |
+ set_dnsrr_resolver(other->dnsrr_resolver()); |
+ set_dns_cert_checker(other->dns_cert_checker()); |
+ set_http_auth_handler_factory(other->http_auth_handler_factory()); |
+ set_proxy_service(other->proxy_service()); |
+ set_ssl_config_service(other->ssl_config_service()); |
+ set_network_delegate(other->network_delegate()); |
+ set_cookie_store(other->cookie_store()); |
+ // Cookie policy is set above, via set_chrome_cookie_policy. |
+ set_transport_security_state(other->transport_security_state()); |
+ // FTPAuthCache is unique per context. |
+ set_accept_language(other->accept_language()); |
+ set_accept_charset(other->accept_charset()); |
+ set_referrer_charset(other->referrer_charset()); |
+ set_http_transaction_factory(other->http_transaction_factory()); |
+ set_ftp_transaction_factory(other->ftp_transaction_factory()); |
+} |
+ |
void ChromeURLRequestContext::set_chrome_cookie_policy( |
ChromeCookiePolicy* cookie_policy) { |
chrome_cookie_policy_ = cookie_policy; // Take a strong reference. |