| Index: net/base/server_bound_cert_service_unittest.cc
|
| diff --git a/net/base/server_bound_cert_service_unittest.cc b/net/base/server_bound_cert_service_unittest.cc
|
| index 211b4baf6d1ad6a9351b6a3b623e85d4c1dce0a7..9e505db81d9acbce5f069cc74ab38ec4c6469c42 100644
|
| --- a/net/base/server_bound_cert_service_unittest.cc
|
| +++ b/net/base/server_bound_cert_service_unittest.cc
|
| @@ -82,13 +82,14 @@ TEST_F(ServerBoundCertServiceTest, CacheHit) {
|
| origin, types, &type1, &private_key_info1, &der_cert1,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(1, service_->cert_count());
|
| EXPECT_EQ(CLIENT_CERT_ECDSA_SIGN, type1);
|
| EXPECT_FALSE(private_key_info1.empty());
|
| EXPECT_FALSE(der_cert1.empty());
|
| + EXPECT_FALSE(request_handle.is_active());
|
|
|
| // Synchronous completion.
|
| SSLClientCertType type2;
|
| @@ -96,7 +97,7 @@ TEST_F(ServerBoundCertServiceTest, CacheHit) {
|
| error = service_->GetDomainBoundCert(
|
| origin, types, &type2, &private_key_info2, &der_cert2,
|
| callback.callback(), &request_handle);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(1, service_->cert_count());
|
| EXPECT_EQ(CLIENT_CERT_ECDSA_SIGN, type2);
|
| @@ -123,7 +124,7 @@ TEST_F(ServerBoundCertServiceTest, UnsupportedTypes) {
|
| origin, types, &type1, &private_key_info1, &der_cert1,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_INVALID_ARGUMENT, error);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
|
|
| // No supported types in requested_types.
|
| types.push_back(CLIENT_CERT_RSA_SIGN);
|
| @@ -133,7 +134,7 @@ TEST_F(ServerBoundCertServiceTest, UnsupportedTypes) {
|
| origin, types, &type1, &private_key_info1, &der_cert1,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_CLIENT_AUTH_CERT_TYPE_UNSUPPORTED, error);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
|
|
| // Supported types after unsupported ones in requested_types.
|
| types.push_back(CLIENT_CERT_ECDSA_SIGN);
|
| @@ -143,7 +144,7 @@ TEST_F(ServerBoundCertServiceTest, UnsupportedTypes) {
|
| origin, types, &type1, &private_key_info1, &der_cert1,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(1, service_->cert_count());
|
| @@ -161,7 +162,7 @@ TEST_F(ServerBoundCertServiceTest, UnsupportedTypes) {
|
| origin, types, &type2, &private_key_info2, &der_cert2,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_INVALID_ARGUMENT, error);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
|
|
| // No supported types in requested_types.
|
| types.push_back(CLIENT_CERT_RSA_SIGN);
|
| @@ -171,14 +172,14 @@ TEST_F(ServerBoundCertServiceTest, UnsupportedTypes) {
|
| origin, types, &type2, &private_key_info2, &der_cert2,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_CLIENT_AUTH_CERT_TYPE_UNSUPPORTED, error);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
|
|
| // If we request EC, the cert we created before should still be there.
|
| types.push_back(CLIENT_CERT_ECDSA_SIGN);
|
| error = service_->GetDomainBoundCert(
|
| origin, types, &type2, &private_key_info2, &der_cert2,
|
| callback.callback(), &request_handle);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(1, service_->cert_count());
|
| EXPECT_EQ(CLIENT_CERT_ECDSA_SIGN, type2);
|
| @@ -201,7 +202,7 @@ TEST_F(ServerBoundCertServiceTest, StoreCerts) {
|
| origin1, types, &type1, &private_key_info1, &der_cert1,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(1, service_->cert_count());
|
| @@ -213,7 +214,7 @@ TEST_F(ServerBoundCertServiceTest, StoreCerts) {
|
| origin2, types, &type2, &private_key_info2, &der_cert2,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(2, service_->cert_count());
|
| @@ -225,7 +226,7 @@ TEST_F(ServerBoundCertServiceTest, StoreCerts) {
|
| origin3, types, &type3, &private_key_info3, &der_cert3,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(3, service_->cert_count());
|
| @@ -262,7 +263,7 @@ TEST_F(ServerBoundCertServiceTest, InflightJoin) {
|
| origin, types, &type1, &private_key_info1, &der_cert1,
|
| callback1.callback(), &request_handle1);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle1 != NULL);
|
| + EXPECT_TRUE(request_handle1.is_active());
|
| // If we request RSA and EC in the 2nd request, should still join with the
|
| // original request.
|
| types.insert(types.begin(), CLIENT_CERT_RSA_SIGN);
|
| @@ -270,7 +271,7 @@ TEST_F(ServerBoundCertServiceTest, InflightJoin) {
|
| origin, types, &type2, &private_key_info2, &der_cert2,
|
| callback2.callback(), &request_handle2);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle2 != NULL);
|
| + EXPECT_TRUE(request_handle2.is_active());
|
|
|
| error = callback1.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| @@ -298,7 +299,7 @@ TEST_F(ServerBoundCertServiceTest, ExtractValuesFromBytesEC) {
|
| origin, types, &type, &private_key_info, &der_cert, callback.callback(),
|
| &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
|
|
| @@ -339,8 +340,42 @@ TEST_F(ServerBoundCertServiceTest, CancelRequest) {
|
| base::Bind(&FailTest),
|
| &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| - service_->CancelRequest(request_handle);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| + request_handle.Cancel();
|
| + EXPECT_FALSE(request_handle.is_active());
|
| +
|
| + // Wait for generation to finish.
|
| + sequenced_worker_pool_->FlushForTesting();
|
| + // Wait for reply from ServerBoundCertServiceWorker to be posted back to the
|
| + // ServerBoundCertService.
|
| + MessageLoop::current()->RunUntilIdle();
|
| +
|
| + // Even though the original request was cancelled, the service will still
|
| + // store the result, it just doesn't call the callback.
|
| + EXPECT_EQ(1, service_->cert_count());
|
| +}
|
| +
|
| +// Tests that destructing the RequestHandle cancels the request.
|
| +TEST_F(ServerBoundCertServiceTest, CancelRequestByHandleDestruction) {
|
| + std::string origin("https://encrypted.google.com:443");
|
| + SSLClientCertType type;
|
| + std::string private_key_info, der_cert;
|
| + int error;
|
| + std::vector<uint8> types;
|
| + types.push_back(CLIENT_CERT_ECDSA_SIGN);
|
| + {
|
| + ServerBoundCertService::RequestHandle request_handle;
|
| +
|
| + error = service_->GetDomainBoundCert(origin,
|
| + types,
|
| + &type,
|
| + &private_key_info,
|
| + &der_cert,
|
| + base::Bind(&FailTest),
|
| + &request_handle);
|
| + EXPECT_EQ(ERR_IO_PENDING, error);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| + }
|
|
|
| // Wait for generation to finish.
|
| sequenced_worker_pool_->FlushForTesting();
|
| @@ -370,10 +405,10 @@ TEST_F(ServerBoundCertServiceTest, DestructionWithPendingRequest) {
|
| base::Bind(&FailTest),
|
| &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
|
|
| // Cancel request and destroy the ServerBoundCertService.
|
| - service_->CancelRequest(request_handle);
|
| + request_handle.Cancel();
|
| service_.reset();
|
|
|
| // Wait for generation to finish.
|
| @@ -391,22 +426,24 @@ TEST_F(ServerBoundCertServiceTest, SimultaneousCreation) {
|
| int error;
|
| std::vector<uint8> types;
|
| types.push_back(CLIENT_CERT_ECDSA_SIGN);
|
| - ServerBoundCertService::RequestHandle request_handle;
|
|
|
| std::string origin1("https://encrypted.google.com:443");
|
| SSLClientCertType type1;
|
| std::string private_key_info1, der_cert1;
|
| TestCompletionCallback callback1;
|
| + ServerBoundCertService::RequestHandle request_handle1;
|
|
|
| std::string origin2("https://foo.com:443");
|
| SSLClientCertType type2;
|
| std::string private_key_info2, der_cert2;
|
| TestCompletionCallback callback2;
|
| + ServerBoundCertService::RequestHandle request_handle2;
|
|
|
| std::string origin3("https://bar.com:443");
|
| SSLClientCertType type3;
|
| std::string private_key_info3, der_cert3;
|
| TestCompletionCallback callback3;
|
| + ServerBoundCertService::RequestHandle request_handle3;
|
|
|
| error = service_->GetDomainBoundCert(origin1,
|
| types,
|
| @@ -414,9 +451,9 @@ TEST_F(ServerBoundCertServiceTest, SimultaneousCreation) {
|
| &private_key_info1,
|
| &der_cert1,
|
| callback1.callback(),
|
| - &request_handle);
|
| + &request_handle1);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle1.is_active());
|
|
|
| error = service_->GetDomainBoundCert(origin2,
|
| types,
|
| @@ -424,9 +461,9 @@ TEST_F(ServerBoundCertServiceTest, SimultaneousCreation) {
|
| &private_key_info2,
|
| &der_cert2,
|
| callback2.callback(),
|
| - &request_handle);
|
| + &request_handle2);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle2.is_active());
|
|
|
| error = service_->GetDomainBoundCert(origin3,
|
| types,
|
| @@ -434,9 +471,9 @@ TEST_F(ServerBoundCertServiceTest, SimultaneousCreation) {
|
| &private_key_info3,
|
| &der_cert3,
|
| callback3.callback(),
|
| - &request_handle);
|
| + &request_handle3);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle3.is_active());
|
|
|
| error = callback1.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| @@ -498,7 +535,7 @@ TEST_F(ServerBoundCertServiceTest, Expiration) {
|
| "https://good", types, &type1, &private_key_info1, &der_cert1,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(OK, error);
|
| - EXPECT_TRUE(request_handle == NULL);
|
| + EXPECT_FALSE(request_handle.is_active());
|
| EXPECT_EQ(2, service_->cert_count());
|
| EXPECT_EQ(CLIENT_CERT_ECDSA_SIGN, type1);
|
| EXPECT_STREQ("a", private_key_info1.c_str());
|
| @@ -511,7 +548,7 @@ TEST_F(ServerBoundCertServiceTest, Expiration) {
|
| "https://expired", types, &type2, &private_key_info2, &der_cert2,
|
| callback.callback(), &request_handle);
|
| EXPECT_EQ(ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle != NULL);
|
| + EXPECT_TRUE(request_handle.is_active());
|
| error = callback.WaitForResult();
|
| EXPECT_EQ(OK, error);
|
| EXPECT_EQ(2, service_->cert_count());
|
|
|