Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(651)

Unified Diff: net/url_request/url_request_test_job.cc

Issue 2552463002: Add more ResourceLoaderTests (Closed)
Patch Set: Fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/url_request/url_request_test_job.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_request_test_job.cc
diff --git a/net/url_request/url_request_test_job.cc b/net/url_request/url_request_test_job.cc
index 42e8c68fb1d85435e7e05e4ab65aa35f5138de26..ab359b4e67babfd1ae41f4900b1497b593c834b3 100644
--- a/net/url_request/url_request_test_job.cc
+++ b/net/url_request/url_request_test_job.cc
@@ -44,21 +44,31 @@ class TestJobProtocolHandler : public URLRequestJobFactory::ProtocolHandler {
GURL URLRequestTestJob::test_url_1() {
return GURL("test:url1");
}
+
GURL URLRequestTestJob::test_url_2() {
return GURL("test:url2");
}
+
GURL URLRequestTestJob::test_url_3() {
return GURL("test:url3");
}
+
GURL URLRequestTestJob::test_url_4() {
return GURL("test:url4");
}
+
+GURL URLRequestTestJob::test_url_auto_advance_async_reads_1() {
+ return GURL("test:url_auto_advance_async_reads_1");
+}
+
GURL URLRequestTestJob::test_url_error() {
return GURL("test:error");
}
+
GURL URLRequestTestJob::test_url_redirect_to_url_1() {
return GURL("test:redirect_to_1");
}
+
GURL URLRequestTestJob::test_url_redirect_to_url_2() {
return GURL("test:redirect_to_2");
}
@@ -133,15 +143,7 @@ URLRequestTestJob::CreateProtocolHandler() {
URLRequestTestJob::URLRequestTestJob(URLRequest* request,
NetworkDelegate* network_delegate)
- : URLRequestJob(request, network_delegate),
- auto_advance_(false),
- stage_(WAITING),
- priority_(DEFAULT_PRIORITY),
- offset_(0),
- async_buf_(NULL),
- async_buf_size_(0),
- response_headers_length_(0),
- weak_factory_(this) {}
+ : URLRequestTestJob(request, network_delegate, false) {}
URLRequestTestJob::URLRequestTestJob(URLRequest* request,
NetworkDelegate* network_delegate,
@@ -154,6 +156,7 @@ URLRequestTestJob::URLRequestTestJob(URLRequest* request,
async_buf_(NULL),
async_buf_size_(0),
response_headers_length_(0),
+ async_reads_(false),
weak_factory_(this) {}
URLRequestTestJob::URLRequestTestJob(URLRequest* request,
@@ -167,12 +170,13 @@ URLRequestTestJob::URLRequestTestJob(URLRequest* request,
priority_(DEFAULT_PRIORITY),
response_data_(response_data),
offset_(0),
- async_buf_(NULL),
+ async_buf_(nullptr),
async_buf_size_(0),
response_headers_(new net::HttpResponseHeaders(
net::HttpUtil::AssembleRawHeaders(response_headers.c_str(),
response_headers.size()))),
response_headers_length_(response_headers.size()),
+ async_reads_(false),
weak_factory_(this) {}
URLRequestTestJob::~URLRequestTestJob() {
@@ -204,18 +208,22 @@ void URLRequestTestJob::Start() {
void URLRequestTestJob::StartAsync() {
if (!response_headers_.get()) {
SetResponseHeaders(test_headers());
- if (request_->url().spec() == test_url_1().spec()) {
+ if (request_->url() == test_url_1()) {
response_data_ = test_data_1();
stage_ = DATA_AVAILABLE; // Simulate a synchronous response for this one.
- } else if (request_->url().spec() == test_url_2().spec()) {
+ } else if (request_->url() == test_url_2()) {
response_data_ = test_data_2();
- } else if (request_->url().spec() == test_url_3().spec()) {
+ } else if (request_->url() == test_url_3()) {
response_data_ = test_data_3();
- } else if (request_->url().spec() == test_url_4().spec()) {
+ } else if (request_->url() == test_url_4()) {
response_data_ = test_data_4();
- } else if (request_->url().spec() == test_url_redirect_to_url_1().spec()) {
+ } else if (request_->url() == test_url_auto_advance_async_reads_1()) {
+ response_data_ = test_data_1();
+ stage_ = DATA_AVAILABLE; // Data is available immediately.
+ async_reads_ = true; // All reads complete asynchronously.
+ } else if (request_->url() == test_url_redirect_to_url_1()) {
SetResponseHeaders(test_redirect_to_url_1_headers());
- } else if (request_->url().spec() == test_url_redirect_to_url_2().spec()) {
+ } else if (request_->url() == test_url_redirect_to_url_2()) {
SetResponseHeaders(test_redirect_to_url_2_headers());
} else {
AdvanceJob();
@@ -243,24 +251,33 @@ void URLRequestTestJob::SetResponseHeaders(
response_headers_length_ = response_headers.size();
}
+int URLRequestTestJob::CopyDataForRead(IOBuffer* buf, int buf_size) {
+ int bytes_read = 0;
+ if (offset_ < static_cast<int>(response_data_.length())) {
+ bytes_read = buf_size;
+ if (bytes_read + offset_ > static_cast<int>(response_data_.length()))
+ bytes_read = static_cast<int>(response_data_.length()) - offset_;
+
+ memcpy(buf->data(), &response_data_.c_str()[offset_], bytes_read);
+ offset_ += bytes_read;
+ }
+ return bytes_read;
+}
+
int URLRequestTestJob::ReadRawData(IOBuffer* buf, int buf_size) {
- if (stage_ == WAITING) {
+ if (stage_ == WAITING || async_reads_) {
async_buf_ = buf;
async_buf_size_ = buf_size;
+ if (stage_ != WAITING) {
+ stage_ = WAITING;
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&URLRequestTestJob::ProcessNextOperation,
+ weak_factory_.GetWeakPtr()));
+ }
return ERR_IO_PENDING;
}
- if (offset_ >= static_cast<int>(response_data_.length()))
- return 0; // done reading
-
- int to_read = buf_size;
- if (to_read + offset_ > static_cast<int>(response_data_.length()))
- to_read = static_cast<int>(response_data_.length()) - offset_;
-
- memcpy(buf->data(), &response_data_.c_str()[offset_], to_read);
- offset_ += to_read;
-
- return to_read;
+ return CopyDataForRead(buf, buf_size);
}
void URLRequestTestJob::GetResponseInfo(HttpResponseInfo* info) {
@@ -322,7 +339,7 @@ void URLRequestTestJob::ProcessNextOperation() {
stage_ = DATA_AVAILABLE;
// OK if ReadRawData wasn't called yet.
if (async_buf_) {
- int result = ReadRawData(async_buf_, async_buf_size_);
+ int result = CopyDataForRead(async_buf_, async_buf_size_);
if (result < 0)
NOTREACHED() << "Reads should not fail in DATA_AVAILABLE.";
if (NextReadAsync()) {
« no previous file with comments | « net/url_request/url_request_test_job.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698