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#ifndef NET_URL_REQUEST_FILE_PROTOCOL_HANDLER_H_
6#define NET_URL_REQUEST_FILE_PROTOCOL_HANDLER_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/memory/ref_counted.h"
11#include "net/url_request/url_request_job_factory.h"
12
13class GURL;
14
15namespace base {
16class TaskRunner;
17}
18
19namespace net {
20
21class NetworkDelegate;
22class URLRequestJob;
23
24// Implements a ProtocolHandler for File jobs. If |network_delegate_| is NULL,
25// then all file requests will fail with ERR_ACCESS_DENIED.
26class NET_EXPORT FileProtocolHandler :
27    public URLRequestJobFactory::ProtocolHandler {
28 public:
29  explicit FileProtocolHandler(
30      const scoped_refptr<base::TaskRunner>& file_task_runner);
31  virtual ~FileProtocolHandler();
32  virtual URLRequestJob* MaybeCreateJob(
33      URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE;
34  virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE;
35
36 private:
37  const scoped_refptr<base::TaskRunner> file_task_runner_;
38  DISALLOW_COPY_AND_ASSIGN(FileProtocolHandler);
39};
40
41}  // namespace net
42
43#endif  // NET_URL_REQUEST_FILE_PROTOCOL_HANDLER_H_
44