Index: headless/lib/browser/headless_url_request_context_getter.cc |
diff --git a/headless/lib/browser/headless_url_request_context_getter.cc b/headless/lib/browser/headless_url_request_context_getter.cc |
index 2bd0d410f4129769c05119a6c6648b35374ce785..f185e8bc20e9a599a83705c9d0fa4da6406d9593 100644 |
--- a/headless/lib/browser/headless_url_request_context_getter.cc |
+++ b/headless/lib/browser/headless_url_request_context_getter.cc |
@@ -72,6 +72,12 @@ HeadlessURLRequestContextGetter::HeadlessURLRequestContextGetter( |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
std::swap(protocol_handlers_, *protocol_handlers); |
+ for (auto& pair : options->protocol_handlers) { |
+ protocol_handlers_[pair.first] = |
+ linked_ptr<net::URLRequestJobFactory::ProtocolHandler>( |
+ pair.second.release()); |
+ } |
+ options->protocol_handlers.clear(); |
// We must create the proxy config service on the UI loop on Linux because it |
// must synchronously run on the glib message loop. This will be passed to |
@@ -181,17 +187,22 @@ HeadlessURLRequestContextGetter::GetURLRequestContext() { |
std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory( |
new net::URLRequestJobFactoryImpl()); |
+ // Install handlers for default protocols which aren't handled by the |
+ // network layer. |
+ if (protocol_handlers_.find(url::kDataScheme) == protocol_handlers_.end()) { |
+ protocol_handlers_[url::kDataScheme] = |
+ linked_ptr<net::URLRequestJobFactory::ProtocolHandler>( |
+ new net::DataProtocolHandler()); |
+ } |
+ if (protocol_handlers_.find(url::kFileScheme) == protocol_handlers_.end()) { |
+ protocol_handlers_[url::kFileScheme] = |
+ linked_ptr<net::URLRequestJobFactory::ProtocolHandler>( |
+ new net::FileProtocolHandler( |
+ content::BrowserThread::GetBlockingPool() |
+ ->GetTaskRunnerWithShutdownBehavior( |
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); |
+ } |
InstallProtocolHandlers(job_factory.get(), &protocol_handlers_); |
- bool set_protocol = job_factory->SetProtocolHandler( |
- url::kDataScheme, base::WrapUnique(new net::DataProtocolHandler)); |
- DCHECK(set_protocol); |
- set_protocol = job_factory->SetProtocolHandler( |
- url::kFileScheme, |
- base::WrapUnique(new net::FileProtocolHandler( |
- content::BrowserThread::GetBlockingPool() |
- ->GetTaskRunnerWithShutdownBehavior( |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)))); |
- DCHECK(set_protocol); |
// Set up interceptors in the reverse order so that the last inceptor is at |
// the end of the linked list of job factories. |