| 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 7d2e1826ba0c2309268cfced6a2719be763e9129..4011cf309b69a1ef3193f46b621bfec954c6d173 100644
 | 
| --- a/chrome/browser/profiles/profile_impl_io_data.cc
 | 
| +++ b/chrome/browser/profiles/profile_impl_io_data.cc
 | 
| @@ -175,13 +175,14 @@ ProfileImplIOData::Handle::GetResourceContextNoInit() const {
 | 
|  scoped_refptr<ChromeURLRequestContextGetter>
 | 
|  ProfileImplIOData::Handle::CreateMainRequestContextGetter(
 | 
|      content::ProtocolHandlerMap* protocol_handlers,
 | 
| +    content::ProtocolHandlerScopedVector protocol_interceptors,
 | 
|      PrefService* local_state,
 | 
|      IOThread* io_thread) const {
 | 
|    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
|    LazyInitialize();
 | 
|    DCHECK(!main_request_context_getter_.get());
 | 
|    main_request_context_getter_ = ChromeURLRequestContextGetter::Create(
 | 
| -      profile_, io_data_, protocol_handlers);
 | 
| +      profile_, io_data_, protocol_handlers, protocol_interceptors.Pass());
 | 
|  
 | 
|    io_data_->predictor_
 | 
|        ->InitNetworkPredictor(profile_->GetPrefs(),
 | 
| @@ -222,7 +223,8 @@ scoped_refptr<ChromeURLRequestContextGetter>
 | 
|  ProfileImplIOData::Handle::CreateIsolatedAppRequestContextGetter(
 | 
|      const base::FilePath& partition_path,
 | 
|      bool in_memory,
 | 
| -    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers,
 | 
| +    content::ProtocolHandlerScopedVector protocol_interceptors) 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.
 | 
| @@ -242,9 +244,12 @@ ProfileImplIOData::Handle::CreateIsolatedAppRequestContextGetter(
 | 
|                CreateJobInterceptorFactory());
 | 
|    ChromeURLRequestContextGetter* context =
 | 
|        ChromeURLRequestContextGetter::CreateForIsolatedApp(
 | 
| -          profile_, io_data_, descriptor,
 | 
| +          profile_,
 | 
| +          io_data_,
 | 
| +          descriptor,
 | 
|            protocol_handler_interceptor.Pass(),
 | 
| -          protocol_handlers);
 | 
| +          protocol_handlers,
 | 
| +          protocol_interceptors.Pass());
 | 
|    app_request_context_getter_map_[descriptor] = context;
 | 
|  
 | 
|    return context;
 | 
| @@ -346,7 +351,8 @@ ProfileImplIOData::~ProfileImplIOData() {
 | 
|  
 | 
|  void ProfileImplIOData::InitializeInternal(
 | 
|      ProfileParams* profile_params,
 | 
| -    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers,
 | 
| +    content::ProtocolHandlerScopedVector protocol_interceptors) const {
 | 
|    ChromeURLRequestContext* main_context = main_request_context();
 | 
|  
 | 
|    IOThread* const io_thread = profile_params->io_thread;
 | 
| @@ -473,6 +479,7 @@ void ProfileImplIOData::InitializeInternal(
 | 
|    InstallProtocolHandlers(main_job_factory.get(), protocol_handlers);
 | 
|    main_job_factory_ = SetUpJobFactoryDefaults(
 | 
|        main_job_factory.Pass(),
 | 
| +      protocol_interceptors.Pass(),
 | 
|        profile_params->protocol_handler_interceptor.Pass(),
 | 
|        network_delegate(),
 | 
|        ftp_factory_.get());
 | 
| @@ -529,19 +536,20 @@ void ProfileImplIOData::
 | 
|    // SetUpJobFactory() to get this effect.
 | 
|    extensions_job_factory_ = SetUpJobFactoryDefaults(
 | 
|        extensions_job_factory.Pass(),
 | 
| +      content::ProtocolHandlerScopedVector(),
 | 
|        scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>(),
 | 
|        NULL,
 | 
|        ftp_factory_.get());
 | 
|    extensions_context->set_job_factory(extensions_job_factory_.get());
 | 
|  }
 | 
|  
 | 
| -ChromeURLRequestContext*
 | 
| -ProfileImplIOData::InitializeAppRequestContext(
 | 
| +ChromeURLRequestContext* ProfileImplIOData::InitializeAppRequestContext(
 | 
|      ChromeURLRequestContext* main_context,
 | 
|      const StoragePartitionDescriptor& partition_descriptor,
 | 
|      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
 | 
|          protocol_handler_interceptor,
 | 
| -    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers,
 | 
| +    content::ProtocolHandlerScopedVector protocol_interceptors) const {
 | 
|    // Copy most state from the main context.
 | 
|    AppRequestContext* context = new AppRequestContext();
 | 
|    context->CopyFrom(main_context);
 | 
| @@ -608,10 +616,11 @@ ProfileImplIOData::InitializeAppRequestContext(
 | 
|        new net::URLRequestJobFactoryImpl());
 | 
|    InstallProtocolHandlers(job_factory.get(), protocol_handlers);
 | 
|    scoped_ptr<net::URLRequestJobFactory> top_job_factory(
 | 
| -      SetUpJobFactoryDefaults(
 | 
| -          job_factory.Pass(), protocol_handler_interceptor.Pass(),
 | 
| -          network_delegate(),
 | 
| -          ftp_factory_.get()));
 | 
| +      SetUpJobFactoryDefaults(job_factory.Pass(),
 | 
| +                              protocol_interceptors.Pass(),
 | 
| +                              protocol_handler_interceptor.Pass(),
 | 
| +                              network_delegate(),
 | 
| +                              ftp_factory_.get()));
 | 
|    context->SetJobFactory(top_job_factory.Pass());
 | 
|  
 | 
|    return context;
 | 
| @@ -675,18 +684,20 @@ ProfileImplIOData::AcquireMediaRequestContext() const {
 | 
|    return media_request_context_.get();
 | 
|  }
 | 
|  
 | 
| -ChromeURLRequestContext*
 | 
| -ProfileImplIOData::AcquireIsolatedAppRequestContext(
 | 
| +ChromeURLRequestContext* ProfileImplIOData::AcquireIsolatedAppRequestContext(
 | 
|      ChromeURLRequestContext* main_context,
 | 
|      const StoragePartitionDescriptor& partition_descriptor,
 | 
|      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
 | 
|          protocol_handler_interceptor,
 | 
| -    content::ProtocolHandlerMap* protocol_handlers) const {
 | 
| +    content::ProtocolHandlerMap* protocol_handlers,
 | 
| +    content::ProtocolHandlerScopedVector protocol_interceptors) const {
 | 
|    // We create per-app contexts on demand, unlike the others above.
 | 
|    ChromeURLRequestContext* app_request_context =
 | 
| -      InitializeAppRequestContext(main_context, partition_descriptor,
 | 
| +      InitializeAppRequestContext(main_context,
 | 
| +                                  partition_descriptor,
 | 
|                                    protocol_handler_interceptor.Pass(),
 | 
| -                                  protocol_handlers);
 | 
| +                                  protocol_handlers,
 | 
| +                                  protocol_interceptors.Pass());
 | 
|    DCHECK(app_request_context);
 | 
|    return app_request_context;
 | 
|  }
 | 
| 
 |