| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <memory> | 5 #include <memory> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 3409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3420 base::RunLoop().Run(); | 3420 base::RunLoop().Run(); |
| 3421 | 3421 |
| 3422 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); | 3422 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); |
| 3423 | 3423 |
| 3424 HttpRequestHeaders headers; | 3424 HttpRequestHeaders headers; |
| 3425 std::string token_binding_header, token_binding_message; | 3425 std::string token_binding_header, token_binding_message; |
| 3426 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); | 3426 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); |
| 3427 EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, | 3427 EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, |
| 3428 &token_binding_header)); | 3428 &token_binding_header)); |
| 3429 EXPECT_TRUE(base::Base64UrlDecode( | 3429 EXPECT_TRUE(base::Base64UrlDecode( |
| 3430 token_binding_header, base::Base64UrlDecodePolicy::REQUIRE_PADDING, | 3430 token_binding_header, base::Base64UrlDecodePolicy::DISALLOW_PADDING, |
| 3431 &token_binding_message)); | 3431 &token_binding_message)); |
| 3432 std::vector<TokenBinding> token_bindings; | 3432 std::vector<TokenBinding> token_bindings; |
| 3433 ASSERT_TRUE( | 3433 ASSERT_TRUE( |
| 3434 ParseTokenBindingMessage(token_binding_message, &token_bindings)); | 3434 ParseTokenBindingMessage(token_binding_message, &token_bindings)); |
| 3435 ASSERT_EQ(1ull, token_bindings.size()); | 3435 ASSERT_EQ(1ull, token_bindings.size()); |
| 3436 | 3436 |
| 3437 EXPECT_GT(d.bytes_received(), 0); | 3437 EXPECT_GT(d.bytes_received(), 0); |
| 3438 std::string ekm = d.data_received(); | 3438 std::string ekm = d.data_received(); |
| 3439 | 3439 |
| 3440 EXPECT_EQ(TokenBindingType::PROVIDED, token_bindings[0].type); | 3440 EXPECT_EQ(TokenBindingType::PROVIDED, token_bindings[0].type); |
| 3441 EXPECT_TRUE(VerifyEKMSignature(token_bindings[0].ec_point, | 3441 EXPECT_TRUE(VerifyTokenBindingSignature(token_bindings[0].ec_point, |
| 3442 token_bindings[0].signature, ekm)); | 3442 token_bindings[0].signature, |
| 3443 TokenBindingType::PROVIDED, ekm)); |
| 3443 } | 3444 } |
| 3444 } | 3445 } |
| 3445 | 3446 |
| 3446 TEST_F(TokenBindingURLRequestTest, ForwardTokenBinding) { | 3447 TEST_F(TokenBindingURLRequestTest, ForwardTokenBinding) { |
| 3447 SpawnedTestServer::SSLOptions ssl_options; | 3448 SpawnedTestServer::SSLOptions ssl_options; |
| 3448 ssl_options.supported_token_binding_params.push_back(TB_PARAM_ECDSAP256); | 3449 ssl_options.supported_token_binding_params.push_back(TB_PARAM_ECDSAP256); |
| 3449 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, | 3450 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, |
| 3450 ssl_options, | 3451 ssl_options, |
| 3451 base::FilePath(kTestFilePath)); | 3452 base::FilePath(kTestFilePath)); |
| 3452 ASSERT_TRUE(https_test_server.Start()); | 3453 ASSERT_TRUE(https_test_server.Start()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 3463 base::RunLoop().Run(); | 3464 base::RunLoop().Run(); |
| 3464 | 3465 |
| 3465 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); | 3466 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); |
| 3466 | 3467 |
| 3467 HttpRequestHeaders headers; | 3468 HttpRequestHeaders headers; |
| 3468 std::string token_binding_header, token_binding_message; | 3469 std::string token_binding_header, token_binding_message; |
| 3469 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); | 3470 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); |
| 3470 EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, | 3471 EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, |
| 3471 &token_binding_header)); | 3472 &token_binding_header)); |
| 3472 EXPECT_TRUE(base::Base64UrlDecode( | 3473 EXPECT_TRUE(base::Base64UrlDecode( |
| 3473 token_binding_header, base::Base64UrlDecodePolicy::REQUIRE_PADDING, | 3474 token_binding_header, base::Base64UrlDecodePolicy::DISALLOW_PADDING, |
| 3474 &token_binding_message)); | 3475 &token_binding_message)); |
| 3475 std::vector<TokenBinding> token_bindings; | 3476 std::vector<TokenBinding> token_bindings; |
| 3476 ASSERT_TRUE( | 3477 ASSERT_TRUE( |
| 3477 ParseTokenBindingMessage(token_binding_message, &token_bindings)); | 3478 ParseTokenBindingMessage(token_binding_message, &token_bindings)); |
| 3478 ASSERT_EQ(2ull, token_bindings.size()); | 3479 ASSERT_EQ(2ull, token_bindings.size()); |
| 3479 | 3480 |
| 3480 EXPECT_GT(d.bytes_received(), 0); | 3481 EXPECT_GT(d.bytes_received(), 0); |
| 3481 std::string ekm = d.data_received(); | 3482 std::string ekm = d.data_received(); |
| 3482 | 3483 |
| 3483 EXPECT_EQ(TokenBindingType::PROVIDED, token_bindings[0].type); | 3484 EXPECT_EQ(TokenBindingType::PROVIDED, token_bindings[0].type); |
| 3484 EXPECT_TRUE(VerifyEKMSignature(token_bindings[0].ec_point, | 3485 EXPECT_TRUE(VerifyTokenBindingSignature(token_bindings[0].ec_point, |
| 3485 token_bindings[0].signature, ekm)); | 3486 token_bindings[0].signature, |
| 3487 TokenBindingType::PROVIDED, ekm)); |
| 3486 EXPECT_EQ(TokenBindingType::REFERRED, token_bindings[1].type); | 3488 EXPECT_EQ(TokenBindingType::REFERRED, token_bindings[1].type); |
| 3487 EXPECT_TRUE(VerifyEKMSignature(token_bindings[1].ec_point, | 3489 EXPECT_TRUE(VerifyTokenBindingSignature(token_bindings[1].ec_point, |
| 3488 token_bindings[1].signature, ekm)); | 3490 token_bindings[1].signature, |
| 3491 TokenBindingType::REFERRED, ekm)); |
| 3489 } | 3492 } |
| 3490 } | 3493 } |
| 3491 | 3494 |
| 3492 // TODO(nharper): Remove this #ifdef and replace SpawnedTestServer with | 3495 // TODO(nharper): Remove this #ifdef and replace SpawnedTestServer with |
| 3493 // EmbeddedTestServer once crbug.com/599187 is resolved. | 3496 // EmbeddedTestServer once crbug.com/599187 is resolved. |
| 3494 #if !defined(OS_ANDROID) | 3497 #if !defined(OS_ANDROID) |
| 3495 TEST_F(TokenBindingURLRequestTest, DontForwardHeaderFromHttp) { | 3498 TEST_F(TokenBindingURLRequestTest, DontForwardHeaderFromHttp) { |
| 3496 SpawnedTestServer http_server(SpawnedTestServer::TYPE_HTTP, | 3499 SpawnedTestServer http_server(SpawnedTestServer::TYPE_HTTP, |
| 3497 SpawnedTestServer::kLocalhost, | 3500 SpawnedTestServer::kLocalhost, |
| 3498 base::FilePath()); | 3501 base::FilePath()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3516 base::RunLoop().Run(); | 3519 base::RunLoop().Run(); |
| 3517 | 3520 |
| 3518 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); | 3521 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); |
| 3519 | 3522 |
| 3520 HttpRequestHeaders headers; | 3523 HttpRequestHeaders headers; |
| 3521 std::string token_binding_header, token_binding_message; | 3524 std::string token_binding_header, token_binding_message; |
| 3522 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); | 3525 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); |
| 3523 EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, | 3526 EXPECT_TRUE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, |
| 3524 &token_binding_header)); | 3527 &token_binding_header)); |
| 3525 EXPECT_TRUE(base::Base64UrlDecode( | 3528 EXPECT_TRUE(base::Base64UrlDecode( |
| 3526 token_binding_header, base::Base64UrlDecodePolicy::REQUIRE_PADDING, | 3529 token_binding_header, base::Base64UrlDecodePolicy::DISALLOW_PADDING, |
| 3527 &token_binding_message)); | 3530 &token_binding_message)); |
| 3528 std::vector<TokenBinding> token_bindings; | 3531 std::vector<TokenBinding> token_bindings; |
| 3529 ASSERT_TRUE( | 3532 ASSERT_TRUE( |
| 3530 ParseTokenBindingMessage(token_binding_message, &token_bindings)); | 3533 ParseTokenBindingMessage(token_binding_message, &token_bindings)); |
| 3531 ASSERT_EQ(1ull, token_bindings.size()); | 3534 ASSERT_EQ(1ull, token_bindings.size()); |
| 3532 | 3535 |
| 3533 EXPECT_GT(d.bytes_received(), 0); | 3536 EXPECT_GT(d.bytes_received(), 0); |
| 3534 std::string ekm = d.data_received(); | 3537 std::string ekm = d.data_received(); |
| 3535 | 3538 |
| 3536 EXPECT_EQ(TokenBindingType::PROVIDED, token_bindings[0].type); | 3539 EXPECT_EQ(TokenBindingType::PROVIDED, token_bindings[0].type); |
| 3537 EXPECT_TRUE(VerifyEKMSignature(token_bindings[0].ec_point, | 3540 EXPECT_TRUE(VerifyTokenBindingSignature(token_bindings[0].ec_point, |
| 3538 token_bindings[0].signature, ekm)); | 3541 token_bindings[0].signature, |
| 3542 TokenBindingType::PROVIDED, ekm)); |
| 3539 } | 3543 } |
| 3540 } | 3544 } |
| 3541 | 3545 |
| 3542 // Test that if a server supporting Token Binding redirects (with | 3546 // Test that if a server supporting Token Binding redirects (with |
| 3543 // Include-Referred-Token-Binding-ID) to an https url on a server that does not | 3547 // Include-Referred-Token-Binding-ID) to an https url on a server that does not |
| 3544 // support Token Binding, then we do not send a Sec-Token-Binding when following | 3548 // support Token Binding, then we do not send a Sec-Token-Binding when following |
| 3545 // the redirect. | 3549 // the redirect. |
| 3546 TEST_F(TokenBindingURLRequestTest, ForwardWithoutTokenBinding) { | 3550 TEST_F(TokenBindingURLRequestTest, ForwardWithoutTokenBinding) { |
| 3547 SpawnedTestServer::SSLOptions ssl_options; | 3551 SpawnedTestServer::SSLOptions ssl_options; |
| 3548 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, | 3552 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, |
| (...skipping 6690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10239 AddTestInterceptor()->set_main_intercept_job(std::move(job)); | 10243 AddTestInterceptor()->set_main_intercept_job(std::move(job)); |
| 10240 | 10244 |
| 10241 req->Start(); | 10245 req->Start(); |
| 10242 req->Cancel(); | 10246 req->Cancel(); |
| 10243 base::RunLoop().RunUntilIdle(); | 10247 base::RunLoop().RunUntilIdle(); |
| 10244 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); | 10248 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); |
| 10245 EXPECT_EQ(0, d.received_redirect_count()); | 10249 EXPECT_EQ(0, d.received_redirect_count()); |
| 10246 } | 10250 } |
| 10247 | 10251 |
| 10248 } // namespace net | 10252 } // namespace net |
| OLD | NEW |