1 // Copyright (c) 2012 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 #include "android_webview/browser/net/aw_url_request_job_factory.h" 6 7 #include "net/base/net_errors.h" 8 #include "net/url_request/url_request_error_job.h" 9 #include "net/url_request/url_request_job_factory_impl.h" 10 #include "net/url_request/url_request_job_manager.h" 11 12 using net::NetworkDelegate; 13 using net::URLRequest; 14 using net::URLRequestJob; 15 16 namespace android_webview { 17 18 AwURLRequestJobFactory::AwURLRequestJobFactory() 19 : next_factory_(new net::URLRequestJobFactoryImpl()) { 20 } 21 22 AwURLRequestJobFactory::~AwURLRequestJobFactory() { 23 } 24 25 bool AwURLRequestJobFactory::IsHandledProtocol( 26 const std::string& scheme) const { 27 // This introduces a dependency on the URLRequestJobManager 28 // implementation. The assumption is that if true is returned from this 29 // method it is still valid to return NULL from the 30 // MaybeCreateJobWithProtocolHandler method and in that case the 31 // URLRequestJobManager will try and create the URLRequestJob by using the 32 // set of built in handlers. 33 return true; 34 } 35 36 bool AwURLRequestJobFactory::IsHandledURL(const GURL& url) const { 37 return true; 38 } 39 40 URLRequestJob* AwURLRequestJobFactory::MaybeCreateJobWithProtocolHandler( 41 const std::string& scheme, 42 URLRequest* request, 43 NetworkDelegate* network_delegate) const { 44 URLRequestJob* job = next_factory_->MaybeCreateJobWithProtocolHandler( 45 scheme, request, network_delegate); 46 47 if (job) 48 return job; 49 50 // If URLRequest supports the scheme NULL should be returned from this method. 51 // In that case the built in handlers will then be used to create the job. 52 // NOTE(joth): See the assumption in IsHandledProtocol above. 53 if (net::URLRequest::IsHandledProtocol(scheme)) 54 return NULL; 55 56 return new net::URLRequestErrorJob( 57 request, network_delegate, net::ERR_UNKNOWN_URL_SCHEME); 58 } 59 60 bool AwURLRequestJobFactory::SetProtocolHandler( 61 const std::string& scheme, 62 ProtocolHandler* protocol_handler) { 63 return next_factory_->SetProtocolHandler(scheme, protocol_handler); 64 } 65 66 bool AwURLRequestJobFactory::IsSafeRedirectTarget(const GURL& location) const { 67 return next_factory_->IsSafeRedirectTarget(location); 68 } 69 70 } // namespace android_webview 71