Chromium Code Reviews| Index: net/url_request/url_request_filter.cc |
| diff --git a/net/url_request/url_request_filter.cc b/net/url_request/url_request_filter.cc |
| index 01b6069107282999088a9e32ce6d4cfae62557f1..37530078837006f4c382de1d41f99d7834322803 100644 |
| --- a/net/url_request/url_request_filter.cc |
| +++ b/net/url_request/url_request_filter.cc |
| @@ -10,6 +10,18 @@ |
| namespace net { |
| +namespace { |
| + |
| +URLRequestJob* ProtocolHandlerFactory( |
| + URLRequestJobFactory::ProtocolHandler* protocol_handler, |
| + URLRequest* request, |
| + NetworkDelegate* network_delegate, |
| + const std::string& scheme) { |
| + return protocol_handler->MaybeCreateJob(request, network_delegate); |
| +} |
| + |
| +} // namespace |
| + |
| URLRequestFilter* URLRequestFilter::shared_instance_ = NULL; |
| URLRequestFilter::~URLRequestFilter() {} |
|
mmenke
2012/12/13 16:12:04
Once we can safely do it, may want to CHECK that t
pauljensen
2012/12/17 01:38:35
~URLRequestFilter() is never hit :'(
We could thro
mmenke
2012/12/18 20:32:15
SGTM. I forgot that we leak singletons.
|
| @@ -31,7 +43,23 @@ URLRequestFilter* URLRequestFilter::GetInstance() { |
| void URLRequestFilter::AddHostnameHandler(const std::string& scheme, |
| const std::string& hostname, URLRequest::ProtocolFactory* factory) { |
| - hostname_handler_map_[make_pair(scheme, hostname)] = factory; |
| + AddHostnameCallback(scheme, hostname, base::Bind(factory)); |
| +} |
| + |
| +void URLRequestFilter::AddHostnameProtocolHandler( |
| + const std::string& scheme, |
| + const std::string& hostname, |
| + URLRequestJobFactory::ProtocolHandler* protocol_handler) { |
| + AddHostnameCallback(scheme, hostname, base::Bind(ProtocolHandlerFactory, |
| + protocol_handler)); |
| +} |
| + |
| +void URLRequestFilter::AddHostnameCallback( |
| + const std::string& scheme, |
| + const std::string& hostname, |
| + base::Callback<URLRequest::ProtocolFactory> callback) { |
| + DCHECK(hostname_handler_map_.count(make_pair(scheme, hostname)) == 0); |
|
mmenke
2012/12/13 16:12:04
DCHECK_EQ(0u, ...) is preferred
|
| + hostname_handler_map_[make_pair(scheme, hostname)] = callback; |
| // Register with the ProtocolFactory. |
| URLRequest::Deprecated::RegisterProtocolFactory( |
| @@ -68,6 +96,7 @@ bool URLRequestFilter::AddUrlHandler( |
| URLRequest::ProtocolFactory* factory) { |
| if (!url.is_valid()) |
| return false; |
| + DCHECK(url_handler_map_.count(url.spec()) == 0); |
|
mmenke
2012/12/13 16:12:04
DCHECK_EQ(0u, ...) is preferred
|
| url_handler_map_[url.spec()] = factory; |
| // Register with the ProtocolFactory. |
| @@ -130,7 +159,7 @@ URLRequestJob* URLRequestFilter::FindRequestHandler( |
| HostnameHandlerMap::iterator i = |
| hostname_handler_map_.find(make_pair(scheme, hostname)); |
| if (i != hostname_handler_map_.end()) |
| - job = i->second(request, network_delegate, scheme); |
| + job = i->second.Run(request, network_delegate, scheme); |
| if (!job) { |
| // Not in the hostname map, check the url map. |