diff --git a/browser/api/atom_api_protocol.cc b/browser/api/atom_api_protocol.cc index 41d223387c5a..105badc58f89 100644 --- a/browser/api/atom_api_protocol.cc +++ b/browser/api/atom_api_protocol.cc @@ -4,14 +4,46 @@ #include "browser/api/atom_api_protocol.h" +#include "browser/atom_browser_context.h" #include "content/public/browser/browser_thread.h" -#include "net/url_request/url_request_job_manager.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_getter.h" +#include "net/url_request/url_request_job_factory_impl.h" #include "vendor/node/src/node.h" namespace atom { namespace api { +namespace { + +net::URLRequestJobFactoryImpl* GetRequestJobFactory() { + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); + // Get the job factory. + net::URLRequestJobFactoryImpl* job_factory = + static_cast( + const_cast( + static_cast(AtomBrowserContext::Get())-> + GetRequestContext()->GetURLRequestContext()->job_factory())); + return job_factory; +} + +class AdapterProtocolHandler + : public net::URLRequestJobFactory::ProtocolHandler { + public: + AdapterProtocolHandler() {} + virtual net::URLRequestJob* MaybeCreateJob( + net::URLRequest* request, + net::NetworkDelegate* network_delegate) const OVERRIDE { + return NULL; + } + + private: + DISALLOW_COPY_AND_ASSIGN(AdapterProtocolHandler); +}; + +} // namespace + Protocol::HandlersMap Protocol::handlers_; // static @@ -53,11 +85,15 @@ v8::Handle Protocol::UnregisterProtocol(const v8::Arguments& args) { // static void Protocol::RegisterProtocolInIO(const std::string& scheme) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); + net::URLRequestJobFactoryImpl* job_factory(GetRequestJobFactory()); + job_factory->SetProtocolHandler(scheme, new AdapterProtocolHandler); } // static void Protocol::UnregisterProtocolInIO(const std::string& scheme) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); + net::URLRequestJobFactoryImpl* job_factory(GetRequestJobFactory()); + job_factory->SetProtocolHandler(scheme, NULL); } // static