url_request_job_factory_impl.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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 16namespace net { 17 18class URLRequestInterceptor; 19 20class 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