| Index: net/base/sdch_manager_unittest.cc
|
| diff --git a/net/base/sdch_manager_unittest.cc b/net/base/sdch_manager_unittest.cc
|
| index 3587084c5440ca69be8af06988d7f453b91b9ed8..21fe0ce0228ca99ca1bd06004ddaac686b088d84 100644
|
| --- a/net/base/sdch_manager_unittest.cc
|
| +++ b/net/base/sdch_manager_unittest.cc
|
| @@ -31,15 +31,30 @@ static const char kTestVcdiffDictionary[] = "DictionaryFor"
|
|
|
| class MockSdchObserver : public SdchObserver {
|
| public:
|
| - MockSdchObserver() : get_dictionary_notifications_(0) {}
|
| + MockSdchObserver()
|
| + : dictionary_used_notifications_(0),
|
| + get_dictionary_notifications_(0),
|
| + clear_dictionaries_notifications_(0) {}
|
|
|
| + std::string last_server_hash() { return last_server_hash_; }
|
| + int dictionary_used_notifications() { return dictionary_used_notifications_; }
|
| const GURL& last_dictionary_request_url() {
|
| return last_dictionary_request_url_;
|
| }
|
| const GURL& last_dictionary_url() { return last_dictionary_url_; }
|
| int get_dictionary_notifications() { return get_dictionary_notifications_; }
|
|
|
| + int clear_dictionary_notifications() {
|
| + 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 {
|
| @@ -47,10 +62,16 @@ class MockSdchObserver : public SdchObserver {
|
| last_dictionary_request_url_ = request_url;
|
| last_dictionary_url_ = dictionary_url;
|
| }
|
| - void OnClearDictionaries(SdchManager* manager) override {}
|
| + 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_;
|
| };
|
| @@ -79,7 +100,8 @@ class SdchManagerTest : public testing::Test {
|
| // failure.
|
| bool AddSdchDictionary(const std::string& dictionary_text,
|
| const GURL& gurl) {
|
| - return sdch_manager_->AddSdchDictionary(dictionary_text, gurl) == SDCH_OK;
|
| + return sdch_manager_->AddSdchDictionary(dictionary_text, gurl, nullptr) ==
|
| + SDCH_OK;
|
| }
|
|
|
| private:
|
| @@ -394,40 +416,6 @@ TEST_F(SdchManagerTest, CanStillSetExactMatchDictionary) {
|
| GURL("http://" + dictionary_domain)));
|
| }
|
|
|
| -// Make sure the DOS protection precludes the addition of too many dictionaries.
|
| -TEST_F(SdchManagerTest, TooManyDictionaries) {
|
| - std::string dictionary_domain(".google.com");
|
| - std::string dictionary_text(NewSdchDictionary(dictionary_domain));
|
| -
|
| - for (size_t count = 0; count < SdchManager::kMaxDictionaryCount; ++count) {
|
| - EXPECT_TRUE(AddSdchDictionary(dictionary_text,
|
| - GURL("http://www.google.com")));
|
| - dictionary_text += " "; // Create dictionary with different SHA signature.
|
| - }
|
| - EXPECT_FALSE(
|
| - AddSdchDictionary(dictionary_text, GURL("http://www.google.com")));
|
| -}
|
| -
|
| -TEST_F(SdchManagerTest, DictionaryNotTooLarge) {
|
| - std::string dictionary_domain(".google.com");
|
| - std::string dictionary_text(NewSdchDictionary(dictionary_domain));
|
| -
|
| - dictionary_text.append(
|
| - SdchManager::kMaxDictionarySize - dictionary_text.size(), ' ');
|
| - EXPECT_TRUE(AddSdchDictionary(dictionary_text,
|
| - GURL("http://" + dictionary_domain)));
|
| -}
|
| -
|
| -TEST_F(SdchManagerTest, DictionaryTooLarge) {
|
| - std::string dictionary_domain(".google.com");
|
| - std::string dictionary_text(NewSdchDictionary(dictionary_domain));
|
| -
|
| - dictionary_text.append(
|
| - SdchManager::kMaxDictionarySize + 1 - dictionary_text.size(), ' ');
|
| - EXPECT_FALSE(AddSdchDictionary(dictionary_text,
|
| - GURL("http://" + dictionary_domain)));
|
| -}
|
| -
|
| TEST_F(SdchManagerTest, PathMatch) {
|
| bool (*PathMatch)(const std::string& path, const std::string& restriction) =
|
| SdchManager::Dictionary::PathMatch;
|
| @@ -528,7 +516,7 @@ TEST_F(SdchManagerTest, CanUseMultipleManagers) {
|
| EXPECT_EQ(SDCH_OK, problem_code);
|
|
|
| second_manager.AddSdchDictionary(
|
| - dictionary_text_2, GURL("http://" + dictionary_domain_2));
|
| + 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);
|
| @@ -666,6 +654,38 @@ TEST_F(SdchManagerTest, SdchOnByDefault) {
|
| 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) {
|
|
|