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

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

Issue 2476163003: Refactor ResourceHandler API. (Closed)
Patch Set: Minor cleanups, one real fix Created 4 years, 1 month 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/intercepting_resource_handler.h" 5 #include "content/browser/loader/intercepting_resource_handler.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 18 matching lines...) Expand all
29 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
30 #include "url/gurl.h" 30 #include "url/gurl.h"
31 31
32 namespace content { 32 namespace content {
33 33
34 namespace { 34 namespace {
35 35
36 class TestResourceController : public ResourceController { 36 class TestResourceController : public ResourceController {
37 public: 37 public:
38 TestResourceController() = default; 38 TestResourceController() = default;
39 void Cancel() override {} 39
40 void CancelAndIgnore() override {} 40 // ResourceController:
41 void CancelWithError(int error_code) override {} 41 void Cancel() override { CancelWithError(net::ERR_ABORTED); }
42 void CancelAndIgnore() override { NOTREACHED(); }
43 void CancelWithError(int error_code) override {
44 // It's legal to cancel twise if one request occurs out-of-band, but none of
45 // these tests do that.
46 EXPECT_FALSE(canceled_);
47 EXPECT_LT(error_code, 0);
48 EXPECT_NE(error_code, net::ERR_IO_PENDING);
49 canceled_ = true;
50 error_ = error_code;
51 }
42 void Resume() override { ++resume_calls_; } 52 void Resume() override { ++resume_calls_; }
43 53
44 int resume_calls() const { return resume_calls_; } 54 int resume_calls() const { return resume_calls_; }
45 55
56 bool canceled() const { return canceled_; }
57 int error() { return error_; }
58
46 private: 59 private:
47 int resume_calls_ = 0; 60 int resume_calls_ = 0;
61 bool canceled_ = false;
62 int error_ = net::OK;
48 63
49 DISALLOW_COPY_AND_ASSIGN(TestResourceController); 64 DISALLOW_COPY_AND_ASSIGN(TestResourceController);
50 }; 65 };
51 66
52 class InterceptingResourceHandlerTest : public testing::Test { 67 class InterceptingResourceHandlerTest : public testing::Test {
53 public: 68 public:
54 InterceptingResourceHandlerTest() {} 69 InterceptingResourceHandlerTest() {}
55 70
56 private: 71 private:
57 TestBrowserThreadBundle thread_bundle_; 72 TestBrowserThreadBundle thread_bundle_;
(...skipping 23 matching lines...) Expand all
81 new TestResourceHandler(&old_handler_status, &old_handler_body)); 96 new TestResourceHandler(&old_handler_status, &old_handler_body));
82 TestResourceHandler* old_test_handler = old_handler.get(); 97 TestResourceHandler* old_test_handler = old_handler.get();
83 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 98 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
84 new InterceptingResourceHandler(std::move(old_handler), request.get())); 99 new InterceptingResourceHandler(std::move(old_handler), request.get()));
85 100
86 scoped_refptr<ResourceResponse> response(new ResourceResponse); 101 scoped_refptr<ResourceResponse> response(new ResourceResponse);
87 102
88 // Simulate the MimeSniffingResourceHandler buffering the data. 103 // Simulate the MimeSniffingResourceHandler buffering the data.
89 scoped_refptr<net::IOBuffer> read_buffer; 104 scoped_refptr<net::IOBuffer> read_buffer;
90 int buf_size = 0; 105 int buf_size = 0;
91 bool defer = false; 106 bool defer_or_cancel = false;
92 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 107 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
93 EXPECT_FALSE(defer); 108 EXPECT_FALSE(defer_or_cancel);
94 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 109 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
95 110
96 const std::string kData = "The data"; 111 const std::string kData = "The data";
97 EXPECT_NE(kData, std::string(old_test_handler->buffer()->data())); 112 EXPECT_NE(kData, std::string(old_test_handler->buffer()->data()));
98 113
99 ASSERT_NE(read_buffer.get(), old_test_handler->buffer()); 114 ASSERT_NE(read_buffer.get(), old_test_handler->buffer());
100 ASSERT_GT(static_cast<size_t>(buf_size), kData.length()); 115 ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
101 memcpy(read_buffer->data(), kData.c_str(), kData.length()); 116 memcpy(read_buffer->data(), kData.c_str(), kData.length());
102 117
103 // The response is received. The handler should not change. 118 // The response is received. The handler should not change.
104 EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 119 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
105 EXPECT_FALSE(defer); 120 EXPECT_FALSE(defer_or_cancel);
106 121
107 // The read is replayed by the MimeSniffingResourceHandler. The data should 122 // The read is replayed by the MimeSniffingResourceHandler. The data should
108 // have been received by the old intercepting_handler. 123 // have been received by the old intercepting_handler.
109 EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData.length(), &defer)); 124 intercepting_handler->OnReadCompleted(kData.length(), &defer_or_cancel);
110 EXPECT_FALSE(defer); 125 EXPECT_FALSE(defer_or_cancel);
111 EXPECT_EQ(kData, std::string(old_test_handler->buffer()->data())); 126 EXPECT_EQ(kData, std::string(old_test_handler->buffer()->data()));
112 127
113 // Make sure another read behave as expected. 128 // Make sure another read behave as expected.
114 buf_size = 0; 129 buf_size = 0;
115 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 130 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
116 ASSERT_EQ(read_buffer.get(), old_test_handler->buffer()); 131 ASSERT_EQ(read_buffer.get(), old_test_handler->buffer());
117 132
118 const std::string kData2 = "Data 2"; 133 const std::string kData2 = "Data 2";
119 EXPECT_NE(kData, std::string(old_test_handler->buffer()->data())); 134 EXPECT_NE(kData, std::string(old_test_handler->buffer()->data()));
120 ASSERT_GT(static_cast<size_t>(buf_size), kData2.length()); 135 ASSERT_GT(static_cast<size_t>(buf_size), kData2.length());
121 memcpy(read_buffer->data(), kData2.c_str(), kData2.length()); 136 memcpy(read_buffer->data(), kData2.c_str(), kData2.length());
122 137
123 EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData2.length(), &defer)); 138 intercepting_handler->OnReadCompleted(kData2.length(), &defer_or_cancel);
124 EXPECT_FALSE(defer); 139 EXPECT_FALSE(defer_or_cancel);
125 EXPECT_EQ(kData2, std::string(old_test_handler->buffer()->data())); 140 EXPECT_EQ(kData2, std::string(old_test_handler->buffer()->data()));
126 EXPECT_EQ(kData + kData2, old_handler_body); 141 EXPECT_EQ(kData + kData2, old_handler_body);
127 } 142 }
128 143
129 // Tests that the data received is transmitted to the newly created 144 // Tests that the data received is transmitted to the newly created
130 // ResourceHandler. 145 // ResourceHandler.
131 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) { 146 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) {
132 net::URLRequestContext context; 147 net::URLRequestContext context;
133 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 148 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
134 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 149 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
(...skipping 15 matching lines...) Expand all
150 new TestResourceHandler(&old_handler_status, &old_handler_body)); 165 new TestResourceHandler(&old_handler_status, &old_handler_body));
151 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); 166 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
152 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 167 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
153 new InterceptingResourceHandler(std::move(old_handler), request.get())); 168 new InterceptingResourceHandler(std::move(old_handler), request.get()));
154 169
155 scoped_refptr<ResourceResponse> response(new ResourceResponse); 170 scoped_refptr<ResourceResponse> response(new ResourceResponse);
156 171
157 // Simulate the MimeSniffingResourceHandler buffering the data. 172 // Simulate the MimeSniffingResourceHandler buffering the data.
158 scoped_refptr<net::IOBuffer> read_buffer; 173 scoped_refptr<net::IOBuffer> read_buffer;
159 int buf_size = 0; 174 int buf_size = 0;
160 bool defer = false; 175 bool defer_or_cancel = false;
161 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 176 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
162 EXPECT_FALSE(defer); 177 EXPECT_FALSE(defer_or_cancel);
163 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 178 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
164 179
165 const std::string kData = "The data"; 180 const std::string kData = "The data";
166 ASSERT_NE(read_buffer.get(), old_buffer.get()); 181 ASSERT_NE(read_buffer.get(), old_buffer.get());
167 ASSERT_GT(static_cast<size_t>(buf_size), kData.length()); 182 ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
168 memcpy(read_buffer->data(), kData.c_str(), kData.length()); 183 memcpy(read_buffer->data(), kData.c_str(), kData.length());
169 184
170 // Simulate the MimeSniffingResourceHandler asking the 185 // Simulate the MimeSniffingResourceHandler asking the
171 // InterceptingResourceHandler to switch to a new handler. 186 // InterceptingResourceHandler to switch to a new handler.
172 net::URLRequestStatus new_handler_status; 187 net::URLRequestStatus new_handler_status;
173 std::string new_handler_body; 188 std::string new_handler_body;
174 std::unique_ptr<TestResourceHandler> new_handler_scoped( 189 std::unique_ptr<TestResourceHandler> new_handler_scoped(
175 new TestResourceHandler(&new_handler_status, &new_handler_body)); 190 new TestResourceHandler(&new_handler_status, &new_handler_body));
176 TestResourceHandler* new_test_handler = new_handler_scoped.get(); 191 TestResourceHandler* new_test_handler = new_handler_scoped.get();
177 intercepting_handler->UseNewHandler(std::move(new_handler_scoped), 192 intercepting_handler->UseNewHandler(std::move(new_handler_scoped),
178 std::string()); 193 std::string());
179 194
180 // The response is received. The new ResourceHandler should be used handle 195 // The response is received. The new ResourceHandler should be used handle
181 // the download. 196 // the download.
182 EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 197 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
183 EXPECT_FALSE(defer); 198 EXPECT_FALSE(defer_or_cancel);
184 199
185 EXPECT_FALSE(old_handler_status.is_success()); 200 EXPECT_FALSE(old_handler_status.is_success());
186 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error()); 201 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
187 EXPECT_EQ(std::string(), old_handler_body); 202 EXPECT_EQ(std::string(), old_handler_body);
188 203
189 // It should not have received the download data yet. 204 // It should not have received the download data yet.
190 EXPECT_NE(kData, std::string(new_test_handler->buffer()->data())); 205 EXPECT_NE(kData, std::string(new_test_handler->buffer()->data()));
191 206
192 // The read is replayed by the MimeSniffingResourceHandler. The data should 207 // The read is replayed by the MimeSniffingResourceHandler. The data should
193 // have been received by the new handler. 208 // have been received by the new handler.
194 EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData.length(), &defer)); 209 intercepting_handler->OnReadCompleted(kData.length(), &defer_or_cancel);
195 EXPECT_FALSE(defer); 210 EXPECT_FALSE(defer_or_cancel);
196 EXPECT_EQ(kData, std::string(new_test_handler->buffer()->data())); 211 EXPECT_EQ(kData, std::string(new_test_handler->buffer()->data()));
197 212
198 // Make sure another read behaves as expected. 213 // Make sure another read behaves as expected.
199 buf_size = 0; 214 buf_size = 0;
200 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 215 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
201 ASSERT_EQ(read_buffer.get(), new_test_handler->buffer()); 216 ASSERT_EQ(read_buffer.get(), new_test_handler->buffer());
202 ASSERT_GT(static_cast<size_t>(buf_size), kData.length()); 217 ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
203 218
204 const std::string kData2 = "Data 2"; 219 const std::string kData2 = "Data 2";
205 EXPECT_NE(kData2, std::string(new_test_handler->buffer()->data())); 220 EXPECT_NE(kData2, std::string(new_test_handler->buffer()->data()));
206 memcpy(read_buffer->data(), kData2.c_str(), kData2.length()); 221 memcpy(read_buffer->data(), kData2.c_str(), kData2.length());
207 222
208 EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData2.length(), &defer)); 223 intercepting_handler->OnReadCompleted(kData2.length(), &defer_or_cancel);
209 EXPECT_FALSE(defer); 224 EXPECT_FALSE(defer_or_cancel);
210 EXPECT_EQ(kData2, std::string(new_test_handler->buffer()->data())); 225 EXPECT_EQ(kData2, std::string(new_test_handler->buffer()->data()));
211 EXPECT_EQ(kData + kData2, new_handler_body); 226 EXPECT_EQ(kData + kData2, new_handler_body);
212 } 227 }
213 228
214 // Tests that the data received is transmitted to the newly created 229 // Tests that the data received is transmitted to the newly created
215 // ResourceHandler and the specified payload to the old ResourceHandler. 230 // ResourceHandler and the specified payload to the old ResourceHandler.
216 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchWithPayload) { 231 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchWithPayload) {
217 net::URLRequestContext context; 232 net::URLRequestContext context;
218 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 233 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
219 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 234 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
(...skipping 17 matching lines...) Expand all
237 scoped_refptr<net::IOBuffer> old_buffer = old_handler->buffer(); 252 scoped_refptr<net::IOBuffer> old_buffer = old_handler->buffer();
238 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 253 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
239 new InterceptingResourceHandler(std::move(old_handler_scoped), 254 new InterceptingResourceHandler(std::move(old_handler_scoped),
240 request.get())); 255 request.get()));
241 256
242 scoped_refptr<ResourceResponse> response(new ResourceResponse); 257 scoped_refptr<ResourceResponse> response(new ResourceResponse);
243 258
244 // Simulate the MimeSniffingResourceHandler buffering the data. 259 // Simulate the MimeSniffingResourceHandler buffering the data.
245 scoped_refptr<net::IOBuffer> read_buffer; 260 scoped_refptr<net::IOBuffer> read_buffer;
246 int buf_size = 0; 261 int buf_size = 0;
247 bool defer = false; 262 bool defer_or_cancel = false;
248 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 263 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
249 EXPECT_FALSE(defer); 264 EXPECT_FALSE(defer_or_cancel);
250 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 265 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
251 266
252 const std::string kData = "The data"; 267 const std::string kData = "The data";
253 ASSERT_NE(read_buffer.get(), old_buffer.get()); 268 ASSERT_NE(read_buffer.get(), old_buffer.get());
254 ASSERT_GT(static_cast<size_t>(buf_size), kData.length()); 269 ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
255 memcpy(read_buffer->data(), kData.c_str(), kData.length()); 270 memcpy(read_buffer->data(), kData.c_str(), kData.length());
256 271
257 // Simulate the MimeSniffingResourceHandler asking the 272 // Simulate the MimeSniffingResourceHandler asking the
258 // InterceptingResourceHandler to switch to a new handler. 273 // InterceptingResourceHandler to switch to a new handler.
259 const std::string kPayload = "The payload"; 274 const std::string kPayload = "The payload";
260 net::URLRequestStatus new_handler_status; 275 net::URLRequestStatus new_handler_status;
261 std::string new_handler_body; 276 std::string new_handler_body;
262 std::unique_ptr<TestResourceHandler> new_handler_scoped( 277 std::unique_ptr<TestResourceHandler> new_handler_scoped(
263 new TestResourceHandler(&new_handler_status, &new_handler_body)); 278 new TestResourceHandler(&new_handler_status, &new_handler_body));
264 TestResourceHandler* new_test_handler = new_handler_scoped.get(); 279 TestResourceHandler* new_test_handler = new_handler_scoped.get();
265 intercepting_handler->UseNewHandler(std::move(new_handler_scoped), kPayload); 280 intercepting_handler->UseNewHandler(std::move(new_handler_scoped), kPayload);
266 281
267 // The old handler should not have received the payload yet. 282 // The old handler should not have received the payload yet.
268 ASSERT_EQ(std::string(), old_handler_body); 283 ASSERT_EQ(std::string(), old_handler_body);
269 284
270 // The response is received. The new ResourceHandler should be used to handle 285 // The response is received. The new ResourceHandler should be used to handle
271 // the download. 286 // the download.
272 EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 287 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
273 EXPECT_FALSE(defer); 288 EXPECT_FALSE(defer_or_cancel);
274 289
275 // The old handler should have received the payload. 290 // The old handler should have received the payload.
276 EXPECT_EQ(kPayload, old_handler_body); 291 EXPECT_EQ(kPayload, old_handler_body);
277 292
278 EXPECT_TRUE(old_handler_status.is_success()); 293 EXPECT_TRUE(old_handler_status.is_success());
279 EXPECT_EQ(net::OK, old_handler_status.error()); 294 EXPECT_EQ(net::OK, old_handler_status.error());
280 295
281 // It should not have received the download data yet. 296 // It should not have received the download data yet.
282 EXPECT_NE(kData, std::string(new_test_handler->buffer()->data())); 297 EXPECT_NE(kData, std::string(new_test_handler->buffer()->data()));
283 298
284 // The read is replayed by the MimeSniffingResourceHandler. The data should 299 // The read is replayed by the MimeSniffingResourceHandler. The data should
285 // have been received by the new handler. 300 // have been received by the new handler.
286 EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData.length(), &defer)); 301 intercepting_handler->OnReadCompleted(kData.length(), &defer_or_cancel);
287 EXPECT_FALSE(defer); 302 EXPECT_FALSE(defer_or_cancel);
288 EXPECT_EQ(kData, std::string(new_test_handler->buffer()->data())); 303 EXPECT_EQ(kData, std::string(new_test_handler->buffer()->data()));
289 304
290 // Make sure another read behave as expected. 305 // Make sure another read behave as expected.
291 buf_size = 0; 306 buf_size = 0;
292 const std::string kData2 = "Data 2"; 307 const std::string kData2 = "Data 2";
293 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 308 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
294 ASSERT_EQ(read_buffer.get(), new_test_handler->buffer()); 309 ASSERT_EQ(read_buffer.get(), new_test_handler->buffer());
295 ASSERT_GT(static_cast<size_t>(buf_size), kData.length()); 310 ASSERT_GT(static_cast<size_t>(buf_size), kData.length());
296 311
297 EXPECT_NE(kData2, std::string(new_test_handler->buffer()->data())); 312 EXPECT_NE(kData2, std::string(new_test_handler->buffer()->data()));
298 memcpy(read_buffer->data(), kData2.c_str(), kData2.length()); 313 memcpy(read_buffer->data(), kData2.c_str(), kData2.length());
299 314
300 EXPECT_TRUE(intercepting_handler->OnReadCompleted(kData2.length(), &defer)); 315 intercepting_handler->OnReadCompleted(kData2.length(), &defer_or_cancel);
301 EXPECT_FALSE(defer); 316 EXPECT_FALSE(defer_or_cancel);
302 EXPECT_EQ(kData2, std::string(new_test_handler->buffer()->data())); 317 EXPECT_EQ(kData2, std::string(new_test_handler->buffer()->data()));
303 EXPECT_EQ(kData + kData2, new_handler_body); 318 EXPECT_EQ(kData + kData2, new_handler_body);
304 } 319 }
305 320
306 // Tests that the handler behaves properly if the old handler fails will read. 321 // Tests that the handler behaves properly if the old handler fails will read.
307 TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) { 322 TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) {
308 net::URLRequestContext context; 323 net::URLRequestContext context;
309 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 324 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
310 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 325 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
311 ResourceRequestInfo::AllocateForTesting(request.get(), 326 ResourceRequestInfo::AllocateForTesting(request.get(),
(...skipping 15 matching lines...) Expand all
327 old_handler->set_on_will_read_result(false); 342 old_handler->set_on_will_read_result(false);
328 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 343 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
329 new InterceptingResourceHandler(std::move(old_handler), request.get())); 344 new InterceptingResourceHandler(std::move(old_handler), request.get()));
330 345
331 scoped_refptr<ResourceResponse> response(new ResourceResponse); 346 scoped_refptr<ResourceResponse> response(new ResourceResponse);
332 347
333 // Simulate the MimeSniffingResourceHandler buffering the data. The old 348 // Simulate the MimeSniffingResourceHandler buffering the data. The old
334 // handler should tell the caller to fail. 349 // handler should tell the caller to fail.
335 scoped_refptr<net::IOBuffer> read_buffer; 350 scoped_refptr<net::IOBuffer> read_buffer;
336 int buf_size = 0; 351 int buf_size = 0;
337 bool defer = false; 352 bool defer_or_cancel = false;
338 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 353 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
339 EXPECT_FALSE(defer); 354 EXPECT_FALSE(defer_or_cancel);
340 EXPECT_FALSE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 355 EXPECT_FALSE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
341 } 356 }
342 357
343 // Tests that the handler behaves properly if the new handler fails in 358 // Tests that the handler behaves properly if the new handler fails in
344 // OnWillStart. 359 // OnWillStart.
345 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) { 360 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsOnWillStart) {
346 net::URLRequestContext context; 361 net::URLRequestContext context;
347 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 362 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
348 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 363 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
349 ResourceRequestInfo::AllocateForTesting(request.get(), 364 ResourceRequestInfo::AllocateForTesting(request.get(),
350 RESOURCE_TYPE_MAIN_FRAME, 365 RESOURCE_TYPE_MAIN_FRAME,
351 nullptr, // context 366 nullptr, // context
352 0, // render_process_id 367 0, // render_process_id
353 0, // render_view_id 368 0, // render_view_id
354 0, // render_frame_id 369 0, // render_frame_id
355 true, // is_main_frame 370 true, // is_main_frame
356 false, // parent_is_main_frame 371 false, // parent_is_main_frame
357 true, // allow_download 372 true, // allow_download
358 true, // is_async 373 true, // is_async
359 false); // is_using_lofi 374 false); // is_using_lofi
360 375
361 net::URLRequestStatus old_handler_status; 376 net::URLRequestStatus old_handler_status;
362 std::string old_handler_body; 377 std::string old_handler_body;
363 std::unique_ptr<TestResourceHandler> old_handler( 378 std::unique_ptr<TestResourceHandler> old_handler(
364 new TestResourceHandler(&old_handler_status, &old_handler_body)); 379 new TestResourceHandler(&old_handler_status, &old_handler_body));
365 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); 380 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
366 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 381 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
367 new InterceptingResourceHandler(std::move(old_handler), request.get())); 382 new InterceptingResourceHandler(std::move(old_handler), request.get()));
368 383
384 TestResourceController resource_controller;
385 intercepting_handler->SetController(&resource_controller);
386
369 scoped_refptr<ResourceResponse> response(new ResourceResponse); 387 scoped_refptr<ResourceResponse> response(new ResourceResponse);
370 388
371 // Simulate the MimeSniffingResourceHandler buffering the data. 389 // Simulate the MimeSniffingResourceHandler buffering the data.
372 scoped_refptr<net::IOBuffer> read_buffer; 390 scoped_refptr<net::IOBuffer> read_buffer;
373 int buf_size = 0; 391 int buf_size = 0;
374 bool defer = false; 392 bool defer_or_cancel = false;
375 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 393 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
376 EXPECT_FALSE(defer); 394 EXPECT_FALSE(resource_controller.canceled());
395 EXPECT_FALSE(defer_or_cancel);
377 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 396 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
378 397
379 const char kData[] = "The data"; 398 const char kData[] = "The data";
380 ASSERT_NE(read_buffer.get(), old_buffer.get()); 399 ASSERT_NE(read_buffer.get(), old_buffer.get());
381 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData)); 400 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
382 memcpy(read_buffer->data(), kData, sizeof(kData)); 401 memcpy(read_buffer->data(), kData, sizeof(kData));
383 402
384 // Simulate the MimeSniffingResourceHandler asking the 403 // Simulate the MimeSniffingResourceHandler asking the
385 // InterceptingResourceHandler to switch to a new handler. 404 // InterceptingResourceHandler to switch to a new handler.
386 net::URLRequestStatus new_handler_status; 405 net::URLRequestStatus new_handler_status;
387 std::string new_handler_body; 406 std::string new_handler_body;
388 std::unique_ptr<TestResourceHandler> new_handler( 407 std::unique_ptr<TestResourceHandler> new_handler(
389 new TestResourceHandler(&new_handler_status, &new_handler_body)); 408 new TestResourceHandler(&new_handler_status, &new_handler_body));
390 new_handler->set_on_will_start_result(false); 409 new_handler->set_on_will_start_result(false);
391 intercepting_handler->UseNewHandler(std::move(new_handler), std::string()); 410 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
411 EXPECT_FALSE(resource_controller.canceled());
392 412
393 // The response is received. The new ResourceHandler should tell us to fail. 413 // The response is received. The new ResourceHandler should tell us to fail.
394 EXPECT_FALSE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 414 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
395 EXPECT_FALSE(defer); 415 EXPECT_TRUE(resource_controller.canceled());
416 EXPECT_EQ(net::ERR_ABORTED, resource_controller.error());
417 EXPECT_TRUE(defer_or_cancel);
396 } 418 }
397 419
398 // Tests that the handler behaves properly if the new handler fails response 420 // Tests that the handler behaves properly if the new handler fails response
399 // started. 421 // started.
400 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) { 422 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) {
401 net::URLRequestContext context; 423 net::URLRequestContext context;
402 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 424 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
403 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 425 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
404 ResourceRequestInfo::AllocateForTesting(request.get(), 426 ResourceRequestInfo::AllocateForTesting(request.get(),
405 RESOURCE_TYPE_MAIN_FRAME, 427 RESOURCE_TYPE_MAIN_FRAME,
406 nullptr, // context 428 nullptr, // context
407 0, // render_process_id 429 0, // render_process_id
408 0, // render_view_id 430 0, // render_view_id
409 0, // render_frame_id 431 0, // render_frame_id
410 true, // is_main_frame 432 true, // is_main_frame
411 false, // parent_is_main_frame 433 false, // parent_is_main_frame
412 true, // allow_download 434 true, // allow_download
413 true, // is_async 435 true, // is_async
414 false); // is_using_lofi 436 false); // is_using_lofi
415 437
416 net::URLRequestStatus old_handler_status; 438 net::URLRequestStatus old_handler_status;
417 std::string old_handler_body; 439 std::string old_handler_body;
418 std::unique_ptr<TestResourceHandler> old_handler( 440 std::unique_ptr<TestResourceHandler> old_handler(
419 new TestResourceHandler(&old_handler_status, &old_handler_body)); 441 new TestResourceHandler(&old_handler_status, &old_handler_body));
420 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); 442 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
421 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 443 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
422 new InterceptingResourceHandler(std::move(old_handler), request.get())); 444 new InterceptingResourceHandler(std::move(old_handler), request.get()));
423 445
446 TestResourceController resource_controller;
447 intercepting_handler->SetController(&resource_controller);
448
424 scoped_refptr<ResourceResponse> response(new ResourceResponse); 449 scoped_refptr<ResourceResponse> response(new ResourceResponse);
425 450
426 // Simulate the MimeSniffingResourceHandler buffering the data. 451 // Simulate the MimeSniffingResourceHandler buffering the data.
427 scoped_refptr<net::IOBuffer> read_buffer; 452 scoped_refptr<net::IOBuffer> read_buffer;
428 int buf_size = 0; 453 int buf_size = 0;
429 bool defer = false; 454 bool defer_or_cancel = false;
430 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 455 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
431 EXPECT_FALSE(defer); 456 EXPECT_FALSE(resource_controller.canceled());
457 EXPECT_FALSE(defer_or_cancel);
432 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 458 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
433 459
434 const char kData[] = "The data"; 460 const char kData[] = "The data";
435 ASSERT_NE(read_buffer.get(), old_buffer.get()); 461 ASSERT_NE(read_buffer.get(), old_buffer.get());
436 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData)); 462 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
437 memcpy(read_buffer->data(), kData, sizeof(kData)); 463 memcpy(read_buffer->data(), kData, sizeof(kData));
438 464
439 // Simulate the MimeSniffingResourceHandler asking the 465 // Simulate the MimeSniffingResourceHandler asking the
440 // InterceptingResourceHandler to switch to a new handler. 466 // InterceptingResourceHandler to switch to a new handler.
441 net::URLRequestStatus new_handler_status; 467 net::URLRequestStatus new_handler_status;
442 std::string new_handler_body; 468 std::string new_handler_body;
443 std::unique_ptr<TestResourceHandler> new_handler( 469 std::unique_ptr<TestResourceHandler> new_handler(
444 new TestResourceHandler(&new_handler_status, &new_handler_body)); 470 new TestResourceHandler(&new_handler_status, &new_handler_body));
445 new_handler->set_on_response_started_result(false); 471 new_handler->set_on_response_started_result(false);
446 intercepting_handler->UseNewHandler(std::move(new_handler), std::string()); 472 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
473 EXPECT_FALSE(resource_controller.canceled());
447 474
448 // The response is received. The new ResourceHandler should tell us to fail. 475 // The response is received. The new ResourceHandler should tell us to fail.
449 EXPECT_FALSE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 476 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
450 EXPECT_FALSE(defer); 477 EXPECT_TRUE(resource_controller.canceled());
478 EXPECT_EQ(net::ERR_ABORTED, resource_controller.error());
479 EXPECT_TRUE(defer_or_cancel);
451 } 480 }
452 481
453 // Tests that the handler behaves properly if the new handler fails will read. 482 // Tests that the handler behaves properly if the new handler fails will read.
454 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) { 483 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) {
455 net::URLRequestContext context; 484 net::URLRequestContext context;
456 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 485 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
457 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 486 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
458 ResourceRequestInfo::AllocateForTesting(request.get(), 487 ResourceRequestInfo::AllocateForTesting(request.get(),
459 RESOURCE_TYPE_MAIN_FRAME, 488 RESOURCE_TYPE_MAIN_FRAME,
460 nullptr, // context 489 nullptr, // context
461 0, // render_process_id 490 0, // render_process_id
462 0, // render_view_id 491 0, // render_view_id
463 0, // render_frame_id 492 0, // render_frame_id
464 true, // is_main_frame 493 true, // is_main_frame
465 false, // parent_is_main_frame 494 false, // parent_is_main_frame
466 true, // allow_download 495 true, // allow_download
467 true, // is_async 496 true, // is_async
468 false); // is_using_lofi 497 false); // is_using_lofi
469 498
470 net::URLRequestStatus old_handler_status; 499 net::URLRequestStatus old_handler_status;
471 std::string old_handler_body; 500 std::string old_handler_body;
472 std::unique_ptr<TestResourceHandler> old_handler( 501 std::unique_ptr<TestResourceHandler> old_handler(
473 new TestResourceHandler(&old_handler_status, &old_handler_body)); 502 new TestResourceHandler(&old_handler_status, &old_handler_body));
474 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); 503 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
475 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 504 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
476 new InterceptingResourceHandler(std::move(old_handler), request.get())); 505 new InterceptingResourceHandler(std::move(old_handler), request.get()));
477 506
507 TestResourceController resource_controller;
508 intercepting_handler->SetController(&resource_controller);
509
478 scoped_refptr<ResourceResponse> response(new ResourceResponse); 510 scoped_refptr<ResourceResponse> response(new ResourceResponse);
479 511
480 // Simulate the MimeSniffingResourceHandler buffering the data. 512 // Simulate the MimeSniffingResourceHandler buffering the data.
481 scoped_refptr<net::IOBuffer> read_buffer; 513 scoped_refptr<net::IOBuffer> read_buffer;
482 int buf_size = 0; 514 int buf_size = 0;
483 bool defer = false; 515 bool defer_or_cancel = false;
484 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 516 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
485 EXPECT_FALSE(defer); 517 EXPECT_FALSE(resource_controller.canceled());
518 EXPECT_FALSE(defer_or_cancel);
486 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 519 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
487 520
488 const char kData[] = "The data"; 521 const char kData[] = "The data";
489 ASSERT_NE(read_buffer.get(), old_buffer.get()); 522 ASSERT_NE(read_buffer.get(), old_buffer.get());
490 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData)); 523 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
491 memcpy(read_buffer->data(), kData, sizeof(kData)); 524 memcpy(read_buffer->data(), kData, sizeof(kData));
492 525
493 // Simulate the MimeSniffingResourceHandler asking the 526 // Simulate the MimeSniffingResourceHandler asking the
494 // InterceptingResourceHandler to switch to a new handler. 527 // InterceptingResourceHandler to switch to a new handler.
495 net::URLRequestStatus new_handler_status; 528 net::URLRequestStatus new_handler_status;
496 std::string new_handler_body; 529 std::string new_handler_body;
497 std::unique_ptr<TestResourceHandler> new_handler( 530 std::unique_ptr<TestResourceHandler> new_handler(
498 new TestResourceHandler(&new_handler_status, &new_handler_body)); 531 new TestResourceHandler(&new_handler_status, &new_handler_body));
499 new_handler->set_on_will_read_result(false); 532 new_handler->set_on_will_read_result(false);
500 intercepting_handler->UseNewHandler(std::move(new_handler), std::string()); 533 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
534 EXPECT_FALSE(resource_controller.canceled());
501 535
502 // The response is received. The new handler should not have been asked to 536 // The response is received. The new handler should not have been asked to
503 // read yet. 537 // read yet.
504 EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 538 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
505 EXPECT_FALSE(defer); 539 EXPECT_FALSE(resource_controller.canceled());
540 EXPECT_FALSE(defer_or_cancel);
506 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status()); 541 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
507 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error()); 542 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
508 543
509 // The read is replayed by the MimeSniffingResourceHandler. The new 544 // The read is replayed by the MimeSniffingResourceHandler. The new
510 // handler should tell the caller to fail. 545 // handler should tell the caller to fail.
511 EXPECT_FALSE(intercepting_handler->OnReadCompleted(sizeof(kData), &defer)); 546 intercepting_handler->OnReadCompleted(sizeof(kData), &defer_or_cancel);
512 EXPECT_FALSE(defer); 547 EXPECT_TRUE(resource_controller.canceled());
548 EXPECT_EQ(net::ERR_ABORTED, resource_controller.error());
549 EXPECT_TRUE(defer_or_cancel);
513 } 550 }
514 551
515 // Tests that the handler behaves properly if the new handler fails read 552 // Tests that the handler behaves properly if the new handler fails read
516 // completed. 553 // completed.
517 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) { 554 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) {
518 net::URLRequestContext context; 555 net::URLRequestContext context;
519 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 556 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
520 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 557 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
521 ResourceRequestInfo::AllocateForTesting(request.get(), 558 ResourceRequestInfo::AllocateForTesting(request.get(),
522 RESOURCE_TYPE_MAIN_FRAME, 559 RESOURCE_TYPE_MAIN_FRAME,
523 nullptr, // context 560 nullptr, // context
524 0, // render_process_id 561 0, // render_process_id
525 0, // render_view_id 562 0, // render_view_id
526 0, // render_frame_id 563 0, // render_frame_id
527 true, // is_main_frame 564 true, // is_main_frame
528 false, // parent_is_main_frame 565 false, // parent_is_main_frame
529 true, // allow_download 566 true, // allow_download
530 true, // is_async 567 true, // is_async
531 false); // is_using_lofi 568 false); // is_using_lofi
532 569
533 net::URLRequestStatus old_handler_status; 570 net::URLRequestStatus old_handler_status;
534 std::string old_handler_body; 571 std::string old_handler_body;
535 std::unique_ptr<TestResourceHandler> old_handler( 572 std::unique_ptr<TestResourceHandler> old_handler(
536 new TestResourceHandler(&old_handler_status, &old_handler_body)); 573 new TestResourceHandler(&old_handler_status, &old_handler_body));
537 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); 574 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
538 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 575 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
539 new InterceptingResourceHandler(std::move(old_handler), request.get())); 576 new InterceptingResourceHandler(std::move(old_handler), request.get()));
540 577
578 TestResourceController resource_controller;
579 intercepting_handler->SetController(&resource_controller);
580
541 scoped_refptr<ResourceResponse> response(new ResourceResponse); 581 scoped_refptr<ResourceResponse> response(new ResourceResponse);
542 582
543 // Simulate the MimeSniffingResourceHandler buffering the data. 583 // Simulate the MimeSniffingResourceHandler buffering the data.
544 scoped_refptr<net::IOBuffer> read_buffer; 584 scoped_refptr<net::IOBuffer> read_buffer;
545 int buf_size = 0; 585 int buf_size = 0;
546 bool defer = false; 586 bool defer_or_cancel = false;
547 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 587 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
548 EXPECT_FALSE(defer); 588 EXPECT_FALSE(resource_controller.canceled());
589 EXPECT_FALSE(defer_or_cancel);
549 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 590 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
550 591
551 const char kData[] = "The data"; 592 const char kData[] = "The data";
552 ASSERT_NE(read_buffer.get(), old_buffer.get()); 593 ASSERT_NE(read_buffer.get(), old_buffer.get());
553 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData)); 594 ASSERT_GT(static_cast<size_t>(buf_size), sizeof(kData));
554 memcpy(read_buffer->data(), kData, sizeof(kData)); 595 memcpy(read_buffer->data(), kData, sizeof(kData));
555 596
556 // Simulate the MimeSniffingResourceHandler asking the 597 // Simulate the MimeSniffingResourceHandler asking the
557 // InterceptingResourceHandler to switch to a new handler. 598 // InterceptingResourceHandler to switch to a new handler.
558 net::URLRequestStatus new_handler_status; 599 net::URLRequestStatus new_handler_status;
559 std::string new_handler_body; 600 std::string new_handler_body;
560 std::unique_ptr<TestResourceHandler> new_handler( 601 std::unique_ptr<TestResourceHandler> new_handler(
561 new TestResourceHandler(&new_handler_status, &new_handler_body)); 602 new TestResourceHandler(&new_handler_status, &new_handler_body));
562 new_handler->set_on_read_completed_result(false); 603 new_handler->set_on_read_completed_result(false);
563 intercepting_handler->UseNewHandler(std::move(new_handler), std::string()); 604 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
564 605
565 // The response is received. 606 // The response is received.
566 EXPECT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 607 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
567 EXPECT_FALSE(defer); 608 EXPECT_FALSE(resource_controller.canceled());
609 EXPECT_FALSE(defer_or_cancel);
568 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status()); 610 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
569 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error()); 611 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
570 612
571 // The read is replayed by the MimeSniffingResourceHandler. The new handler 613 // The read is replayed by the MimeSniffingResourceHandler. The new handler
572 // should tell the caller to fail. 614 // should tell the caller to fail.
573 EXPECT_FALSE(intercepting_handler->OnReadCompleted(sizeof(kData), &defer)); 615 intercepting_handler->OnReadCompleted(sizeof(kData), &defer_or_cancel);
574 EXPECT_FALSE(defer); 616 EXPECT_TRUE(resource_controller.canceled());
617 EXPECT_EQ(net::ERR_ABORTED, resource_controller.error());
618 EXPECT_TRUE(defer_or_cancel);
575 } 619 }
576 620
577 // The old handler sets |defer| to true in OnReadCompleted and 621 // The old handler sets |defer_or_cancel| to true in OnReadCompleted and
578 // OnResponseCompleted. The new handler sets |defer| to true in 622 // OnResponseCompleted. The new handler sets |defer_or_cancel| to true in
579 // OnResponseStarted and OnReadCompleted. 623 // OnResponseStarted and OnReadCompleted.
580 TEST_F(InterceptingResourceHandlerTest, DeferredOperations) { 624 TEST_F(InterceptingResourceHandlerTest, DeferredOperations) {
581 net::URLRequestContext context; 625 net::URLRequestContext context;
582 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 626 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
583 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 627 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
584 ResourceRequestInfo::AllocateForTesting(request.get(), 628 ResourceRequestInfo::AllocateForTesting(request.get(),
585 RESOURCE_TYPE_MAIN_FRAME, 629 RESOURCE_TYPE_MAIN_FRAME,
586 nullptr, // context 630 nullptr, // context
587 0, // render_process_id 631 0, // render_process_id
588 0, // render_view_id 632 0, // render_view_id
589 0, // render_frame_id 633 0, // render_frame_id
590 true, // is_main_frame 634 true, // is_main_frame
591 false, // parent_is_main_frame 635 false, // parent_is_main_frame
592 true, // allow_download 636 true, // allow_download
593 true, // is_async 637 true, // is_async
594 false); // is_using_lofi 638 false); // is_using_lofi
595 639
596 std::unique_ptr<TestResourceController> resource_controller =
597 base::MakeUnique<TestResourceController>();
598 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, 640 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
599 0}; 641 0};
600 std::string old_handler_body; 642 std::string old_handler_body;
601 std::unique_ptr<TestResourceHandler> old_handler( 643 std::unique_ptr<TestResourceHandler> old_handler(
602 new TestResourceHandler(&old_handler_status, &old_handler_body)); 644 new TestResourceHandler(&old_handler_status, &old_handler_body));
603 old_handler->SetBufferSize(10); 645 old_handler->SetBufferSize(10);
604 old_handler->set_defer_on_read_completed(true); 646 old_handler->set_defer_on_read_completed(true);
605 647
606 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); 648 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer();
607 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 649 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
608 new InterceptingResourceHandler(std::move(old_handler), request.get())); 650 new InterceptingResourceHandler(std::move(old_handler), request.get()));
609 intercepting_handler->SetController(resource_controller.get()); 651
652 TestResourceController resource_controller;
653 intercepting_handler->SetController(&resource_controller);
610 654
611 scoped_refptr<ResourceResponse> response(new ResourceResponse); 655 scoped_refptr<ResourceResponse> response(new ResourceResponse);
612 656
613 // Simulate the MimeSniffingResourceHandler buffering the data. 657 // Simulate the MimeSniffingResourceHandler buffering the data.
614 scoped_refptr<net::IOBuffer> read_buffer; 658 scoped_refptr<net::IOBuffer> read_buffer;
615 int buf_size = 0; 659 int buf_size = 0;
616 bool defer = false; 660 bool defer_or_cancel = false;
617 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 661 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
618 EXPECT_FALSE(defer); 662 EXPECT_FALSE(defer_or_cancel);
619 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 663 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
620 664
621 const char kData[] = "The data"; 665 const char kData[] = "The data";
622 ASSERT_NE(read_buffer.get(), old_buffer.get()); 666 ASSERT_NE(read_buffer.get(), old_buffer.get());
623 ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData)); 667 ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData));
624 memcpy(read_buffer->data(), kData, strlen(kData)); 668 memcpy(read_buffer->data(), kData, strlen(kData));
625 669
626 // Simulate the MimeSniffingResourceHandler asking the 670 // Simulate the MimeSniffingResourceHandler asking the
627 // InterceptingResourceHandler to switch to a new handler. 671 // InterceptingResourceHandler to switch to a new handler.
628 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, 672 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING,
629 0}; 673 0};
630 674
631 std::string new_handler_body; 675 std::string new_handler_body;
632 const std::string kPayload = "The long long long long long payload"; 676 const std::string kPayload = "The long long long long long payload";
633 ASSERT_GT(kPayload.size(), static_cast<size_t>(buf_size)); 677 ASSERT_GT(kPayload.size(), static_cast<size_t>(buf_size));
634 std::unique_ptr<TestResourceHandler> new_handler( 678 std::unique_ptr<TestResourceHandler> new_handler(
635 new TestResourceHandler(&new_handler_status, &new_handler_body)); 679 new TestResourceHandler(&new_handler_status, &new_handler_body));
636 new_handler->SetBufferSize(1); 680 new_handler->SetBufferSize(1);
637 new_handler->set_defer_on_will_start(true); 681 new_handler->set_defer_on_will_start(true);
638 new_handler->set_defer_on_response_started(true); 682 new_handler->set_defer_on_response_started(true);
639 new_handler->set_defer_on_read_completed(true); 683 new_handler->set_defer_on_read_completed(true);
640 new_handler->set_defer_on_response_completed(true); 684 new_handler->set_defer_on_response_completed(true);
641 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload); 685 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
642 686
643 // The response is received, and then deferred by the old handler's 687 // The response is received, and then deferred by the old handler's
644 // OnReadCompleted method. 688 // OnReadCompleted method.
645 ASSERT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 689 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
646 ASSERT_TRUE(defer); 690 ASSERT_TRUE(defer_or_cancel);
647 691
648 // The old handler has received the first N bytes of the payload synchronously 692 // The old handler has received the first N bytes of the payload synchronously
649 // where N is the size of the buffer exposed via OnWillRead. 693 // where N is the size of the buffer exposed via OnWillRead.
650 EXPECT_EQ("The long l", old_handler_body); 694 EXPECT_EQ("The long l", old_handler_body);
651 EXPECT_EQ(std::string(), new_handler_body); 695 EXPECT_EQ(std::string(), new_handler_body);
652 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::IO_PENDING); 696 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::IO_PENDING);
653 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING); 697 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
654 698
655 // Run until the new handler's OnWillStart method defers the request. 699 // Run until the new handler's OnWillStart method defers the request.
656 intercepting_handler->Resume(); 700 intercepting_handler->Resume();
657 EXPECT_EQ(0, resource_controller->resume_calls()); 701 EXPECT_EQ(0, resource_controller.resume_calls());
658 EXPECT_EQ(kPayload, old_handler_body); 702 EXPECT_EQ(kPayload, old_handler_body);
659 EXPECT_EQ(std::string(), new_handler_body); 703 EXPECT_EQ(std::string(), new_handler_body);
660 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); 704 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
661 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING); 705 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
662 706
663 // Run until the new handler's OnResponseStarted method defers the request. 707 // Run until the new handler's OnResponseStarted method defers the request.
664 intercepting_handler->Resume(); 708 intercepting_handler->Resume();
665 EXPECT_EQ(0, resource_controller->resume_calls()); 709 EXPECT_EQ(0, resource_controller.resume_calls());
666 EXPECT_EQ(std::string(), new_handler_body); 710 EXPECT_EQ(std::string(), new_handler_body);
667 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); 711 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
668 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING); 712 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
669 713
670 // Resuming should finally call back into the ResourceController. 714 // Resuming should finally call back into the ResourceController.
671 intercepting_handler->Resume(); 715 intercepting_handler->Resume();
672 EXPECT_EQ(1, resource_controller->resume_calls()); 716 EXPECT_EQ(1, resource_controller.resume_calls());
673 717
674 // Data is read, the new handler defers completion of the read. 718 // Data is read, the new handler defers completion of the read.
675 defer = false; 719 defer_or_cancel = false;
676 ASSERT_TRUE(intercepting_handler->OnReadCompleted(strlen(kData), &defer)); 720 intercepting_handler->OnReadCompleted(strlen(kData), &defer_or_cancel);
677 ASSERT_TRUE(defer); 721 ASSERT_TRUE(defer_or_cancel);
678 722
679 EXPECT_EQ(kPayload, old_handler_body); 723 EXPECT_EQ(kPayload, old_handler_body);
680 EXPECT_EQ("T", new_handler_body); 724 EXPECT_EQ("T", new_handler_body);
681 725
682 intercepting_handler->Resume(); 726 intercepting_handler->Resume();
683 EXPECT_EQ(2, resource_controller->resume_calls()); 727 EXPECT_EQ(2, resource_controller.resume_calls());
684 EXPECT_EQ(kPayload, old_handler_body); 728 EXPECT_EQ(kPayload, old_handler_body);
685 EXPECT_EQ(kData, new_handler_body); 729 EXPECT_EQ(kData, new_handler_body);
686 730
687 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); 731 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
688 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING); 732 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING);
689 733
690 defer = false; 734 defer_or_cancel = false;
691 intercepting_handler->OnResponseCompleted({net::URLRequestStatus::SUCCESS, 0}, 735 intercepting_handler->OnResponseCompleted({net::URLRequestStatus::SUCCESS, 0},
692 &defer); 736 &defer_or_cancel);
693 ASSERT_TRUE(defer); 737 EXPECT_FALSE(resource_controller.canceled());
738 ASSERT_TRUE(defer_or_cancel);
694 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); 739 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS);
695 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::SUCCESS); 740 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::SUCCESS);
696 } 741 }
697 742
698 // Test cancellation where there is only the old handler in an 743 // Test cancellation where there is only the old handler in an
699 // InterceptingResourceHandler. 744 // InterceptingResourceHandler.
700 TEST_F(InterceptingResourceHandlerTest, CancelOldHandler) { 745 TEST_F(InterceptingResourceHandlerTest, CancelOldHandler) {
701 net::URLRequestContext context; 746 net::URLRequestContext context;
702 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 747 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
703 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 748 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
704 ResourceRequestInfo::AllocateForTesting(request.get(), 749 ResourceRequestInfo::AllocateForTesting(request.get(),
705 RESOURCE_TYPE_MAIN_FRAME, 750 RESOURCE_TYPE_MAIN_FRAME,
706 nullptr, // context 751 nullptr, // context
707 0, // render_process_id 752 0, // render_process_id
708 0, // render_view_id 753 0, // render_view_id
709 0, // render_frame_id 754 0, // render_frame_id
710 true, // is_main_frame 755 true, // is_main_frame
711 false, // parent_is_main_frame 756 false, // parent_is_main_frame
712 true, // allow_download 757 true, // allow_download
713 true, // is_async 758 true, // is_async
714 false); // is_using_lofi 759 false); // is_using_lofi
715 760
716 std::unique_ptr<TestResourceController> resource_controller =
717 base::MakeUnique<TestResourceController>();
718 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, 761 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
719 0}; 762 0};
720 std::string old_handler_body; 763 std::string old_handler_body;
721 std::unique_ptr<TestResourceHandler> old_handler( 764 std::unique_ptr<TestResourceHandler> old_handler(
722 new TestResourceHandler(&old_handler_status, &old_handler_body)); 765 new TestResourceHandler(&old_handler_status, &old_handler_body));
723 766
724 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 767 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
725 new InterceptingResourceHandler(std::move(old_handler), request.get())); 768 new InterceptingResourceHandler(std::move(old_handler), request.get()));
726 intercepting_handler->SetController(resource_controller.get()); 769
770 TestResourceController resource_controller;
771 intercepting_handler->SetController(&resource_controller);
727 772
728 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status.status()); 773 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status.status());
729 774
730 bool defer = false; 775 bool defer_or_cancel = false;
731 intercepting_handler->OnResponseCompleted( 776 intercepting_handler->OnResponseCompleted(
732 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer); 777 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer_or_cancel);
733 ASSERT_FALSE(defer); 778 ASSERT_FALSE(defer_or_cancel);
734 EXPECT_EQ(0, resource_controller->resume_calls()); 779 EXPECT_EQ(0, resource_controller.resume_calls());
780 EXPECT_FALSE(resource_controller.canceled());
735 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status()); 781 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
736 } 782 }
737 783
738 // Test cancellation where there is only the new handler in an 784 // Test cancellation where there is only the new handler in an
739 // InterceptingResourceHandler. 785 // InterceptingResourceHandler.
740 TEST_F(InterceptingResourceHandlerTest, CancelNewHandler) { 786 TEST_F(InterceptingResourceHandlerTest, CancelNewHandler) {
741 net::URLRequestContext context; 787 net::URLRequestContext context;
742 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 788 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
743 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 789 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
744 ResourceRequestInfo::AllocateForTesting(request.get(), 790 ResourceRequestInfo::AllocateForTesting(request.get(),
745 RESOURCE_TYPE_MAIN_FRAME, 791 RESOURCE_TYPE_MAIN_FRAME,
746 nullptr, // context 792 nullptr, // context
747 0, // render_process_id 793 0, // render_process_id
748 0, // render_view_id 794 0, // render_view_id
749 0, // render_frame_id 795 0, // render_frame_id
750 true, // is_main_frame 796 true, // is_main_frame
751 false, // parent_is_main_frame 797 false, // parent_is_main_frame
752 true, // allow_download 798 true, // allow_download
753 true, // is_async 799 true, // is_async
754 false); // is_using_lofi 800 false); // is_using_lofi
755 801
756 std::unique_ptr<TestResourceController> resource_controller =
757 base::MakeUnique<TestResourceController>();
758 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, 802 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
759 0}; 803 0};
760 std::string old_handler_body; 804 std::string old_handler_body;
761 std::unique_ptr<TestResourceHandler> old_handler( 805 std::unique_ptr<TestResourceHandler> old_handler(
762 new TestResourceHandler(&old_handler_status, &old_handler_body)); 806 new TestResourceHandler(&old_handler_status, &old_handler_body));
763 807
764 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 808 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
765 new InterceptingResourceHandler(std::move(old_handler), request.get())); 809 new InterceptingResourceHandler(std::move(old_handler), request.get()));
766 intercepting_handler->SetController(resource_controller.get()); 810
811 TestResourceController resource_controller;
812 intercepting_handler->SetController(&resource_controller);
767 813
768 scoped_refptr<ResourceResponse> response(new ResourceResponse); 814 scoped_refptr<ResourceResponse> response(new ResourceResponse);
769 815
770 // Simulate the MimeSniffingResourceHandler buffering the data. 816 // Simulate the MimeSniffingResourceHandler buffering the data.
771 scoped_refptr<net::IOBuffer> read_buffer; 817 scoped_refptr<net::IOBuffer> read_buffer;
772 int buf_size = 0; 818 int buf_size = 0;
773 bool defer = false; 819 bool defer_or_cancel = false;
774 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 820 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
775 EXPECT_FALSE(defer); 821 EXPECT_FALSE(defer_or_cancel);
776 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 822 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
777 823
778 const char kData[] = "The data"; 824 const char kData[] = "The data";
779 ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData)); 825 ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData));
780 memcpy(read_buffer->data(), kData, strlen(kData)); 826 memcpy(read_buffer->data(), kData, strlen(kData));
781 827
782 // Simulate the MimeSniffingResourceHandler asking the 828 // Simulate the MimeSniffingResourceHandler asking the
783 // InterceptingResourceHandler to switch to a new handler. 829 // InterceptingResourceHandler to switch to a new handler.
784 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, 830 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING,
785 0}; 831 0};
786 832
787 std::string new_handler_body; 833 std::string new_handler_body;
788 const std::string kPayload = "The payload"; 834 const std::string kPayload = "The payload";
789 std::unique_ptr<TestResourceHandler> new_handler( 835 std::unique_ptr<TestResourceHandler> new_handler(
790 new TestResourceHandler(&new_handler_status, &new_handler_body)); 836 new TestResourceHandler(&new_handler_status, &new_handler_body));
791 new_handler->SetBufferSize(1); 837 new_handler->SetBufferSize(1);
792 new_handler->set_defer_on_response_started(true); 838 new_handler->set_defer_on_response_started(true);
793 new_handler->set_defer_on_response_completed(true); 839 new_handler->set_defer_on_response_completed(true);
794 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload); 840 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
795 841
796 // The response is received. 842 // The response is received.
797 ASSERT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 843 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
798 ASSERT_TRUE(defer); 844 ASSERT_TRUE(defer_or_cancel);
799 845
800 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status()); 846 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status());
801 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); 847 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
802 848
803 defer = false; 849 defer_or_cancel = false;
804 intercepting_handler->OnResponseCompleted( 850 intercepting_handler->OnResponseCompleted(
805 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer); 851 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer_or_cancel);
806 ASSERT_TRUE(defer); 852 ASSERT_TRUE(defer_or_cancel);
807 EXPECT_EQ(0, resource_controller->resume_calls()); 853 EXPECT_EQ(0, resource_controller.resume_calls());
854 EXPECT_FALSE(resource_controller.canceled());
808 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status()); 855 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status());
809 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status()); 856 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status());
810 } 857 }
811 858
812 // Test cancellation where there are both the old and the new handlers in an 859 // Test cancellation where there are both the old and the new handlers in an
813 // InterceptingResourceHandler. 860 // InterceptingResourceHandler.
814 TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) { 861 TEST_F(InterceptingResourceHandlerTest, CancelBothHandlers) {
815 net::URLRequestContext context; 862 net::URLRequestContext context;
816 std::unique_ptr<net::URLRequest> request(context.CreateRequest( 863 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
817 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr)); 864 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
818 ResourceRequestInfo::AllocateForTesting(request.get(), 865 ResourceRequestInfo::AllocateForTesting(request.get(),
819 RESOURCE_TYPE_MAIN_FRAME, 866 RESOURCE_TYPE_MAIN_FRAME,
820 nullptr, // context 867 nullptr, // context
821 0, // render_process_id 868 0, // render_process_id
822 0, // render_view_id 869 0, // render_view_id
823 0, // render_frame_id 870 0, // render_frame_id
824 true, // is_main_frame 871 true, // is_main_frame
825 false, // parent_is_main_frame 872 false, // parent_is_main_frame
826 true, // allow_download 873 true, // allow_download
827 true, // is_async 874 true, // is_async
828 false); // is_using_lofi 875 false); // is_using_lofi
829 876
830 std::unique_ptr<TestResourceController> resource_controller =
831 base::MakeUnique<TestResourceController>();
832 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, 877 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING,
833 0}; 878 0};
834 std::string old_handler_body; 879 std::string old_handler_body;
835 std::unique_ptr<TestResourceHandler> old_handler( 880 std::unique_ptr<TestResourceHandler> old_handler(
836 new TestResourceHandler(&old_handler_status, &old_handler_body)); 881 new TestResourceHandler(&old_handler_status, &old_handler_body));
837 old_handler->set_defer_on_read_completed(true); 882 old_handler->set_defer_on_read_completed(true);
838 883
839 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 884 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
840 new InterceptingResourceHandler(std::move(old_handler), request.get())); 885 new InterceptingResourceHandler(std::move(old_handler), request.get()));
841 intercepting_handler->SetController(resource_controller.get()); 886
887 TestResourceController resource_controller;
888 intercepting_handler->SetController(&resource_controller);
842 889
843 scoped_refptr<ResourceResponse> response(new ResourceResponse); 890 scoped_refptr<ResourceResponse> response(new ResourceResponse);
844 891
845 // Simulate the MimeSniffingResourceHandler buffering the data. 892 // Simulate the MimeSniffingResourceHandler buffering the data.
846 scoped_refptr<net::IOBuffer> read_buffer; 893 scoped_refptr<net::IOBuffer> read_buffer;
847 int buf_size = 0; 894 int buf_size = 0;
848 bool defer = false; 895 bool defer_or_cancel = false;
849 EXPECT_TRUE(intercepting_handler->OnWillStart(GURL(), &defer)); 896 intercepting_handler->OnWillStart(GURL(), &defer_or_cancel);
850 EXPECT_FALSE(defer); 897 EXPECT_FALSE(resource_controller.canceled());
898 EXPECT_FALSE(defer_or_cancel);
851 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1)); 899 EXPECT_TRUE(intercepting_handler->OnWillRead(&read_buffer, &buf_size, -1));
852 900
853 const char kData[] = "The data"; 901 const char kData[] = "The data";
854 ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData)); 902 ASSERT_GT(static_cast<size_t>(buf_size), strlen(kData));
855 memcpy(read_buffer->data(), kData, strlen(kData)); 903 memcpy(read_buffer->data(), kData, strlen(kData));
856 904
857 // Simulate the MimeSniffingResourceHandler asking the 905 // Simulate the MimeSniffingResourceHandler asking the
858 // InterceptingResourceHandler to switch to a new handler. 906 // InterceptingResourceHandler to switch to a new handler.
859 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING, 907 net::URLRequestStatus new_handler_status = {net::URLRequestStatus::IO_PENDING,
860 0}; 908 0};
861 909
862 std::string new_handler_body; 910 std::string new_handler_body;
863 const std::string kPayload = "The payload"; 911 const std::string kPayload = "The payload";
864 std::unique_ptr<TestResourceHandler> new_handler( 912 std::unique_ptr<TestResourceHandler> new_handler(
865 new TestResourceHandler(&new_handler_status, &new_handler_body)); 913 new TestResourceHandler(&new_handler_status, &new_handler_body));
866 new_handler->SetBufferSize(1); 914 new_handler->SetBufferSize(1);
867 new_handler->set_defer_on_response_completed(true); 915 new_handler->set_defer_on_response_completed(true);
868 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload); 916 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
869 917
870 // The response is received. 918 // The response is received.
871 ASSERT_TRUE(intercepting_handler->OnResponseStarted(response.get(), &defer)); 919 intercepting_handler->OnResponseStarted(response.get(), &defer_or_cancel);
872 ASSERT_TRUE(defer); 920 EXPECT_FALSE(resource_controller.canceled());
921 ASSERT_TRUE(defer_or_cancel);
873 922
874 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status.status()); 923 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, old_handler_status.status());
875 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status()); 924 EXPECT_EQ(net::URLRequestStatus::IO_PENDING, new_handler_status.status());
876 925
877 defer = false; 926 defer_or_cancel = false;
878 intercepting_handler->OnResponseCompleted( 927 intercepting_handler->OnResponseCompleted(
879 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer); 928 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer_or_cancel);
880 ASSERT_TRUE(defer); 929 EXPECT_FALSE(resource_controller.canceled());
881 EXPECT_EQ(0, resource_controller->resume_calls()); 930 ASSERT_TRUE(defer_or_cancel);
931 EXPECT_EQ(0, resource_controller.resume_calls());
882 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status()); 932 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
883 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status()); 933 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status());
884 } 934 }
885 935
886 } // namespace 936 } // namespace
887 937
888 } // namespace content 938 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/intercepting_resource_handler.cc ('k') | content/browser/loader/layered_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698