Add InterceptProtocol AtomURLRequestJobFactory.
authorCheng Zhao <zcbenz@gmail.com>
Fri, 30 Aug 2013 13:15:46 +0000 (21:15 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Fri, 30 Aug 2013 13:15:46 +0000 (21:15 +0800)
browser/net/atom_url_request_job_factory.cc
browser/net/atom_url_request_job_factory.h

index a2c8f76..f32a3ee 100644 (file)
@@ -12,6 +12,8 @@
 
 namespace atom {
 
+typedef net::URLRequestJobFactory::ProtocolHandler ProtocolHandler;
+
 AtomURLRequestJobFactory::AtomURLRequestJobFactory() {}
 
 AtomURLRequestJobFactory::~AtomURLRequestJobFactory() {
@@ -39,6 +41,19 @@ bool AtomURLRequestJobFactory::SetProtocolHandler(
   return true;
 }
 
+ProtocolHandler* AtomURLRequestJobFactory::InterceptProtocol(
+    const std::string& scheme,
+    ProtocolHandler* protocol_handler) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(protocol_handler);
+
+  if (!ContainsKey(protocol_handler_map_, scheme))
+    return NULL;
+  ProtocolHandler* original_protocol_handler = protocol_handler_map_[scheme];
+  protocol_handler_map_[scheme] = protocol_handler;
+  return original_protocol_handler;
+}
+
 net::URLRequestJob* AtomURLRequestJobFactory::MaybeCreateJobWithProtocolHandler(
     const std::string& scheme,
     net::URLRequest* request,
index 989e5e8..8fa5d5b 100644 (file)
@@ -26,6 +26,11 @@ class AtomURLRequestJobFactory : public net::URLRequestJobFactory {
   bool SetProtocolHandler(const std::string& scheme,
                           ProtocolHandler* protocol_handler);
 
+  // Intercepts the ProtocolHandler for a scheme. Returns the original protocol
+  // handler on success, otherwise returns NULL.
+  ProtocolHandler* InterceptProtocol(const std::string& scheme,
+                                     ProtocolHandler* protocol_handler);
+
   // URLRequestJobFactory implementation
   virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler(
       const std::string& scheme,