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

Side by Side Diff: content/browser/loader/test_resource_handler.cc

Issue 2557433005: Revert of Fix a pair of ResourceLoader cancellation/error bugs. (Closed)
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « content/browser/loader/test_resource_handler.h ('k') | net/url_request/url_request_test_job.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/loader/test_resource_handler.h" 5 #include "content/browser/loader/test_resource_handler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/public/browser/resource_controller.h" 8 #include "net/url_request/url_request_status.h"
9 #include "content/public/common/resource_response.h"
10 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
11 10
12 namespace content { 11 namespace content {
13 12
14 TestResourceHandler::TestResourceHandler(net::URLRequestStatus* request_status, 13 TestResourceHandler::TestResourceHandler(net::URLRequestStatus* request_status,
15 std::string* body) 14 std::string* body)
16 : ResourceHandler(nullptr), 15 : ResourceHandler(nullptr), request_status_(request_status), body_(body) {
17 request_status_ptr_(request_status),
18 body_ptr_(body),
19 deferred_run_loop_(new base::RunLoop()) {
20 SetBufferSize(2048); 16 SetBufferSize(2048);
21 } 17 }
22 18
23 TestResourceHandler::TestResourceHandler() 19 TestResourceHandler::TestResourceHandler()
24 : TestResourceHandler(nullptr, nullptr) {} 20 : TestResourceHandler(nullptr, nullptr) {}
25 21
26 TestResourceHandler::~TestResourceHandler() {} 22 TestResourceHandler::~TestResourceHandler() {}
27 23
28 void TestResourceHandler::SetController(ResourceController* controller) { 24 void TestResourceHandler::SetController(ResourceController* controller) {}
29 controller_ = controller;
30 }
31 25
32 bool TestResourceHandler::OnRequestRedirected( 26 bool TestResourceHandler::OnRequestRedirected(
33 const net::RedirectInfo& redirect_info, 27 const net::RedirectInfo& redirect_info,
34 ResourceResponse* response, 28 ResourceResponse* response,
35 bool* defer) { 29 bool* defer) {
36 EXPECT_FALSE(canceled_); 30 NOTREACHED() << "Redirects are not supported by the TestResourceHandler.";
37 EXPECT_EQ(1, on_will_start_called_); 31 return false;
38 EXPECT_EQ(0, on_response_started_called_);
39 EXPECT_EQ(0, on_response_completed_called_);
40 ++on_request_redirected_called_;
41
42 if (!on_request_redirected_result_) {
43 canceled_ = true;
44 return false;
45 }
46
47 *defer = defer_on_request_redirected_;
48 defer_on_request_redirected_ = false;
49 if (*defer)
50 deferred_run_loop_->Quit();
51 return true;
52 } 32 }
53 33
54 bool TestResourceHandler::OnResponseStarted(ResourceResponse* response, 34 bool TestResourceHandler::OnResponseStarted(ResourceResponse* response,
55 bool* defer) { 35 bool* defer) {
56 EXPECT_FALSE(canceled_);
57 EXPECT_EQ(1, on_will_start_called_); 36 EXPECT_EQ(1, on_will_start_called_);
58 EXPECT_EQ(0, on_response_started_called_); 37 EXPECT_EQ(0, on_response_started_called_);
59 EXPECT_EQ(0, on_response_completed_called_); 38 EXPECT_EQ(0, on_response_completed_called_);
60 ++on_response_started_called_; 39 ++on_response_started_called_;
61 40
62 EXPECT_FALSE(resource_response_); 41 if (!on_response_started_result_)
63 resource_response_ = response;
64
65 if (!on_response_started_result_) {
66 canceled_ = true;
67 return false; 42 return false;
68 }
69
70 *defer = defer_on_response_started_; 43 *defer = defer_on_response_started_;
71 defer_on_response_started_ = false; 44 defer_on_response_started_ = false;
72 if (*defer)
73 deferred_run_loop_->Quit();
74 return true; 45 return true;
75 } 46 }
76 47
77 bool TestResourceHandler::OnWillStart(const GURL& url, bool* defer) { 48 bool TestResourceHandler::OnWillStart(const GURL& url, bool* defer) {
78 EXPECT_FALSE(canceled_);
79 EXPECT_EQ(0, on_response_started_called_); 49 EXPECT_EQ(0, on_response_started_called_);
80 EXPECT_EQ(0, on_will_start_called_); 50 EXPECT_EQ(0, on_will_start_called_);
81 EXPECT_EQ(0, on_response_completed_called_); 51 EXPECT_EQ(0, on_response_completed_called_);
82 ++on_will_start_called_; 52 ++on_will_start_called_;
83 53
84 start_url_ = url; 54 if (!on_will_start_result_)
85
86 if (!on_will_start_result_) {
87 canceled_ = true;
88 return false; 55 return false;
89 }
90 56
91 *defer = defer_on_will_start_; 57 *defer = defer_on_will_start_;
92 if (*defer)
93 deferred_run_loop_->Quit();
94 return true; 58 return true;
95 } 59 }
96 60
97 bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 61 bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
98 int* buf_size, 62 int* buf_size,
99 int min_size) { 63 int min_size) {
100 EXPECT_FALSE(canceled_);
101 EXPECT_FALSE(expect_on_data_downloaded_);
102 EXPECT_EQ(0, on_response_completed_called_); 64 EXPECT_EQ(0, on_response_completed_called_);
103 ++on_will_read_called_; 65 ++on_will_read_called_;
104 66
105 *buf = buffer_; 67 *buf = buffer_;
106 *buf_size = buffer_size_; 68 *buf_size = buffer_size_;
107 memset(buffer_->data(), '\0', buffer_size_); 69 memset(buffer_->data(), '\0', buffer_size_);
108 if (!on_will_read_result_)
109 canceled_ = true;
110 return on_will_read_result_; 70 return on_will_read_result_;
111 } 71 }
112 72
113 bool TestResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { 73 bool TestResourceHandler::OnReadCompleted(int bytes_read, bool* defer) {
114 EXPECT_FALSE(canceled_);
115 EXPECT_FALSE(expect_on_data_downloaded_);
116 EXPECT_EQ(1, on_will_start_called_); 74 EXPECT_EQ(1, on_will_start_called_);
117 EXPECT_EQ(1, on_response_started_called_); 75 EXPECT_EQ(1, on_response_started_called_);
118 EXPECT_EQ(0, on_response_completed_called_); 76 EXPECT_EQ(0, on_response_completed_called_);
119 EXPECT_EQ(0, on_read_eof_);
120
121 ++on_read_completed_called_; 77 ++on_read_completed_called_;
122 if (bytes_read == 0)
123 ++on_read_eof_;
124 78
125 EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_); 79 EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_);
126 if (body_ptr_) 80 if (body_)
127 body_ptr_->append(buffer_->data(), bytes_read); 81 body_->append(buffer_->data(), bytes_read);
128 body_.append(buffer_->data(), bytes_read); 82 if (!on_read_completed_result_)
129
130 if (!on_read_completed_result_ ||
131 (!on_on_read_eof_result_ && bytes_read == 0)) {
132 canceled_ = true;
133 return false; 83 return false;
134 }
135
136 *defer = defer_on_read_completed_; 84 *defer = defer_on_read_completed_;
137 defer_on_read_completed_ = false; 85 defer_on_read_completed_ = false;
138 if (bytes_read == 0 && defer_on_read_eof_)
139 *defer = true;
140
141 if (*defer)
142 deferred_run_loop_->Quit();
143
144 return true; 86 return true;
145 } 87 }
146 88
147 void TestResourceHandler::OnResponseCompleted( 89 void TestResourceHandler::OnResponseCompleted(
148 const net::URLRequestStatus& status, 90 const net::URLRequestStatus& status,
149 bool* defer) { 91 bool* defer) {
150 EXPECT_EQ(0, on_response_completed_called_); 92 EXPECT_EQ(0, on_response_completed_called_);
151 if (status.is_success() && !expect_on_data_downloaded_ && expect_eof_read_)
152 EXPECT_EQ(1, on_read_eof_);
153
154 ++on_response_completed_called_; 93 ++on_response_completed_called_;
155 94
156 if (request_status_ptr_) 95 if (request_status_)
157 *request_status_ptr_ = status; 96 *request_status_ = status;
158 final_status_ = status;
159 *defer = defer_on_response_completed_; 97 *defer = defer_on_response_completed_;
160 defer_on_response_completed_ = false; 98 defer_on_response_completed_ = false;
161
162 if (*defer)
163 deferred_run_loop_->Quit();
164 response_complete_run_loop_.Quit();
165 } 99 }
166 100
167 void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) { 101 void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) {
168 EXPECT_TRUE(expect_on_data_downloaded_); 102 NOTREACHED() << "Saving to file is not supported by the TestResourceHandler.";
169 total_bytes_downloaded_ += bytes_downloaded;
170 }
171
172 void TestResourceHandler::Resume() {
173 controller_->Resume();
174 }
175
176 void TestResourceHandler::CancelWithError(net::Error net_error) {
177 canceled_ = true;
178 controller_->CancelWithError(net_error);
179 } 103 }
180 104
181 void TestResourceHandler::SetBufferSize(int buffer_size) { 105 void TestResourceHandler::SetBufferSize(int buffer_size) {
182 buffer_ = new net::IOBuffer(buffer_size); 106 buffer_ = new net::IOBuffer(buffer_size);
183 buffer_size_ = buffer_size; 107 buffer_size_ = buffer_size;
184 memset(buffer_->data(), '\0', buffer_size); 108 memset(buffer_->data(), '\0', buffer_size);
185 } 109 }
186 110
187 void TestResourceHandler::WaitUntilDeferred() {
188 deferred_run_loop_->Run();
189 deferred_run_loop_.reset(new base::RunLoop());
190 }
191
192 void TestResourceHandler::WaitUntilResponseComplete() {
193 response_complete_run_loop_.Run();
194 }
195
196 } // namespace content 111 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/test_resource_handler.h ('k') | net/url_request/url_request_test_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698