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_H_
6#define NET_URL_REQUEST_URL_REQUEST_JOB_FACTORY_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/compiler_specific.h"
12#include "base/threading/non_thread_safe.h"
13#include "net/base/net_export.h"
14
15class GURL;
16
17namespace net {
18
19class NetworkDelegate;
20class URLRequest;
21class URLRequestJob;
22
23class NET_EXPORT URLRequestJobFactory
24    : NON_EXPORTED_BASE(public base::NonThreadSafe) {
25 public:
26  // TODO(shalev): Move this to URLRequestJobFactoryImpl.
27  class NET_EXPORT ProtocolHandler {
28   public:
29    virtual ~ProtocolHandler();
30
31    virtual URLRequestJob* MaybeCreateJob(
32        URLRequest* request, NetworkDelegate* network_delegate) const = 0;
33
34    // Indicates if it should be safe to redirect to |location|. Should handle
35    // protocols handled by MaybeCreateJob().  Only called when registered with
36    // URLRequestJobFactoryImpl::SetProtocolHandler() not called when used with
37    // ProtocolInterceptJobFactory.
38    // NOTE(pauljensen): Default implementation returns true.
39    virtual bool IsSafeRedirectTarget(const GURL& location) const;
40  };
41
42  URLRequestJobFactory();
43  virtual ~URLRequestJobFactory();
44
45  virtual URLRequestJob* MaybeCreateJobWithProtocolHandler(
46      const std::string& scheme,
47      URLRequest* request,
48      NetworkDelegate* network_delegate) const = 0;
49
50  virtual bool IsHandledProtocol(const std::string& scheme) const = 0;
51
52  virtual bool IsHandledURL(const GURL& url) const = 0;
53
54  virtual bool IsSafeRedirectTarget(const GURL& location) const = 0;
55
56 private:
57  DISALLOW_COPY_AND_ASSIGN(URLRequestJobFactory);
58};
59
60}  // namespace net
61
62#endif  // NET_URL_REQUEST_URL_REQUEST_JOB_FACTORY_H_
63