Index: ios/web/net/cert_verifier_block_adapter_unittest.cc |
diff --git a/ios/web/net/cert_verifier_block_adapter_unittest.cc b/ios/web/net/cert_verifier_block_adapter_unittest.cc |
index f05acf68945f1b15ab00435c5b0a28ad1dec6555..948057108e2a159303a511d371feb0218de1d5e9 100644 |
--- a/ios/web/net/cert_verifier_block_adapter_unittest.cc |
+++ b/ios/web/net/cert_verifier_block_adapter_unittest.cc |
@@ -148,4 +148,25 @@ TEST_F(CertVerifierBlockAdapterTest, DefaultParamsAndSyncError) { |
EXPECT_EQ(kExpectedError, actual_error); |
} |
+// Tests that the completion handler passed to |Verify()| is called, even if the |
+// adapter is destroyed. |
+TEST_F(CertVerifierBlockAdapterTest, CompletionHandlerIsAlwaysCalled) { |
+ scoped_ptr<net::CertVerifier> verifier(net::CertVerifier::CreateDefault()); |
+ scoped_ptr<CertVerifierBlockAdapter> test_adapter( |
+ new CertVerifierBlockAdapter(verifier.get(), &net_log_)); |
+ |
+ // Call |Verify| and destroy the adapter. |
+ CertVerifierBlockAdapter::Params params(cert_.get(), kHostName); |
+ __block bool verification_completed = false; |
+ test_adapter->Verify(params, ^(net::CertVerifyResult, int) { |
+ verification_completed = true; |
+ }); |
+ test_adapter.reset(); |
+ |
+ // Make sure that the completion handler is called. |
+ base::test::ios::WaitUntilCondition(^{ |
+ return verification_completed; |
+ }, base::MessageLoop::current(), base::TimeDelta()); |
+} |
+ |
} // namespace web |