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