| Index: content/test/net/url_request_slow_download_job.cc
|
| diff --git a/content/test/net/url_request_slow_download_job.cc b/content/test/net/url_request_slow_download_job.cc
|
| index ca1ccc039337c305e53f47837f8b845cc579b373..62e382903d52e6d4ac5433da5805261ece4bb7b4 100644
|
| --- a/content/test/net/url_request_slow_download_job.cc
|
| +++ b/content/test/net/url_request_slow_download_job.cc
|
| @@ -13,6 +13,7 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "googleurl/src/gurl.h"
|
| #include "net/base/io_buffer.h"
|
| +#include "net/base/net_errors.h"
|
| #include "net/http/http_response_headers.h"
|
| #include "net/url_request/url_request.h"
|
| #include "net/url_request/url_request_filter.h"
|
| @@ -25,6 +26,8 @@ const char URLRequestSlowDownloadJob::kKnownSizeUrl[] =
|
| "http://url.handled.by.slow.download/download-known-size";
|
| const char URLRequestSlowDownloadJob::kFinishDownloadUrl[] =
|
| "http://url.handled.by.slow.download/download-finish";
|
| +const char URLRequestSlowDownloadJob::kErrorDownloadUrl[] =
|
| + "http://url.handled.by.slow.download/download-error";
|
|
|
| const int URLRequestSlowDownloadJob::kFirstDownloadSize = 1024 * 35;
|
| const int URLRequestSlowDownloadJob::kSecondDownloadSize = 1024 * 10;
|
| @@ -49,6 +52,8 @@ void URLRequestSlowDownloadJob::AddUrlHandler() {
|
| &URLRequestSlowDownloadJob::Factory);
|
| filter->AddUrlHandler(GURL(kFinishDownloadUrl),
|
| &URLRequestSlowDownloadJob::Factory);
|
| + filter->AddUrlHandler(GURL(kErrorDownloadUrl),
|
| + &URLRequestSlowDownloadJob::Factory);
|
| }
|
|
|
| // static
|
| @@ -59,7 +64,8 @@ net::URLRequestJob* URLRequestSlowDownloadJob::Factory(
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| URLRequestSlowDownloadJob* job = new URLRequestSlowDownloadJob(
|
| request, network_delegate);
|
| - if (request->url().spec() != kFinishDownloadUrl)
|
| + if (request->url().spec() != kFinishDownloadUrl &&
|
| + request->url().spec() != kErrorDownloadUrl)
|
| pending_requests_.Get().insert(job);
|
| return job;
|
| }
|
| @@ -80,10 +86,20 @@ void URLRequestSlowDownloadJob::FinishPendingRequests() {
|
| }
|
| }
|
|
|
| +void URLRequestSlowDownloadJob::ErrorPendingRequests() {
|
| + typedef std::set<URLRequestSlowDownloadJob*> JobList;
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| + for (JobList::iterator it = pending_requests_.Get().begin(); it !=
|
| + pending_requests_.Get().end(); ++it) {
|
| + (*it)->set_should_error_download();
|
| + }
|
| +}
|
| +
|
| URLRequestSlowDownloadJob::URLRequestSlowDownloadJob(
|
| net::URLRequest* request, net::NetworkDelegate* network_delegate)
|
| : net::URLRequestJob(request, network_delegate),
|
| bytes_already_sent_(0),
|
| + should_error_download_(false),
|
| should_finish_download_(false),
|
| buffer_size_(0),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
|
| @@ -92,6 +108,8 @@ URLRequestSlowDownloadJob::URLRequestSlowDownloadJob(
|
| void URLRequestSlowDownloadJob::StartAsync() {
|
| if (LowerCaseEqualsASCII(kFinishDownloadUrl, request_->url().spec().c_str()))
|
| URLRequestSlowDownloadJob::FinishPendingRequests();
|
| + if (LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str()))
|
| + URLRequestSlowDownloadJob::ErrorPendingRequests();
|
|
|
| NotifyHeadersComplete();
|
| }
|
| @@ -150,8 +168,10 @@ URLRequestSlowDownloadJob::FillBufferHelper(
|
| bool URLRequestSlowDownloadJob::ReadRawData(net::IOBuffer* buf, int buf_size,
|
| int* bytes_read) {
|
| if (LowerCaseEqualsASCII(kFinishDownloadUrl,
|
| + request_->url().spec().c_str()) ||
|
| + LowerCaseEqualsASCII(kErrorDownloadUrl,
|
| request_->url().spec().c_str())) {
|
| - VLOG(10) << __FUNCTION__ << " called w/ kFinishDownloadUrl.";
|
| + VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl.";
|
| *bytes_read = 0;
|
| return true;
|
| }
|
| @@ -190,6 +210,10 @@ void URLRequestSlowDownloadJob::CheckDoneStatus() {
|
| buffer_ = NULL; // Release the reference.
|
| SetStatus(net::URLRequestStatus());
|
| NotifyReadComplete(bytes_written);
|
| + } else if (should_error_download_) {
|
| + VLOG(10) << __FUNCTION__ << " called w/ should_finish_ownload_ set.";
|
| + NotifyDone(net::URLRequestStatus(
|
| + net::URLRequestStatus::FAILED, net::ERR_CONNECTION_RESET));
|
| } else {
|
| MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE,
|
| @@ -216,6 +240,8 @@ void URLRequestSlowDownloadJob::GetResponseInfoConst(
|
| // Send back mock headers.
|
| std::string raw_headers;
|
| if (LowerCaseEqualsASCII(kFinishDownloadUrl,
|
| + request_->url().spec().c_str()) ||
|
| + LowerCaseEqualsASCII(kErrorDownloadUrl,
|
| request_->url().spec().c_str())) {
|
| raw_headers.append(
|
| "HTTP/1.1 200 OK\n"
|
|
|