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

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

Issue 2005273002: Move MimeTypeResourceHandler before ThrottlingResourceHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 4 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/browser/loader/intercepting_resource_handler.h"
6
7 #include <stdint.h>
8
9 #include <memory>
10
11 #include "base/files/file_path.h"
12 #include "base/location.h"
13 #include "base/logging.h"
14 #include "base/macros.h"
15 #include "base/single_thread_task_runner.h"
16 #include "base/threading/thread_task_runner_handle.h"
17 #include "content/public/browser/resource_controller.h"
18 #include "content/public/browser/resource_request_info.h"
19 #include "content/public/common/resource_response.h"
20 #include "content/public/common/webplugininfo.h"
21 #include "content/public/test/test_browser_thread_bundle.h"
22 #include "content/public/test/test_utils.h"
23 #include "net/base/net_errors.h"
24 #include "net/url_request/url_request_context.h"
25 #include "net/url_request/url_request_status.h"
26 #include "testing/gtest/include/gtest/gtest.h"
27 #include "url/gurl.h"
28
29 namespace content {
30
31 namespace {
32
33 class TestResourceHandler : public ResourceHandler {
34 public:
35 explicit TestResourceHandler(net::URLRequestStatus* request_status)
36 : TestResourceHandler(request_status, true, true, true) {}
37
38 TestResourceHandler(net::URLRequestStatus* request_status,
39 bool on_response_started,
40 bool on_will_read,
41 bool on_read_completed)
42 : ResourceHandler(nullptr),
43 buffer_(new net::IOBuffer(2048)),
44 request_status_(request_status),
45 on_response_started_(on_response_started),
46 on_will_read_(on_will_read),
47 on_read_completed_(on_read_completed) {
48 memset(buffer_->data(), '\0', 2048);
49 }
50
51 ~TestResourceHandler() override {}
52
53 void SetController(ResourceController* controller) override {}
54
55 bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
56 ResourceResponse* response,
57 bool* defer) override {
58 NOTREACHED();
59 return false;
60 }
61
62 bool OnResponseStarted(ResourceResponse* response, bool* defer) override {
63 return on_response_started_;
64 }
65
66 bool OnWillStart(const GURL& url, bool* defer) override { return false; }
67
68 bool OnWillRead(scoped_refptr<net::IOBuffer>* buf,
69 int* buf_size,
70 int min_size) override {
71 *buf = buffer_;
72 *buf_size = 2048;
73 return on_will_read_;
74 }
75
76 bool OnReadCompleted(int bytes_read, bool* defer) override {
mmenke 2016/07/25 17:39:31 Seems like we should also record and check bytes_r
clamy 2016/07/26 16:24:15 Done.
77 DCHECK_LT(bytes_read, 2048);
78 return on_read_completed_;
79 }
80
81 void OnResponseCompleted(const net::URLRequestStatus& status,
82 const std::string& security_info,
83 bool* defer) override {
84 *request_status_ = status;
85 }
86
87 void OnDataDownloaded(int bytes_downloaded) override { NOTREACHED(); }
88
89 scoped_refptr<net::IOBuffer> buffer() { return buffer_; }
90
91 private:
92 scoped_refptr<net::IOBuffer> buffer_;
93 net::URLRequestStatus* request_status_;
94 bool on_response_started_;
95 bool on_will_read_;
96 bool on_read_completed_;
97 DISALLOW_COPY_AND_ASSIGN(TestResourceHandler);
mmenke 2016/07/25 17:39:31 nit: Blank line before DISALLOW_COPY_AND_ASSIGN.
clamy 2016/07/26 16:24:15 Done.
98 };
99
100 class InterceptingResourceHandlerTest : public testing::Test {
101 public:
102 InterceptingResourceHandlerTest() {}
103
104 private:
105 TestBrowserThreadBundle thread_bundle_;
106 };
107
108 // Tests that the data received is transmitted to the newly created
109 // ResourceHandler.
110 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchNoPayload) {
111 net::URLRequestContext context;
112 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
113 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
114 ResourceRequestInfo::AllocateForTesting(request.get(),
115 RESOURCE_TYPE_MAIN_FRAME,
116 nullptr, // context
117 0, // render_process_id
118 0, // render_view_id
119 0, // render_frame_id
120 true, // is_main_frame
121 false, // parent_is_main_frame
122 true, // allow_download
123 true, // is_async
124 false); // is_using_lofi
125
126 net::URLRequestStatus old_handler_status;
127 std::unique_ptr<ResourceHandler> old_handler(
128 new TestResourceHandler(&old_handler_status));
129 scoped_refptr<net::IOBuffer> old_buffer =
130 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
131 std::unique_ptr<ResourceHandler> handler(
132 new InterceptingResourceHandler(std::move(old_handler), request.get()));
133 InterceptingResourceHandler* intercepting_handler =
134 static_cast<InterceptingResourceHandler*>(handler.get());
135
136 scoped_refptr<ResourceResponse> response(new ResourceResponse);
137
138 // Simulate the MimeSniffingResourceHandler buffering the data.
139 scoped_refptr<net::IOBuffer> read_buffer;
140 int buf_size = 0;
141 handler->OnWillRead(&read_buffer, &buf_size, -1);
142
143 const char kData[] = "The data";
144 CHECK_EQ(read_buffer.get(), old_buffer.get());
145 memcpy(read_buffer->data(), kData, sizeof(kData));
146
147 // Simulate the MimeSniffingResourceHandler asking the
148 // InterceptingResourceHandler to switch to a new handler.
149 net::URLRequestStatus new_handler_status;
150 std::unique_ptr<ResourceHandler> new_handler(
151 new TestResourceHandler(&new_handler_status));
152 TestResourceHandler* new_test_handler =
153 static_cast<TestResourceHandler*>(new_handler.get());
154 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
155
156 // The response is received. The new ResourceHandler should be used handle
157 // the download.
158 bool defer = false;
159 handler->OnResponseStarted(response.get(), &defer);
160 EXPECT_FALSE(defer);
161
162 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
163 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
164
165 // It should not have received the download data yet.
166 EXPECT_FALSE(
167 !memcmp(kData, new_test_handler->buffer()->data(), sizeof(kData)));
168
169 // The read is replayed by the MimeSniffingResourceHandler. The data should
170 // have been received by the new handler.
171 handler->OnReadCompleted(sizeof(kData), &defer);
172 EXPECT_FALSE(defer);
173 EXPECT_TRUE(
174 !memcmp(kData, new_test_handler->buffer()->data(), sizeof(kData)));
175
176 // Make sure another read behave as expected.
177 memset(new_test_handler->buffer()->data(), '\0', 2048);
178 buf_size = 0;
179 handler->OnWillRead(&read_buffer, &buf_size, -1);
180 CHECK_EQ(read_buffer.get(), new_test_handler->buffer());
181
182 const char kData2[] = "Data 2";
183 EXPECT_FALSE(
184 !memcmp(kData2, new_test_handler->buffer()->data(), sizeof(kData2)));
185 memcpy(read_buffer->data(), kData2, sizeof(kData2));
186
187 handler->OnReadCompleted(sizeof(kData2), &defer);
188 EXPECT_FALSE(defer);
189 EXPECT_TRUE(
190 !memcmp(kData2, new_test_handler->buffer()->data(), sizeof(kData2)));
191 }
192
193 // Tests that the data received is transmitted to the newly created
194 // ResourceHandler and the payload to the old ResourceHandler.
195 TEST_F(InterceptingResourceHandlerTest, HandlerSwitchWithPayload) {
196 net::URLRequestContext context;
197 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
198 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
199 ResourceRequestInfo::AllocateForTesting(request.get(),
200 RESOURCE_TYPE_MAIN_FRAME,
201 nullptr, // context
202 0, // render_process_id
203 0, // render_view_id
204 0, // render_frame_id
205 true, // is_main_frame
206 false, // parent_is_main_frame
207 true, // allow_download
208 true, // is_async
209 false); // is_using_lofi
210
211 net::URLRequestStatus old_handler_status;
212 std::unique_ptr<ResourceHandler> old_handler(
213 new TestResourceHandler(&old_handler_status));
214 scoped_refptr<net::IOBuffer> old_buffer =
215 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
216 std::unique_ptr<ResourceHandler> handler(
217 new InterceptingResourceHandler(std::move(old_handler), request.get()));
218 InterceptingResourceHandler* intercepting_handler =
219 static_cast<InterceptingResourceHandler*>(handler.get());
220
221 scoped_refptr<ResourceResponse> response(new ResourceResponse);
222
223 // Simulate the MimeSniffingResourceHandler buffering the data.
224 scoped_refptr<net::IOBuffer> read_buffer;
225 int buf_size = 0;
226 handler->OnWillRead(&read_buffer, &buf_size, -1);
227
228 const char kData[] = "The data";
229 CHECK_EQ(read_buffer.get(), old_buffer.get());
230 memcpy(read_buffer->data(), kData, sizeof(kData));
231
232 // Simulate the MimeSniffingResourceHandler asking the
233 // InterceptingResourceHandler to switch to a new handler.
234 const char kPayload[] = "The payload";
235 net::URLRequestStatus new_handler_status;
236 std::unique_ptr<ResourceHandler> new_handler(
237 new TestResourceHandler(&new_handler_status));
238 TestResourceHandler* new_test_handler =
239 static_cast<TestResourceHandler*>(new_handler.get());
240 intercepting_handler->UseNewHandler(std::move(new_handler), kPayload);
241
242 // The old handler should not have received the payload yet.
243 EXPECT_FALSE(!memcmp(kPayload, old_buffer->data(), sizeof(kPayload)));
244
245 // The response is received. The new ResourceHandler should be used to handle
246 // the download.
247 bool defer = false;
248 handler->OnResponseStarted(response.get(), &defer);
249 EXPECT_FALSE(defer);
250
251 // The old handler should have received the payload.
252 EXPECT_TRUE(!memcmp(kPayload, old_buffer->data(), sizeof(kPayload)));
253
254 EXPECT_EQ(net::URLRequestStatus::SUCCESS, old_handler_status.status());
255 EXPECT_EQ(net::OK, old_handler_status.error());
256
257 // It should not have received the download data yet.
258 EXPECT_FALSE(
259 !memcmp(kData, new_test_handler->buffer()->data(), sizeof(kData)));
260
261 // The read is replayed by the MimeSniffingResourceHandler. The data should
262 // have been received by the new handler.
263 handler->OnReadCompleted(sizeof(kData), &defer);
264 EXPECT_FALSE(defer);
265 EXPECT_TRUE(
266 !memcmp(kData, new_test_handler->buffer()->data(), sizeof(kData)));
267
268 // Make sure another read behave as expected.
269 memset(new_test_handler->buffer()->data(), '\0', 2048);
270 buf_size = 0;
271 handler->OnWillRead(&read_buffer, &buf_size, -1);
272 CHECK_EQ(read_buffer.get(), new_test_handler->buffer());
273
274 const char kData2[] = "Data 2";
275 EXPECT_FALSE(
276 !memcmp(kData2, new_test_handler->buffer()->data(), sizeof(kData2)));
277 memcpy(read_buffer->data(), kData2, sizeof(kData2));
278
279 handler->OnReadCompleted(sizeof(kData2), &defer);
280 EXPECT_FALSE(defer);
281 EXPECT_TRUE(
282 !memcmp(kData2, new_test_handler->buffer()->data(), sizeof(kData2)));
283 }
284
285 // Tests that the handler behaves properly when it doesn't have to use an
286 // alternate next handler.
287 TEST_F(InterceptingResourceHandlerTest, NoSwitching) {
288 net::URLRequestContext context;
289 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
290 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
291 ResourceRequestInfo::AllocateForTesting(request.get(),
292 RESOURCE_TYPE_MAIN_FRAME,
293 nullptr, // context
294 0, // render_process_id
295 0, // render_view_id
296 0, // render_frame_id
297 true, // is_main_frame
298 false, // parent_is_main_frame
299 true, // allow_download
300 true, // is_async
301 false); // is_using_lofi
302
303 net::URLRequestStatus old_handler_status;
304 std::unique_ptr<ResourceHandler> old_handler(
305 new TestResourceHandler(&old_handler_status));
306 scoped_refptr<net::IOBuffer> old_buffer =
307 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
308 std::unique_ptr<ResourceHandler> handler(
309 new InterceptingResourceHandler(std::move(old_handler), request.get()));
310
311 scoped_refptr<ResourceResponse> response(new ResourceResponse);
312
313 // Simulate the MimeSniffingResourceHandler buffering the data.
314 scoped_refptr<net::IOBuffer> read_buffer;
315 int buf_size = 0;
316 handler->OnWillRead(&read_buffer, &buf_size, -1);
317
318 const char kData[] = "The data";
319 EXPECT_FALSE(!memcmp(kData, old_buffer->data(), sizeof(kData)));
320
321 CHECK_EQ(read_buffer.get(), old_buffer.get());
322 memcpy(read_buffer->data(), kData, sizeof(kData));
323
324 // The response is received. The new handler should not change.
325 bool defer = false;
326 handler->OnResponseStarted(response.get(), &defer);
327 EXPECT_FALSE(defer);
328
329 // The read is replayed by the MimeSniffingResourceHandler. The data should
330 // have been received by the old handler.
331 handler->OnReadCompleted(sizeof(kData), &defer);
332 EXPECT_FALSE(defer);
333 EXPECT_TRUE(!memcmp(kData, old_buffer->data(), sizeof(kData)));
334
335 // Make sure another read behave as expected.
336 memset(old_buffer->data(), '\0', 2048);
337 buf_size = 0;
338 handler->OnWillRead(&read_buffer, &buf_size, -1);
339 CHECK_EQ(read_buffer.get(), old_buffer.get());
340
341 const char kData2[] = "Data 2";
342 EXPECT_FALSE(!memcmp(kData2, old_buffer->data(), sizeof(kData2)));
343 memcpy(read_buffer->data(), kData2, sizeof(kData2));
344
345 handler->OnReadCompleted(sizeof(kData2), &defer);
346 EXPECT_FALSE(defer);
347 EXPECT_TRUE(!memcmp(kData2, old_buffer->data(), sizeof(kData2)));
348 }
349
350 // Tests that the handler behaves properly if the old handler fails will read.
351 TEST_F(InterceptingResourceHandlerTest, OldHandlerFailsWillRead) {
352 net::URLRequestContext context;
353 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
354 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
355 ResourceRequestInfo::AllocateForTesting(request.get(),
356 RESOURCE_TYPE_MAIN_FRAME,
357 nullptr, // context
358 0, // render_process_id
359 0, // render_view_id
360 0, // render_frame_id
361 true, // is_main_frame
362 false, // parent_is_main_frame
363 true, // allow_download
364 true, // is_async
365 false); // is_using_lofi
366
367 net::URLRequestStatus old_handler_status;
368 std::unique_ptr<ResourceHandler> old_handler(
369 new TestResourceHandler(&old_handler_status, true, false, true));
370 scoped_refptr<net::IOBuffer> old_buffer =
371 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
372 std::unique_ptr<ResourceHandler> handler(
373 new InterceptingResourceHandler(std::move(old_handler), request.get()));
374
375 scoped_refptr<ResourceResponse> response(new ResourceResponse);
376
377 // Simulate the MimeSniffingResourceHandler buffering the data. The old
378 // handler should tell us to fail.
379 scoped_refptr<net::IOBuffer> read_buffer;
380 int buf_size = 0;
381 EXPECT_FALSE(handler->OnWillRead(&read_buffer, &buf_size, -1));
382 }
383
384 // Tests that the handler behaves properly if the new handler fails response
385 // started.
386 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsResponseStarted) {
387 net::URLRequestContext context;
388 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
389 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
390 ResourceRequestInfo::AllocateForTesting(request.get(),
391 RESOURCE_TYPE_MAIN_FRAME,
392 nullptr, // context
393 0, // render_process_id
394 0, // render_view_id
395 0, // render_frame_id
396 true, // is_main_frame
397 false, // parent_is_main_frame
398 true, // allow_download
399 true, // is_async
400 false); // is_using_lofi
401
402 net::URLRequestStatus old_handler_status;
403 std::unique_ptr<ResourceHandler> old_handler(
404 new TestResourceHandler(&old_handler_status));
405 scoped_refptr<net::IOBuffer> old_buffer =
406 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
407 std::unique_ptr<ResourceHandler> handler(
408 new InterceptingResourceHandler(std::move(old_handler), request.get()));
409 InterceptingResourceHandler* intercepting_handler =
410 static_cast<InterceptingResourceHandler*>(handler.get());
411
412 scoped_refptr<ResourceResponse> response(new ResourceResponse);
413
414 // Simulate the MimeSniffingResourceHandler buffering the data.
415 scoped_refptr<net::IOBuffer> read_buffer;
416 int buf_size = 0;
417 EXPECT_TRUE(handler->OnWillRead(&read_buffer, &buf_size, -1));
418
419 const char kData[] = "The data";
420 CHECK_EQ(read_buffer.get(), old_buffer.get());
421 memcpy(read_buffer->data(), kData, sizeof(kData));
422
423 // Simulate the MimeSniffingResourceHandler asking the
424 // InterceptingResourceHandler to switch to a new handler.
425 net::URLRequestStatus new_handler_status;
426 std::unique_ptr<ResourceHandler> new_handler(
427 new TestResourceHandler(&new_handler_status, false, true, true));
428 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
429
430 // The response is received. The new ResourceHandler should tell us to fail.
431 bool defer = false;
432 EXPECT_FALSE(handler->OnResponseStarted(response.get(), &defer));
433 EXPECT_FALSE(defer);
434 }
435
436 // Tests that the handler behaves properly if the new handler fails will read.
437 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsWillRead) {
438 net::URLRequestContext context;
439 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
440 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
441 ResourceRequestInfo::AllocateForTesting(request.get(),
442 RESOURCE_TYPE_MAIN_FRAME,
443 nullptr, // context
444 0, // render_process_id
445 0, // render_view_id
446 0, // render_frame_id
447 true, // is_main_frame
448 false, // parent_is_main_frame
449 true, // allow_download
450 true, // is_async
451 false); // is_using_lofi
452
453 net::URLRequestStatus old_handler_status;
454 std::unique_ptr<ResourceHandler> old_handler(
455 new TestResourceHandler(&old_handler_status));
456 scoped_refptr<net::IOBuffer> old_buffer =
457 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
458 std::unique_ptr<ResourceHandler> handler(
459 new InterceptingResourceHandler(std::move(old_handler), request.get()));
460 InterceptingResourceHandler* intercepting_handler =
461 static_cast<InterceptingResourceHandler*>(handler.get());
462
463 scoped_refptr<ResourceResponse> response(new ResourceResponse);
464
465 // Simulate the MimeSniffingResourceHandler buffering the data.
466 scoped_refptr<net::IOBuffer> read_buffer;
467 int buf_size = 0;
468 EXPECT_TRUE(handler->OnWillRead(&read_buffer, &buf_size, -1));
469
470 const char kData[] = "The data";
471 CHECK_EQ(read_buffer.get(), old_buffer.get());
472 memcpy(read_buffer->data(), kData, sizeof(kData));
473
474 // Simulate the MimeSniffingResourceHandler asking the
475 // InterceptingResourceHandler to switch to a new handler.
476 net::URLRequestStatus new_handler_status;
477 std::unique_ptr<ResourceHandler> new_handler(
478 new TestResourceHandler(&new_handler_status, true, false, true));
479 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
480
481 // The response is received. The new handler should not have been asked to
482 // read yet.
483 bool defer = false;
484 EXPECT_TRUE(handler->OnResponseStarted(response.get(), &defer));
485 EXPECT_FALSE(defer);
486 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
487 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
488
489 // The read is replayed by the MimeSniffingResourceHandler. The new handler
490 // should tell us to fail.
491 EXPECT_FALSE(handler->OnReadCompleted(sizeof(kData), &defer));
492 EXPECT_FALSE(defer);
493 }
494
495 // Tests that the handler behaves properly if the new handler fails read
496 // completed.
497 TEST_F(InterceptingResourceHandlerTest, NewHandlerFailsReadCompleted) {
498 net::URLRequestContext context;
499 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
500 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
501 ResourceRequestInfo::AllocateForTesting(request.get(),
502 RESOURCE_TYPE_MAIN_FRAME,
503 nullptr, // context
504 0, // render_process_id
505 0, // render_view_id
506 0, // render_frame_id
507 true, // is_main_frame
508 false, // parent_is_main_frame
509 true, // allow_download
510 true, // is_async
511 false); // is_using_lofi
512
513 net::URLRequestStatus old_handler_status;
514 std::unique_ptr<ResourceHandler> old_handler(
515 new TestResourceHandler(&old_handler_status));
516 scoped_refptr<net::IOBuffer> old_buffer =
517 static_cast<TestResourceHandler*>(old_handler.get())->buffer();
518 std::unique_ptr<ResourceHandler> handler(
519 new InterceptingResourceHandler(std::move(old_handler), request.get()));
520 InterceptingResourceHandler* intercepting_handler =
521 static_cast<InterceptingResourceHandler*>(handler.get());
522
523 scoped_refptr<ResourceResponse> response(new ResourceResponse);
524
525 // Simulate the MimeSniffingResourceHandler buffering the data.
526 scoped_refptr<net::IOBuffer> read_buffer;
527 int buf_size = 0;
528 EXPECT_TRUE(handler->OnWillRead(&read_buffer, &buf_size, -1));
529
530 const char kData[] = "The data";
531 CHECK_EQ(read_buffer.get(), old_buffer.get());
532 memcpy(read_buffer->data(), kData, sizeof(kData));
533
534 // Simulate the MimeSniffingResourceHandler asking the
535 // InterceptingResourceHandler to switch to a new handler.
536 net::URLRequestStatus new_handler_status;
537 std::unique_ptr<ResourceHandler> new_handler(
538 new TestResourceHandler(&new_handler_status, true, true, false));
539 intercepting_handler->UseNewHandler(std::move(new_handler), std::string());
540
541 // The response is received.
542 bool defer = false;
543 EXPECT_TRUE(handler->OnResponseStarted(response.get(), &defer));
544 EXPECT_FALSE(defer);
545 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status());
546 EXPECT_EQ(net::ERR_ABORTED, old_handler_status.error());
547
548 // The read is replayed by the MimeSniffingResourceHandler. The new handler
549 // should tell us to fail.
550 EXPECT_FALSE(handler->OnReadCompleted(sizeof(kData), &defer));
551 EXPECT_FALSE(defer);
552 }
553
554 } // namespace
555
556 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698