121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian 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// This class simulates a slow download. This used in a UI test to test the 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// download manager. Requests to |kUnknownSizeUrl| and |kKnownSizeUrl| start 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// downloads that pause after the first 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_NET_URL_REQUEST_SLOW_DOWNLOAD_JOB_H_ 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_NET_URL_REQUEST_SLOW_DOWNLOAD_JOB_H_ 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/task.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/url_request/url_request_job.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass URLRequestSlowDownloadJob : public net::URLRequestJob { 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch explicit URLRequestSlowDownloadJob(net::URLRequest* request); 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Timer callback, used to check to see if we should finish our download and 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // send the second chunk. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CheckDoneStatus(); 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // net::URLRequestJob methods 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Start(); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool GetMimeType(std::string* mime_type) const; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void GetResponseInfo(net::HttpResponseInfo* info); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int *bytes_read); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch static net::URLRequestJob* Factory(net::URLRequest* request, 33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& scheme); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test URLs. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const char kUnknownSizeUrl[]; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const char kKnownSizeUrl[]; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const char kFinishDownloadUrl[]; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // Adds the testing URLs to the net::URLRequestFilter. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void AddUrlHandler(); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ~URLRequestSlowDownloadJob(); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GetResponseInfoConst(net::HttpResponseInfo* info) const; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Mark all pending requests to be finished. We keep track of pending 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // requests in |kPendingRequests|. 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void FinishPendingRequests(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static std::vector<URLRequestSlowDownloadJob*> kPendingRequests; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void StartAsync(); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_should_finish_download() { should_finish_download_ = true; } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int first_download_size_remaining_; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool should_finish_download_; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool should_send_second_chunk_; 6021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ScopedRunnableMethodFactory<URLRequestSlowDownloadJob> method_factory_; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_NET_URL_REQUEST_SLOW_DOWNLOAD_JOB_H_ 65