Index: net/http/http_cache_unittest.cc |
=================================================================== |
--- net/http/http_cache_unittest.cc (revision 97879) |
+++ net/http/http_cache_unittest.cc (working copy) |
@@ -16,7 +16,9 @@ |
#include "net/base/net_errors.h" |
#include "net/base/net_log_unittest.h" |
#include "net/base/ssl_cert_request_info.h" |
+#include "net/base/ssl_config_service.h" |
#include "net/disk_cache/disk_cache.h" |
+#include "net/http/disk_cache_based_ssl_host_info.h" |
#include "net/http/http_byte_range.h" |
#include "net/http/http_request_headers.h" |
#include "net/http/http_request_info.h" |
@@ -1038,7 +1040,7 @@ |
//----------------------------------------------------------------------------- |
-// tests |
+// HttpCache tests |
TEST(HttpCache, CreateThenDestroy) { |
MockHttpCache cache; |
@@ -5180,3 +5182,41 @@ |
EXPECT_TRUE(truncated); |
entry->Close(); |
} |
+ |
+//----------------------------------------------------------------------------- |
+// DiskCacheBasedSSLHostInfo tests |
+ |
+class DeleteSSLHostInfoCompletionCallback : public TestCompletionCallback { |
+ public: |
+ explicit DeleteSSLHostInfoCompletionCallback(net::SSLHostInfo* ssl_host_info) |
+ : ssl_host_info_(ssl_host_info) {} |
+ |
+ virtual void RunWithParams(const Tuple1<int>& params) { |
+ delete ssl_host_info_; |
+ TestCompletionCallback::RunWithParams(params); |
+ } |
+ |
+ private: |
+ net::SSLHostInfo* ssl_host_info_; |
+}; |
+ |
+// Tests that we can delete a DiskCacheBasedSSLHostInfo object in a |
+// completion callback for DiskCacheBasedSSLHostInfo::WaitForDataReady. |
+TEST(DiskCacheBasedSSLHostInfo, DeleteInCallback) { |
+ net::CertVerifier cert_verifier; |
+ // Use the blocking mock backend factory to force asynchronous completion |
+ // of ssl_host_info->WaitForDataReady(), so that the callback will run. |
+ MockBlockingBackendFactory* factory = new MockBlockingBackendFactory(); |
+ MockHttpCache cache(factory); |
+ net::SSLConfig ssl_config; |
+ net::SSLHostInfo* ssl_host_info = |
+ new net::DiskCacheBasedSSLHostInfo("https://www.verisign.com", ssl_config, |
+ &cert_verifier, cache.http_cache()); |
+ ssl_host_info->Start(); |
+ DeleteSSLHostInfoCompletionCallback callback(ssl_host_info); |
+ int rv = ssl_host_info->WaitForDataReady(&callback); |
+ EXPECT_EQ(net::ERR_IO_PENDING, rv); |
+ // Now complete the backend creation and let the callback run. |
+ factory->FinishCreation(); |
+ EXPECT_EQ(net::OK, callback.GetResult(rv)); |
+} |