| OLD | NEW |
| 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 <deque> | 10 #include <deque> |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 DISALLOW_COPY_AND_ASSIGN(MockHTTPSURLRequestJob); | 236 DISALLOW_COPY_AND_ASSIGN(MockHTTPSURLRequestJob); |
| 237 }; | 237 }; |
| 238 | 238 |
| 239 const char kRedirectHeaders[] = | 239 const char kRedirectHeaders[] = |
| 240 "HTTP/1.1 302 Found\n" | 240 "HTTP/1.1 302 Found\n" |
| 241 "Location: https://example.test\n" | 241 "Location: https://example.test\n" |
| 242 "\n"; | 242 "\n"; |
| 243 | 243 |
| 244 class MockHTTPSJobURLRequestInterceptor : public net::URLRequestInterceptor { | 244 class MockHTTPSJobURLRequestInterceptor : public net::URLRequestInterceptor { |
| 245 public: | 245 public: |
| 246 MockHTTPSJobURLRequestInterceptor(bool redirect) : redirect_(redirect) {} | 246 explicit MockHTTPSJobURLRequestInterceptor(bool redirect) |
| 247 : redirect_(redirect) {} |
| 247 ~MockHTTPSJobURLRequestInterceptor() override {} | 248 ~MockHTTPSJobURLRequestInterceptor() override {} |
| 248 | 249 |
| 249 // net::URLRequestInterceptor: | 250 // net::URLRequestInterceptor: |
| 250 net::URLRequestJob* MaybeInterceptRequest( | 251 net::URLRequestJob* MaybeInterceptRequest( |
| 251 net::URLRequest* request, | 252 net::URLRequest* request, |
| 252 net::NetworkDelegate* network_delegate) const override { | 253 net::NetworkDelegate* network_delegate) const override { |
| 253 std::string headers = | 254 std::string headers = |
| 254 redirect_ ? std::string(kRedirectHeaders, arraysize(kRedirectHeaders)) | 255 redirect_ ? std::string(kRedirectHeaders, arraysize(kRedirectHeaders)) |
| 255 : net::URLRequestTestJob::test_headers(); | 256 : net::URLRequestTestJob::test_headers(); |
| 256 return new MockHTTPSURLRequestJob(request, network_delegate, headers, | 257 return new MockHTTPSURLRequestJob(request, network_delegate, headers, |
| 257 "dummy response", true); | 258 "dummy response", true); |
| 258 } | 259 } |
| 259 | 260 |
| 260 private: | 261 private: |
| 261 bool redirect_; | 262 bool redirect_; |
| 262 }; | 263 }; |
| 263 | 264 |
| 264 // Arbitrary read buffer size. | |
| 265 // Test browser client that captures calls to SelectClientCertificates and | 265 // Test browser client that captures calls to SelectClientCertificates and |
| 266 // records the arguments of the most recent call for later inspection. | 266 // records the arguments of the most recent call for later inspection. |
| 267 class SelectCertificateBrowserClient : public TestContentBrowserClient { | 267 class SelectCertificateBrowserClient : public TestContentBrowserClient { |
| 268 public: | 268 public: |
| 269 SelectCertificateBrowserClient() : call_count_(0) {} | 269 SelectCertificateBrowserClient() : call_count_(0) {} |
| 270 | 270 |
| 271 // Waits until the first call to SelectClientCertificate. | 271 // Waits until the first call to SelectClientCertificate. |
| 272 void WaitForSelectCertificate() { | 272 void WaitForSelectCertificate() { |
| 273 select_certificate_run_loop_.Run(); | 273 select_certificate_run_loop_.Run(); |
| 274 // Process any pending messages - just so tests can check if | 274 // Process any pending messages - just so tests can check if |
| (...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1365 net::URLRequestFailedJob::START, net::ERR_IO_PENDING)); | 1365 net::URLRequestFailedJob::START, net::ERR_IO_PENDING)); |
| 1366 | 1366 |
| 1367 loader_->StartRequest(); | 1367 loader_->StartRequest(); |
| 1368 base::RunLoop().RunUntilIdle(); | 1368 base::RunLoop().RunUntilIdle(); |
| 1369 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); | 1369 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| 1370 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); | 1370 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| 1371 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); | 1371 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| 1372 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); | 1372 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| 1373 EXPECT_EQ(1, handle_external_protocol_); | 1373 EXPECT_EQ(1, handle_external_protocol_); |
| 1374 | 1374 |
| 1375 raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); | 1375 // Can't cancel through the ResourceHandler, since that depends on |
| 1376 // ResourceDispatachHost, which these tests don't use. |
| 1377 loader_->CancelRequest(false); |
| 1376 raw_ptr_resource_handler_->WaitUntilResponseComplete(); | 1378 raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| 1377 | 1379 |
| 1378 EXPECT_EQ(0, did_received_redirect_); | 1380 EXPECT_EQ(0, did_received_redirect_); |
| 1379 EXPECT_EQ(0, did_receive_response_); | 1381 EXPECT_EQ(0, did_receive_response_); |
| 1380 EXPECT_EQ(1, did_finish_loading_); | 1382 EXPECT_EQ(1, did_finish_loading_); |
| 1381 EXPECT_EQ(1, handle_external_protocol_); | 1383 EXPECT_EQ(1, handle_external_protocol_); |
| 1382 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); | 1384 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| 1383 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); | 1385 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| 1384 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); | 1386 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_started_called()); |
| 1385 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); | 1387 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| 1386 EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); | 1388 EXPECT_EQ(net::ERR_ABORTED, |
| 1389 raw_ptr_resource_handler_->final_status().error()); |
| 1387 EXPECT_EQ("", raw_ptr_resource_handler_->body()); | 1390 EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| 1388 } | 1391 } |
| 1389 | 1392 |
| 1390 TEST_F(ResourceLoaderTest, OutOfBandCancelDuringRead) { | 1393 TEST_F(ResourceLoaderTest, OutOfBandCancelDuringRead) { |
| 1391 SetUpResourceLoaderForUrl( | 1394 SetUpResourceLoaderForUrl( |
| 1392 net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( | 1395 net::URLRequestFailedJob::GetMockHttpUrlWithFailurePhase( |
| 1393 net::URLRequestFailedJob::READ_SYNC, net::ERR_IO_PENDING)); | 1396 net::URLRequestFailedJob::READ_SYNC, net::ERR_IO_PENDING)); |
| 1394 | 1397 |
| 1395 loader_->StartRequest(); | 1398 loader_->StartRequest(); |
| 1396 base::RunLoop().RunUntilIdle(); | 1399 base::RunLoop().RunUntilIdle(); |
| 1397 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); | 1400 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| 1398 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); | 1401 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| 1399 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); | 1402 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| 1400 EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); | 1403 EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| 1401 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); | 1404 EXPECT_EQ(0, raw_ptr_resource_handler_->on_response_completed_called()); |
| 1402 EXPECT_EQ(1, handle_external_protocol_); | 1405 EXPECT_EQ(1, handle_external_protocol_); |
| 1403 | 1406 |
| 1404 raw_ptr_resource_handler_->CancelWithError(net::ERR_FAILED); | 1407 // Can't cancel through the ResourceHandler, since that depends on |
| 1408 // ResourceDispatachHost, which these tests don't use. |
| 1409 loader_->CancelRequest(false); |
| 1405 raw_ptr_resource_handler_->WaitUntilResponseComplete(); | 1410 raw_ptr_resource_handler_->WaitUntilResponseComplete(); |
| 1406 EXPECT_EQ(0, did_received_redirect_); | 1411 EXPECT_EQ(0, did_received_redirect_); |
| 1407 EXPECT_EQ(1, did_receive_response_); | 1412 EXPECT_EQ(1, did_receive_response_); |
| 1408 EXPECT_EQ(1, did_finish_loading_); | 1413 EXPECT_EQ(1, did_finish_loading_); |
| 1409 EXPECT_EQ(1, handle_external_protocol_); | 1414 EXPECT_EQ(1, handle_external_protocol_); |
| 1410 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); | 1415 EXPECT_EQ(1, raw_ptr_resource_handler_->on_will_start_called()); |
| 1411 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); | 1416 EXPECT_EQ(0, raw_ptr_resource_handler_->on_request_redirected_called()); |
| 1412 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); | 1417 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_started_called()); |
| 1413 EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); | 1418 EXPECT_EQ(0, raw_ptr_resource_handler_->on_read_completed_called()); |
| 1414 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); | 1419 EXPECT_EQ(1, raw_ptr_resource_handler_->on_response_completed_called()); |
| 1415 EXPECT_EQ(net::ERR_FAILED, raw_ptr_resource_handler_->final_status().error()); | 1420 EXPECT_EQ(net::ERR_ABORTED, |
| 1421 raw_ptr_resource_handler_->final_status().error()); |
| 1416 EXPECT_EQ("", raw_ptr_resource_handler_->body()); | 1422 EXPECT_EQ("", raw_ptr_resource_handler_->body()); |
| 1417 } | 1423 } |
| 1418 | 1424 |
| 1419 TEST_F(ResourceLoaderTest, ResumeCanceledRequest) { | 1425 TEST_F(ResourceLoaderTest, ResumeCanceledRequest) { |
| 1420 raw_ptr_resource_handler_->set_defer_on_will_start(true); | 1426 raw_ptr_resource_handler_->set_defer_on_will_start(true); |
| 1421 | 1427 |
| 1422 loader_->StartRequest(); | 1428 loader_->StartRequest(); |
| 1429 raw_ptr_resource_handler_->WaitUntilDeferred(); |
| 1423 loader_->CancelRequest(true); | 1430 loader_->CancelRequest(true); |
| 1424 static_cast<ResourceController*>(loader_.get())->Resume(); | 1431 raw_ptr_resource_handler_->Resume(); |
| 1425 } | 1432 } |
| 1426 | 1433 |
| 1427 class EffectiveConnectionTypeResourceLoaderTest : public ResourceLoaderTest { | 1434 class EffectiveConnectionTypeResourceLoaderTest : public ResourceLoaderTest { |
| 1428 public: | 1435 public: |
| 1429 void VerifyEffectiveConnectionType( | 1436 void VerifyEffectiveConnectionType( |
| 1430 ResourceType resource_type, | 1437 ResourceType resource_type, |
| 1431 bool belongs_to_main_frame, | 1438 bool belongs_to_main_frame, |
| 1432 net::EffectiveConnectionType set_type, | 1439 net::EffectiveConnectionType set_type, |
| 1433 net::EffectiveConnectionType expected_type) { | 1440 net::EffectiveConnectionType expected_type) { |
| 1434 network_quality_estimator()->set_effective_connection_type(set_type); | 1441 network_quality_estimator()->set_effective_connection_type(set_type); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1476 | 1483 |
| 1477 // Tests that the effective connection type is not set on non-main frame | 1484 // Tests that the effective connection type is not set on non-main frame |
| 1478 // requests. | 1485 // requests. |
| 1479 TEST_F(EffectiveConnectionTypeResourceLoaderTest, DoesNotBelongToMainFrame) { | 1486 TEST_F(EffectiveConnectionTypeResourceLoaderTest, DoesNotBelongToMainFrame) { |
| 1480 VerifyEffectiveConnectionType(RESOURCE_TYPE_OBJECT, false, | 1487 VerifyEffectiveConnectionType(RESOURCE_TYPE_OBJECT, false, |
| 1481 net::EFFECTIVE_CONNECTION_TYPE_3G, | 1488 net::EFFECTIVE_CONNECTION_TYPE_3G, |
| 1482 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN); | 1489 net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN); |
| 1483 } | 1490 } |
| 1484 | 1491 |
| 1485 } // namespace content | 1492 } // namespace content |
| OLD | NEW |