url_request_mock_http_job.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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// A URLRequestJob class that pulls the net and http headers from disk.
6
7#ifndef NET_TEST_URL_REQUEST_URL_REQUEST_MOCK_HTTP_JOB_H_
8#define NET_TEST_URL_REQUEST_URL_REQUEST_MOCK_HTTP_JOB_H_
9
10#include <string>
11
12#include "base/macros.h"
13#include "base/memory/ref_counted.h"
14#include "base/memory/scoped_ptr.h"
15#include "net/url_request/url_request_file_job.h"
16#include "url/gurl.h"
17
18namespace base {
19class FilePath;
20class SequencedWorkerPool;
21}
22
23namespace net {
24class URLRequestInterceptor;
25}
26
27namespace net {
28
29class URLRequestMockHTTPJob : public URLRequestFileJob {
30 public:
31  // Note that all file IO is done using |worker_pool|.
32  URLRequestMockHTTPJob(URLRequest* request,
33                        NetworkDelegate* network_delegate,
34                        const base::FilePath& file_path,
35                        const scoped_refptr<base::TaskRunner>& task_runner);
36
37  virtual void Start() OVERRIDE;
38  virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
39  virtual int GetResponseCode() const OVERRIDE;
40  virtual bool GetCharset(std::string* charset) OVERRIDE;
41  virtual void GetResponseInfo(HttpResponseInfo* info) OVERRIDE;
42  virtual bool IsRedirectResponse(GURL* location,
43                                  int* http_status_code) OVERRIDE;
44
45  // Adds the testing URLs to the URLRequestFilter.
46  static void AddUrlHandler(
47      const base::FilePath& base_path,
48      const scoped_refptr<base::SequencedWorkerPool>& worker_pool);
49
50  // Respond to all HTTP requests of |hostname| with contents of the file
51  // located at |file_path|.
52  static void AddHostnameToFileHandler(
53      const std::string& hostname,
54      const base::FilePath& file,
55      const scoped_refptr<base::SequencedWorkerPool>& worker_pool);
56
57  // Given the path to a file relative to the path passed to AddUrlHandler(),
58  // construct a mock URL.
59  static GURL GetMockUrl(const base::FilePath& path);
60
61  // Returns a URLRequestJobFactory::ProtocolHandler that serves
62  // URLRequestMockHTTPJob's responding like an HTTP server. |base_path| is the
63  // file path leading to the root of the directory to use as the root of the
64  // HTTP server.
65  static scoped_ptr<URLRequestInterceptor> CreateInterceptor(
66      const base::FilePath& base_path,
67      const scoped_refptr<base::SequencedWorkerPool>& worker_pool);
68
69  // Returns a URLRequestJobFactory::ProtocolHandler that serves
70  // URLRequestMockHTTPJob's responding like an HTTP server. It responds to all
71  // requests with the contents of |file|.
72  static scoped_ptr<URLRequestInterceptor> CreateInterceptorForSingleFile(
73      const base::FilePath& file,
74      const scoped_refptr<base::SequencedWorkerPool>& worker_pool);
75
76 protected:
77  virtual ~URLRequestMockHTTPJob();
78
79 private:
80  void GetResponseInfoConst(HttpResponseInfo* info) const;
81  void GetRawHeaders(std::string raw_headers);
82  std::string raw_headers_;
83  const scoped_refptr<base::TaskRunner> task_runner_;
84
85  base::WeakPtrFactory<URLRequestMockHTTPJob> weak_ptr_factory_;
86
87  DISALLOW_COPY_AND_ASSIGN(URLRequestMockHTTPJob);
88};
89
90}  // namespace net
91
92#endif  // NET_TEST_URL_REQUEST_URL_REQUEST_MOCK_HTTP_JOB_H_
93