Index: net/base/sdch_manager_unittest.cc |
diff --git a/net/base/sdch_manager_unittest.cc b/net/base/sdch_manager_unittest.cc |
index d986879aaa4c9b9928039f3290731e5ca49f0b0f..2736b523388e28cccbe4f02c85bf69935eb8ee0f 100644 |
--- a/net/base/sdch_manager_unittest.cc |
+++ b/net/base/sdch_manager_unittest.cc |
@@ -8,6 +8,7 @@ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/strings/stringprintf.h" |
#include "net/base/sdch_manager.h" |
#include "net/base/sdch_observer.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -73,14 +74,21 @@ class SdchManagerTest : public testing::Test { |
// failure. |
bool AddSdchDictionary(const std::string& dictionary_text, |
const GURL& gurl) { |
- std::string list; |
- sdch_manager_->GetAvailDictionaryList(gurl, &list); |
+ scoped_ptr<SdchManager::DictionarySet> set1( |
+ sdch_manager_->GetDictionarySet(gurl)); |
+ std::string set1_hashes; |
+ if (set1) |
+ set1->GetDictionaryClientHashList(&set1_hashes); |
+ |
sdch_manager_->AddSdchDictionary(dictionary_text, gurl); |
- std::string list2; |
- sdch_manager_->GetAvailDictionaryList(gurl, &list2); |
+ scoped_ptr<SdchManager::DictionarySet> set2( |
+ sdch_manager_->GetDictionarySet(gurl)); |
+ std::string set2_hashes; |
+ if (set2) |
+ set2->GetDictionaryClientHashList(&set2_hashes); |
// The list of hashes should change iff the addition succeeds. |
- return (list != list2); |
+ return (set1_hashes != set2_hashes); |
} |
private: |
@@ -114,11 +122,11 @@ TEST_F(SdchManagerTest, DomainBlacklisting) { |
GURL test_url("http://www.test.com"); |
GURL google_url("http://www.google.com"); |
- sdch_manager()->BlacklistDomain(test_url, SdchManager::MIN_PROBLEM_CODE); |
+ sdch_manager()->BlacklistDomain(test_url, SdchManager::OK); |
EXPECT_FALSE(sdch_manager()->IsInSupportedDomain(test_url)); |
EXPECT_TRUE(sdch_manager()->IsInSupportedDomain(google_url)); |
- sdch_manager()->BlacklistDomain(google_url, SdchManager::MIN_PROBLEM_CODE); |
+ sdch_manager()->BlacklistDomain(google_url, SdchManager::OK); |
EXPECT_FALSE(sdch_manager()->IsInSupportedDomain(google_url)); |
} |
@@ -128,7 +136,7 @@ TEST_F(SdchManagerTest, DomainBlacklistingCaseSensitivity) { |
EXPECT_TRUE(sdch_manager()->IsInSupportedDomain(test_url)); |
EXPECT_TRUE(sdch_manager()->IsInSupportedDomain(test2_url)); |
- sdch_manager()->BlacklistDomain(test_url, SdchManager::MIN_PROBLEM_CODE); |
+ sdch_manager()->BlacklistDomain(test_url, SdchManager::OK); |
EXPECT_FALSE(sdch_manager()->IsInSupportedDomain(test2_url)); |
} |
@@ -147,7 +155,7 @@ TEST_F(SdchManagerTest, BlacklistingSingleBlacklist) { |
std::string domain(gurl.host()); |
sdch_manager()->ClearBlacklistings(); |
- sdch_manager()->BlacklistDomain(gurl, SdchManager::MIN_PROBLEM_CODE); |
+ sdch_manager()->BlacklistDomain(gurl, SdchManager::OK); |
EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), 1); |
EXPECT_EQ(sdch_manager()->BlacklistDomainExponential(domain), 1); |
@@ -164,7 +172,7 @@ TEST_F(SdchManagerTest, BlacklistingExponential) { |
int exponential = 1; |
for (int i = 1; i < 100; ++i) { |
- sdch_manager()->BlacklistDomain(gurl, SdchManager::MIN_PROBLEM_CODE); |
+ sdch_manager()->BlacklistDomain(gurl, SdchManager::OK); |
EXPECT_EQ(sdch_manager()->BlacklistDomainExponential(domain), exponential); |
EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), exponential); |
@@ -200,12 +208,9 @@ TEST_F(SdchManagerTest, CanAdvertiseDictionaryOverHTTP) { |
EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
GURL("http://" + dictionary_domain))); |
- std::string dictionary_list; |
// HTTP target URL can advertise dictionary. |
- sdch_manager()->GetAvailDictionaryList( |
- GURL("http://" + dictionary_domain + "/test"), |
- &dictionary_list); |
- EXPECT_FALSE(dictionary_list.empty()); |
+ EXPECT_TRUE(sdch_manager()->GetDictionarySet( |
+ GURL("http://" + dictionary_domain + "/test"))); |
} |
TEST_F(SdchManagerTest, CanNotAdvertiseDictionaryOverHTTPS) { |
@@ -215,12 +220,9 @@ TEST_F(SdchManagerTest, CanNotAdvertiseDictionaryOverHTTPS) { |
EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
GURL("http://" + dictionary_domain))); |
- std::string dictionary_list; |
// HTTPS target URL should NOT advertise dictionary. |
- sdch_manager()->GetAvailDictionaryList( |
- GURL("https://" + dictionary_domain + "/test"), |
- &dictionary_list); |
- EXPECT_TRUE(dictionary_list.empty()); |
+ EXPECT_FALSE(sdch_manager()->GetDictionarySet( |
+ GURL("https://" + dictionary_domain + "/test"))); |
} |
TEST_F(SdchManagerTest, CanUseHTTPSDictionaryOverHTTPSIfEnabled) { |
@@ -235,19 +237,18 @@ TEST_F(SdchManagerTest, CanUseHTTPSDictionaryOverHTTPSIfEnabled) { |
GURL("https://" + dictionary_domain))); |
GURL target_url("https://" + dictionary_domain + "/test"); |
- std::string dictionary_list; |
// HTTPS target URL should advertise dictionary if secure scheme support is |
// enabled. |
- sdch_manager()->GetAvailDictionaryList(target_url, &dictionary_list); |
- EXPECT_FALSE(dictionary_list.empty()); |
+ EXPECT_TRUE(sdch_manager()->GetDictionarySet(target_url)); |
// Dictionary should be available. |
- scoped_refptr<SdchManager::Dictionary> dictionary; |
std::string client_hash; |
std::string server_hash; |
sdch_manager()->GenerateHash(dictionary_text, &client_hash, &server_hash); |
- sdch_manager()->GetVcdiffDictionary(server_hash, target_url, &dictionary); |
- EXPECT_TRUE(dictionary.get() != NULL); |
+ scoped_ptr<SdchManager::DictionarySet> dict_set( |
+ sdch_manager()->GetDictionarySetByHash(target_url, server_hash)); |
+ EXPECT_TRUE(dict_set.get()); |
+ EXPECT_TRUE(dict_set->Dictionary(server_hash)); |
} |
TEST_F(SdchManagerTest, CanNotUseHTTPDictionaryOverHTTPS) { |
@@ -258,19 +259,17 @@ TEST_F(SdchManagerTest, CanNotUseHTTPDictionaryOverHTTPS) { |
GURL("http://" + dictionary_domain))); |
GURL target_url("https://" + dictionary_domain + "/test"); |
- std::string dictionary_list; |
// HTTPS target URL should not advertise dictionary acquired over HTTP even if |
// secure scheme support is enabled. |
SdchManager::EnableSecureSchemeSupport(true); |
- sdch_manager()->GetAvailDictionaryList(target_url, &dictionary_list); |
- EXPECT_TRUE(dictionary_list.empty()); |
+ EXPECT_FALSE(sdch_manager()->GetDictionarySet(target_url)); |
- scoped_refptr<SdchManager::Dictionary> dictionary; |
std::string client_hash; |
std::string server_hash; |
sdch_manager()->GenerateHash(dictionary_text, &client_hash, &server_hash); |
- sdch_manager()->GetVcdiffDictionary(server_hash, target_url, &dictionary); |
- EXPECT_TRUE(dictionary.get() == NULL); |
+ scoped_ptr<SdchManager::DictionarySet> dict_set( |
+ sdch_manager()->GetDictionarySetByHash(target_url, server_hash)); |
+ EXPECT_FALSE(dict_set.get()); |
} |
TEST_F(SdchManagerTest, CanNotUseHTTPSDictionaryOverHTTP) { |
@@ -282,18 +281,16 @@ TEST_F(SdchManagerTest, CanNotUseHTTPSDictionaryOverHTTP) { |
GURL("https://" + dictionary_domain))); |
GURL target_url("http://" + dictionary_domain + "/test"); |
- std::string dictionary_list; |
// HTTP target URL should not advertise dictionary acquired over HTTPS even if |
// secure scheme support is enabled. |
- sdch_manager()->GetAvailDictionaryList(target_url, &dictionary_list); |
- EXPECT_TRUE(dictionary_list.empty()); |
+ EXPECT_FALSE(sdch_manager()->GetDictionarySet(target_url)); |
- scoped_refptr<SdchManager::Dictionary> dictionary; |
std::string client_hash; |
std::string server_hash; |
sdch_manager()->GenerateHash(dictionary_text, &client_hash, &server_hash); |
- sdch_manager()->GetVcdiffDictionary(server_hash, target_url, &dictionary); |
- EXPECT_TRUE(dictionary.get() == NULL); |
+ scoped_ptr<SdchManager::DictionarySet> dict_set( |
+ sdch_manager()->GetDictionarySetByHash(target_url, server_hash)); |
+ EXPECT_FALSE(dict_set.get()); |
} |
TEST_F(SdchManagerTest, FailToSetDomainMismatchDictionary) { |
@@ -515,32 +512,31 @@ TEST_F(SdchManagerTest, CanUseMultipleManagers) { |
// can't get them from the other. |
EXPECT_TRUE(AddSdchDictionary(dictionary_text_1, |
GURL("http://" + dictionary_domain_1))); |
- scoped_refptr<SdchManager::Dictionary> dictionary; |
- sdch_manager()->GetVcdiffDictionary( |
- server_hash_1, |
+ scoped_ptr<SdchManager::DictionarySet> dict_set; |
+ |
+ dict_set = sdch_manager()->GetDictionarySetByHash( |
GURL("http://" + dictionary_domain_1 + "/random_url"), |
- &dictionary); |
- EXPECT_TRUE(dictionary.get()); |
+ server_hash_1); |
+ EXPECT_TRUE(dict_set.get()); |
+ EXPECT_TRUE(dict_set->Dictionary(server_hash_1)); |
second_manager.AddSdchDictionary( |
dictionary_text_2, GURL("http://" + dictionary_domain_2)); |
- second_manager.GetVcdiffDictionary( |
- server_hash_2, |
+ dict_set = second_manager.GetDictionarySetByHash( |
GURL("http://" + dictionary_domain_2 + "/random_url"), |
- &dictionary); |
- EXPECT_TRUE(dictionary.get()); |
+ server_hash_2); |
+ EXPECT_TRUE(dict_set.get()); |
+ EXPECT_TRUE(dict_set->Dictionary(server_hash_2)); |
- sdch_manager()->GetVcdiffDictionary( |
- server_hash_2, |
+ dict_set = sdch_manager()->GetDictionarySetByHash( |
GURL("http://" + dictionary_domain_2 + "/random_url"), |
- &dictionary); |
- EXPECT_FALSE(dictionary.get()); |
+ server_hash_2); |
+ EXPECT_FALSE(dict_set.get()); |
- second_manager.GetVcdiffDictionary( |
- server_hash_1, |
+ dict_set = second_manager.GetDictionarySetByHash( |
GURL("http://" + dictionary_domain_1 + "/random_url"), |
- &dictionary); |
- EXPECT_FALSE(dictionary.get()); |
+ server_hash_1); |
+ EXPECT_FALSE(dict_set.get()); |
} |
TEST_F(SdchManagerTest, HttpsCorrectlySupported) { |
@@ -571,25 +567,24 @@ TEST_F(SdchManagerTest, ClearDictionaryData) { |
EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
GURL("http://" + dictionary_domain))); |
- scoped_refptr<SdchManager::Dictionary> dictionary; |
- sdch_manager()->GetVcdiffDictionary( |
- server_hash, |
+ |
+ scoped_ptr<SdchManager::DictionarySet> dict_set; |
+ |
+ dict_set = sdch_manager()->GetDictionarySetByHash( |
GURL("http://" + dictionary_domain + "/random_url"), |
- &dictionary); |
- EXPECT_TRUE(dictionary.get()); |
+ server_hash); |
+ EXPECT_TRUE(dict_set.get()); |
+ EXPECT_TRUE(dict_set->Dictionary(server_hash)); |
- sdch_manager()->BlacklistDomain(GURL(blacklist_url), |
- SdchManager::MIN_PROBLEM_CODE); |
+ sdch_manager()->BlacklistDomain(GURL(blacklist_url), SdchManager::OK); |
EXPECT_FALSE(sdch_manager()->IsInSupportedDomain(blacklist_url)); |
sdch_manager()->ClearData(); |
- dictionary = NULL; |
- sdch_manager()->GetVcdiffDictionary( |
- server_hash, |
+ dict_set = sdch_manager()->GetDictionarySetByHash( |
GURL("http://" + dictionary_domain + "/random_url"), |
- &dictionary); |
- EXPECT_FALSE(dictionary.get()); |
+ server_hash); |
+ EXPECT_FALSE(dict_set.get()); |
EXPECT_TRUE(sdch_manager()->IsInSupportedDomain(blacklist_url)); |
} |
@@ -612,4 +607,23 @@ TEST_F(SdchManagerTest, GetDictionaryNotification) { |
EXPECT_EQ(test_dictionary_gurl, observer.last_dictionary_url()); |
} |
+TEST_F(SdchManagerTest, ExpirationCheckedProperly) { |
+ // Create an SDCH dictionary with an expiration time in the past. |
+ std::string dictionary_domain("x.y.z.google.com"); |
+ std::string dictionary_text(base::StringPrintf( |
+ "Domain: %s\nMax-age: 0\n\n", dictionary_domain.c_str())); |
+ dictionary_text.append( |
+ kTestVcdiffDictionary, sizeof(kTestVcdiffDictionary) - 1); |
+ std::string client_hash; |
+ std::string server_hash; |
+ SdchManager::GenerateHash(dictionary_text, &client_hash, &server_hash); |
+ GURL target_gurl("http://" + dictionary_domain); |
+ AddSdchDictionary(dictionary_text, target_gurl); |
+ |
+ // Make sure it's not visible for advertisement, but is visible |
+ // if looked up by hash. |
+ EXPECT_FALSE(sdch_manager()->GetDictionarySet(target_gurl)); |
+ EXPECT_TRUE(sdch_manager()->GetDictionarySetByHash(target_gurl, server_hash)); |
+} |
+ |
} // namespace net |