Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1307)

Unified Diff: chrome/browser/profiles/off_the_record_profile_io_data.cc

Issue 11308362: Add StoragePartition's ProtocolHandlers at URLRequestContext construction time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address mmenke's comments Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 057c10a134cb553ee160a87a73ac5bd10583580b..65bbd54a176ea8e611a3a2f38e2017137d1d031a 100644
--- a/chrome/browser/profiles/off_the_record_profile_io_data.cc
+++ b/chrome/browser/profiles/off_the_record_profile_io_data.cc
@@ -85,10 +85,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_;
}
@@ -116,8 +136,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<ProtocolHandlerRegistry::JobInterceptorFactory>
protocol_handler_interceptor(
@@ -125,8 +164,9 @@ OffTheRecordProfileIOData::Handle::GetIsolatedAppRequestContextGetter(
CreateJobInterceptorFactory());
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;
@@ -154,8 +194,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;
@@ -215,6 +261,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());
main_job_factory_ = SetUpJobFactoryDefaults(
main_job_factory.Pass(),
profile_params->protocol_handler_interceptor.Pass(),
@@ -281,7 +332,13 @@ OffTheRecordProfileIOData::InitializeAppRequestContext(
ChromeURLRequestContext* main_context,
const StoragePartitionDescriptor& partition_descriptor,
scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
- 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.
@@ -304,6 +361,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());
scoped_ptr<net::URLRequestJobFactory> top_job_factory;
top_job_factory = SetUpJobFactoryDefaults(job_factory.Pass(),
protocol_handler_interceptor.Pass(),
@@ -333,11 +395,20 @@ OffTheRecordProfileIOData::AcquireIsolatedAppRequestContext(
ChromeURLRequestContext* main_context,
const StoragePartitionDescriptor& partition_descriptor,
scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
- 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;
}

Powered by Google App Engine
This is Rietveld 408576698