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 c3694699a9c997b73dde2a984c98d250af844fe3..b766a2619a3bb9556d8df2595c24fd9f8f385d5e 100644 |
--- a/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc |
+++ b/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "chrome/browser/history/history_service_factory.h" |
#include "chrome/browser/predictors/resource_prefetch_predictor_tables.h" |
#include "chrome/browser/predictors/resource_prefetch_predictor_test_util.h" |
+#include "chrome/browser/predictors/resource_prefetcher_manager.h" |
#include "chrome/test/base/testing_profile.h" |
#include "components/history/core/browser/history_service.h" |
#include "components/history/core/browser/history_types.h" |
@@ -37,6 +38,11 @@ using testing::UnorderedElementsAre; |
namespace predictors { |
+namespace { |
+constexpr int kDefaultMode = LoadingPredictorConfig::LEARNING | |
+ LoadingPredictorConfig::PREFETCHING_FOR_EXTERNAL; |
+} // namespace |
+ |
using URLRequestSummary = ResourcePrefetchPredictor::URLRequestSummary; |
using PageRequestSummary = ResourcePrefetchPredictor::PageRequestSummary; |
using PrefetchDataMap = ResourcePrefetchPredictorTables::PrefetchDataMap; |
@@ -174,6 +180,20 @@ class MockResourcePrefetchPredictorObserver : public TestObserver { |
const ResourcePrefetchPredictor::PageRequestSummary& summary)); |
}; |
+// Does nothing when a prefetch starts. |
+class MockResourcePrefetcherManager : public ResourcePrefetcherManager { |
+ public: |
+ using ResourcePrefetcherManager::ResourcePrefetcherManager; |
+ MOCK_METHOD2(MaybeAddPrefetch, |
+ void(const GURL& main_frame_url, const std::vector<GURL>& urls)); |
+ |
+ protected: |
+ ~MockResourcePrefetcherManager() {} |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MockResourcePrefetcherManager); |
+}; |
+ |
class ResourcePrefetchPredictorTest : public testing::Test { |
public: |
ResourcePrefetchPredictorTest(); |
@@ -227,9 +247,17 @@ class ResourcePrefetchPredictorTest : public testing::Test { |
base::RunLoop loop; |
loop.RunUntilIdle(); // Runs the DB lookup. |
profile_->BlockUntilHistoryProcessesPendingRequests(); |
+ |
+ mock_prefetch_manager_ = nullptr; |
+ if (predictor_->prefetch_manager_) { |
+ mock_prefetch_manager_ = new StrictMock<MockResourcePrefetcherManager>( |
+ predictor_.get(), predictor_->config_, |
+ predictor_->profile_->GetRequestContext()); |
+ predictor_->set_mock_resource_prefetcher_manager(mock_prefetch_manager_); |
+ } |
} |
- void ResetPredictor() { |
+ void ResetPredictor(int mode = kDefaultMode) { |
alexilin
2017/05/23 11:01:39
It changes the current behavior of tests. Why not
Benoit L
2017/05/29 16:45:14
Done.
|
LoadingPredictorConfig config; |
config.max_urls_to_track = 3; |
config.max_hosts_to_track = 2; |
@@ -241,9 +269,10 @@ class ResourcePrefetchPredictorTest : public testing::Test { |
config.is_url_learning_enabled = true; |
config.is_manifests_enabled = true; |
config.is_origin_learning_enabled = true; |
+ config.mode = mode; |
- config.mode |= LoadingPredictorConfig::LEARNING; |
- predictor_.reset(new ResourcePrefetchPredictor(config, profile_.get())); |
+ predictor_ = |
+ base::MakeUnique<ResourcePrefetchPredictor>(config, profile_.get()); |
predictor_->set_mock_tables(mock_tables_); |
} |
@@ -261,6 +290,8 @@ class ResourcePrefetchPredictorTest : public testing::Test { |
std::unique_ptr<ResourcePrefetchPredictor> predictor_; |
scoped_refptr<StrictMock<MockResourcePrefetchPredictorTables>> mock_tables_; |
+ scoped_refptr<StrictMock<MockResourcePrefetcherManager>> |
+ mock_prefetch_manager_; |
PrefetchDataMap test_url_data_; |
PrefetchDataMap test_host_data_; |
@@ -2095,24 +2126,16 @@ TEST_F(ResourcePrefetchPredictorTest, |
} |
TEST_F(ResourcePrefetchPredictorTest, TestPrefetchingDurationHistogram) { |
- // Prefetching duration for an url without resources in the database |
alexilin
2017/05/23 11:01:39
Why changing this test?
We wanted to record prefet
|
- // shouldn't be recorded. |
- const std::string main_frame_url = "http://google.com/?query=cats"; |
- predictor_->StartPrefetching(GURL(main_frame_url), HintOrigin::EXTERNAL); |
- predictor_->StopPrefetching(GURL(main_frame_url)); |
- histogram_tester_->ExpectTotalCount( |
- internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 0); |
- |
// Fill the database to record a duration. |
- PrefetchData google = CreatePrefetchData("google.com", 1); |
- InitializeResourceData( |
- google.add_resources(), "https://cdn.google.com/script.js", |
- content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1, net::MEDIUM, false, false); |
- predictor_->host_table_cache_->insert( |
- std::make_pair(google.primary_key(), google)); |
+ for (const auto& kv : test_host_data_) |
alexilin
2017/05/23 11:01:39
nit:
predictor_->host_table_cache_ = test_host_dat
|
+ predictor_->host_table_cache_->insert(kv); |
- predictor_->StartPrefetching(GURL(main_frame_url), HintOrigin::EXTERNAL); |
- predictor_->StopPrefetching(GURL(main_frame_url)); |
+ using testing::_; |
+ EXPECT_CALL(*mock_prefetch_manager_.get(), MaybeAddPrefetch(_, _)); |
+ |
+ const GURL url = GURL("http://www.facebook.com/cats"); |
+ predictor_->StartPrefetching(url, HintOrigin::EXTERNAL); |
+ predictor_->StopPrefetching(url); |
histogram_tester_->ExpectTotalCount( |
internal::kResourcePrefetchPredictorPrefetchingDurationHistogram, 1); |
} |
@@ -2170,4 +2193,34 @@ TEST_F(ResourcePrefetchPredictorTest, TestRecordFirstContentfulPaint) { |
profile_->BlockUntilHistoryProcessesPendingRequests(); |
} |
+TEST_F(ResourcePrefetchPredictorTest, TestCanPrefetchUrlForOrigin) { |
+ for (const auto& kv : test_host_data_) |
alexilin
2017/05/23 11:01:39
ditto
|
+ predictor_->host_table_cache_->insert(kv); |
+ |
+ const GURL url = GURL("http://www.facebook.com/cats"); |
+ EXPECT_TRUE(predictor_->CanPrefetchUrlForOrigin(url, HintOrigin::EXTERNAL)); |
+ |
+ // Unknown host. |
+ EXPECT_FALSE(predictor_->CanPrefetchUrlForOrigin(GURL("https://unknown.com"), |
+ HintOrigin::EXTERNAL)); |
+ // Wrong origin. |
+ EXPECT_FALSE( |
+ predictor_->CanPrefetchUrlForOrigin(url, HintOrigin::NAVIGATION)); |
+ |
+ // Prefetching not enabled. |
+ EXPECT_CALL(*mock_tables_.get(), |
+ GetAllData(Pointee(ContainerEq(PrefetchDataMap())), |
+ Pointee(ContainerEq(PrefetchDataMap())), |
+ Pointee(ContainerEq(RedirectDataMap())), |
+ Pointee(ContainerEq(RedirectDataMap())), |
+ Pointee(ContainerEq(ManifestDataMap())), |
+ Pointee(ContainerEq(OriginDataMap())))); |
+ ResetPredictor(LoadingPredictorConfig::LEARNING); |
+ InitializePredictor(); |
+ for (const auto& kv : test_host_data_) |
alexilin
2017/05/23 11:01:39
ditto
|
+ predictor_->host_table_cache_->insert(kv); |
+ |
+ EXPECT_FALSE(predictor_->CanPrefetchUrlForOrigin(url, HintOrigin::EXTERNAL)); |
+} |
+ |
} // namespace predictors |