| 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 77d9ed4e0a3372b7e6679640bec49314bab8bc0e..b21c918b8eb356b135f376a00e4f3762e6ac0379 100644
|
| --- a/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc
|
| +++ b/chrome/browser/predictors/resource_prefetch_predictor_unittest.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/run_loop.h"
|
| +#include "base/test/histogram_tester.h"
|
| #include "base/time/time.h"
|
| #include "chrome/browser/history/history_service_factory.h"
|
| #include "chrome/browser/predictors/resource_prefetch_predictor_tables.h"
|
| @@ -265,6 +266,8 @@ class ResourcePrefetchPredictorTest : public testing::Test {
|
|
|
| MockURLRequestJobFactory url_request_job_factory_;
|
| EmptyURLRequestDelegate url_request_delegate_;
|
| +
|
| + std::unique_ptr<base::HistogramTester> histogram_tester_;
|
| };
|
|
|
| ResourcePrefetchPredictorTest::ResourcePrefetchPredictorTest()
|
| @@ -301,6 +304,8 @@ void ResourcePrefetchPredictorTest::SetUp() {
|
| ResourcePrefetchPredictor::INITIALIZED);
|
|
|
| url_request_context_.set_job_factory(&url_request_job_factory_);
|
| +
|
| + histogram_tester_.reset(new base::HistogramTester());
|
| }
|
|
|
| void ResourcePrefetchPredictorTest::TearDown() {
|
| @@ -1553,4 +1558,49 @@ TEST_F(ResourcePrefetchPredictorTest, GetPrefetchData) {
|
| EXPECT_THAT(urls, UnorderedElementsAre(GURL(font_url)));
|
| }
|
|
|
| +TEST_F(ResourcePrefetchPredictorTest, TestPrecisionRecallHistograms) {
|
| + using testing::_;
|
| + EXPECT_CALL(*mock_tables_.get(), UpdateData(_, _, _, _));
|
| +
|
| + // Fill the database with 3 resources: 1 useful, 2 useless.
|
| + const std::string main_frame_url = "http://google.com/?query=cats";
|
| + PrefetchData google = CreatePrefetchData("google.com", 1);
|
| +
|
| + const std::string script_url = "https://cdn.google.com/script.js";
|
| + InitializeResourceData(google.add_resources(), script_url,
|
| + content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1,
|
| + net::MEDIUM, false, false);
|
| + InitializeResourceData(google.add_resources(), script_url + "foo",
|
| + content::RESOURCE_TYPE_SCRIPT, 10, 0, 1, 2.1,
|
| + net::MEDIUM, false, false);
|
| + InitializeResourceData(google.add_resources(), script_url + "bar",
|
| + 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));
|
| +
|
| + std::vector<GURL> urls;
|
| + EXPECT_TRUE(predictor_->GetPrefetchData(GURL(main_frame_url), &urls));
|
| +
|
| + // Simulate a navigation with 2 resources, one we know, one we don't.
|
| + URLRequestSummary main_frame = CreateURLRequestSummary(1, main_frame_url);
|
| + predictor_->RecordURLRequest(main_frame);
|
| +
|
| + URLRequestSummary script = CreateURLRequestSummary(
|
| + 1, main_frame_url, script_url, content::RESOURCE_TYPE_SCRIPT);
|
| + predictor_->RecordURLResponse(script);
|
| +
|
| + URLRequestSummary new_script = CreateURLRequestSummary(
|
| + 1, main_frame_url, script_url + "2", content::RESOURCE_TYPE_SCRIPT);
|
| + predictor_->RecordURLResponse(new_script);
|
| +
|
| + predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id);
|
| + profile_->BlockUntilHistoryProcessesPendingRequests();
|
| +
|
| + histogram_tester_->ExpectBucketCount(
|
| + internal::kResourcePrefetchPredictorRecallHistogram, 50, 1);
|
| + histogram_tester_->ExpectBucketCount(
|
| + internal::kResourcePrefetchPredictorPrecisionHistogram, 33, 1);
|
| +}
|
| +
|
| } // namespace predictors
|
|
|