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 12using net::NetworkDelegate; 13using net::URLRequest; 14using net::URLRequestJob; 15 16namespace android_webview { 17 18AwURLRequestJobFactory::AwURLRequestJobFactory() 19 : next_factory_(new net::URLRequestJobFactoryImpl()) { 20} 21 22AwURLRequestJobFactory::~AwURLRequestJobFactory() { 23} 24 25bool 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 36bool AwURLRequestJobFactory::IsHandledURL(const GURL& url) const { 37 return true; 38} 39 40URLRequestJob* 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 60bool AwURLRequestJobFactory::SetProtocolHandler( 61 const std::string& scheme, 62 ProtocolHandler* protocol_handler) { 63 return next_factory_->SetProtocolHandler(scheme, protocol_handler); 64} 65 66bool AwURLRequestJobFactory::IsSafeRedirectTarget(const GURL& location) const { 67 return next_factory_->IsSafeRedirectTarget(location); 68} 69 70} // namespace android_webview 71