11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <iostream> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/run_loop.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/history/history_service.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/history/history_service_factory.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/predictors/resource_prefetch_predictor.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/predictors/resource_prefetch_predictor_tables.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/testing_profile.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/history/core/browser/history_types.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_browser_thread.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gmock/include/gmock/gmock.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing testing::ContainerEq; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing testing::Pointee; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing testing::SetArgPointee; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing testing::StrictMock; 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace predictors { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef ResourcePrefetchPredictor::URLRequestSummary URLRequestSummary; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef ResourcePrefetchPredictorTables::ResourceRow ResourceRow; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef std::vector<ResourceRow> ResourceRows; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef ResourcePrefetchPredictorTables::PrefetchData PrefetchData; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef ResourcePrefetchPredictorTables::PrefetchDataMap PrefetchDataMap; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// For printing failures nicely. 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PrintTo(const ResourceRow& row, ::std::ostream* os) { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *os << "[" << row.primary_key << "," << row.resource_url 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "," << row.resource_type << "," << row.number_of_hits 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "," << row.number_of_misses << "," << row.consecutive_misses 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "," << row.average_position << "," << row.score << "]"; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PrintTo(const PrefetchData& data, ::std::ostream* os) { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *os << "[" << data.key_type << "," << data.primary_key 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "," << data.last_visit.ToInternalValue() << "]\n"; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (ResourceRows::const_iterator it = data.resources.begin(); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it != data.resources.end(); ++it) { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *os << "\t\t"; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrintTo(*it, os); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *os << "\n"; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MockResourcePrefetchPredictorTables 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : public ResourcePrefetchPredictorTables { 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockResourcePrefetchPredictorTables() { } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD2(GetAllData, void(PrefetchDataMap* url_data_map, 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchDataMap* host_data_map)); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD2(UpdateData, void(const PrefetchData& url_data, 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const PrefetchData& host_data)); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD2(DeleteData, void(const std::vector<std::string>& urls, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<std::string>& hosts)); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD2(DeleteSingleDataPoint, void(const std::string& key, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchKeyType key_type)); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD0(DeleteAllData, void()); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~MockResourcePrefetchPredictorTables() { } 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ResourcePrefetchPredictorTest : public testing::Test { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictorTest(); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ResourcePrefetchPredictorTest(); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void TearDown() OVERRIDE; 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void AddUrlToHistory(const std::string& url, int visit_count) { 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HistoryServiceFactory::GetForProfile(profile_.get(), 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Profile::EXPLICIT_ACCESS)-> 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddPageWithDetails( 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL(url), 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci visit_count, 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Time::Now(), 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false, 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci history::SOURCE_BROWSED); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NavigationID CreateNavigationID(int process_id, 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int render_frame_id, 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& main_frame_url) { 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NavigationID navigation_id; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci navigation_id.render_process_id = process_id; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci navigation_id.render_frame_id = render_frame_id; 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci navigation_id.main_frame_url = GURL(main_frame_url); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci navigation_id.creation_time = base::TimeTicks::Now(); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return navigation_id; 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictor::URLRequestSummary CreateURLRequestSummary( 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int process_id, 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int render_frame_id, 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& main_frame_url, 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& resource_url, 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::ResourceType resource_type, 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& mime_type, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool was_cached) { 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictor::URLRequestSummary summary; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci summary.navigation_id = CreateNavigationID(process_id, render_frame_id, 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci main_frame_url); 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci summary.resource_url = GURL(resource_url); 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci summary.resource_type = resource_type; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci summary.mime_type = mime_type; 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci summary.was_cached = was_cached; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return summary; 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitializePredictor() { 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->StartInitialization(); 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop loop; 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci loop.RunUntilIdle(); // Runs the DB lookup. 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool URLRequestSummaryAreEqual(const URLRequestSummary& lhs, 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const URLRequestSummary& rhs) { 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return lhs.navigation_id == rhs.navigation_id && 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci lhs.resource_url == rhs.resource_url && 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci lhs.resource_type == rhs.resource_type && 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci lhs.mime_type == rhs.mime_type && 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci lhs.was_cached == rhs.was_cached; 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ResetPredictor() { 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictorConfig config; 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.max_urls_to_track = 3; 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.max_hosts_to_track = 2; 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.min_url_visit_count = 2; 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.max_resources_per_entry = 4; 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.max_consecutive_misses = 2; 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(shishir): Enable the prefetching mode in the tests. 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.mode |= ResourcePrefetchPredictorConfig::URL_LEARNING; 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci config.mode |= ResourcePrefetchPredictorConfig::HOST_LEARNING; 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_.reset(new ResourcePrefetchPredictor(config, profile_.get())); 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->set_mock_tables(mock_tables_); 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitializeSampleData(); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoop loop_; 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::TestBrowserThread ui_thread_; 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::TestBrowserThread db_thread_; 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<TestingProfile> profile_; 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ResourcePrefetchPredictor> predictor_; 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<StrictMock<MockResourcePrefetchPredictorTables> > mock_tables_; 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchDataMap test_url_data_; 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchDataMap test_host_data_; 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData empty_url_data_; 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData empty_host_data_; 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciResourcePrefetchPredictorTest::ResourcePrefetchPredictorTest() 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : loop_(base::MessageLoop::TYPE_DEFAULT), 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui_thread_(content::BrowserThread::UI, &loop_), 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci db_thread_(content::BrowserThread::DB, &loop_), 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_(new TestingProfile()), 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mock_tables_(new StrictMock<MockResourcePrefetchPredictorTables>()), 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci empty_url_data_(PREFETCH_KEY_TYPE_URL, std::string()), 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci empty_host_data_(PREFETCH_KEY_TYPE_HOST, std::string()) {} 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciResourcePrefetchPredictorTest::~ResourcePrefetchPredictorTest() { 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_.reset(NULL); 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci loop_.RunUntilIdle(); 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ResourcePrefetchPredictorTest::SetUp() { 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializeSampleData(); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(profile_->CreateHistoryService(true, false)); 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(HistoryServiceFactory::GetForProfile(profile_.get(), 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Profile::EXPLICIT_ACCESS)); 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Initialize the predictor with empty data. 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetPredictor(); 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(predictor_->initialization_state_, 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictor::NOT_INITIALIZED); 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAllData(Pointee(ContainerEq(PrefetchDataMap())), 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Pointee(ContainerEq(PrefetchDataMap())))); 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializePredictor(); 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.empty()); 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(predictor_->initialization_state_, 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictor::INITIALIZED); 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ResourcePrefetchPredictorTest::TearDown() { 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_.reset(NULL); 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->DestroyHistoryService(); 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ResourcePrefetchPredictorTest::InitializeSampleData() { 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { // Url data. 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData google(PREFETCH_KEY_TYPE_URL, "http://www.google.com/"); 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci google.last_visit = base::Time::FromInternalValue(1); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci google.resources.push_back(ResourceRow(std::string(), 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style1.css", 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3, 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci google.resources.push_back(ResourceRow(std::string(), 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script3.js", 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4, 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.1)); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci google.resources.push_back(ResourceRow(std::string(), 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script4.js", 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11, 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.1)); 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci google.resources.push_back(ResourceRow(std::string(), 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/image1.png", 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6, 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3, 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.2)); 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci google.resources.push_back(ResourceRow(std::string(), 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/a.font", 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_LAST_TYPE, 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5.1)); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData reddit(PREFETCH_KEY_TYPE_URL, "http://www.reddit.com/"); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci reddit.last_visit = base::Time::FromInternalValue(2); 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci reddit.resources 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .push_back(ResourceRow(std::string(), 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://reddit-resource.com/script1.js", 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4, 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci reddit.resources 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .push_back(ResourceRow(std::string(), 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://reddit-resource.com/script2.js", 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.1)); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData yahoo(PREFETCH_KEY_TYPE_URL, "http://www.yahoo.com/"); 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci yahoo.last_visit = base::Time::FromInternalValue(3); 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci yahoo.resources.push_back(ResourceRow(std::string(), 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/image.png", 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 20, 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10.0)); 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_url_data_.clear(); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_url_data_.insert(std::make_pair("http://www.google.com/", google)); 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_url_data_.insert(std::make_pair("http://www.reddit.com/", reddit)); 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_url_data_.insert(std::make_pair("http://www.yahoo.com/", yahoo)); 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { // Host data. 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData facebook(PREFETCH_KEY_TYPE_HOST, "www.facebook.com"); 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci facebook.last_visit = base::Time::FromInternalValue(4); 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci facebook.resources 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .push_back(ResourceRow(std::string(), 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.facebook.com/style.css", 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5, 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.1)); 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci facebook.resources 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .push_back(ResourceRow(std::string(), 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.facebook.com/script.js", 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4, 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.1)); 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci facebook.resources 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .push_back(ResourceRow(std::string(), 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.facebook.com/image.png", 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6, 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3, 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.2)); 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci facebook.resources.push_back(ResourceRow(std::string(), 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.facebook.com/a.font", 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_LAST_TYPE, 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5.1)); 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci facebook.resources 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .push_back(ResourceRow(std::string(), 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.resources.facebook.com/script.js", 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11, 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8.5)); 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData yahoo(PREFETCH_KEY_TYPE_HOST, "www.yahoo.com"); 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci yahoo.last_visit = base::Time::FromInternalValue(5); 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci yahoo.resources.push_back(ResourceRow(std::string(), 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/image.png", 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 20, 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10.0)); 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_host_data_.clear(); 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_host_data_.insert(std::make_pair("www.facebook.com", facebook)); 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_host_data_.insert(std::make_pair("www.yahoo.com", yahoo)); 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, LazilyInitializeEmpty) { 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Tests that the predictor initializes correctly without any data. 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->url_table_cache_->empty()); 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->host_table_cache_->empty()); 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, LazilyInitializeWithData) { 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Tests that the history and the db tables data are loaded correctly. 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddUrlToHistory("http://www.google.com/", 4); 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddUrlToHistory("http://www.yahoo.com/", 2); 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAllData(Pointee(ContainerEq(PrefetchDataMap())), 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Pointee(ContainerEq(PrefetchDataMap())))) 3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .WillOnce(DoAll(SetArgPointee<0>(test_url_data_), 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetArgPointee<1>(test_host_data_))); 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetPredictor(); 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializePredictor(); 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Test that the internal variables correctly initialized. 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(predictor_->initialization_state_, 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResourcePrefetchPredictor::INITIALIZED); 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.empty()); 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(test_url_data_, *predictor_->url_table_cache_); 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(test_host_data_, *predictor_->host_table_cache_); 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, NavigationNotRecorded) { 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Single navigation but history count is low, so should not record. 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddUrlToHistory("http://www.google.com", 1); 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary main_frame = 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLRequest(main_frame); 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Now add a few subresources. 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource1 = CreateURLRequestSummary( 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/style1.css", 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", false); 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource1); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource2 = CreateURLRequestSummary( 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script1.js", 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource2); 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource3 = CreateURLRequestSummary( 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script2.js", 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource3); 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.google.com"); 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style1.css", 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script1.js", 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.0)); 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script2.js", 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3.0)); 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(empty_url_data_, host_data)); 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnNavigationComplete(main_frame.navigation_id); 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) { 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Single navigation that will be recorded. Will check for duplicate 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // resources and also for number of resources saved. 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddUrlToHistory("http://www.google.com", 4); 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary main_frame = 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLRequest(main_frame); 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource1 = CreateURLRequestSummary( 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/style1.css", 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", false); 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource1); 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource2 = CreateURLRequestSummary( 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script1.js", 4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource2); 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource3 = CreateURLRequestSummary( 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script2.js", 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource3); 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource4 = CreateURLRequestSummary( 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script1.js", 4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", true); 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource4); 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource5 = CreateURLRequestSummary( 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/image1.png", 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, "image/png", false); 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource5); 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource6 = CreateURLRequestSummary( 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/image2.png", 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, "image/png", false); 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource6); 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource7 = CreateURLRequestSummary( 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/style2.css", 4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", true); 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource7); 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData url_data(PREFETCH_KEY_TYPE_URL, "http://www.google.com/"); 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style1.css", 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script1.js", 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.0)); 4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script2.js", 4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3.0)); 4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style2.css", 4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7.0)); 5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(url_data, empty_host_data_)); 5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.google.com"); 5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources = url_data.resources; 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(empty_url_data_, host_data)); 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnNavigationComplete(main_frame.navigation_id); 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) { 5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Tests that navigation is recorded correctly for URL already present in 5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the database cache. 5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddUrlToHistory("http://www.google.com", 4); 5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), 5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAllData(Pointee(ContainerEq(PrefetchDataMap())), 5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Pointee(ContainerEq(PrefetchDataMap())))) 5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .WillOnce(DoAll(SetArgPointee<0>(test_url_data_), 5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetArgPointee<1>(test_host_data_))); 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetPredictor(); 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializePredictor(); 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>(predictor_->url_table_cache_->size())); 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, static_cast<int>(predictor_->host_table_cache_->size())); 5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary main_frame = 5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLRequest(main_frame); 5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource1 = CreateURLRequestSummary( 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/style1.css", 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", false); 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource1); 5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource2 = CreateURLRequestSummary( 5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script1.js", 5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource2); 5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource3 = CreateURLRequestSummary( 5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script2.js", 5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource3); 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource4 = CreateURLRequestSummary( 5521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script1.js", 5531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", true); 5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource4); 5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource5 = CreateURLRequestSummary( 5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/image1.png", 5571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, "image/png", false); 5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource5); 5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource6 = CreateURLRequestSummary( 5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/image2.png", 5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, "image/png", false); 5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource6); 5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource7 = CreateURLRequestSummary( 5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/style2.css", 5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", true); 5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource7); 5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData url_data(PREFETCH_KEY_TYPE_URL, "http://www.google.com/"); 5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style1.css", 5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4, 5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 5761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 5771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script1.js", 5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.0)); 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script4.js", 5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11, 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.1)); 5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script2.js", 5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3.0)); 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(url_data, empty_host_data_)); 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL( 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *mock_tables_.get(), 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DeleteSingleDataPoint("www.facebook.com", PREFETCH_KEY_TYPE_HOST)); 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.google.com"); 6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style1.css", 6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script1.js", 6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.0)); 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/script2.js", 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3.0)); 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources.push_back(ResourceRow(std::string(), 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://google.com/style2.css", 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7.0)); 6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(empty_url_data_, host_data)); 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnNavigationComplete(main_frame.navigation_id); 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDBAndDBFull) { 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Tests that a URL is deleted before another is added if the cache is full. 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddUrlToHistory("http://www.nike.com/", 4); 6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetAllData(Pointee(ContainerEq(PrefetchDataMap())), 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Pointee(ContainerEq(PrefetchDataMap())))) 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .WillOnce(DoAll(SetArgPointee<0>(test_url_data_), 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetArgPointee<1>(test_host_data_))); 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetPredictor(); 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitializePredictor(); 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>(predictor_->url_table_cache_->size())); 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, static_cast<int>(predictor_->host_table_cache_->size())); 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary main_frame = 6531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.nike.com", 6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.nike.com", 6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 6581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 6601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLRequest(main_frame); 6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource1 = CreateURLRequestSummary( 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.nike.com", "http://nike.com/style1.css", 6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", false); 6661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource1); 6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource2 = CreateURLRequestSummary( 6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.nike.com", "http://nike.com/image2.png", 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, "image/png", false); 6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->RecordURLResponse(resource2); 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL( 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *mock_tables_.get(), 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DeleteSingleDataPoint("http://www.google.com/", PREFETCH_KEY_TYPE_URL)); 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL( 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *mock_tables_.get(), 6771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DeleteSingleDataPoint("www.facebook.com", PREFETCH_KEY_TYPE_HOST)); 6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData url_data(PREFETCH_KEY_TYPE_URL, "http://www.nike.com/"); 6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://nike.com/style1.css", 6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, 6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1.0)); 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_data.resources.push_back(ResourceRow(std::string(), 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://nike.com/image2.png", 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_IMAGE, 6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2.0)); 6941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(url_data, empty_host_data_)); 6951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.nike.com"); 6971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_data.resources = url_data.resources; 6981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), UpdateData(empty_url_data_, host_data)); 6991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnNavigationComplete(main_frame.navigation_id); 7011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->BlockUntilHistoryProcessesPendingRequests(); 7021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 7031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, DeleteUrls) { 7051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add some dummy entries to cache. 7061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->url_table_cache_->insert(std::make_pair( 7071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com/page1.html", 7081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.google.com/page1.html"))); 7091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->url_table_cache_->insert(std::make_pair( 7101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com/page2.html", 7111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.google.com/page2.html"))); 7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->url_table_cache_->insert(std::make_pair( 7131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.yahoo.com/", 7141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.yahoo.com/"))); 7151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->url_table_cache_->insert(std::make_pair( 7161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.apple.com/", 7171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.apple.com/"))); 7181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->url_table_cache_->insert(std::make_pair( 7191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.nike.com/", 7201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.nike.com/"))); 7211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->host_table_cache_->insert(std::make_pair( 7231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "www.google.com", 7241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_HOST, "www.google.com"))); 7251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->host_table_cache_->insert(std::make_pair( 7261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "www.yahoo.com", 7271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_HOST, "www.yahoo.com"))); 7281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->host_table_cache_->insert(std::make_pair( 7291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "www.apple.com", 7301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefetchData(PREFETCH_KEY_TYPE_HOST, "www.apple.com"))); 7311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci history::URLRows rows; 7331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci rows.push_back(history::URLRow(GURL("http://www.google.com/page2.html"))); 7341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci rows.push_back(history::URLRow(GURL("http://www.apple.com"))); 7351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci rows.push_back(history::URLRow(GURL("http://www.nike.com"))); 7361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> urls_to_delete, hosts_to_delete; 7381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci urls_to_delete.push_back("http://www.google.com/page2.html"); 7391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci urls_to_delete.push_back("http://www.apple.com/"); 7401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci urls_to_delete.push_back("http://www.nike.com/"); 7411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci hosts_to_delete.push_back("www.google.com"); 7421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci hosts_to_delete.push_back("www.apple.com"); 7431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL( 7451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *mock_tables_.get(), 7461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DeleteData(ContainerEq(urls_to_delete), ContainerEq(hosts_to_delete))); 7471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->DeleteUrls(rows); 7491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, static_cast<int>(predictor_->url_table_cache_->size())); 7501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->host_table_cache_->size())); 7511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_tables_.get(), DeleteAllData()); 7531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->DeleteAllUrls(); 7551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->url_table_cache_->empty()); 7561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->host_table_cache_->empty()); 7571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 7581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, OnMainFrameRequest) { 7601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary1 = 7611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 7621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 7631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 7641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 7651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 7661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 7671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 7681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary2 = 7691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 7701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 7711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 7721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 7731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 7741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 7751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 7761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary3 = 7771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(2, 7781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 7791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.yahoo.com", 7801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.yahoo.com", 7811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 7821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 7831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 7841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary1); 7861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 7871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary2); 7881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, static_cast<int>(predictor_->inflight_navigations_.size())); 7891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary3); 7901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>(predictor_->inflight_navigations_.size())); 7911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Insert anther with same navigation id. It should replace. 7931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary4 = 7941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 7951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 7961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.nike.com", 7971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.nike.com", 7981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 7991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary5 = 8021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 8031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 8041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 8071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary4); 8111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>(predictor_->inflight_navigations_.size())); 8121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Change this creation time so that it will go away on the next insert. 8141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci summary5.navigation_id.creation_time = base::TimeTicks::Now() - 8151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta::FromDays(1); 8161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary5); 8171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>(predictor_->inflight_navigations_.size())); 8181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary6 = 8201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(3, 8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 8221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.shoes.com", 8231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.shoes.com", 8241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 8251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary6); 8281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>(predictor_->inflight_navigations_.size())); 8291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.find(summary3.navigation_id) != 8311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_.end()); 8321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.find(summary4.navigation_id) != 8331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_.end()); 8341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.find(summary6.navigation_id) != 8351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_.end()); 8361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 8371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, OnMainFrameRedirect) { 8391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary1 = 8401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 8411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 8421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 8451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary2 = 8481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 8491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2, 8501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 8531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary summary3 = 8561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(2, 8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 8581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.yahoo.com", 8591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.yahoo.com", 8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 8611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRedirect(summary1); 8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.empty()); 8661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary1); 8681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 8691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(summary2); 8701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, static_cast<int>(predictor_->inflight_navigations_.size())); 8711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRedirect(summary3); 8731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2, static_cast<int>(predictor_->inflight_navigations_.size())); 8741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRedirect(summary1); 8751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 8761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRedirect(summary2); 8771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.empty()); 8781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 8791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ResourcePrefetchPredictorTest, OnSubresourceResponse) { 8811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If there is no inflight navigation, nothing happens. 8821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource1 = CreateURLRequestSummary( 8831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/style1.css", 8841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_STYLESHEET, "text/css", false); 8851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnSubresourceResponse(resource1); 8861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(predictor_->inflight_navigations_.empty()); 8871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add an inflight navigation. 8891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary main_frame1 = 8901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CreateURLRequestSummary(1, 8911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 8921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "http://www.google.com", 8941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_MAIN_FRAME, 8951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string(), 8961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false); 8971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnMainFrameRequest(main_frame1); 8981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 8991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Now add a few subresources. 9011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource2 = CreateURLRequestSummary( 9021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script1.js", 9031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 9041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestSummary resource3 = CreateURLRequestSummary( 9051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1, 1, "http://www.google.com", "http://google.com/script2.js", 9061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RESOURCE_TYPE_SCRIPT, "text/javascript", false); 9071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnSubresourceResponse(resource1); 9081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnSubresourceResponse(resource2); 9091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->OnSubresourceResponse(resource3); 9101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, static_cast<int>(predictor_->inflight_navigations_.size())); 9121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(3, static_cast<int>( 9131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_[main_frame1.navigation_id]->size())); 9141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(URLRequestSummaryAreEqual( 9151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci resource1, 9161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_[main_frame1.navigation_id]->at(0))); 9171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(URLRequestSummaryAreEqual( 9181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci resource2, 9191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_[main_frame1.navigation_id]->at(1))); 9201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(URLRequestSummaryAreEqual( 9211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci resource3, 9221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci predictor_->inflight_navigations_[main_frame1.navigation_id]->at(2))); 9231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 9241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace predictors 926