| Index: chrome/browser/profiles/off_the_record_profile_io_data.cc
|
| diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.cc b/chrome/browser/profiles/off_the_record_profile_io_data.cc
|
| index dfc9b81d85c57fe6f5db9353c81e74fba86d8061..7632f0dc0af209e7f87530db7bb2e0aa9a6e2709 100644
|
| --- a/chrome/browser/profiles/off_the_record_profile_io_data.cc
|
| +++ b/chrome/browser/profiles/off_the_record_profile_io_data.cc
|
| @@ -84,10 +84,30 @@ OffTheRecordProfileIOData::Handle::GetMainRequestContextGetter() const {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| #endif // defined(OS_CHROMEOS)
|
| LazyInitialize();
|
| - if (!main_request_context_getter_) {
|
| - main_request_context_getter_ =
|
| - ChromeURLRequestContextGetter::CreateOffTheRecord(profile_, io_data_);
|
| - }
|
| + DCHECK(main_request_context_getter_);
|
| + return main_request_context_getter_;
|
| +}
|
| +
|
| +scoped_refptr<ChromeURLRequestContextGetter>
|
| +OffTheRecordProfileIOData::Handle::CreateMainRequestContextGetter(
|
| + scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
|
| + blob_protocol_handler,
|
| + scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
|
| + file_system_protocol_handler,
|
| + scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| + developer_protocol_handler) const {
|
| + // TODO(oshima): Re-enable when ChromeOS only accesses the profile on the UI
|
| + // thread.
|
| +#if !defined(OS_CHROMEOS)
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +#endif // defined(OS_CHROMEOS)
|
| + LazyInitialize();
|
| + DCHECK(!main_request_context_getter_);
|
| + main_request_context_getter_ =
|
| + ChromeURLRequestContextGetter::CreateOffTheRecord(
|
| + profile_, io_data_, blob_protocol_handler.Pass(),
|
| + file_system_protocol_handler.Pass(),
|
| + developer_protocol_handler.Pass());
|
| return main_request_context_getter_;
|
| }
|
|
|
| @@ -115,8 +135,27 @@ OffTheRecordProfileIOData::Handle::GetIsolatedAppRequestContextGetter(
|
| StoragePartitionDescriptor descriptor(partition_path, in_memory);
|
| ChromeURLRequestContextGetterMap::iterator iter =
|
| app_request_context_getter_map_.find(descriptor);
|
| - if (iter != app_request_context_getter_map_.end())
|
| - return iter->second;
|
| + CHECK(iter != app_request_context_getter_map_.end());
|
| + return iter->second;
|
| +}
|
| +
|
| +scoped_refptr<ChromeURLRequestContextGetter>
|
| +OffTheRecordProfileIOData::Handle::CreateIsolatedAppRequestContextGetter(
|
| + const 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::Interceptor>
|
| + developer_protocol_handler) const {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK(!partition_path.empty());
|
| + LazyInitialize();
|
| +
|
| + // Keep a map of request context getters, one per requested app ID.
|
| + StoragePartitionDescriptor descriptor(partition_path, in_memory);
|
| + DCHECK_EQ(app_request_context_getter_map_.count(descriptor), 0u);
|
|
|
| scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| protocol_handler_interceptor(
|
| @@ -124,8 +163,9 @@ OffTheRecordProfileIOData::Handle::GetIsolatedAppRequestContextGetter(
|
| CreateURLInterceptor());
|
| ChromeURLRequestContextGetter* context =
|
| ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp(
|
| - profile_, io_data_, descriptor,
|
| - protocol_handler_interceptor.Pass());
|
| + profile_, io_data_, descriptor, protocol_handler_interceptor.Pass(),
|
| + blob_protocol_handler.Pass(), file_system_protocol_handler.Pass(),
|
| + developer_protocol_handler.Pass());
|
| app_request_context_getter_map_[descriptor] = context;
|
|
|
| return context;
|
| @@ -153,8 +193,14 @@ OffTheRecordProfileIOData::~OffTheRecordProfileIOData() {
|
| DestroyResourceContext();
|
| }
|
|
|
| -void OffTheRecordProfileIOData::LazyInitializeInternal(
|
| - ProfileParams* profile_params) const {
|
| +void OffTheRecordProfileIOData::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::Interceptor>
|
| + developer_protocol_handler) const {
|
| ChromeURLRequestContext* main_context = main_request_context();
|
|
|
| IOThread* const io_thread = profile_params->io_thread;
|
| @@ -217,6 +263,11 @@ void OffTheRecordProfileIOData::LazyInitializeInternal(
|
| scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory(
|
| new net::URLRequestJobFactoryImpl());
|
|
|
| + main_job_factory->SetProtocolHandler(
|
| + chrome::kBlobScheme, blob_protocol_handler.release());
|
| + main_job_factory->SetProtocolHandler(
|
| + chrome::kFileSystemScheme, file_system_protocol_handler.release());
|
| + main_job_factory->AddInterceptor(developer_protocol_handler.release());
|
| SetUpJobFactoryDefaults(
|
| main_job_factory.get(),
|
| profile_params->protocol_handler_interceptor.Pass(),
|
| @@ -285,7 +336,13 @@ OffTheRecordProfileIOData::InitializeAppRequestContext(
|
| ChromeURLRequestContext* main_context,
|
| const StoragePartitionDescriptor& partition_descriptor,
|
| scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| - protocol_handler_interceptor) const {
|
| + protocol_handler_interceptor,
|
| + scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
|
| + blob_protocol_handler,
|
| + scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
|
| + file_system_protocol_handler,
|
| + scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| + developer_protocol_handler) const {
|
| AppRequestContext* context = new AppRequestContext(load_time_stats());
|
|
|
| // Copy most state from the main context.
|
| @@ -308,6 +365,11 @@ OffTheRecordProfileIOData::InitializeAppRequestContext(
|
|
|
| scoped_ptr<net::URLRequestJobFactoryImpl> job_factory(
|
| new net::URLRequestJobFactoryImpl());
|
| + job_factory->SetProtocolHandler(chrome::kBlobScheme,
|
| + blob_protocol_handler.release());
|
| + job_factory->SetProtocolHandler(chrome::kFileSystemScheme,
|
| + file_system_protocol_handler.release());
|
| + job_factory->AddInterceptor(developer_protocol_handler.release());
|
| SetUpJobFactoryDefaults(job_factory.get(),
|
| protocol_handler_interceptor.Pass(),
|
| network_delegate(),
|
| @@ -336,11 +398,20 @@ OffTheRecordProfileIOData::AcquireIsolatedAppRequestContext(
|
| ChromeURLRequestContext* main_context,
|
| const StoragePartitionDescriptor& partition_descriptor,
|
| scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| - protocol_handler_interceptor) const {
|
| + protocol_handler_interceptor,
|
| + scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
|
| + blob_protocol_handler,
|
| + scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
|
| + file_system_protocol_handler,
|
| + scoped_ptr<net::URLRequestJobFactory::Interceptor>
|
| + developer_protocol_handler) 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());
|
| + protocol_handler_interceptor.Pass(),
|
| + blob_protocol_handler.Pass(),
|
| + file_system_protocol_handler.Pass(),
|
| + developer_protocol_handler.Pass());
|
| DCHECK(app_request_context);
|
| return app_request_context;
|
| }
|
|
|