| Index: chrome/browser/profiles/profile_io_data.cc
|
| diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
|
| index 74f94d81938228a36127195cb3c02179c75ab86f..86e8045b5399b6d890b20a980df56c56a7a1b85e 100644
|
| --- a/chrome/browser/profiles/profile_io_data.cc
|
| +++ b/chrome/browser/profiles/profile_io_data.cc
|
| @@ -17,6 +17,7 @@
|
| #include "base/string_util.h"
|
| #include "base/stringprintf.h"
|
| #include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/net/about_protocol_handler.h"
|
| #include "chrome/browser/content_settings/cookie_settings.h"
|
| #include "chrome/browser/content_settings/host_content_settings_map.h"
|
| #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
|
| @@ -62,6 +63,8 @@
|
| #include "net/proxy/proxy_script_fetcher_impl.h"
|
| #include "net/proxy/proxy_service.h"
|
| #include "net/url_request/data_protocol_handler.h"
|
| +#include "net/url_request/file_protocol_handler.h"
|
| +#include "net/url_request/ftp_protocol_handler.h"
|
| #include "net/url_request/url_request.h"
|
|
|
| #if !defined(OS_ANDROID)
|
| @@ -190,10 +193,10 @@ void ProfileIOData::InitializeOnUIThread(Profile* profile) {
|
| ProtocolHandlerRegistryFactory::GetForProfile(profile);
|
| DCHECK(protocol_handler_registry);
|
|
|
| - // the profile instance is only available here in the InitializeOnUIThread
|
| + // The profile instance is only available here in the InitializeOnUIThread
|
| // method, so we create the url interceptor here, then save it for
|
| - // later delivery to the job factory in LazyInitialize
|
| - params->protocol_handler_url_interceptor.reset(
|
| + // later delivery to the job factory in LazyInitialize.
|
| + params->protocol_handler_interceptor.reset(
|
| protocol_handler_registry->CreateURLInterceptor());
|
|
|
| ChromeProxyConfigService* proxy_config_service =
|
| @@ -238,9 +241,9 @@ ProfileIOData::MediaRequestContext::MediaRequestContext(
|
| }
|
|
|
| void ProfileIOData::MediaRequestContext::SetHttpTransactionFactory(
|
| - net::HttpTransactionFactory* http_factory) {
|
| - http_factory_.reset(http_factory);
|
| - set_http_transaction_factory(http_factory);
|
| + scoped_ptr<net::HttpTransactionFactory> http_factory) {
|
| + http_factory_ = http_factory.Pass();
|
| + set_http_transaction_factory(http_factory_.get());
|
| }
|
|
|
| ProfileIOData::MediaRequestContext::~MediaRequestContext() {}
|
| @@ -258,9 +261,15 @@ void ProfileIOData::AppRequestContext::SetCookieStore(
|
| }
|
|
|
| void ProfileIOData::AppRequestContext::SetHttpTransactionFactory(
|
| - net::HttpTransactionFactory* http_factory) {
|
| - http_factory_.reset(http_factory);
|
| - set_http_transaction_factory(http_factory);
|
| + scoped_ptr<net::HttpTransactionFactory> http_factory) {
|
| + http_factory_ = http_factory.Pass();
|
| + set_http_transaction_factory(http_factory_.get());
|
| +}
|
| +
|
| +void ProfileIOData::AppRequestContext::SetJobFactory(
|
| + scoped_ptr<net::URLRequestJobFactory> job_factory) {
|
| + job_factory_ = job_factory.Pass();
|
| + set_job_factory(job_factory_.get());
|
| }
|
|
|
| ProfileIOData::AppRequestContext::~AppRequestContext() {}
|
| @@ -376,13 +385,16 @@ ProfileIOData::GetExtensionsRequestContext() const {
|
| ChromeURLRequestContext*
|
| ProfileIOData::GetIsolatedAppRequestContext(
|
| ChromeURLRequestContext* main_context,
|
| - const std::string& app_id) const {
|
| + const std::string& app_id,
|
| + scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| + protocol_handler_interceptor) const {
|
| LazyInitialize();
|
| ChromeURLRequestContext* context = NULL;
|
| if (ContainsKey(app_request_context_map_, app_id)) {
|
| context = app_request_context_map_[app_id];
|
| } else {
|
| - context = AcquireIsolatedAppRequestContext(main_context, app_id);
|
| + context = AcquireIsolatedAppRequestContext(
|
| + main_context, app_id, protocol_handler_interceptor.Pass());
|
| app_request_context_map_[app_id] = context;
|
| }
|
| DCHECK(context);
|
| @@ -391,17 +403,13 @@ ProfileIOData::GetIsolatedAppRequestContext(
|
|
|
| ChromeURLRequestContext*
|
| ProfileIOData::GetIsolatedMediaRequestContext(
|
| - ChromeURLRequestContext* main_context,
|
| + ChromeURLRequestContext* app_context,
|
| const std::string& app_id) const {
|
| LazyInitialize();
|
| ChromeURLRequestContext* context = NULL;
|
| if (ContainsKey(isolated_media_request_context_map_, app_id)) {
|
| context = isolated_media_request_context_map_[app_id];
|
| } else {
|
| - // Get the app context as the starting point for the media context,
|
| - // so that it uses the app's cookie store.
|
| - ChromeURLRequestContext* app_context = GetIsolatedAppRequestContext(
|
| - main_context, app_id);
|
| context = AcquireIsolatedMediaRequestContext(app_context, app_id);
|
| isolated_media_request_context_map_[app_id] = context;
|
| }
|
| @@ -591,19 +599,31 @@ void ProfileIOData::ApplyProfileParamsToContext(
|
| }
|
|
|
| void ProfileIOData::SetUpJobFactoryDefaults(
|
| - net::URLRequestJobFactory* job_factory) const {
|
| + net::URLRequestJobFactory* job_factory,
|
| + scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| + protocol_handler_interceptor,
|
| + net::NetworkDelegate* network_delegate,
|
| + net::FtpTransactionFactory* ftp_transaction_factory,
|
| + net::FtpAuthCache* ftp_auth_cache) const {
|
| // NOTE(willchan): Keep these protocol handlers in sync with
|
| // ProfileIOData::IsHandledProtocol().
|
| + bool set_protocol = job_factory->SetProtocolHandler(
|
| + chrome::kFileScheme, new net::FileProtocolHandler());
|
| + DCHECK(set_protocol);
|
|
|
| - if (profile_params_->protocol_handler_url_interceptor.get()) {
|
| - job_factory->AddInterceptor(
|
| - profile_params_->protocol_handler_url_interceptor.release());
|
| + set_protocol = job_factory->SetProtocolHandler(
|
| + chrome::kChromeDevToolsScheme,
|
| + CreateDevToolsProtocolHandler(chrome_url_data_manager_backend(),
|
| + network_delegate));
|
| + DCHECK(set_protocol);
|
| +
|
| + if (protocol_handler_interceptor.get()) {
|
| + job_factory->AddInterceptor(protocol_handler_interceptor.release());
|
| }
|
|
|
| - bool set_protocol = job_factory->SetProtocolHandler(
|
| + set_protocol = job_factory->SetProtocolHandler(
|
| chrome::kExtensionScheme,
|
| - CreateExtensionProtocolHandler(is_incognito(),
|
| - profile_params_->extension_info_map));
|
| + CreateExtensionProtocolHandler(is_incognito(), GetExtensionInfoMap()));
|
| DCHECK(set_protocol);
|
| set_protocol = job_factory->SetProtocolHandler(
|
| chrome::kExtensionResourceScheme,
|
| @@ -631,6 +651,16 @@ void ProfileIOData::SetUpJobFactoryDefaults(
|
| job_factory->AddInterceptor(new chromeos::GViewRequestInterceptor);
|
| #endif // !defined(GOOGLE_CHROME_BUILD)
|
| #endif // defined(OS_CHROMEOS)
|
| +
|
| + job_factory->SetProtocolHandler(chrome::kAboutScheme,
|
| + new net::AboutProtocolHandler());
|
| +#if !defined(DISABLE_FTP_SUPPORT)
|
| + DCHECK(ftp_transaction_factory);
|
| + job_factory->SetProtocolHandler(
|
| + chrome::kFtpScheme,
|
| + new net::FtpProtocolHandler(ftp_transaction_factory,
|
| + ftp_auth_cache));
|
| +#endif // !defined(DISABLE_FTP_SUPPORT)
|
| }
|
|
|
| void ProfileIOData::ShutdownOnUIThread() {
|
|
|