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/resource_loader_unittest.cc

Issue 2213683003: Update Effective Connection Type only on main frame requests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use enum 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
« no previous file with comments | « content/browser/loader/resource_loader.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/resource_loader.h" 5 #include "content/browser/loader/resource_loader.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 10 matching lines...) Expand all
21 #include "base/threading/thread_task_runner_handle.h" 21 #include "base/threading/thread_task_runner_handle.h"
22 #include "content/browser/browser_thread_impl.h" 22 #include "content/browser/browser_thread_impl.h"
23 #include "content/browser/loader/redirect_to_file_resource_handler.h" 23 #include "content/browser/loader/redirect_to_file_resource_handler.h"
24 #include "content/browser/loader/resource_loader_delegate.h" 24 #include "content/browser/loader/resource_loader_delegate.h"
25 #include "content/common/ssl_status_serialization.h" 25 #include "content/common/ssl_status_serialization.h"
26 #include "content/public/browser/cert_store.h" 26 #include "content/public/browser/cert_store.h"
27 #include "content/public/browser/client_certificate_delegate.h" 27 #include "content/public/browser/client_certificate_delegate.h"
28 #include "content/public/browser/resource_request_info.h" 28 #include "content/public/browser/resource_request_info.h"
29 #include "content/public/common/content_paths.h" 29 #include "content/public/common/content_paths.h"
30 #include "content/public/common/resource_response.h" 30 #include "content/public/common/resource_response.h"
31 #include "content/public/common/resource_type.h"
31 #include "content/public/test/mock_resource_context.h" 32 #include "content/public/test/mock_resource_context.h"
32 #include "content/public/test/test_browser_context.h" 33 #include "content/public/test/test_browser_context.h"
33 #include "content/public/test/test_browser_thread_bundle.h" 34 #include "content/public/test/test_browser_thread_bundle.h"
34 #include "content/public/test/test_renderer_host.h" 35 #include "content/public/test/test_renderer_host.h"
35 #include "content/test/test_content_browser_client.h" 36 #include "content/test/test_content_browser_client.h"
36 #include "content/test/test_web_contents.h" 37 #include "content/test/test_web_contents.h"
37 #include "ipc/ipc_message.h" 38 #include "ipc/ipc_message.h"
38 #include "net/base/chunked_upload_data_stream.h" 39 #include "net/base/chunked_upload_data_stream.h"
39 #include "net/base/io_buffer.h" 40 #include "net/base/io_buffer.h"
40 #include "net/base/mock_file_stream.h" 41 #include "net/base/mock_file_stream.h"
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 } 583 }
583 584
584 virtual std::unique_ptr<ResourceHandler> WrapResourceHandler( 585 virtual std::unique_ptr<ResourceHandler> WrapResourceHandler(
585 std::unique_ptr<ResourceHandlerStub> leaf_handler, 586 std::unique_ptr<ResourceHandlerStub> leaf_handler,
586 net::URLRequest* request) { 587 net::URLRequest* request) {
587 return std::move(leaf_handler); 588 return std::move(leaf_handler);
588 } 589 }
589 590
590 // Replaces loader_ with a new one for |request|. 591 // Replaces loader_ with a new one for |request|.
591 void SetUpResourceLoader(std::unique_ptr<net::URLRequest> request, 592 void SetUpResourceLoader(std::unique_ptr<net::URLRequest> request,
592 bool is_main_frame) { 593 ResourceType resource_type,
594 bool belongs_to_main_frame) {
593 raw_ptr_to_request_ = request.get(); 595 raw_ptr_to_request_ = request.get();
594 596
595 ResourceType resource_type = 597 // A request marked as a main frame request must also belong to a main
596 is_main_frame ? RESOURCE_TYPE_MAIN_FRAME : RESOURCE_TYPE_SUB_FRAME; 598 // frame.
599 ASSERT_TRUE((resource_type != RESOURCE_TYPE_MAIN_FRAME) ||
600 belongs_to_main_frame);
597 601
598 RenderFrameHost* rfh = web_contents_->GetMainFrame(); 602 RenderFrameHost* rfh = web_contents_->GetMainFrame();
599 ResourceRequestInfo::AllocateForTesting( 603 ResourceRequestInfo::AllocateForTesting(
600 request.get(), resource_type, &resource_context_, 604 request.get(), resource_type, &resource_context_,
601 rfh->GetProcess()->GetID(), rfh->GetRenderViewHost()->GetRoutingID(), 605 rfh->GetProcess()->GetID(), rfh->GetRenderViewHost()->GetRoutingID(),
602 rfh->GetRoutingID(), is_main_frame, false /* parent_is_main_frame */, 606 rfh->GetRoutingID(), belongs_to_main_frame,
603 true /* allow_download */, false /* is_async */, 607 false /* parent_is_main_frame */, true /* allow_download */,
604 false /* is_using_lofi_ */); 608 false /* is_async */, false /* is_using_lofi_ */);
605 std::unique_ptr<ResourceHandlerStub> resource_handler( 609 std::unique_ptr<ResourceHandlerStub> resource_handler(
606 new ResourceHandlerStub(request.get())); 610 new ResourceHandlerStub(request.get()));
607 raw_ptr_resource_handler_ = resource_handler.get(); 611 raw_ptr_resource_handler_ = resource_handler.get();
608 loader_.reset(new ResourceLoader( 612 loader_.reset(new ResourceLoader(
609 std::move(request), 613 std::move(request),
610 WrapResourceHandler(std::move(resource_handler), raw_ptr_to_request_), 614 WrapResourceHandler(std::move(resource_handler), raw_ptr_to_request_),
611 CertStore::GetInstance(), this)); 615 CertStore::GetInstance(), this));
612 } 616 }
613 617
614 void SetUp() override { 618 void SetUp() override {
615 job_factory_.SetProtocolHandler("test", CreateProtocolHandler()); 619 job_factory_.SetProtocolHandler("test", CreateProtocolHandler());
616 620
617 browser_context_.reset(new TestBrowserContext()); 621 browser_context_.reset(new TestBrowserContext());
618 scoped_refptr<SiteInstance> site_instance = 622 scoped_refptr<SiteInstance> site_instance =
619 SiteInstance::Create(browser_context_.get()); 623 SiteInstance::Create(browser_context_.get());
620 web_contents_.reset( 624 web_contents_.reset(
621 TestWebContents::Create(browser_context_.get(), site_instance.get())); 625 TestWebContents::Create(browser_context_.get(), site_instance.get()));
622 626
623 std::unique_ptr<net::URLRequest> request( 627 std::unique_ptr<net::URLRequest> request(
624 resource_context_.GetRequestContext()->CreateRequest( 628 resource_context_.GetRequestContext()->CreateRequest(
625 test_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */)); 629 test_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */));
626 SetUpResourceLoader(std::move(request), true); 630 SetUpResourceLoader(std::move(request), RESOURCE_TYPE_MAIN_FRAME, true);
627 } 631 }
628 632
629 void TearDown() override { 633 void TearDown() override {
630 // Destroy the WebContents and pump the event loop before destroying 634 // Destroy the WebContents and pump the event loop before destroying
631 // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup 635 // |rvh_test_enabler_| and |thread_bundle_|. This lets asynchronous cleanup
632 // tasks complete. 636 // tasks complete.
633 web_contents_.reset(); 637 web_contents_.reset();
634 base::RunLoop().RunUntilIdle(); 638 base::RunLoop().RunUntilIdle();
635 } 639 }
636 640
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 EXPECT_EQ(test_data(), contents); 1109 EXPECT_EQ(test_data(), contents);
1106 } 1110 }
1107 1111
1108 // Test that an HTTPS resource has the expected security info attached 1112 // Test that an HTTPS resource has the expected security info attached
1109 // to it. 1113 // to it.
1110 TEST_F(HTTPSSecurityInfoResourceLoaderTest, SecurityInfoOnHTTPSResource) { 1114 TEST_F(HTTPSSecurityInfoResourceLoaderTest, SecurityInfoOnHTTPSResource) {
1111 // Start the request and wait for it to finish. 1115 // Start the request and wait for it to finish.
1112 std::unique_ptr<net::URLRequest> request( 1116 std::unique_ptr<net::URLRequest> request(
1113 resource_context_.GetRequestContext()->CreateRequest( 1117 resource_context_.GetRequestContext()->CreateRequest(
1114 test_https_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */)); 1118 test_https_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */));
1115 SetUpResourceLoader(std::move(request), true); 1119 SetUpResourceLoader(std::move(request), RESOURCE_TYPE_MAIN_FRAME, true);
1116 1120
1117 // Send the request and wait until it completes. 1121 // Send the request and wait until it completes.
1118 loader_->StartRequest(); 1122 loader_->StartRequest();
1119 raw_ptr_resource_handler_->WaitForResponseComplete(); 1123 raw_ptr_resource_handler_->WaitForResponseComplete();
1120 ASSERT_EQ(net::URLRequestStatus::SUCCESS, 1124 ASSERT_EQ(net::URLRequestStatus::SUCCESS,
1121 raw_ptr_to_request_->status().status()); 1125 raw_ptr_to_request_->status().status());
1122 1126
1123 ResourceResponse* response = raw_ptr_resource_handler_->response(); 1127 ResourceResponse* response = raw_ptr_resource_handler_->response();
1124 ASSERT_TRUE(response); 1128 ASSERT_TRUE(response);
1125 1129
(...skipping 18 matching lines...) Expand all
1144 1148
1145 // Test that an HTTPS redirect response has the expected security info 1149 // Test that an HTTPS redirect response has the expected security info
1146 // attached to it. 1150 // attached to it.
1147 TEST_F(HTTPSSecurityInfoResourceLoaderTest, 1151 TEST_F(HTTPSSecurityInfoResourceLoaderTest,
1148 SecurityInfoOnHTTPSRedirectResource) { 1152 SecurityInfoOnHTTPSRedirectResource) {
1149 // Start the request and wait for it to finish. 1153 // Start the request and wait for it to finish.
1150 std::unique_ptr<net::URLRequest> request( 1154 std::unique_ptr<net::URLRequest> request(
1151 resource_context_.GetRequestContext()->CreateRequest( 1155 resource_context_.GetRequestContext()->CreateRequest(
1152 test_https_redirect_url(), net::DEFAULT_PRIORITY, 1156 test_https_redirect_url(), net::DEFAULT_PRIORITY,
1153 nullptr /* delegate */)); 1157 nullptr /* delegate */));
1154 SetUpResourceLoader(std::move(request), true); 1158 SetUpResourceLoader(std::move(request), RESOURCE_TYPE_MAIN_FRAME, true);
1155 1159
1156 // Send the request and wait until it completes. 1160 // Send the request and wait until it completes.
1157 loader_->StartRequest(); 1161 loader_->StartRequest();
1158 raw_ptr_resource_handler_->WaitForResponseComplete(); 1162 raw_ptr_resource_handler_->WaitForResponseComplete();
1159 ASSERT_EQ(net::URLRequestStatus::SUCCESS, 1163 ASSERT_EQ(net::URLRequestStatus::SUCCESS,
1160 raw_ptr_to_request_->status().status()); 1164 raw_ptr_to_request_->status().status());
1161 ASSERT_TRUE(raw_ptr_resource_handler_->received_request_redirected()); 1165 ASSERT_TRUE(raw_ptr_resource_handler_->received_request_redirected());
1162 1166
1163 ResourceResponse* redirect_response = 1167 ResourceResponse* redirect_response =
1164 raw_ptr_resource_handler_->redirect_response(); 1168 raw_ptr_resource_handler_->redirect_response();
(...skipping 14 matching lines...) Expand all
1179 EXPECT_TRUE(cert->Equals(GetTestCert().get())); 1183 EXPECT_TRUE(cert->Equals(GetTestCert().get()));
1180 1184
1181 EXPECT_EQ(kTestCertError, deserialized.cert_status); 1185 EXPECT_EQ(kTestCertError, deserialized.cert_status);
1182 EXPECT_EQ(kTestConnectionStatus, deserialized.connection_status); 1186 EXPECT_EQ(kTestConnectionStatus, deserialized.connection_status);
1183 EXPECT_EQ(kTestSecurityBits, deserialized.security_bits); 1187 EXPECT_EQ(kTestSecurityBits, deserialized.security_bits);
1184 } 1188 }
1185 1189
1186 class EffectiveConnectionTypeResourceLoaderTest : public ResourceLoaderTest { 1190 class EffectiveConnectionTypeResourceLoaderTest : public ResourceLoaderTest {
1187 public: 1191 public:
1188 void VerifyEffectiveConnectionType( 1192 void VerifyEffectiveConnectionType(
1189 bool is_main_frame, 1193 ResourceType resource_type,
1194 bool belongs_to_main_frame,
1190 net::EffectiveConnectionType set_type, 1195 net::EffectiveConnectionType set_type,
1191 net::EffectiveConnectionType expected_type) { 1196 net::EffectiveConnectionType expected_type) {
1192 network_quality_estimator()->set_effective_connection_type(set_type); 1197 network_quality_estimator()->set_effective_connection_type(set_type);
1193 1198
1194 // Start the request and wait for it to finish. 1199 // Start the request and wait for it to finish.
1195 std::unique_ptr<net::URLRequest> request( 1200 std::unique_ptr<net::URLRequest> request(
1196 resource_context_.GetRequestContext()->CreateRequest( 1201 resource_context_.GetRequestContext()->CreateRequest(
1197 test_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */)); 1202 test_url(), net::DEFAULT_PRIORITY, nullptr /* delegate */));
1198 SetUpResourceLoader(std::move(request), is_main_frame); 1203 SetUpResourceLoader(std::move(request), resource_type,
1204 belongs_to_main_frame);
1199 1205
1200 // Send the request and wait until it completes. 1206 // Send the request and wait until it completes.
1201 loader_->StartRequest(); 1207 loader_->StartRequest();
1202 raw_ptr_resource_handler_->WaitForResponseComplete(); 1208 raw_ptr_resource_handler_->WaitForResponseComplete();
1203 ASSERT_EQ(net::URLRequestStatus::SUCCESS, 1209 ASSERT_EQ(net::URLRequestStatus::SUCCESS,
1204 raw_ptr_to_request_->status().status()); 1210 raw_ptr_to_request_->status().status());
1205 1211
1206 EXPECT_EQ(expected_type, 1212 EXPECT_EQ(expected_type,
1207 raw_ptr_resource_handler_->observed_effective_connection_type()); 1213 raw_ptr_resource_handler_->observed_effective_connection_type());
1208 } 1214 }
1209 }; 1215 };
1210 1216
1211 // Tests that the effective connection type is set on main frame requests. 1217 // Tests that the effective connection type is set on main frame requests.
1212 TEST_F(EffectiveConnectionTypeResourceLoaderTest, Slow2G) { 1218 TEST_F(EffectiveConnectionTypeResourceLoaderTest, Slow2G) {
1213 VerifyEffectiveConnectionType(true, net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G, 1219 VerifyEffectiveConnectionType(RESOURCE_TYPE_MAIN_FRAME, true,
1220 net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G,
1214 net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G); 1221 net::EFFECTIVE_CONNECTION_TYPE_SLOW_2G);
1215 } 1222 }
1216 1223
1217 // Tests that the effective connection type is set on main frame requests. 1224 // Tests that the effective connection type is set on main frame requests.
1218 TEST_F(EffectiveConnectionTypeResourceLoaderTest, 3G) { 1225 TEST_F(EffectiveConnectionTypeResourceLoaderTest, 3G) {
1219 VerifyEffectiveConnectionType(true, net::EFFECTIVE_CONNECTION_TYPE_3G, 1226 VerifyEffectiveConnectionType(RESOURCE_TYPE_MAIN_FRAME, true,
1227 net::EFFECTIVE_CONNECTION_TYPE_3G,
1220 net::EFFECTIVE_CONNECTION_TYPE_3G); 1228 net::EFFECTIVE_CONNECTION_TYPE_3G);
1221 } 1229 }
1222 1230
1231 // Tests that the effective connection type is not set on requests that belong
1232 // to main frame.
1233 TEST_F(EffectiveConnectionTypeResourceLoaderTest, BelongsToMainFrame) {
1234 VerifyEffectiveConnectionType(RESOURCE_TYPE_OBJECT, true,
1235 net::EFFECTIVE_CONNECTION_TYPE_3G,
1236 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN);
1237 }
1238
1223 // Tests that the effective connection type is not set on non-main frame 1239 // Tests that the effective connection type is not set on non-main frame
1224 // requests. 1240 // requests.
1225 TEST_F(EffectiveConnectionTypeResourceLoaderTest, NotAMainFrame) { 1241 TEST_F(EffectiveConnectionTypeResourceLoaderTest, DoesNotBelongToMainFrame) {
1226 VerifyEffectiveConnectionType(false, net::EFFECTIVE_CONNECTION_TYPE_3G, 1242 VerifyEffectiveConnectionType(RESOURCE_TYPE_OBJECT, false,
1243 net::EFFECTIVE_CONNECTION_TYPE_3G,
1227 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN); 1244 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN);
1228 } 1245 }
1229 1246
1230 } // namespace content 1247 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/resource_loader.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698