| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "base/memory/memory_pressure_listener.h" | 5 #include "base/memory/memory_pressure_listener.h" | 
| 6 #include "base/prefs/testing_pref_store.h" | 6 #include "base/prefs/testing_pref_store.h" | 
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" | 
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" | 
| 9 #include "base/test/histogram_tester.h" | 9 #include "base/test/histogram_tester.h" | 
| 10 #include "base/test/simple_test_clock.h" | 10 #include "base/test/simple_test_clock.h" | 
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 292       return; | 292       return; | 
| 293 | 293 | 
| 294     base::RunLoop run_loop; | 294     base::RunLoop run_loop; | 
| 295     base::Closure quit_closure(run_loop.QuitClosure()); | 295     base::Closure quit_closure(run_loop.QuitClosure()); | 
| 296     empty_url_request_jobs_callback = &quit_closure; | 296     empty_url_request_jobs_callback = &quit_closure; | 
| 297     run_loop.Run(); | 297     run_loop.Run(); | 
| 298     empty_url_request_jobs_callback = NULL; | 298     empty_url_request_jobs_callback = NULL; | 
| 299   } | 299   } | 
| 300 | 300 | 
| 301   void SignalGetDictionaryAndClearJobs(GURL request_url, GURL dictionary_url) { | 301   void SignalGetDictionaryAndClearJobs(GURL request_url, GURL dictionary_url) { | 
| 302     sdch_owner().OnGetDictionary(&sdch_manager_, request_url, dictionary_url); | 302     sdch_owner().OnGetDictionary(request_url, dictionary_url); | 
| 303     WaitForNoJobs(); | 303     WaitForNoJobs(); | 
| 304   } | 304   } | 
| 305 | 305 | 
| 306   // Create a unique (by hash) dictionary of the given size, | 306   // Create a unique (by hash) dictionary of the given size, | 
| 307   // associate it with a unique URL, add it to the manager through | 307   // associate it with a unique URL, add it to the manager through | 
| 308   // SdchOwner::OnDictionaryFetched(), and return whether that | 308   // SdchOwner::OnDictionaryFetched(), and return whether that | 
| 309   // addition was successful or not. | 309   // addition was successful or not. | 
| 310   bool CreateAndAddDictionary(size_t size, | 310   bool CreateAndAddDictionary(size_t size, | 
| 311                               std::string* server_hash_p, | 311                               std::string* server_hash_p, | 
| 312                               base::Time last_used_time) { | 312                               base::Time last_used_time) { | 
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 554                                      stale_newer)); | 554                                      stale_newer)); | 
| 555 | 555 | 
| 556   EXPECT_TRUE(CreateAndAddDictionary(kMaxSizeForTesting / 4, &server_hash_d3, | 556   EXPECT_TRUE(CreateAndAddDictionary(kMaxSizeForTesting / 4, &server_hash_d3, | 
| 557                                      stale_older)); | 557                                      stale_older)); | 
| 558 | 558 | 
| 559   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 559   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 
| 560   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d2)); | 560   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d2)); | 
| 561   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 561   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 
| 562 | 562 | 
| 563   // Use the oldest dictionary. | 563   // Use the oldest dictionary. | 
| 564   sdch_owner().OnDictionaryUsed(&sdch_manager(), server_hash_d3); | 564   sdch_owner().OnDictionaryUsed(server_hash_d3); | 
| 565 | 565 | 
| 566   // The addition of a new dictionary should succeed, evicting only the | 566   // The addition of a new dictionary should succeed, evicting only the | 
| 567   // newer stale one. | 567   // newer stale one. | 
| 568   std::string server_hash_d4; | 568   std::string server_hash_d4; | 
| 569   EXPECT_TRUE( | 569   EXPECT_TRUE( | 
| 570       CreateAndAddDictionary(kMaxSizeForTesting / 2, &server_hash_d4, fresh)); | 570       CreateAndAddDictionary(kMaxSizeForTesting / 2, &server_hash_d4, fresh)); | 
| 571   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 571   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 
| 572   EXPECT_FALSE(DictionaryPresentInManager(server_hash_d2)); | 572   EXPECT_FALSE(DictionaryPresentInManager(server_hash_d2)); | 
| 573   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 573   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 
| 574   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d4)); | 574   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d4)); | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 593                                      stale_newer)); | 593                                      stale_newer)); | 
| 594 | 594 | 
| 595   EXPECT_TRUE(CreateAndAddDictionary(kMaxSizeForTesting / 4, &server_hash_d3, | 595   EXPECT_TRUE(CreateAndAddDictionary(kMaxSizeForTesting / 4, &server_hash_d3, | 
| 596                                      stale_older)); | 596                                      stale_older)); | 
| 597 | 597 | 
| 598   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 598   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 
| 599   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d2)); | 599   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d2)); | 
| 600   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 600   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 
| 601 | 601 | 
| 602   // Use the older dictionaries. | 602   // Use the older dictionaries. | 
| 603   sdch_owner().OnDictionaryUsed(&sdch_manager(), server_hash_d2); | 603   sdch_owner().OnDictionaryUsed(server_hash_d2); | 
| 604   sdch_owner().OnDictionaryUsed(&sdch_manager(), server_hash_d3); | 604   sdch_owner().OnDictionaryUsed(server_hash_d3); | 
| 605 | 605 | 
| 606   // The addition of a new dictionary should fail, not evicting anything. | 606   // The addition of a new dictionary should fail, not evicting anything. | 
| 607   std::string server_hash_d4; | 607   std::string server_hash_d4; | 
| 608   EXPECT_FALSE( | 608   EXPECT_FALSE( | 
| 609       CreateAndAddDictionary(kMaxSizeForTesting / 2, &server_hash_d4, fresh)); | 609       CreateAndAddDictionary(kMaxSizeForTesting / 2, &server_hash_d4, fresh)); | 
| 610   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 610   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d1)); | 
| 611   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d2)); | 611   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d2)); | 
| 612   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 612   EXPECT_TRUE(DictionaryPresentInManager(server_hash_d3)); | 
| 613   EXPECT_FALSE(DictionaryPresentInManager(server_hash_d4)); | 613   EXPECT_FALSE(DictionaryPresentInManager(server_hash_d4)); | 
| 614 } | 614 } | 
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 864   int old_count; | 864   int old_count; | 
| 865   { | 865   { | 
| 866     ClearOwner(); | 866     ClearOwner(); | 
| 867     base::DictionaryValue* dict = nullptr; | 867     base::DictionaryValue* dict = nullptr; | 
| 868     ASSERT_TRUE(GetDictionaryForURL(pref_store_.get(), url, &hash, &dict)); | 868     ASSERT_TRUE(GetDictionaryForURL(pref_store_.get(), url, &hash, &dict)); | 
| 869     ASSERT_TRUE(dict->GetInteger("use_count", &old_count)); | 869     ASSERT_TRUE(dict->GetInteger("use_count", &old_count)); | 
| 870   } | 870   } | 
| 871 | 871 | 
| 872   ResetOwner(false); | 872   ResetOwner(false); | 
| 873   ASSERT_TRUE(CompleteLoadFromURL(url, "0", true)); | 873   ASSERT_TRUE(CompleteLoadFromURL(url, "0", true)); | 
| 874   owner_->OnDictionaryUsed(manager_.get(), hash); | 874   owner_->OnDictionaryUsed(hash); | 
| 875 | 875 | 
| 876   int new_count; | 876   int new_count; | 
| 877   { | 877   { | 
| 878     ClearOwner(); | 878     ClearOwner(); | 
| 879     base::DictionaryValue* dict = nullptr; | 879     base::DictionaryValue* dict = nullptr; | 
| 880     ASSERT_TRUE(GetDictionaryForURL(pref_store_.get(), url, nullptr, &dict)); | 880     ASSERT_TRUE(GetDictionaryForURL(pref_store_.get(), url, nullptr, &dict)); | 
| 881     ASSERT_TRUE(dict->GetInteger("use_count", &new_count)); | 881     ASSERT_TRUE(dict->GetInteger("use_count", &new_count)); | 
| 882   } | 882   } | 
| 883 | 883 | 
| 884   EXPECT_EQ(old_count + 1, new_count); | 884   EXPECT_EQ(old_count + 1, new_count); | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 913 | 913 | 
| 914   EXPECT_TRUE(CompleteLoadFromURL(url0, "0", true)); | 914   EXPECT_TRUE(CompleteLoadFromURL(url0, "0", true)); | 
| 915   EXPECT_TRUE(CompleteLoadFromURL(url1, "1", false)); | 915   EXPECT_TRUE(CompleteLoadFromURL(url1, "1", false)); | 
| 916 | 916 | 
| 917   tester.ExpectTotalCount("Sdch3.NetworkBytesSpent", 1); | 917   tester.ExpectTotalCount("Sdch3.NetworkBytesSpent", 1); | 
| 918   tester.ExpectUniqueSample("Sdch3.NetworkBytesSpent", | 918   tester.ExpectUniqueSample("Sdch3.NetworkBytesSpent", | 
| 919                             CreateDictionary(url1, "1").size(), 1); | 919                             CreateDictionary(url1, "1").size(), 1); | 
| 920 } | 920 } | 
| 921 | 921 | 
| 922 }  // namespace net | 922 }  // namespace net | 
| OLD | NEW | 
|---|