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

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

Issue 2796783004: predictors: Add origin learning. (Closed)
Patch Set: , Created 3 years, 8 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
« no previous file with comments | « chrome/browser/predictors/resource_prefetch_predictor_test_util.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/predictors/resource_prefetch_predictor_unittest.cc
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc b/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc
index 9f2a98bad54aee1e732bd8af694711539196b455..508e408680e31053fd21cb989d8f362622dd83ab 100644
--- a/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc
+++ b/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc
@@ -42,6 +42,7 @@ using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary;
using PrefetchDataMap = ResourcePrefetchPredictorTables::PrefetchDataMap;
using RedirectDataMap = ResourcePrefetchPredictorTables::RedirectDataMap;
using ManifestDataMap = ResourcePrefetchPredictorTables::ManifestDataMap;
+using OriginDataMap = ResourcePrefetchPredictorTables::OriginDataMap;
scoped_refptr<net::HttpResponseHeaders> MakeResponseHeaders(
const char* headers) {
@@ -129,12 +130,13 @@ class MockResourcePrefetchPredictorTables
public:
MockResourcePrefetchPredictorTables() { }
- MOCK_METHOD5(GetAllData,
+ MOCK_METHOD6(GetAllData,
void(PrefetchDataMap* url_data_map,
PrefetchDataMap* host_data_map,
RedirectDataMap* url_redirect_data_map,
RedirectDataMap* host_redirect_data_map,
- ManifestDataMap* manifest_data_map));
+ ManifestDataMap* manifest_data_map,
+ OriginDataMap* origin_data_map));
MOCK_METHOD4(UpdateData,
void(const PrefetchData& url_data,
const PrefetchData& host_data,
@@ -143,9 +145,11 @@ class MockResourcePrefetchPredictorTables
MOCK_METHOD2(UpdateManifestData,
void(const std::string& host,
const precache::PrecacheManifest& manifest_data));
+ MOCK_METHOD1(UpdateOriginData, void(const OriginData& origin_data));
MOCK_METHOD2(DeleteResourceData,
void(const std::vector<std::string>& urls,
const std::vector<std::string>& hosts));
+ MOCK_METHOD1(DeleteOriginData, void(const std::vector<std::string>& hosts));
MOCK_METHOD2(DeleteSingleResourceDataPoint,
void(const std::string& key, PrefetchKeyType key_type));
MOCK_METHOD2(DeleteRedirectData,
@@ -237,6 +241,7 @@ class ResourcePrefetchPredictorTest : public testing::Test {
config.min_resource_confidence_to_trigger_prefetch = 0.5;
config.is_url_learning_enabled = true;
config.is_manifests_enabled = true;
+ config.is_origin_prediction_enabled = true;
config.mode |= ResourcePrefetchPredictorConfig::LEARNING;
predictor_.reset(new ResourcePrefetchPredictor(config, profile_.get()));
@@ -263,6 +268,7 @@ class ResourcePrefetchPredictorTest : public testing::Test {
RedirectDataMap test_url_redirect_data_;
RedirectDataMap test_host_redirect_data_;
ManifestDataMap test_manifest_data_;
+ OriginDataMap test_origin_data_;
PrefetchData empty_resource_data_;
RedirectData empty_redirect_data_;
@@ -300,7 +306,8 @@ void ResourcePrefetchPredictorTest::SetUp() {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))));
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))));
InitializePredictor();
EXPECT_TRUE(predictor_->inflight_navigations_.empty());
EXPECT_EQ(predictor_->initialization_state_,
@@ -442,6 +449,22 @@ void ResourcePrefetchPredictorTest::InitializeSampleData() {
test_manifest_data_.insert(std::make_pair("google.com", google));
test_manifest_data_.insert(std::make_pair("facebook.com", facebook));
}
+
+ { // Origin data.
+ OriginData google = CreateOriginData("google.com", 12);
+ InitializeOriginStat(google.add_origins(), "https://static.google.com", 12,
+ 0, 0, 3., false, true);
+ InitializeOriginStat(google.add_origins(), "https://cats.google.com", 12, 0,
+ 0, 5., true, true);
+ test_origin_data_.insert({"google.com", google});
+
+ OriginData twitter = CreateOriginData("twitter.com", 42);
+ InitializeOriginStat(twitter.add_origins(), "https://static.twitter.com",
+ 12, 0, 0, 3., false, true);
+ InitializeOriginStat(twitter.add_origins(), "https://random.140chars.com",
+ 12, 0, 0, 3., false, true);
+ test_origin_data_.insert({"twitter.com", twitter});
+ }
}
void ResourcePrefetchPredictorTest::TestRedirectStatusHistogram(
@@ -472,6 +495,8 @@ void ResourcePrefetchPredictorTest::TestRedirectStatusHistogram(
using testing::_;
EXPECT_CALL(*mock_tables_.get(), UpdateData(_, _, _, _))
.Times(testing::AtLeast(1));
+ EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(_));
+
URLRequestSummary initial =
CreateURLRequestSummary(1, navigation_initial_url);
predictor_->RecordURLRequest(initial);
@@ -513,6 +538,7 @@ TEST_F(ResourcePrefetchPredictorTest, LazilyInitializeEmpty) {
EXPECT_TRUE(predictor_->url_redirect_table_cache_->empty());
EXPECT_TRUE(predictor_->host_redirect_table_cache_->empty());
EXPECT_TRUE(predictor_->manifest_table_cache_->empty());
+ EXPECT_TRUE(predictor_->origin_table_cache_->empty());
}
// Tests that the history and the db tables data are loaded correctly.
@@ -525,12 +551,14 @@ TEST_F(ResourcePrefetchPredictorTest, LazilyInitializeWithData) {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))))
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))))
.WillOnce(DoAll(SetArgPointee<0>(test_url_data_),
SetArgPointee<1>(test_host_data_),
SetArgPointee<2>(test_url_redirect_data_),
SetArgPointee<3>(test_host_redirect_data_),
- SetArgPointee<4>(test_manifest_data_)));
+ SetArgPointee<4>(test_manifest_data_),
+ SetArgPointee<5>(test_origin_data_)));
ResetPredictor();
InitializePredictor();
@@ -545,6 +573,7 @@ TEST_F(ResourcePrefetchPredictorTest, LazilyInitializeWithData) {
EXPECT_EQ(test_url_redirect_data_, *predictor_->url_redirect_table_cache_);
EXPECT_EQ(test_host_redirect_data_, *predictor_->host_redirect_table_cache_);
EXPECT_EQ(test_manifest_data_, *predictor_->manifest_table_cache_);
+ EXPECT_EQ(test_origin_data_, *predictor_->origin_table_cache_);
}
// Single navigation but history count is low, so should not record.
@@ -600,6 +629,10 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationNotRecorded) {
EXPECT_CALL(*mock_tables_.get(),
UpdateData(empty_resource_data_, host_data, empty_redirect_data_,
empty_redirect_data_));
+ OriginData origin_data = CreateOriginData("www.google.com");
+ InitializeOriginStat(origin_data.add_origins(), "https://google.com/", 1, 0,
+ 0, 1., false, true);
+ EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data));
predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id);
profile_->BlockUntilHistoryProcessesPendingRequests();
@@ -646,6 +679,25 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) {
content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true));
predictor_->RecordURLResponse(resources.back());
+ auto no_store = CreateURLRequestSummary(
+ 1, "http://www.google.com",
+ "http://static.google.com/style2-no-store.css",
+ content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true);
+ no_store.is_no_store = true;
+ predictor_->RecordURLResponse(no_store);
+
+ auto redirected = CreateURLRequestSummary(
+ 1, "http://www.google.com", "http://reader.google.com/style.css",
+ content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true);
+ redirected.redirect_url = GURL("http://dev.null.google.com/style.css");
+
+ predictor_->RecordURLRedirect(redirected);
+ redirected.is_no_store = true;
+ redirected.request_url = redirected.redirect_url;
+ redirected.redirect_url = GURL();
+
+ predictor_->RecordURLResponse(redirected);
+
StrictMock<MockResourcePrefetchPredictorObserver> mock_observer(
predictor_.get());
EXPECT_CALL(mock_observer,
@@ -673,6 +725,17 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) {
UpdateData(url_data, empty_resource_data_, empty_redirect_data_,
empty_redirect_data_));
+ OriginData origin_data = CreateOriginData("www.google.com");
+ InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/",
+ 1, 0, 0, 2., true, true);
+ InitializeOriginStat(origin_data.add_origins(), "http://dev.null.google.com/",
+ 1, 0, 0, 4., true, true);
+ InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0,
+ 1., false, true);
+ InitializeOriginStat(origin_data.add_origins(), "http://reader.google.com/",
+ 1, 0, 0, 3., false, true);
+ EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data));
+
PrefetchData host_data = CreatePrefetchData("www.google.com");
host_data.mutable_resources()->CopyFrom(url_data.resources());
EXPECT_CALL(*mock_tables_.get(),
@@ -694,7 +757,8 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))))
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))))
.WillOnce(DoAll(SetArgPointee<0>(test_url_data_),
SetArgPointee<1>(test_host_data_)));
ResetPredictor();
@@ -737,6 +801,12 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) {
1, "http://www.google.com", "http://google.com/style2.css",
content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true));
predictor_->RecordURLResponse(resources.back());
+ auto no_store = CreateURLRequestSummary(
+ 1, "http://www.google.com",
+ "http://static.google.com/style2-no-store.css",
+ content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true);
+ no_store.is_no_store = true;
+ predictor_->RecordURLResponse(no_store);
StrictMock<MockResourcePrefetchPredictorObserver> mock_observer(
predictor_.get());
@@ -786,6 +856,13 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) {
UpdateData(empty_resource_data_, host_data, empty_redirect_data_,
empty_redirect_data_));
+ OriginData origin_data = CreateOriginData("www.google.com");
+ InitializeOriginStat(origin_data.add_origins(), "http://static.google.com/",
+ 1, 0, 0, 2., true, true);
+ InitializeOriginStat(origin_data.add_origins(), "http://google.com/", 1, 0, 0,
+ 1., false, true);
+ EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(origin_data));
+
predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id);
profile_->BlockUntilHistoryProcessesPendingRequests();
}
@@ -800,13 +877,16 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDBAndDBFull) {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))))
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))))
.WillOnce(DoAll(SetArgPointee<0>(test_url_data_),
- SetArgPointee<1>(test_host_data_)));
+ SetArgPointee<1>(test_host_data_),
+ SetArgPointee<5>(test_origin_data_)));
ResetPredictor();
InitializePredictor();
EXPECT_EQ(3U, predictor_->url_table_cache_->size());
EXPECT_EQ(2U, predictor_->host_table_cache_->size());
+ EXPECT_EQ(2U, predictor_->origin_table_cache_->size());
URLRequestSummary main_frame = CreateURLRequestSummary(
1, "http://www.nike.com", "http://www.nike.com",
@@ -837,6 +917,8 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDBAndDBFull) {
EXPECT_CALL(*mock_tables_.get(),
DeleteSingleResourceDataPoint("www.facebook.com",
PREFETCH_KEY_TYPE_HOST));
+ EXPECT_CALL(*mock_tables_.get(),
+ DeleteOriginData(std::vector<std::string>({"google.com"})));
PrefetchData url_data = CreatePrefetchData("http://www.nike.com/");
InitializeResourceData(url_data.add_resources(), "http://nike.com/style1.css",
@@ -855,6 +937,8 @@ TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDBAndDBFull) {
UpdateData(empty_resource_data_, host_data, empty_redirect_data_,
empty_redirect_data_));
+ EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(testing::_));
+
predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id);
profile_->BlockUntilHistoryProcessesPendingRequests();
}
@@ -921,7 +1005,8 @@ TEST_F(ResourcePrefetchPredictorTest, RedirectUrlInDB) {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))))
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))))
.WillOnce(DoAll(SetArgPointee<2>(test_url_redirect_data_),
SetArgPointee<3>(test_host_redirect_data_)));
ResetPredictor();
@@ -1000,7 +1085,8 @@ TEST_F(ResourcePrefetchPredictorTest, ManifestHostInDB) {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))))
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))))
.WillOnce(SetArgPointee<4>(test_manifest_data_));
ResetPredictor();
InitializePredictor();
@@ -1021,7 +1107,8 @@ TEST_F(ResourcePrefetchPredictorTest, ManifestHostNotInDBAndDBFull) {
Pointee(ContainerEq(PrefetchDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
Pointee(ContainerEq(RedirectDataMap())),
- Pointee(ContainerEq(ManifestDataMap()))))
+ Pointee(ContainerEq(ManifestDataMap())),
+ Pointee(ContainerEq(OriginDataMap()))))
.WillOnce(SetArgPointee<4>(test_manifest_data_));
ResetPredictor();
InitializePredictor();
@@ -1760,7 +1847,9 @@ TEST_F(ResourcePrefetchPredictorTest, GetPrefetchData) {
TEST_F(ResourcePrefetchPredictorTest, TestPrecisionRecallHistograms) {
using testing::_;
- EXPECT_CALL(*mock_tables_.get(), UpdateData(_, _, _, _));
+ EXPECT_CALL(*mock_tables_.get(), UpdateData(_, _, _, _))
+ .Times(testing::AtLeast(1));
+ EXPECT_CALL(*mock_tables_.get(), UpdateOriginData(_));
// Fill the database with 3 resources: 1 useful, 2 useless.
const std::string main_frame_url = "http://google.com/?query=cats";
« no previous file with comments | « chrome/browser/predictors/resource_prefetch_predictor_test_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698