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
AwURLRequestJobFactory()18 AwURLRequestJobFactory::AwURLRequestJobFactory()
19 : next_factory_(new net::URLRequestJobFactoryImpl()) {
20 }
21
~AwURLRequestJobFactory()22 AwURLRequestJobFactory::~AwURLRequestJobFactory() {
23 }
24
IsHandledProtocol(const std::string & scheme) const25 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
IsHandledURL(const GURL & url) const36 bool AwURLRequestJobFactory::IsHandledURL(const GURL& url) const {
37 return true;
38 }
39
MaybeCreateJobWithProtocolHandler(const std::string & scheme,URLRequest * request,NetworkDelegate * network_delegate) const40 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
SetProtocolHandler(const std::string & scheme,ProtocolHandler * protocol_handler)60 bool AwURLRequestJobFactory::SetProtocolHandler(
61 const std::string& scheme,
62 ProtocolHandler* protocol_handler) {
63 return next_factory_->SetProtocolHandler(scheme, protocol_handler);
64 }
65
IsSafeRedirectTarget(const GURL & location) const66 bool AwURLRequestJobFactory::IsSafeRedirectTarget(const GURL& location) const {
67 return next_factory_->IsSafeRedirectTarget(location);
68 }
69
70 } // namespace android_webview
71