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

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

Issue 2526983002: Refactor ResourceHandler API. (Closed)
Patch Set: Response to comments Created 3 years, 10 months 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
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/browser/loader/resource_controller.h" 8 #include "content/browser/loader/resource_controller.h"
9 #include "content/public/common/resource_response.h" 9 #include "content/public/common/resource_response.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 30 matching lines...) Expand all
41 deferred_run_loop_(new base::RunLoop()), 41 deferred_run_loop_(new base::RunLoop()),
42 weak_ptr_factory_(this) { 42 weak_ptr_factory_(this) {
43 SetBufferSize(2048); 43 SetBufferSize(2048);
44 } 44 }
45 45
46 TestResourceHandler::TestResourceHandler() 46 TestResourceHandler::TestResourceHandler()
47 : TestResourceHandler(nullptr, nullptr) {} 47 : TestResourceHandler(nullptr, nullptr) {}
48 48
49 TestResourceHandler::~TestResourceHandler() {} 49 TestResourceHandler::~TestResourceHandler() {}
50 50
51 void TestResourceHandler::SetController(ResourceController* controller) { 51 void TestResourceHandler::OnRequestRedirected(
52 controller_ = controller;
53 }
54
55 bool TestResourceHandler::OnRequestRedirected(
56 const net::RedirectInfo& redirect_info, 52 const net::RedirectInfo& redirect_info,
57 ResourceResponse* response, 53 ResourceResponse* response,
58 bool* defer) { 54 std::unique_ptr<ResourceController> controller) {
59 EXPECT_FALSE(canceled_); 55 EXPECT_FALSE(canceled_);
60 EXPECT_EQ(1, on_will_start_called_); 56 EXPECT_EQ(1, on_will_start_called_);
61 EXPECT_EQ(0, on_response_started_called_); 57 EXPECT_EQ(0, on_response_started_called_);
62 EXPECT_EQ(0, on_response_completed_called_); 58 EXPECT_EQ(0, on_response_completed_called_);
63 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 59 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
64 60
65 ++on_request_redirected_called_; 61 ++on_request_redirected_called_;
66 62
67 if (!on_request_redirected_result_) { 63 if (!on_request_redirected_result_) {
68 canceled_ = true; 64 canceled_ = true;
69 return false; 65 controller->Cancel();
66 return;
70 } 67 }
71 68
72 *defer = defer_on_request_redirected_; 69 if (defer_on_request_redirected_) {
73 defer_on_request_redirected_ = false; 70 defer_on_request_redirected_ = false;
74 if (*defer) 71 HoldController(std::move(controller));
75 deferred_run_loop_->Quit(); 72 deferred_run_loop_->Quit();
76 return true; 73 return;
74 }
75
76 controller->Resume();
77 } 77 }
78 78
79 bool TestResourceHandler::OnResponseStarted(ResourceResponse* response, 79 void TestResourceHandler::OnResponseStarted(
80 bool* defer) { 80 ResourceResponse* response,
81 std::unique_ptr<ResourceController> controller) {
81 EXPECT_FALSE(canceled_); 82 EXPECT_FALSE(canceled_);
82 EXPECT_EQ(1, on_will_start_called_); 83 EXPECT_EQ(1, on_will_start_called_);
83 EXPECT_EQ(0, on_response_started_called_); 84 EXPECT_EQ(0, on_response_started_called_);
84 EXPECT_EQ(0, on_response_completed_called_); 85 EXPECT_EQ(0, on_response_completed_called_);
85 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 86 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
86 87
87 ++on_response_started_called_; 88 ++on_response_started_called_;
88 89
89 EXPECT_FALSE(resource_response_); 90 EXPECT_FALSE(resource_response_);
90 resource_response_ = response; 91 resource_response_ = response;
91 92
92 if (!on_response_started_result_) { 93 if (!on_response_started_result_) {
93 canceled_ = true; 94 canceled_ = true;
94 return false; 95 controller->Cancel();
96 return;
95 } 97 }
96 98
97 *defer = defer_on_response_started_; 99 if (!on_request_redirected_result_) {
98 defer_on_response_started_ = false; 100 controller->Cancel();
99 if (*defer) 101 return;
102 }
103
104 if (defer_on_response_started_) {
105 defer_on_response_started_ = false;
106 HoldController(std::move(controller));
100 deferred_run_loop_->Quit(); 107 deferred_run_loop_->Quit();
101 return true; 108 return;
109 }
110
111 controller->Resume();
102 } 112 }
103 113
104 bool TestResourceHandler::OnWillStart(const GURL& url, bool* defer) { 114 void TestResourceHandler::OnWillStart(
115 const GURL& url,
116 std::unique_ptr<ResourceController> controller) {
105 EXPECT_FALSE(canceled_); 117 EXPECT_FALSE(canceled_);
106 EXPECT_EQ(0, on_response_started_called_); 118 EXPECT_EQ(0, on_response_started_called_);
107 EXPECT_EQ(0, on_will_start_called_); 119 EXPECT_EQ(0, on_will_start_called_);
108 EXPECT_EQ(0, on_response_completed_called_); 120 EXPECT_EQ(0, on_response_completed_called_);
109 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 121 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
110 122
111 ++on_will_start_called_; 123 ++on_will_start_called_;
112 124
113 start_url_ = url; 125 start_url_ = url;
114 126
115 if (!on_will_start_result_) { 127 if (!on_will_start_result_) {
116 canceled_ = true; 128 canceled_ = true;
117 return false; 129 controller->Cancel();
130 return;
118 } 131 }
119 132
120 *defer = defer_on_will_start_; 133 if (defer_on_will_start_) {
121 if (*defer) 134 defer_on_will_start_ = false;
135 HoldController(std::move(controller));
122 deferred_run_loop_->Quit(); 136 deferred_run_loop_->Quit();
123 return true; 137 return;
138 }
139
140 controller->Resume();
124 } 141 }
125 142
126 bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 143 bool TestResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
127 int* buf_size, 144 int* buf_size,
128 int min_size) { 145 int min_size) {
129 EXPECT_FALSE(canceled_); 146 EXPECT_FALSE(canceled_);
130 EXPECT_FALSE(expect_on_data_downloaded_); 147 EXPECT_FALSE(expect_on_data_downloaded_);
131 EXPECT_EQ(0, on_response_completed_called_); 148 EXPECT_EQ(0, on_response_completed_called_);
132 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 149 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
133 150
134 ++on_will_read_called_; 151 ++on_will_read_called_;
135 152
136 if (!on_will_read_result_) { 153 if (!on_will_read_result_) {
137 canceled_ = true; 154 canceled_ = true;
138 } else { 155 } else {
139 *buf = buffer_; 156 *buf = buffer_;
140 *buf_size = buffer_size_; 157 *buf_size = buffer_size_;
141 memset(buffer_->data(), '\0', buffer_size_); 158 memset(buffer_->data(), '\0', buffer_size_);
142 } 159 }
143 160
144 return on_will_read_result_; 161 return on_will_read_result_;
145 } 162 }
146 163
147 bool TestResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { 164 void TestResourceHandler::OnReadCompleted(
165 int bytes_read,
166 std::unique_ptr<ResourceController> controller) {
148 EXPECT_FALSE(canceled_); 167 EXPECT_FALSE(canceled_);
149 EXPECT_FALSE(expect_on_data_downloaded_); 168 EXPECT_FALSE(expect_on_data_downloaded_);
150 EXPECT_EQ(1, on_will_start_called_); 169 EXPECT_EQ(1, on_will_start_called_);
151 EXPECT_EQ(1, on_response_started_called_); 170 EXPECT_EQ(1, on_response_started_called_);
152 EXPECT_EQ(0, on_response_completed_called_); 171 EXPECT_EQ(0, on_response_completed_called_);
153 EXPECT_EQ(0, on_read_eof_); 172 EXPECT_EQ(0, on_read_eof_);
154 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 173 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
155 174
156 ++on_read_completed_called_; 175 ++on_read_completed_called_;
157 if (bytes_read == 0) 176 if (bytes_read == 0)
158 ++on_read_eof_; 177 ++on_read_eof_;
159 178
160 EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_); 179 EXPECT_LE(static_cast<size_t>(bytes_read), buffer_size_);
161 if (body_ptr_) 180 if (body_ptr_)
162 body_ptr_->append(buffer_->data(), bytes_read); 181 body_ptr_->append(buffer_->data(), bytes_read);
163 body_.append(buffer_->data(), bytes_read); 182 body_.append(buffer_->data(), bytes_read);
164 183
165 if (!on_read_completed_result_ || (!on_read_eof_result_ && bytes_read == 0)) { 184 if (!on_read_completed_result_ || (!on_read_eof_result_ && bytes_read == 0)) {
166 canceled_ = true; 185 canceled_ = true;
167 return false; 186 controller->Cancel();
187 return;
168 } 188 }
169 189
170 *defer = defer_on_read_completed_; 190 if (defer_on_read_completed_ || (bytes_read == 0 && defer_on_read_eof_)) {
171 defer_on_read_completed_ = false; 191 defer_on_read_completed_ = false;
172 if (bytes_read == 0 && defer_on_read_eof_) 192 HoldController(std::move(controller));
173 *defer = true; 193 deferred_run_loop_->Quit();
194 return;
195 }
174 196
175 if (*defer) 197 controller->Resume();
176 deferred_run_loop_->Quit();
177
178 return true;
179 } 198 }
180 199
181 void TestResourceHandler::OnResponseCompleted( 200 void TestResourceHandler::OnResponseCompleted(
182 const net::URLRequestStatus& status, 201 const net::URLRequestStatus& status,
183 bool* defer) { 202 std::unique_ptr<ResourceController> controller) {
184 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 203 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
185 204
186 EXPECT_EQ(0, on_response_completed_called_); 205 EXPECT_EQ(0, on_response_completed_called_);
187 if (status.is_success() && !expect_on_data_downloaded_ && expect_eof_read_) 206 if (status.is_success() && !expect_on_data_downloaded_ && expect_eof_read_)
188 EXPECT_EQ(1, on_read_eof_); 207 EXPECT_EQ(1, on_read_eof_);
189 208
190 ++on_response_completed_called_; 209 ++on_response_completed_called_;
191 210
192 if (request_status_ptr_) 211 if (request_status_ptr_)
193 *request_status_ptr_ = status; 212 *request_status_ptr_ = status;
194 final_status_ = status; 213 final_status_ = status;
195 *defer = defer_on_response_completed_;
196 defer_on_response_completed_ = false;
197 214
198 if (*defer) 215 // Consider response completed. Even if deferring, the TestResourceHandler
216 // won't be called again.
217 response_complete_run_loop_.Quit();
218
219 if (defer_on_response_completed_) {
220 defer_on_response_completed_ = false;
221 HoldController(std::move(controller));
199 deferred_run_loop_->Quit(); 222 deferred_run_loop_->Quit();
200 response_complete_run_loop_.Quit(); 223 return;
224 }
225
226 controller->Resume();
201 } 227 }
202 228
203 void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) { 229 void TestResourceHandler::OnDataDownloaded(int bytes_downloaded) {
204 EXPECT_TRUE(expect_on_data_downloaded_); 230 EXPECT_TRUE(expect_on_data_downloaded_);
205 EXPECT_EQ(1, on_will_start_called_); 231 EXPECT_EQ(1, on_will_start_called_);
206 EXPECT_EQ(1, on_response_started_called_); 232 EXPECT_EQ(1, on_response_started_called_);
207 EXPECT_EQ(0, on_response_completed_called_); 233 EXPECT_EQ(0, on_response_completed_called_);
208 234
209 total_bytes_downloaded_ += bytes_downloaded; 235 total_bytes_downloaded_ += bytes_downloaded;
210 } 236 }
211 237
212 void TestResourceHandler::Resume() { 238 void TestResourceHandler::Resume() {
213 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 239 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
214 controller_->Resume(); 240 ResourceHandler::Resume();
215 } 241 }
216 242
217 void TestResourceHandler::CancelWithError(net::Error net_error) { 243 void TestResourceHandler::CancelWithError(net::Error net_error) {
218 ScopedCallDepthTracker call_depth_tracker(&call_depth_); 244 ScopedCallDepthTracker call_depth_tracker(&call_depth_);
219 canceled_ = true; 245 canceled_ = true;
220 controller_->CancelWithError(net_error); 246 ResourceHandler::CancelWithError(net_error);
221 } 247 }
222 248
223 void TestResourceHandler::SetBufferSize(int buffer_size) { 249 void TestResourceHandler::SetBufferSize(int buffer_size) {
224 buffer_ = new net::IOBuffer(buffer_size); 250 buffer_ = new net::IOBuffer(buffer_size);
225 buffer_size_ = buffer_size; 251 buffer_size_ = buffer_size;
226 memset(buffer_->data(), '\0', buffer_size); 252 memset(buffer_->data(), '\0', buffer_size);
227 } 253 }
228 254
229 void TestResourceHandler::WaitUntilDeferred() { 255 void TestResourceHandler::WaitUntilDeferred() {
230 deferred_run_loop_->Run(); 256 deferred_run_loop_->Run();
231 deferred_run_loop_.reset(new base::RunLoop()); 257 deferred_run_loop_.reset(new base::RunLoop());
232 } 258 }
233 259
234 void TestResourceHandler::WaitUntilResponseComplete() { 260 void TestResourceHandler::WaitUntilResponseComplete() {
235 response_complete_run_loop_.Run(); 261 response_complete_run_loop_.Run();
236 } 262 }
237 263
238 base::WeakPtr<TestResourceHandler> TestResourceHandler::GetWeakPtr() { 264 base::WeakPtr<TestResourceHandler> TestResourceHandler::GetWeakPtr() {
239 return weak_ptr_factory_.GetWeakPtr(); 265 return weak_ptr_factory_.GetWeakPtr();
240 } 266 }
241 267
242 } // namespace content 268 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698