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

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

Issue 2323623002: Do not sniff mime type for fetch() requests (Closed)
Patch Set: fix Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/mime_sniffing_resource_handler.h" 5 #include "content/browser/loader/mime_sniffing_resource_handler.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 is_main_frame, // is_main_frame 335 is_main_frame, // is_main_frame
336 false, // parent_is_main_frame 336 false, // parent_is_main_frame
337 false, // allow_download 337 false, // allow_download
338 true, // is_async 338 true, // is_async
339 false); // is_using_lofi 339 false); // is_using_lofi
340 340
341 std::unique_ptr<ResourceHandler> mime_sniffing_handler( 341 std::unique_ptr<ResourceHandler> mime_sniffing_handler(
342 new MimeSniffingResourceHandler( 342 new MimeSniffingResourceHandler(
343 std::unique_ptr<ResourceHandler>( 343 std::unique_ptr<ResourceHandler>(
344 new TestResourceHandler(false, false, false, false, false)), 344 new TestResourceHandler(false, false, false, false, false)),
345 nullptr, nullptr, nullptr, request)); 345 nullptr, nullptr, nullptr, request,
346 REQUEST_CONTEXT_TYPE_UNSPECIFIED));
346 347
347 bool defer = false; 348 bool defer = false;
348 mime_sniffing_handler->OnWillStart(request->url(), &defer); 349 mime_sniffing_handler->OnWillStart(request->url(), &defer);
349 content::RunAllPendingInMessageLoop(); 350 content::RunAllPendingInMessageLoop();
350 351
351 std::string accept_header; 352 std::string accept_header;
352 request->extra_request_headers().GetHeader("Accept", &accept_header); 353 request->extra_request_headers().GetHeader("Accept", &accept_header);
353 return accept_header; 354 return accept_header;
354 } 355 }
355 356
(...skipping 20 matching lines...) Expand all
376 TestResourceDispatcherHostDelegate host_delegate(must_download); 377 TestResourceDispatcherHostDelegate host_delegate(must_download);
377 host.SetDelegate(&host_delegate); 378 host.SetDelegate(&host_delegate);
378 379
379 TestFakePluginService plugin_service(plugin_available_, plugin_stale_); 380 TestFakePluginService plugin_service(plugin_available_, plugin_stale_);
380 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 381 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
381 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(), 382 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(),
382 nullptr)); 383 nullptr));
383 std::unique_ptr<ResourceHandler> mime_handler(new MimeSniffingResourceHandler( 384 std::unique_ptr<ResourceHandler> mime_handler(new MimeSniffingResourceHandler(
384 std::unique_ptr<ResourceHandler>( 385 std::unique_ptr<ResourceHandler>(
385 new TestResourceHandler(false, false, false, false, false)), 386 new TestResourceHandler(false, false, false, false, false)),
386 &host, &plugin_service, intercepting_handler.get(), request.get())); 387 &host, &plugin_service, intercepting_handler.get(), request.get(),
388 REQUEST_CONTEXT_TYPE_UNSPECIFIED));
387 389
388 TestResourceController resource_controller; 390 TestResourceController resource_controller;
389 mime_handler->SetController(&resource_controller); 391 mime_handler->SetController(&resource_controller);
390 392
391 scoped_refptr<ResourceResponse> response(new ResourceResponse); 393 scoped_refptr<ResourceResponse> response(new ResourceResponse);
392 // The MIME type isn't important but it shouldn't be empty. 394 // The MIME type isn't important but it shouldn't be empty.
393 response->head.mime_type = "application/pdf"; 395 response->head.mime_type = "application/pdf";
394 396
395 bool defer = false; 397 bool defer = false;
396 mime_handler->OnResponseStarted(response.get(), &defer); 398 mime_handler->OnResponseStarted(response.get(), &defer);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 TestFakePluginService plugin_service(plugin_available_, plugin_stale_); 432 TestFakePluginService plugin_service(plugin_available_, plugin_stale_);
431 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 433 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
432 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(), 434 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(),
433 nullptr)); 435 nullptr));
434 std::unique_ptr<TestResourceHandler> scoped_test_handler = 436 std::unique_ptr<TestResourceHandler> scoped_test_handler =
435 std::unique_ptr<TestResourceHandler>(new TestResourceHandler( 437 std::unique_ptr<TestResourceHandler>(new TestResourceHandler(
436 response_started, defer_response_started, will_read, read_completed, 438 response_started, defer_response_started, will_read, read_completed,
437 defer_read_completed)); 439 defer_read_completed));
438 TestResourceHandler* test_handler = scoped_test_handler.get(); 440 TestResourceHandler* test_handler = scoped_test_handler.get();
439 std::unique_ptr<MimeSniffingResourceHandler> mime_sniffing_handler( 441 std::unique_ptr<MimeSniffingResourceHandler> mime_sniffing_handler(
440 new MimeSniffingResourceHandler( 442 new MimeSniffingResourceHandler(std::move(scoped_test_handler), &host,
441 std::move(scoped_test_handler), &host, &plugin_service, 443 &plugin_service,
442 intercepting_handler.get(), request.get())); 444 intercepting_handler.get(), request.get(),
445 REQUEST_CONTEXT_TYPE_UNSPECIFIED));
443 446
444 TestResourceController resource_controller; 447 TestResourceController resource_controller;
445 mime_sniffing_handler->SetController(&resource_controller); 448 mime_sniffing_handler->SetController(&resource_controller);
446 449
447 bool defer = false; 450 bool defer = false;
448 mime_sniffing_handler->OnWillStart(GURL(), &defer); 451 mime_sniffing_handler->OnWillStart(GURL(), &defer);
449 452
450 // The response should be sniffed. 453 // The response should be sniffed.
451 scoped_refptr<ResourceResponse> response(new ResourceResponse); 454 scoped_refptr<ResourceResponse> response(new ResourceResponse);
452 response->head.mime_type.assign("text/plain"); 455 response->head.mime_type.assign("text/plain");
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( 594 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
592 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(), 595 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(),
593 nullptr)); 596 nullptr));
594 597
595 std::unique_ptr<TestResourceHandler> scoped_test_handler = 598 std::unique_ptr<TestResourceHandler> scoped_test_handler =
596 std::unique_ptr<TestResourceHandler>(new TestResourceHandler( 599 std::unique_ptr<TestResourceHandler>(new TestResourceHandler(
597 response_started, defer_response_started, will_read, read_completed, 600 response_started, defer_response_started, will_read, read_completed,
598 defer_read_completed)); 601 defer_read_completed));
599 TestResourceHandler* test_handler = scoped_test_handler.get(); 602 TestResourceHandler* test_handler = scoped_test_handler.get();
600 std::unique_ptr<MimeSniffingResourceHandler> mime_sniffing_handler( 603 std::unique_ptr<MimeSniffingResourceHandler> mime_sniffing_handler(
601 new MimeSniffingResourceHandler( 604 new MimeSniffingResourceHandler(std::move(scoped_test_handler), &host,
602 std::move(scoped_test_handler), &host, &plugin_service, 605 &plugin_service,
603 intercepting_handler.get(), request.get())); 606 intercepting_handler.get(), request.get(),
607 REQUEST_CONTEXT_TYPE_UNSPECIFIED));
604 608
605 TestResourceController resource_controller; 609 TestResourceController resource_controller;
606 mime_sniffing_handler->SetController(&resource_controller); 610 mime_sniffing_handler->SetController(&resource_controller);
607 611
608 int expected_resume_calls = 0; 612 int expected_resume_calls = 0;
609 613
610 bool defer = false; 614 bool defer = false;
611 mime_sniffing_handler->OnWillStart(GURL(), &defer); 615 mime_sniffing_handler->OnWillStart(GURL(), &defer);
612 616
613 // The response should not be sniffed. 617 // The response should not be sniffed.
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 986
983 TestFakePluginService plugin_service(false, false); 987 TestFakePluginService plugin_service(false, false);
984 std::unique_ptr<ResourceHandler> intercepting_handler( 988 std::unique_ptr<ResourceHandler> intercepting_handler(
985 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(), 989 new InterceptingResourceHandler(std::unique_ptr<ResourceHandler>(),
986 nullptr)); 990 nullptr));
987 std::unique_ptr<ResourceHandler> mime_handler(new MimeSniffingResourceHandler( 991 std::unique_ptr<ResourceHandler> mime_handler(new MimeSniffingResourceHandler(
988 std::unique_ptr<ResourceHandler>( 992 std::unique_ptr<ResourceHandler>(
989 new TestResourceHandler(true, false, true, true, false)), 993 new TestResourceHandler(true, false, true, true, false)),
990 &host, &plugin_service, 994 &host, &plugin_service,
991 static_cast<InterceptingResourceHandler*>(intercepting_handler.get()), 995 static_cast<InterceptingResourceHandler*>(intercepting_handler.get()),
992 request.get())); 996 request.get(), REQUEST_CONTEXT_TYPE_UNSPECIFIED));
993 997
994 TestResourceController resource_controller; 998 TestResourceController resource_controller;
995 mime_handler->SetController(&resource_controller); 999 mime_handler->SetController(&resource_controller);
996 1000
997 // Simulate a 304 response. 1001 // Simulate a 304 response.
998 scoped_refptr<ResourceResponse> response(new ResourceResponse); 1002 scoped_refptr<ResourceResponse> response(new ResourceResponse);
999 // The MIME type isn't important but it shouldn't be empty. 1003 // The MIME type isn't important but it shouldn't be empty.
1000 response->head.mime_type = "application/pdf"; 1004 response->head.mime_type = "application/pdf";
1001 response->head.headers = new net::HttpResponseHeaders("HTTP/1.x 304 OK"); 1005 response->head.headers = new net::HttpResponseHeaders("HTTP/1.x 304 OK");
1002 1006
1003 // The response is received. No new ResourceHandler should be created to 1007 // The response is received. No new ResourceHandler should be created to
1004 // handle the download. 1008 // handle the download.
1005 bool defer = false; 1009 bool defer = false;
1006 mime_handler->OnResponseStarted(response.get(), &defer); 1010 mime_handler->OnResponseStarted(response.get(), &defer);
1007 EXPECT_FALSE(defer); 1011 EXPECT_FALSE(defer);
1008 EXPECT_FALSE(host.new_resource_handler()); 1012 EXPECT_FALSE(host.new_resource_handler());
1009 1013
1010 content::RunAllPendingInMessageLoop(); 1014 content::RunAllPendingInMessageLoop();
1011 } 1015 }
1012 1016
1017 TEST_F(MimeSniffingResourceHandlerTest, FetchShouldDisableMimeSniffing) {
1018 net::URLRequestContext context;
1019 std::unique_ptr<net::URLRequest> request(context.CreateRequest(
1020 GURL("http://www.google.com"), net::DEFAULT_PRIORITY, nullptr));
1021 ResourceRequestInfo::AllocateForTesting(request.get(),
1022 RESOURCE_TYPE_MAIN_FRAME,
1023 nullptr, // context
1024 0, // render_process_id
1025 0, // render_view_id
1026 0, // render_frame_id
1027 true, // is_main_frame
1028 false, // parent_is_main_frame
1029 false, // allow_download
1030 true, // is_async
1031 false); // is_using_lofi
1032
1033 TestResourceDispatcherHost host(false);
1034
1035 TestFakePluginService plugin_service(false, false);
1036 std::unique_ptr<InterceptingResourceHandler> intercepting_handler(
1037 new InterceptingResourceHandler(nullptr, nullptr));
1038
1039 std::unique_ptr<TestResourceHandler> scoped_test_handler(
1040 new TestResourceHandler(false, // response_started
1041 false, // defer_response_started
1042 true, // will_read,
1043 true, // read_completed,
1044 false)); // defer_read_completed
1045 std::unique_ptr<ResourceHandler> mime_sniffing_handler(
1046 new MimeSniffingResourceHandler(std::move(scoped_test_handler), &host,
1047 &plugin_service,
1048 intercepting_handler.get(), request.get(),
1049 REQUEST_CONTEXT_TYPE_FETCH));
1050
1051 TestResourceController resource_controller;
1052 mime_sniffing_handler->SetController(&resource_controller);
1053
1054 bool defer = false;
1055 mime_sniffing_handler->OnWillStart(GURL(), &defer);
1056 ASSERT_FALSE(defer);
1057
1058 scoped_refptr<ResourceResponse> response(new ResourceResponse);
1059 response->head.mime_type = "text/plain";
1060
1061 // |mime_sniffing_handler->OnResponseStarted| should return false because
1062 // mime sniffing is disabled and the wrapped resource handler returns false
1063 // on OnResponseStarted.
1064 EXPECT_FALSE(
1065 mime_sniffing_handler->OnResponseStarted(response.get(), &defer));
1066
1067 // Process all messages to ensure proper test teardown.
1068 content::RunAllPendingInMessageLoop();
1069 }
1070
1013 } // namespace content 1071 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698