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