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 |