| Index: chrome/browser/profiles/profile_impl_io_data.cc
 | 
| diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
 | 
| index f4ee92346904023a2a19e4a612e3a26924343dbe..644377d6edbd6fd1835b846eb7b410bb583acecd 100644
 | 
| --- a/chrome/browser/profiles/profile_impl_io_data.cc
 | 
| +++ b/chrome/browser/profiles/profile_impl_io_data.cc
 | 
| @@ -128,25 +128,14 @@ ProfileImplIOData::Handle::GetResourceContextNoInit() const {
 | 
|  
 | 
|  scoped_refptr<ChromeURLRequestContextGetter>
 | 
|  ProfileImplIOData::Handle::CreateMainRequestContextGetter(
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        blob_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        file_system_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        developer_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_devtools_protocol_handler,
 | 
| +    content::ProtocolHandlerMap* protocol_handlers,
 | 
|      PrefService* local_state,
 | 
|      IOThread* io_thread) const {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
|    LazyInitialize();
 | 
|    DCHECK(!main_request_context_getter_);
 | 
|    main_request_context_getter_ = ChromeURLRequestContextGetter::CreateOriginal(
 | 
| -      profile_, io_data_, blob_protocol_handler.Pass(),
 | 
| -      file_system_protocol_handler.Pass(), developer_protocol_handler.Pass(),
 | 
| -      chrome_protocol_handler.Pass(), chrome_devtools_protocol_handler.Pass());
 | 
| +      profile_, io_data_, protocol_handlers);
 | 
|  
 | 
|    io_data_->predictor_->InitNetworkPredictor(profile_->GetPrefs(),
 | 
|                                               local_state,
 | 
| @@ -188,16 +177,7 @@ scoped_refptr<ChromeURLRequestContextGetter>
 | 
|  ProfileImplIOData::Handle::CreateIsolatedAppRequestContextGetter(
 | 
|      const base::FilePath& partition_path,
 | 
|      bool in_memory,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        blob_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        file_system_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        developer_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_devtools_protocol_handler) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
|    // Check that the partition_path is not the same as the base profile path. We
 | 
|    // expect isolated partition, which will never go to the default profile path.
 | 
| @@ -218,10 +198,8 @@ ProfileImplIOData::Handle::CreateIsolatedAppRequestContextGetter(
 | 
|    ChromeURLRequestContextGetter* context =
 | 
|        ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp(
 | 
|            profile_, io_data_, descriptor,
 | 
| -          protocol_handler_interceptor.Pass(), blob_protocol_handler.Pass(),
 | 
| -          file_system_protocol_handler.Pass(),
 | 
| -          developer_protocol_handler.Pass(), chrome_protocol_handler.Pass(),
 | 
| -          chrome_devtools_protocol_handler.Pass());
 | 
| +          protocol_handler_interceptor.Pass(),
 | 
| +          protocol_handlers);
 | 
|    app_request_context_getter_map_[descriptor] = context;
 | 
|  
 | 
|    return context;
 | 
| @@ -317,16 +295,7 @@ ProfileImplIOData::~ProfileImplIOData() {
 | 
|  
 | 
|  void ProfileImplIOData::InitializeInternal(
 | 
|      ProfileParams* profile_params,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        blob_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        file_system_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        developer_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_devtools_protocol_handler) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
|    ChromeURLRequestContext* main_context = main_request_context();
 | 
|  
 | 
|    IOThread* const io_thread = profile_params->io_thread;
 | 
| @@ -447,27 +416,13 @@ void ProfileImplIOData::InitializeInternal(
 | 
|  
 | 
|    scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory(
 | 
|        new net::URLRequestJobFactoryImpl());
 | 
| -  bool set_protocol = main_job_factory->SetProtocolHandler(
 | 
| -      chrome::kBlobScheme, blob_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| -  set_protocol = main_job_factory->SetProtocolHandler(
 | 
| -      chrome::kFileSystemScheme, file_system_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| -  set_protocol = main_job_factory->SetProtocolHandler(
 | 
| -      chrome::kChromeUIScheme, chrome_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| -  set_protocol = main_job_factory->SetProtocolHandler(
 | 
| -      chrome::kChromeDevToolsScheme,
 | 
| -      chrome_devtools_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| +  InstallProtocolHandlers(main_job_factory.get(), protocol_handlers);
 | 
|    main_job_factory_ = SetUpJobFactoryDefaults(
 | 
|        main_job_factory.Pass(),
 | 
|        profile_params->protocol_handler_interceptor.Pass(),
 | 
|        network_delegate(),
 | 
|        main_context->ftp_transaction_factory(),
 | 
|        main_context->ftp_auth_cache());
 | 
| -  main_job_factory_.reset(new net::ProtocolInterceptJobFactory(
 | 
| -      main_job_factory_.Pass(), developer_protocol_handler.Pass()));
 | 
|    main_context->set_job_factory(main_job_factory_.get());
 | 
|  
 | 
|  #if defined(ENABLE_EXTENSIONS)
 | 
| @@ -539,16 +494,7 @@ ProfileImplIOData::InitializeAppRequestContext(
 | 
|      const StoragePartitionDescriptor& partition_descriptor,
 | 
|      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
 | 
|          protocol_handler_interceptor,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        blob_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        file_system_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        developer_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_devtools_protocol_handler) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
|    // Copy most state from the main context.
 | 
|    AppRequestContext* context = new AppRequestContext(load_time_stats());
 | 
|    context->CopyFrom(main_context);
 | 
| @@ -620,19 +566,7 @@ ProfileImplIOData::InitializeAppRequestContext(
 | 
|  
 | 
|    scoped_ptr<net::URLRequestJobFactoryImpl> job_factory(
 | 
|        new net::URLRequestJobFactoryImpl());
 | 
| -  bool set_protocol = job_factory->SetProtocolHandler(
 | 
| -      chrome::kBlobScheme, blob_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| -  set_protocol = job_factory->SetProtocolHandler(
 | 
| -      chrome::kFileSystemScheme, file_system_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| -  set_protocol = job_factory->SetProtocolHandler(
 | 
| -      chrome::kChromeUIScheme, chrome_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| -  set_protocol = job_factory->SetProtocolHandler(
 | 
| -      chrome::kChromeDevToolsScheme,
 | 
| -      chrome_devtools_protocol_handler.release());
 | 
| -  DCHECK(set_protocol);
 | 
| +  InstallProtocolHandlers(job_factory.get(), protocol_handlers);
 | 
|    scoped_ptr<net::URLRequestJobFactory> top_job_factory;
 | 
|    // Overwrite the job factory that we inherit from the main context so
 | 
|    // that we can later provide our own handlers for storage related protocols.
 | 
| @@ -647,8 +581,6 @@ ProfileImplIOData::InitializeAppRequestContext(
 | 
|    } else {
 | 
|      top_job_factory = job_factory.PassAs<net::URLRequestJobFactory>();
 | 
|    }
 | 
| -  top_job_factory.reset(new net::ProtocolInterceptJobFactory(
 | 
| -      top_job_factory.Pass(), developer_protocol_handler.Pass()));
 | 
|    context->SetJobFactory(top_job_factory.Pass());
 | 
|  
 | 
|    return context;
 | 
| @@ -714,25 +646,12 @@ ProfileImplIOData::AcquireIsolatedAppRequestContext(
 | 
|      const StoragePartitionDescriptor& partition_descriptor,
 | 
|      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
 | 
|          protocol_handler_interceptor,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        blob_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        file_system_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        developer_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_protocol_handler,
 | 
| -    scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
 | 
| -        chrome_devtools_protocol_handler) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
|    // We create per-app contexts on demand, unlike the others above.
 | 
|    ChromeURLRequestContext* app_request_context =
 | 
|        InitializeAppRequestContext(main_context, partition_descriptor,
 | 
|                                    protocol_handler_interceptor.Pass(),
 | 
| -                                  blob_protocol_handler.Pass(),
 | 
| -                                  file_system_protocol_handler.Pass(),
 | 
| -                                  developer_protocol_handler.Pass(),
 | 
| -                                  chrome_protocol_handler.Pass(),
 | 
| -                                  chrome_devtools_protocol_handler.Pass());
 | 
| +                                  protocol_handlers);
 | 
|    DCHECK(app_request_context);
 | 
|    return app_request_context;
 | 
|  }
 | 
| 
 |