Index: net/base/sdch_manager_unittest.cc |
diff --git a/net/base/sdch_manager_unittest.cc b/net/base/sdch_manager_unittest.cc |
deleted file mode 100644 |
index d2baa4b853092fe3e848e0e1e323a4c658f1eff0..0000000000000000000000000000000000000000 |
--- a/net/base/sdch_manager_unittest.cc |
+++ /dev/null |
@@ -1,708 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <limits.h> |
- |
-#include <string> |
- |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/test/simple_test_clock.h" |
-#include "net/base/net_log.h" |
-#include "net/base/sdch_manager.h" |
-#include "net/base/sdch_observer.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "url/gurl.h" |
- |
-namespace net { |
- |
-// Workaround for http://crbug.com/437794; remove when fixed. |
-#if !defined(OS_IOS) |
- |
-//------------------------------------------------------------------------------ |
-// Provide sample data and compression results with a sample VCDIFF dictionary. |
-// Note an SDCH dictionary has extra meta-data before the VCDIFF dictionary. |
-static const char kTestVcdiffDictionary[] = "DictionaryFor" |
- "SdchCompression1SdchCompression2SdchCompression3SdchCompression\n"; |
- |
-//------------------------------------------------------------------------------ |
- |
-class MockSdchObserver : public SdchObserver { |
- public: |
- MockSdchObserver() |
- : dictionary_used_notifications_(0), |
- get_dictionary_notifications_(0), |
- clear_dictionaries_notifications_(0) {} |
- |
- std::string last_server_hash() const { return last_server_hash_; } |
- int dictionary_used_notifications() const { |
- return dictionary_used_notifications_; |
- } |
- const GURL& last_dictionary_request_url() const { |
- return last_dictionary_request_url_; |
- } |
- const GURL& last_dictionary_url() const { return last_dictionary_url_; } |
- int get_dictionary_notifications() const { |
- return get_dictionary_notifications_; |
- } |
- |
- int clear_dictionary_notifications() const { |
- return clear_dictionaries_notifications_; |
- } |
- |
- // SdchObserver implementation |
- void OnDictionaryUsed(SdchManager* manager, |
- const std::string& server_hash) override { |
- last_server_hash_ = server_hash; |
- ++dictionary_used_notifications_; |
- } |
- |
- void OnGetDictionary(SdchManager* manager, |
- const GURL& request_url, |
- const GURL& dictionary_url) override { |
- ++get_dictionary_notifications_; |
- last_dictionary_request_url_ = request_url; |
- last_dictionary_url_ = dictionary_url; |
- } |
- void OnClearDictionaries(SdchManager* manager) override { |
- ++clear_dictionaries_notifications_; |
- } |
- |
- private: |
- int dictionary_used_notifications_; |
- int get_dictionary_notifications_; |
- int clear_dictionaries_notifications_; |
- |
- std::string last_server_hash_; |
- GURL last_dictionary_request_url_; |
- GURL last_dictionary_url_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MockSdchObserver); |
-}; |
- |
-class SdchManagerTest : public testing::Test { |
- protected: |
- SdchManagerTest() |
- : sdch_manager_(new SdchManager), |
- default_support_(false), |
- default_https_support_(false) { |
- default_support_ = sdch_manager_->sdch_enabled(); |
- default_https_support_ = sdch_manager_->secure_scheme_supported(); |
- } |
- |
- ~SdchManagerTest() override {} |
- |
- SdchManager* sdch_manager() { return sdch_manager_.get(); } |
- |
- // Reset globals back to default state. |
- void TearDown() override { |
- SdchManager::EnableSdchSupport(default_support_); |
- SdchManager::EnableSecureSchemeSupport(default_https_support_); |
- } |
- |
- // Attempt to add a dictionary to the manager and probe for success or |
- // failure. |
- bool AddSdchDictionary(const std::string& dictionary_text, |
- const GURL& gurl) { |
- return sdch_manager_->AddSdchDictionary(dictionary_text, gurl, nullptr) == |
- SDCH_OK; |
- } |
- |
- private: |
- scoped_ptr<SdchManager> sdch_manager_; |
- bool default_support_; |
- bool default_https_support_; |
-}; |
- |
-static std::string NewSdchDictionary(const std::string& domain) { |
- std::string dictionary; |
- if (!domain.empty()) { |
- dictionary.append("Domain: "); |
- dictionary.append(domain); |
- dictionary.append("\n"); |
- } |
- dictionary.append("\n"); |
- dictionary.append(kTestVcdiffDictionary, sizeof(kTestVcdiffDictionary) - 1); |
- return dictionary; |
-} |
- |
-TEST_F(SdchManagerTest, DomainSupported) { |
- GURL google_url("http://www.google.com"); |
- |
- SdchManager::EnableSdchSupport(false); |
- EXPECT_EQ(SDCH_DISABLED, sdch_manager()->IsInSupportedDomain(google_url)); |
- SdchManager::EnableSdchSupport(true); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(google_url)); |
-} |
- |
-TEST_F(SdchManagerTest, DomainBlacklisting) { |
- GURL test_url("http://www.test.com"); |
- GURL google_url("http://www.google.com"); |
- |
- sdch_manager()->BlacklistDomain(test_url, SDCH_OK); |
- EXPECT_EQ(SDCH_DOMAIN_BLACKLIST_INCLUDES_TARGET, |
- sdch_manager()->IsInSupportedDomain(test_url)); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(google_url)); |
- |
- sdch_manager()->BlacklistDomain(google_url, SDCH_OK); |
- EXPECT_EQ(SDCH_DOMAIN_BLACKLIST_INCLUDES_TARGET, |
- sdch_manager()->IsInSupportedDomain(google_url)); |
-} |
- |
-TEST_F(SdchManagerTest, DomainBlacklistingCaseSensitivity) { |
- GURL test_url("http://www.TesT.com"); |
- GURL test2_url("http://www.tEst.com"); |
- |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(test_url)); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(test2_url)); |
- sdch_manager()->BlacklistDomain(test_url, SDCH_OK); |
- EXPECT_EQ(SDCH_DOMAIN_BLACKLIST_INCLUDES_TARGET, |
- sdch_manager()->IsInSupportedDomain(test2_url)); |
-} |
- |
-TEST_F(SdchManagerTest, BlacklistingReset) { |
- GURL gurl("http://mytest.DoMain.com"); |
- std::string domain(gurl.host()); |
- |
- sdch_manager()->ClearBlacklistings(); |
- EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), 0); |
- EXPECT_EQ(sdch_manager()->BlacklistDomainExponential(domain), 0); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(gurl)); |
-} |
- |
-TEST_F(SdchManagerTest, BlacklistingSingleBlacklist) { |
- GURL gurl("http://mytest.DoMain.com"); |
- std::string domain(gurl.host()); |
- sdch_manager()->ClearBlacklistings(); |
- |
- sdch_manager()->BlacklistDomain(gurl, SDCH_OK); |
- EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), 1); |
- EXPECT_EQ(sdch_manager()->BlacklistDomainExponential(domain), 1); |
- |
- // Check that any domain lookup reduces the blacklist counter. |
- EXPECT_EQ(SDCH_DOMAIN_BLACKLIST_INCLUDES_TARGET, |
- sdch_manager()->IsInSupportedDomain(gurl)); |
- EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), 0); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(gurl)); |
-} |
- |
-TEST_F(SdchManagerTest, BlacklistingExponential) { |
- GURL gurl("http://mytest.DoMain.com"); |
- std::string domain(gurl.host()); |
- sdch_manager()->ClearBlacklistings(); |
- |
- int exponential = 1; |
- for (int i = 1; i < 100; ++i) { |
- sdch_manager()->BlacklistDomain(gurl, SDCH_OK); |
- EXPECT_EQ(sdch_manager()->BlacklistDomainExponential(domain), exponential); |
- |
- EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), exponential); |
- EXPECT_EQ(SDCH_DOMAIN_BLACKLIST_INCLUDES_TARGET, |
- sdch_manager()->IsInSupportedDomain(gurl)); |
- EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), exponential - 1); |
- |
- // Simulate a large number of domain checks (which eventually remove the |
- // blacklisting). |
- sdch_manager()->ClearDomainBlacklisting(domain); |
- EXPECT_EQ(sdch_manager()->BlackListDomainCount(domain), 0); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(gurl)); |
- |
- // Predict what exponential backoff will be. |
- exponential = 1 + 2 * exponential; |
- if (exponential < 0) |
- exponential = INT_MAX; // We don't wrap. |
- } |
-} |
- |
-TEST_F(SdchManagerTest, CanSetExactMatchDictionary) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Perfect match should work. |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://" + dictionary_domain))); |
-} |
- |
-TEST_F(SdchManagerTest, CanAdvertiseDictionaryOverHTTP) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://" + dictionary_domain))); |
- |
- // HTTP target URL can advertise dictionary. |
- EXPECT_TRUE(sdch_manager()->GetDictionarySet( |
- GURL("http://" + dictionary_domain + "/test"))); |
-} |
- |
-TEST_F(SdchManagerTest, CanNotAdvertiseDictionaryOverHTTPS) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://" + dictionary_domain))); |
- |
- // HTTPS target URL should NOT advertise dictionary. |
- EXPECT_FALSE(sdch_manager()->GetDictionarySet( |
- GURL("https://" + dictionary_domain + "/test"))); |
-} |
- |
-TEST_F(SdchManagerTest, CanUseHTTPSDictionaryOverHTTPSIfEnabled) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- SdchManager::EnableSecureSchemeSupport(false); |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("https://" + dictionary_domain))); |
- SdchManager::EnableSecureSchemeSupport(true); |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("https://" + dictionary_domain))); |
- |
- GURL target_url("https://" + dictionary_domain + "/test"); |
- // HTTPS target URL should advertise dictionary if secure scheme support is |
- // enabled. |
- EXPECT_TRUE(sdch_manager()->GetDictionarySet(target_url)); |
- |
- // Dictionary should be available. |
- std::string client_hash; |
- std::string server_hash; |
- sdch_manager()->GenerateHash(dictionary_text, &client_hash, &server_hash); |
- SdchProblemCode problem_code; |
- scoped_ptr<SdchManager::DictionarySet> dict_set( |
- sdch_manager()->GetDictionarySetByHash( |
- target_url, server_hash, &problem_code)); |
- EXPECT_EQ(SDCH_OK, problem_code); |
- EXPECT_TRUE(dict_set.get()); |
- EXPECT_TRUE(dict_set->GetDictionary(server_hash)); |
-} |
- |
-TEST_F(SdchManagerTest, CanNotUseHTTPDictionaryOverHTTPS) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://" + dictionary_domain))); |
- |
- GURL target_url("https://" + dictionary_domain + "/test"); |
- // HTTPS target URL should not advertise dictionary acquired over HTTP even if |
- // secure scheme support is enabled. |
- SdchManager::EnableSecureSchemeSupport(true); |
- EXPECT_FALSE(sdch_manager()->GetDictionarySet(target_url)); |
- |
- std::string client_hash; |
- std::string server_hash; |
- sdch_manager()->GenerateHash(dictionary_text, &client_hash, &server_hash); |
- SdchProblemCode problem_code; |
- scoped_ptr<SdchManager::DictionarySet> dict_set( |
- sdch_manager()->GetDictionarySetByHash( |
- target_url, server_hash, &problem_code)); |
- EXPECT_FALSE(dict_set.get()); |
- EXPECT_EQ(SDCH_DICTIONARY_FOUND_HAS_WRONG_SCHEME, problem_code); |
-} |
- |
-TEST_F(SdchManagerTest, CanNotUseHTTPSDictionaryOverHTTP) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- SdchManager::EnableSecureSchemeSupport(true); |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("https://" + dictionary_domain))); |
- |
- GURL target_url("http://" + dictionary_domain + "/test"); |
- // HTTP target URL should not advertise dictionary acquired over HTTPS even if |
- // secure scheme support is enabled. |
- EXPECT_FALSE(sdch_manager()->GetDictionarySet(target_url)); |
- |
- std::string client_hash; |
- std::string server_hash; |
- sdch_manager()->GenerateHash(dictionary_text, &client_hash, &server_hash); |
- SdchProblemCode problem_code; |
- scoped_ptr<SdchManager::DictionarySet> dict_set( |
- sdch_manager()->GetDictionarySetByHash( |
- target_url, server_hash, &problem_code)); |
- EXPECT_FALSE(dict_set.get()); |
- EXPECT_EQ(SDCH_DICTIONARY_FOUND_HAS_WRONG_SCHEME, problem_code); |
-} |
- |
-TEST_F(SdchManagerTest, FailToSetDomainMismatchDictionary) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Fail the "domain match" requirement. |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("http://y.z.google.com"))); |
-} |
- |
-TEST_F(SdchManagerTest, FailToSetDotHostPrefixDomainDictionary) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Fail the HD with D being the domain and H having a dot requirement. |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("http://w.x.y.z.google.com"))); |
-} |
- |
-TEST_F(SdchManagerTest, FailToSetDotHostPrefixDomainDictionaryTrailingDot) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Fail the HD with D being the domain and H having a dot requirement. |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("http://w.x.y.z.google.com."))); |
-} |
- |
-TEST_F(SdchManagerTest, FailToSetRepeatPrefixWithDotDictionary) { |
- // Make sure that a prefix that matches the domain postfix won't confuse |
- // the validation checks. |
- std::string dictionary_domain("www.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Fail the HD with D being the domain and H having a dot requirement. |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("http://www.google.com.www.google.com"))); |
-} |
- |
-TEST_F(SdchManagerTest, CanSetLeadingDotDomainDictionary) { |
- // Make sure that a prefix that matches the domain postfix won't confuse |
- // the validation checks. |
- std::string dictionary_domain(".google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Verify that a leading dot in the domain is acceptable, as long as the host |
- // name does not contain any dots preceding the matched domain name. |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, GURL("http://www.google.com"))); |
-} |
- |
-TEST_F(SdchManagerTest, |
- CanSetLeadingDotDomainDictionaryFromURLWithTrailingDot) { |
- // Make sure that a prefix that matches the domain postfix won't confuse |
- // the validation checks. |
- std::string dictionary_domain(".google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Verify that a leading dot in the domain is acceptable, as long as the host |
- // name does not contain any dots preceding the matched domain name. |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://www.google.com."))); |
-} |
- |
-TEST_F(SdchManagerTest, CannotSetLeadingDotDomainDictionary) { |
- // Make sure that a prefix that matches the domain postfix won't confuse |
- // the validation checks. |
- std::string dictionary_domain(".google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Verify that a leading dot in the domain does not affect the name containing |
- // dots failure. |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("http://www.subdomain.google.com"))); |
-} |
- |
-TEST_F(SdchManagerTest, CannotSetLeadingDotDomainDictionaryTrailingDot) { |
- // Make sure that a prefix that matches the domain postfix won't confuse |
- // the validation checks. |
- std::string dictionary_domain(".google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Verify that a trailing period in the URL doesn't affect the check. |
- EXPECT_FALSE(AddSdchDictionary(dictionary_text, |
- GURL("http://www.subdomain.google.com."))); |
-} |
- |
-// Make sure the order of the tests is not helping us or confusing things. |
-// See test CanSetExactMatchDictionary above for first try. |
-TEST_F(SdchManagerTest, CanStillSetExactMatchDictionary) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- |
- // Perfect match should *STILL* work. |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://" + dictionary_domain))); |
-} |
- |
-TEST_F(SdchManagerTest, PathMatch) { |
- bool (*PathMatch)(const std::string& path, const std::string& restriction) = |
- SdchManager::Dictionary::PathMatch; |
- // Perfect match is supported. |
- EXPECT_TRUE(PathMatch("/search", "/search")); |
- EXPECT_TRUE(PathMatch("/search/", "/search/")); |
- |
- // Prefix only works if last character of restriction is a slash, or first |
- // character in path after a match is a slash. Validate each case separately. |
- |
- // Rely on the slash in the path (not at the end of the restriction). |
- EXPECT_TRUE(PathMatch("/search/something", "/search")); |
- EXPECT_TRUE(PathMatch("/search/s", "/search")); |
- EXPECT_TRUE(PathMatch("/search/other", "/search")); |
- EXPECT_TRUE(PathMatch("/search/something", "/search")); |
- |
- // Rely on the slash at the end of the restriction. |
- EXPECT_TRUE(PathMatch("/search/something", "/search/")); |
- EXPECT_TRUE(PathMatch("/search/s", "/search/")); |
- EXPECT_TRUE(PathMatch("/search/other", "/search/")); |
- EXPECT_TRUE(PathMatch("/search/something", "/search/")); |
- |
- // Make sure less that sufficient prefix match is false. |
- EXPECT_FALSE(PathMatch("/sear", "/search")); |
- EXPECT_FALSE(PathMatch("/", "/search")); |
- EXPECT_FALSE(PathMatch(std::string(), "/search")); |
- |
- // Add examples with several levels of direcories in the restriction. |
- EXPECT_FALSE(PathMatch("/search/something", "search/s")); |
- EXPECT_FALSE(PathMatch("/search/", "/search/s")); |
- |
- // Make sure adding characters to path will also fail. |
- EXPECT_FALSE(PathMatch("/searching", "/search/")); |
- EXPECT_FALSE(PathMatch("/searching", "/search")); |
- |
- // Make sure we're case sensitive. |
- EXPECT_FALSE(PathMatch("/ABC", "/abc")); |
- EXPECT_FALSE(PathMatch("/abc", "/ABC")); |
-} |
- |
-// The following are only applicable while we have a latency test in the code, |
-// and can be removed when that functionality is stripped. |
-TEST_F(SdchManagerTest, LatencyTestControls) { |
- GURL url("http://www.google.com"); |
- GURL url2("http://www.google2.com"); |
- |
- // First make sure we default to false. |
- EXPECT_FALSE(sdch_manager()->AllowLatencyExperiment(url)); |
- EXPECT_FALSE(sdch_manager()->AllowLatencyExperiment(url2)); |
- |
- // That we can set each to true. |
- sdch_manager()->SetAllowLatencyExperiment(url, true); |
- EXPECT_TRUE(sdch_manager()->AllowLatencyExperiment(url)); |
- EXPECT_FALSE(sdch_manager()->AllowLatencyExperiment(url2)); |
- |
- sdch_manager()->SetAllowLatencyExperiment(url2, true); |
- EXPECT_TRUE(sdch_manager()->AllowLatencyExperiment(url)); |
- EXPECT_TRUE(sdch_manager()->AllowLatencyExperiment(url2)); |
- |
- // And can reset them to false. |
- sdch_manager()->SetAllowLatencyExperiment(url, false); |
- EXPECT_FALSE(sdch_manager()->AllowLatencyExperiment(url)); |
- EXPECT_TRUE(sdch_manager()->AllowLatencyExperiment(url2)); |
- |
- sdch_manager()->SetAllowLatencyExperiment(url2, false); |
- EXPECT_FALSE(sdch_manager()->AllowLatencyExperiment(url)); |
- EXPECT_FALSE(sdch_manager()->AllowLatencyExperiment(url2)); |
-} |
- |
-TEST_F(SdchManagerTest, CanUseMultipleManagers) { |
- SdchManager second_manager; |
- |
- std::string dictionary_domain_1("x.y.z.google.com"); |
- std::string dictionary_domain_2("x.y.z.chromium.org"); |
- |
- std::string dictionary_text_1(NewSdchDictionary(dictionary_domain_1)); |
- std::string dictionary_text_2(NewSdchDictionary(dictionary_domain_2)); |
- |
- std::string tmp_hash; |
- std::string server_hash_1; |
- std::string server_hash_2; |
- |
- SdchManager::GenerateHash(dictionary_text_1, &tmp_hash, &server_hash_1); |
- SdchManager::GenerateHash(dictionary_text_2, &tmp_hash, &server_hash_2); |
- |
- // Confirm that if you add directories to one manager, you |
- // can't get them from the other. |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text_1, |
- GURL("http://" + dictionary_domain_1))); |
- scoped_ptr<SdchManager::DictionarySet> dict_set; |
- |
- SdchProblemCode problem_code; |
- dict_set = sdch_manager()->GetDictionarySetByHash( |
- GURL("http://" + dictionary_domain_1 + "/random_url"), |
- server_hash_1, &problem_code); |
- EXPECT_TRUE(dict_set); |
- EXPECT_TRUE(dict_set->GetDictionary(server_hash_1)); |
- EXPECT_EQ(SDCH_OK, problem_code); |
- |
- second_manager.AddSdchDictionary( |
- dictionary_text_2, GURL("http://" + dictionary_domain_2), nullptr); |
- dict_set = second_manager.GetDictionarySetByHash( |
- GURL("http://" + dictionary_domain_2 + "/random_url"), |
- server_hash_2, &problem_code); |
- EXPECT_TRUE(dict_set); |
- EXPECT_TRUE(dict_set->GetDictionary(server_hash_2)); |
- EXPECT_EQ(SDCH_OK, problem_code); |
- |
- dict_set = sdch_manager()->GetDictionarySetByHash( |
- GURL("http://" + dictionary_domain_2 + "/random_url"), |
- server_hash_2, &problem_code); |
- EXPECT_FALSE(dict_set); |
- EXPECT_EQ(SDCH_DICTIONARY_HASH_NOT_FOUND, problem_code); |
- |
- dict_set = second_manager.GetDictionarySetByHash( |
- GURL("http://" + dictionary_domain_1 + "/random_url"), |
- server_hash_1, &problem_code); |
- EXPECT_FALSE(dict_set); |
- EXPECT_EQ(SDCH_DICTIONARY_HASH_NOT_FOUND, problem_code); |
-} |
- |
-TEST_F(SdchManagerTest, HttpsCorrectlySupported) { |
- GURL url("http://www.google.com"); |
- GURL secure_url("https://www.google.com"); |
- |
- bool expect_https_support = true; |
- |
- SdchProblemCode expected_code = |
- expect_https_support ? SDCH_OK : SDCH_SECURE_SCHEME_NOT_SUPPORTED; |
- |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(url)); |
- EXPECT_EQ(expected_code, sdch_manager()->IsInSupportedDomain(secure_url)); |
- |
- SdchManager::EnableSecureSchemeSupport(!expect_https_support); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(url)); |
- EXPECT_NE(expected_code, sdch_manager()->IsInSupportedDomain(secure_url)); |
-} |
- |
-TEST_F(SdchManagerTest, ClearDictionaryData) { |
- std::string dictionary_domain("x.y.z.google.com"); |
- GURL blacklist_url("http://bad.chromium.org"); |
- |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- std::string tmp_hash; |
- std::string server_hash; |
- |
- SdchManager::GenerateHash(dictionary_text, &tmp_hash, &server_hash); |
- |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, |
- GURL("http://" + dictionary_domain))); |
- |
- scoped_ptr<SdchManager::DictionarySet> dict_set; |
- |
- SdchProblemCode problem_code; |
- dict_set = sdch_manager()->GetDictionarySetByHash( |
- GURL("http://" + dictionary_domain + "/random_url"), |
- server_hash, &problem_code); |
- EXPECT_TRUE(dict_set); |
- EXPECT_TRUE(dict_set->GetDictionary(server_hash)); |
- EXPECT_EQ(SDCH_OK, problem_code); |
- |
- sdch_manager()->BlacklistDomain(GURL(blacklist_url), SDCH_OK); |
- EXPECT_EQ(SDCH_DOMAIN_BLACKLIST_INCLUDES_TARGET, |
- sdch_manager()->IsInSupportedDomain(blacklist_url)); |
- |
- sdch_manager()->ClearData(); |
- |
- dict_set = sdch_manager()->GetDictionarySetByHash( |
- GURL("http://" + dictionary_domain + "/random_url"), |
- server_hash, &problem_code); |
- EXPECT_FALSE(dict_set); |
- EXPECT_EQ(SDCH_DICTIONARY_HASH_NOT_FOUND, problem_code); |
- EXPECT_EQ(SDCH_OK, sdch_manager()->IsInSupportedDomain(blacklist_url)); |
-} |
- |
-TEST_F(SdchManagerTest, GetDictionaryNotification) { |
- GURL test_request_gurl(GURL("http://www.example.com/data")); |
- GURL test_dictionary_gurl(GURL("http://www.example.com/dict")); |
- MockSdchObserver observer; |
- sdch_manager()->AddObserver(&observer); |
- |
- EXPECT_EQ(0, observer.get_dictionary_notifications()); |
- sdch_manager()->OnGetDictionary(test_request_gurl, test_dictionary_gurl); |
- EXPECT_EQ(1, observer.get_dictionary_notifications()); |
- EXPECT_EQ(test_request_gurl, observer.last_dictionary_request_url()); |
- EXPECT_EQ(test_dictionary_gurl, observer.last_dictionary_url()); |
- |
- sdch_manager()->RemoveObserver(&observer); |
- sdch_manager()->OnGetDictionary(test_request_gurl, test_dictionary_gurl); |
- EXPECT_EQ(1, observer.get_dictionary_notifications()); |
- EXPECT_EQ(test_request_gurl, observer.last_dictionary_request_url()); |
- 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); |
- |
- // It should be visible if looked up by hash whether expired or not. |
- scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); |
- clock->SetNow(base::Time::Now()); |
- clock->Advance(base::TimeDelta::FromMinutes(5)); |
- SdchProblemCode problem_code; |
- scoped_ptr<SdchManager::DictionarySet> hash_set( |
- sdch_manager()->GetDictionarySetByHash( |
- target_gurl, server_hash, &problem_code).Pass()); |
- ASSERT_TRUE(hash_set); |
- ASSERT_EQ(SDCH_OK, problem_code); |
- const_cast<SdchManager::Dictionary*>( |
- hash_set->GetDictionary(server_hash))->SetClockForTesting( |
- clock.Pass()); |
- |
- // 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, &problem_code)); |
- EXPECT_EQ(SDCH_OK, problem_code); |
-} |
- |
-TEST_F(SdchManagerTest, SdchOnByDefault) { |
- GURL google_url("http://www.google.com"); |
- scoped_ptr<SdchManager> sdch_manager(new SdchManager); |
- |
- EXPECT_EQ(SDCH_OK, sdch_manager->IsInSupportedDomain(google_url)); |
- SdchManager::EnableSdchSupport(false); |
- EXPECT_EQ(SDCH_DISABLED, sdch_manager->IsInSupportedDomain(google_url)); |
-} |
- |
-// Confirm dispatch of notification. |
-TEST_F(SdchManagerTest, SdchDictionaryUsed) { |
- MockSdchObserver observer; |
- sdch_manager()->AddObserver(&observer); |
- |
- EXPECT_EQ(0, observer.dictionary_used_notifications()); |
- sdch_manager()->OnDictionaryUsed("xyzzy"); |
- EXPECT_EQ(1, observer.dictionary_used_notifications()); |
- EXPECT_EQ("xyzzy", observer.last_server_hash()); |
- |
- std::string dictionary_domain("x.y.z.google.com"); |
- GURL target_gurl("http://" + dictionary_domain); |
- std::string dictionary_text(NewSdchDictionary(dictionary_domain)); |
- std::string client_hash; |
- std::string server_hash; |
- SdchManager::GenerateHash(dictionary_text, &client_hash, &server_hash); |
- EXPECT_TRUE(AddSdchDictionary(dictionary_text, target_gurl)); |
- EXPECT_EQ("xyzzy", observer.last_server_hash()); |
- EXPECT_EQ(1, observer.dictionary_used_notifications()); |
- |
- EXPECT_TRUE(sdch_manager()->GetDictionarySet(target_gurl)); |
- EXPECT_EQ("xyzzy", observer.last_server_hash()); |
- EXPECT_EQ(1, observer.dictionary_used_notifications()); |
- |
- sdch_manager()->RemoveObserver(&observer); |
- EXPECT_EQ(1, observer.dictionary_used_notifications()); |
- EXPECT_EQ("xyzzy", observer.last_server_hash()); |
- sdch_manager()->OnDictionaryUsed("plugh"); |
- EXPECT_EQ(1, observer.dictionary_used_notifications()); |
- EXPECT_EQ("xyzzy", observer.last_server_hash()); |
-} |
- |
-#else |
- |
-TEST(SdchManagerTest, SdchOffByDefault) { |
- GURL google_url("http://www.google.com"); |
- scoped_ptr<SdchManager> sdch_manager(new SdchManager); |
- |
- EXPECT_EQ(SDCH_DISABLED, sdch_manager->IsInSupportedDomain(google_url)); |
- SdchManager::EnableSdchSupport(true); |
- EXPECT_EQ(SDCH_OK, sdch_manager->IsInSupportedDomain(google_url)); |
-} |
- |
-#endif // !defined(OS_IOS) |
- |
-} // namespace net |