13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/net/url_request_slow_http_job.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/time.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/url_request/url_request_filter.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const char kMockHostname[] = "mock.slow.http";
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFilePath URLRequestSlowHTTPJob::base_path_;
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int URLRequestSlowHTTPJob::kDelayMs = 1000;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::TimeDelta;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/* static */
2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennet::URLRequestJob* URLRequestSlowHTTPJob::Factory(net::URLRequest* request,
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                                   const std::string& scheme) {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return new URLRequestSlowHTTPJob(request,
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   GetOnDiskPath(base_path_, request, scheme));
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/* static */
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRequestSlowHTTPJob::AddUrlHandler(const FilePath& base_path) {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base_path_ = base_path;
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
313f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // Add kMockHostname to net::URLRequestFilter.
323f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance();
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  filter->AddHostnameHandler("http", kMockHostname,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             URLRequestSlowHTTPJob::Factory);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/* static */
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGURL URLRequestSlowHTTPJob::GetMockUrl(const FilePath& path) {
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string url = "http://";
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  url.append(kMockHostname);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  url.append("/");
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  std::string path_str = path.MaybeAsASCII();
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DCHECK(!path_str.empty());  // We only expect ASCII paths in tests.
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  url.append(path_str);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return GURL(url);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenURLRequestSlowHTTPJob::URLRequestSlowHTTPJob(net::URLRequest* request,
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                             const FilePath& file_path)
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : URLRequestMockHTTPJob(request, file_path) { }
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRequestSlowHTTPJob::Start() {
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  delay_timer_.Start(TimeDelta::FromMilliseconds(kDelayMs), this,
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     &URLRequestSlowHTTPJob::RealStart);
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickURLRequestSlowHTTPJob::~URLRequestSlowHTTPJob() {
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid URLRequestSlowHTTPJob::RealStart() {
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  URLRequestMockHTTPJob::Start();
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
63