1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_URL_REQUEST_URL_REQUEST_JOB_FACTORY_IMPL_H_ 6 #define NET_URL_REQUEST_URL_REQUEST_JOB_FACTORY_IMPL_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "net/base/net_export.h" 14 #include "net/url_request/url_request_job_factory.h" 15 16 namespace net { 17 18 class URLRequestInterceptor; 19 20 class NET_EXPORT URLRequestJobFactoryImpl : public URLRequestJobFactory { 21 public: 22 URLRequestJobFactoryImpl(); 23 virtual ~URLRequestJobFactoryImpl(); 24 25 // Sets the ProtocolHandler for a scheme. Returns true on success, false on 26 // failure (a ProtocolHandler already exists for |scheme|). On success, 27 // URLRequestJobFactory takes ownership of |protocol_handler|. 28 bool SetProtocolHandler(const std::string& scheme, 29 ProtocolHandler* protocol_handler); 30 31 // URLRequestJobFactory implementation 32 virtual URLRequestJob* MaybeCreateJobWithProtocolHandler( 33 const std::string& scheme, 34 URLRequest* request, 35 NetworkDelegate* network_delegate) const OVERRIDE; 36 virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE; 37 virtual bool IsHandledURL(const GURL& url) const OVERRIDE; 38 virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE; 39 40 private: 41 // For testing only. 42 friend class URLRequestFilter; 43 44 typedef std::map<std::string, ProtocolHandler*> ProtocolHandlerMap; 45 46 // Sets a global URLRequestInterceptor for testing purposes. The interceptor 47 // is given the chance to intercept any request before the corresponding 48 // ProtocolHandler, but after any other URLRequestJobFactories layered on top 49 // of the URLRequestJobFactoryImpl. 50 // If an interceptor is set, the old interceptor must be cleared before 51 // setting a new one. 52 static void SetInterceptorForTesting(URLRequestInterceptor* interceptor); 53 54 ProtocolHandlerMap protocol_handler_map_; 55 56 DISALLOW_COPY_AND_ASSIGN(URLRequestJobFactoryImpl); 57 }; 58 59 } // namespace net 60 61 #endif // NET_URL_REQUEST_URL_REQUEST_JOB_FACTORY_IMPL_H_ 62