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

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: Avoid DCHECK in GetExtensionInfoMap() during Init() Created 8 years 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 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();
mmenke 2012/12/20 16:55:06 This call no longer makes any sense.
pauljensen 2012/12/20 20:24:07 I think it still does. If this function is the fi
- 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();
mmenke 2012/12/20 16:55:06 This LazyInitialize doesn't work - looks like the
pauljensen 2012/12/20 20:24:07 It does work. Here's the basic idea: 1. Someone c
mmenke 2012/12/20 21:12:54 Looks like you're right, but I think this is about
+
+ // 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;
}

Powered by Google App Engine
This is Rietveld 408576698