Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2146)

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc

Issue 2738613003: predictors: Add Manifest table to ResourcePrefetchPredictor. (Closed)
Patch Set: Add caution message. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc b/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
index ed8db8c944117f5422f235065ef20b145e277672..7f26eb4b963eb4bcaf13e715640ded2081888818 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables_unittest.cc
@@ -43,9 +43,12 @@ class ResourcePrefetchPredictorTablesTest : public testing::Test {
using PrefetchDataMap = ResourcePrefetchPredictorTables::PrefetchDataMap;
using RedirectDataMap = ResourcePrefetchPredictorTables::RedirectDataMap;
+ using ManifestDataMap = ResourcePrefetchPredictorTables::ManifestDataMap;
private:
- // Initializes the tables, |test_url_data_| and |test_host_data_|.
+ // Initializes the tables, |test_url_data_|, |test_host_data_|,
+ // |test_url_redirect_data_|, |test_host_redirect_data_| and
+ // |test_manifest_data_|.
void InitializeSampleData();
// Checks that the input PrefetchData are the same, although the resources
@@ -62,13 +65,23 @@ class ResourcePrefetchPredictorTablesTest : public testing::Test {
void TestRedirectsAreEqual(const std::vector<RedirectStat>& lhs,
const std::vector<RedirectStat>& rhs) const;
+ // Checks that the input ManifestData are the same, although the resources
+ // can be in different order.
+ void TestManifestDataAreEqual(const ManifestDataMap& lhs,
+ const ManifestDataMap& rhs) const;
+ void TestManifestResourcesAreEqual(
+ const std::vector<precache::PrecacheResource>& lhs,
+ const std::vector<precache::PrecacheResource>& rhs) const;
+
void AddKey(PrefetchDataMap* m, const std::string& key) const;
void AddKey(RedirectDataMap* m, const std::string& key) const;
+ void AddKey(ManifestDataMap* m, const std::string& key) const;
PrefetchDataMap test_url_data_;
PrefetchDataMap test_host_data_;
RedirectDataMap test_url_redirect_data_;
RedirectDataMap test_host_redirect_data_;
+ ManifestDataMap test_manifest_data_;
};
class ResourcePrefetchPredictorTablesReopenTest
@@ -106,38 +119,46 @@ void ResourcePrefetchPredictorTablesTest::TearDown() {
void ResourcePrefetchPredictorTablesTest::TestGetAllData() {
PrefetchDataMap actual_url_data, actual_host_data;
RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
+ ManifestDataMap actual_manifest_data;
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
TestPrefetchDataAreEqual(test_url_data_, actual_url_data);
TestPrefetchDataAreEqual(test_host_data_, actual_host_data);
TestRedirectDataAreEqual(test_url_redirect_data_, actual_url_redirect_data);
TestRedirectDataAreEqual(test_host_redirect_data_, actual_host_redirect_data);
+ TestManifestDataAreEqual(test_manifest_data_, actual_manifest_data);
}
void ResourcePrefetchPredictorTablesTest::TestDeleteData() {
std::vector<std::string> urls_to_delete = {"http://www.google.com",
"http://www.yahoo.com"};
std::vector<std::string> hosts_to_delete = {"www.yahoo.com"};
-
tables_->DeleteResourceData(urls_to_delete, hosts_to_delete);
urls_to_delete = {"http://fb.com/google", "http://google.com"};
hosts_to_delete = {"microsoft.com"};
-
tables_->DeleteRedirectData(urls_to_delete, hosts_to_delete);
+ hosts_to_delete = {"en.wikipedia.org"};
+ tables_->DeleteManifestData(hosts_to_delete);
+
PrefetchDataMap actual_url_data, actual_host_data;
RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
+ ManifestDataMap actual_manifest_data;
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
PrefetchDataMap expected_url_data, expected_host_data;
RedirectDataMap expected_url_redirect_data, expected_host_redirect_data;
+ ManifestDataMap expected_manifest_data;
AddKey(&expected_url_data, "http://www.reddit.com");
AddKey(&expected_host_data, "www.facebook.com");
AddKey(&expected_url_redirect_data, "http://nyt.com");
AddKey(&expected_host_redirect_data, "bbc.com");
+ AddKey(&expected_manifest_data, "youtube.com");
TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
@@ -145,6 +166,7 @@ void ResourcePrefetchPredictorTablesTest::TestDeleteData() {
actual_url_redirect_data);
TestRedirectDataAreEqual(expected_host_redirect_data,
actual_host_redirect_data);
+ TestManifestDataAreEqual(expected_manifest_data, actual_manifest_data);
}
void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() {
@@ -154,8 +176,10 @@ void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() {
PrefetchDataMap actual_url_data, actual_host_data;
RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
+ ManifestDataMap actual_manifest_data;
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
PrefetchDataMap expected_url_data;
AddKey(&expected_url_data, "http://www.google.com");
@@ -173,8 +197,10 @@ void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() {
actual_host_data.clear();
actual_url_redirect_data.clear();
actual_host_redirect_data.clear();
+ actual_manifest_data.clear();
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
PrefetchDataMap expected_host_data;
AddKey(&expected_host_data, "www.yahoo.com");
@@ -191,8 +217,10 @@ void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() {
actual_host_data.clear();
actual_url_redirect_data.clear();
actual_host_redirect_data.clear();
+ actual_manifest_data.clear();
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
RedirectDataMap expected_url_redirect_data;
AddKey(&expected_url_redirect_data, "http://fb.com/google");
@@ -210,8 +238,10 @@ void ResourcePrefetchPredictorTablesTest::TestDeleteSingleDataPoint() {
actual_host_data.clear();
actual_url_redirect_data.clear();
actual_host_redirect_data.clear();
+ actual_manifest_data.clear();
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
RedirectDataMap expected_host_redirect_data;
AddKey(&expected_host_redirect_data, "microsoft.com");
@@ -257,13 +287,22 @@ void ResourcePrefetchPredictorTablesTest::TestUpdateData() {
tables_->UpdateData(google, yahoo, facebook, microsoft);
+ precache::PrecacheManifest theverge;
+ InitializePrecacheResource(theverge.add_resource(),
+ "https://www.theverge.com/main.js", 0.7);
+
+ tables_->UpdateManifestData("theverge.com", theverge);
+
PrefetchDataMap actual_url_data, actual_host_data;
RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
+ ManifestDataMap actual_manifest_data;
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
PrefetchDataMap expected_url_data, expected_host_data;
RedirectDataMap expected_url_redirect_data, expected_host_redirect_data;
+ ManifestDataMap expected_manifest_data;
AddKey(&expected_url_data, "http://www.reddit.com");
AddKey(&expected_url_data, "http://www.yahoo.com");
expected_url_data.insert(std::make_pair("http://www.google.com", google));
@@ -280,12 +319,17 @@ void ResourcePrefetchPredictorTablesTest::TestUpdateData() {
expected_host_redirect_data.insert(
std::make_pair("microsoft.com", microsoft));
+ AddKey(&expected_manifest_data, "youtube.com");
+ AddKey(&expected_manifest_data, "en.wikipedia.org");
+ expected_manifest_data.insert(std::make_pair("theverge.com", theverge));
+
TestPrefetchDataAreEqual(expected_url_data, actual_url_data);
TestPrefetchDataAreEqual(expected_host_data, actual_host_data);
TestRedirectDataAreEqual(expected_url_redirect_data,
actual_url_redirect_data);
TestRedirectDataAreEqual(expected_host_redirect_data,
actual_host_redirect_data);
+ TestManifestDataAreEqual(expected_manifest_data, actual_manifest_data);
}
void ResourcePrefetchPredictorTablesTest::TestDeleteAllData() {
@@ -293,12 +337,15 @@ void ResourcePrefetchPredictorTablesTest::TestDeleteAllData() {
PrefetchDataMap actual_url_data, actual_host_data;
RedirectDataMap actual_url_redirect_data, actual_host_redirect_data;
+ ManifestDataMap actual_manifest_data;
tables_->GetAllData(&actual_url_data, &actual_host_data,
- &actual_url_redirect_data, &actual_host_redirect_data);
+ &actual_url_redirect_data, &actual_host_redirect_data,
+ &actual_manifest_data);
EXPECT_TRUE(actual_url_data.empty());
EXPECT_TRUE(actual_host_data.empty());
EXPECT_TRUE(actual_url_redirect_data.empty());
EXPECT_TRUE(actual_host_redirect_data.empty());
+ EXPECT_TRUE(actual_manifest_data.empty());
}
void ResourcePrefetchPredictorTablesTest::TestPrefetchDataAreEqual(
@@ -389,6 +436,48 @@ void ResourcePrefetchPredictorTablesTest::TestRedirectsAreEqual(
EXPECT_TRUE(lhs_index.empty());
}
+void ResourcePrefetchPredictorTablesTest::TestManifestDataAreEqual(
+ const ManifestDataMap& lhs,
+ const ManifestDataMap& rhs) const {
+ EXPECT_EQ(lhs.size(), rhs.size());
+
+ for (const auto& m : rhs) {
+ const auto lhs_it = lhs.find(m.first);
+ ASSERT_TRUE(lhs_it != lhs.end()) << m.first;
+ EXPECT_EQ(lhs_it->second.id().id(), m.second.id().id());
+
+ std::vector<precache::PrecacheResource> lhs_resources(
+ lhs_it->second.resource().begin(), lhs_it->second.resource().end());
+ std::vector<precache::PrecacheResource> rhs_resources(
+ m.second.resource().begin(), m.second.resource().end());
+
+ TestManifestResourcesAreEqual(lhs_resources, rhs_resources);
+ }
+}
+
+void ResourcePrefetchPredictorTablesTest::TestManifestResourcesAreEqual(
+ const std::vector<precache::PrecacheResource>& lhs,
+ const std::vector<precache::PrecacheResource>& rhs) const {
+ EXPECT_EQ(lhs.size(), rhs.size());
+
+ std::map<std::string, precache::PrecacheResource> lhs_index;
+ // Repeated resources are not allowed.
+ for (const auto& r : lhs)
+ EXPECT_TRUE(lhs_index.insert(std::make_pair(r.url(), r)).second);
+
+ for (const auto& r : rhs) {
+ auto lhs_it = lhs_index.find(r.url());
+ if (lhs_it != lhs_index.end()) {
+ EXPECT_EQ(r, lhs_it->second);
+ lhs_index.erase(lhs_it);
+ } else {
+ ADD_FAILURE() << r.url();
+ }
+ }
+
+ EXPECT_TRUE(lhs_index.empty());
+}
+
void ResourcePrefetchPredictorTablesTest::AddKey(PrefetchDataMap* m,
const std::string& key) const {
PrefetchDataMap::const_iterator it = test_url_data_.find(key);
@@ -413,6 +502,13 @@ void ResourcePrefetchPredictorTablesTest::AddKey(RedirectDataMap* m,
m->insert(*it);
}
+void ResourcePrefetchPredictorTablesTest::AddKey(ManifestDataMap* m,
+ const std::string& key) const {
+ auto it = test_manifest_data_.find(key);
+ ASSERT_TRUE(it != test_manifest_data_.end());
+ m->insert(*it);
+}
+
void ResourcePrefetchPredictorTablesTest::InitializeSampleData() {
PrefetchData empty_resource_data;
RedirectData empty_redirect_data;
@@ -553,6 +649,26 @@ void ResourcePrefetchPredictorTablesTest::InitializeSampleData() {
tables_->UpdateData(empty_resource_data, empty_resource_data,
empty_redirect_data, microsoft);
}
+
+ { // Manifest data.
+ precache::PrecacheManifest wikipedia;
+ InitializePrecacheResource(wikipedia.add_resource(),
+ "https://en.wikipedia.org/script.js", 0.7);
+ InitializePrecacheResource(wikipedia.add_resource(),
+ "https://en.wikipedia.org/image.png", 0.3);
+
+ precache::PrecacheManifest youtube;
+ InitializePrecacheResource(youtube.add_resource(),
+ "https://youtube.com/photo.jpg", 0.5);
+ InitializePrecacheResource(youtube.add_resource(),
+ "https://youtube.com/base.js", 0.2);
+
+ test_manifest_data_.clear();
+ test_manifest_data_.insert(std::make_pair("en.wikipedia.org", wikipedia));
+ test_manifest_data_.insert(std::make_pair("youtube.com", youtube));
+ tables_->UpdateManifestData("en.wikipedia.org", wikipedia);
+ tables_->UpdateManifestData("youtube.com", youtube);
+ }
}
void ResourcePrefetchPredictorTablesTest::ReopenDatabase() {
@@ -649,12 +765,14 @@ TEST_F(ResourcePrefetchPredictorTablesTest, DatabaseIsResetWhenIncompatible) {
PrefetchDataMap url_data, host_data;
RedirectDataMap url_redirect_data, host_redirect_data;
+ ManifestDataMap manifest_data;
tables_->GetAllData(&url_data, &host_data, &url_redirect_data,
- &host_redirect_data);
+ &host_redirect_data, &manifest_data);
EXPECT_TRUE(url_data.empty());
EXPECT_TRUE(host_data.empty());
EXPECT_TRUE(url_redirect_data.empty());
EXPECT_TRUE(host_redirect_data.empty());
+ EXPECT_TRUE(manifest_data.empty());
}
TEST_F(ResourcePrefetchPredictorTablesReopenTest, GetAllData) {

Powered by Google App Engine
This is Rietveld 408576698