| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/predictors/resource_prefetch_predictor.h" | 5 #include "chrome/browser/predictors/resource_prefetch_predictor.h" |
| 6 | 6 |
| 7 #include <iostream> | 7 #include <iostream> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 30 | 30 |
| 31 using testing::ContainerEq; | 31 using testing::ContainerEq; |
| 32 using testing::Pointee; | 32 using testing::Pointee; |
| 33 using testing::SetArgPointee; | 33 using testing::SetArgPointee; |
| 34 using testing::StrictMock; | 34 using testing::StrictMock; |
| 35 | 35 |
| 36 namespace predictors { | 36 namespace predictors { |
| 37 | 37 |
| 38 typedef ResourcePrefetchPredictor::URLRequestSummary URLRequestSummary; | 38 typedef ResourcePrefetchPredictor::URLRequestSummary URLRequestSummary; |
| 39 typedef ResourcePrefetchPredictorTables::PrefetchData PrefetchData; | |
| 40 typedef ResourcePrefetchPredictorTables::PrefetchDataMap PrefetchDataMap; | 39 typedef ResourcePrefetchPredictorTables::PrefetchDataMap PrefetchDataMap; |
| 41 typedef ResourcePrefetchPredictorTables::RedirectDataMap RedirectDataMap; | 40 typedef ResourcePrefetchPredictorTables::RedirectDataMap RedirectDataMap; |
| 42 | 41 |
| 43 scoped_refptr<net::HttpResponseHeaders> MakeResponseHeaders( | 42 scoped_refptr<net::HttpResponseHeaders> MakeResponseHeaders( |
| 44 const char* headers) { | 43 const char* headers) { |
| 45 return make_scoped_refptr(new net::HttpResponseHeaders( | 44 return make_scoped_refptr(new net::HttpResponseHeaders( |
| 46 net::HttpUtil::AssembleRawHeaders(headers, strlen(headers)))); | 45 net::HttpUtil::AssembleRawHeaders(headers, strlen(headers)))); |
| 47 } | 46 } |
| 48 | 47 |
| 49 class EmptyURLRequestDelegate : public net::URLRequest::Delegate { | 48 class EmptyURLRequestDelegate : public net::URLRequest::Delegate { |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 std::unique_ptr<TestingProfile> profile_; | 273 std::unique_ptr<TestingProfile> profile_; |
| 275 net::TestURLRequestContext url_request_context_; | 274 net::TestURLRequestContext url_request_context_; |
| 276 | 275 |
| 277 std::unique_ptr<ResourcePrefetchPredictor> predictor_; | 276 std::unique_ptr<ResourcePrefetchPredictor> predictor_; |
| 278 scoped_refptr<StrictMock<MockResourcePrefetchPredictorTables> > mock_tables_; | 277 scoped_refptr<StrictMock<MockResourcePrefetchPredictorTables> > mock_tables_; |
| 279 | 278 |
| 280 PrefetchDataMap test_url_data_; | 279 PrefetchDataMap test_url_data_; |
| 281 PrefetchDataMap test_host_data_; | 280 PrefetchDataMap test_host_data_; |
| 282 RedirectDataMap test_url_redirect_data_; | 281 RedirectDataMap test_url_redirect_data_; |
| 283 RedirectDataMap test_host_redirect_data_; | 282 RedirectDataMap test_host_redirect_data_; |
| 284 PrefetchData empty_url_data_; | 283 PrefetchData empty_resource_data_; |
| 285 PrefetchData empty_host_data_; | 284 RedirectData empty_redirect_data_; |
| 286 RedirectData empty_url_redirect_data_; | |
| 287 RedirectData empty_host_redirect_data_; | |
| 288 | 285 |
| 289 MockURLRequestJobFactory url_request_job_factory_; | 286 MockURLRequestJobFactory url_request_job_factory_; |
| 290 EmptyURLRequestDelegate url_request_delegate_; | 287 EmptyURLRequestDelegate url_request_delegate_; |
| 291 }; | 288 }; |
| 292 | 289 |
| 293 ResourcePrefetchPredictorTest::ResourcePrefetchPredictorTest() | 290 ResourcePrefetchPredictorTest::ResourcePrefetchPredictorTest() |
| 294 : loop_(base::MessageLoop::TYPE_DEFAULT), | 291 : loop_(base::MessageLoop::TYPE_DEFAULT), |
| 295 ui_thread_(content::BrowserThread::UI, &loop_), | 292 ui_thread_(content::BrowserThread::UI, &loop_), |
| 296 db_thread_(content::BrowserThread::DB, &loop_), | 293 db_thread_(content::BrowserThread::DB, &loop_), |
| 297 profile_(new TestingProfile()), | 294 profile_(new TestingProfile()), |
| 298 mock_tables_(new StrictMock<MockResourcePrefetchPredictorTables>()), | 295 mock_tables_(new StrictMock<MockResourcePrefetchPredictorTables>()), |
| 299 empty_url_data_(PREFETCH_KEY_TYPE_URL, std::string()), | 296 empty_resource_data_(), |
| 300 empty_host_data_(PREFETCH_KEY_TYPE_HOST, std::string()), | 297 empty_redirect_data_() {} |
| 301 empty_url_redirect_data_(), | |
| 302 empty_host_redirect_data_() {} | |
| 303 | 298 |
| 304 ResourcePrefetchPredictorTest::~ResourcePrefetchPredictorTest() { | 299 ResourcePrefetchPredictorTest::~ResourcePrefetchPredictorTest() { |
| 305 profile_.reset(NULL); | 300 profile_.reset(NULL); |
| 306 base::RunLoop().RunUntilIdle(); | 301 base::RunLoop().RunUntilIdle(); |
| 307 } | 302 } |
| 308 | 303 |
| 309 void ResourcePrefetchPredictorTest::SetUp() { | 304 void ResourcePrefetchPredictorTest::SetUp() { |
| 310 InitializeSampleData(); | 305 InitializeSampleData(); |
| 311 | 306 |
| 312 ASSERT_TRUE(profile_->CreateHistoryService(true, false)); | 307 ASSERT_TRUE(profile_->CreateHistoryService(true, false)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 330 url_request_context_.set_job_factory(&url_request_job_factory_); | 325 url_request_context_.set_job_factory(&url_request_job_factory_); |
| 331 } | 326 } |
| 332 | 327 |
| 333 void ResourcePrefetchPredictorTest::TearDown() { | 328 void ResourcePrefetchPredictorTest::TearDown() { |
| 334 predictor_.reset(NULL); | 329 predictor_.reset(NULL); |
| 335 profile_->DestroyHistoryService(); | 330 profile_->DestroyHistoryService(); |
| 336 } | 331 } |
| 337 | 332 |
| 338 void ResourcePrefetchPredictorTest::InitializeSampleData() { | 333 void ResourcePrefetchPredictorTest::InitializeSampleData() { |
| 339 { // Url data. | 334 { // Url data. |
| 340 PrefetchData google(PREFETCH_KEY_TYPE_URL, "http://www.google.com/"); | 335 PrefetchData google = CreatePrefetchData("http://www.google.com/", 1); |
| 341 google.last_visit = base::Time::FromInternalValue(1); | 336 InitializeResourceData(google.add_resources(), |
| 342 google.resources.push_back(CreateResourceData( | 337 "http://google.com/style1.css", |
| 343 "http://google.com/style1.css", content::RESOURCE_TYPE_STYLESHEET, 3, 2, | 338 content::RESOURCE_TYPE_STYLESHEET, 3, 2, 1, 1.0, |
| 344 1, 1.0, net::MEDIUM, false, false)); | 339 net::MEDIUM, false, false); |
| 345 google.resources.push_back(CreateResourceData( | 340 InitializeResourceData( |
| 346 "http://google.com/script3.js", content::RESOURCE_TYPE_SCRIPT, 4, 0, 1, | 341 google.add_resources(), "http://google.com/script3.js", |
| 347 2.1, net::MEDIUM, false, false)); | 342 content::RESOURCE_TYPE_SCRIPT, 4, 0, 1, 2.1, net::MEDIUM, false, false); |
| 348 google.resources.push_back(CreateResourceData( | 343 InitializeResourceData(google.add_resources(), |
| 349 "http://google.com/script4.js", content::RESOURCE_TYPE_SCRIPT, 11, 0, 0, | 344 "http://google.com/script4.js", |
| 350 2.1, net::MEDIUM, false, false)); | 345 content::RESOURCE_TYPE_SCRIPT, 11, 0, 0, 2.1, |
| 351 google.resources.push_back(CreateResourceData( | 346 net::MEDIUM, false, false); |
| 352 "http://google.com/image1.png", content::RESOURCE_TYPE_IMAGE, 6, 3, 0, | 347 InitializeResourceData( |
| 353 2.2, net::MEDIUM, false, false)); | 348 google.add_resources(), "http://google.com/image1.png", |
| 354 google.resources.push_back(CreateResourceData( | 349 content::RESOURCE_TYPE_IMAGE, 6, 3, 0, 2.2, net::MEDIUM, false, false); |
| 355 "http://google.com/a.font", content::RESOURCE_TYPE_LAST_TYPE, 2, 0, 0, | 350 InitializeResourceData(google.add_resources(), "http://google.com/a.font", |
| 356 5.1, net::MEDIUM, false, false)); | 351 content::RESOURCE_TYPE_LAST_TYPE, 2, 0, 0, 5.1, |
| 352 net::MEDIUM, false, false); |
| 357 | 353 |
| 358 PrefetchData reddit(PREFETCH_KEY_TYPE_URL, "http://www.reddit.com/"); | 354 PrefetchData reddit = CreatePrefetchData("http://www.reddit.com/", 2); |
| 359 reddit.last_visit = base::Time::FromInternalValue(2); | 355 InitializeResourceData( |
| 360 reddit.resources.push_back(CreateResourceData( | 356 reddit.add_resources(), "http://reddit-resource.com/script1.js", |
| 361 "http://reddit-resource.com/script1.js", content::RESOURCE_TYPE_SCRIPT, | 357 content::RESOURCE_TYPE_SCRIPT, 4, 0, 1, 1.0, net::MEDIUM, false, false); |
| 362 4, 0, 1, 1.0, net::MEDIUM, false, false)); | 358 InitializeResourceData( |
| 363 reddit.resources.push_back(CreateResourceData( | 359 reddit.add_resources(), "http://reddit-resource.com/script2.js", |
| 364 "http://reddit-resource.com/script2.js", content::RESOURCE_TYPE_SCRIPT, | 360 content::RESOURCE_TYPE_SCRIPT, 2, 0, 0, 2.1, net::MEDIUM, false, false); |
| 365 2, 0, 0, 2.1, net::MEDIUM, false, false)); | |
| 366 | 361 |
| 367 PrefetchData yahoo(PREFETCH_KEY_TYPE_URL, "http://www.yahoo.com/"); | 362 PrefetchData yahoo = CreatePrefetchData("http://www.yahoo.com/", 3); |
| 368 yahoo.last_visit = base::Time::FromInternalValue(3); | 363 InitializeResourceData(yahoo.add_resources(), "http://google.com/image.png", |
| 369 yahoo.resources.push_back(CreateResourceData( | 364 content::RESOURCE_TYPE_IMAGE, 20, 1, 0, 10.0, |
| 370 "http://google.com/image.png", content::RESOURCE_TYPE_IMAGE, 20, 1, 0, | 365 net::MEDIUM, false, false); |
| 371 10.0, net::MEDIUM, false, false)); | |
| 372 | 366 |
| 373 test_url_data_.clear(); | 367 test_url_data_.clear(); |
| 374 test_url_data_.insert(std::make_pair("http://www.google.com/", google)); | 368 test_url_data_.insert(std::make_pair(google.primary_key(), google)); |
| 375 test_url_data_.insert(std::make_pair("http://www.reddit.com/", reddit)); | 369 test_url_data_.insert(std::make_pair(reddit.primary_key(), reddit)); |
| 376 test_url_data_.insert(std::make_pair("http://www.yahoo.com/", yahoo)); | 370 test_url_data_.insert(std::make_pair(yahoo.primary_key(), yahoo)); |
| 377 } | 371 } |
| 378 | 372 |
| 379 { // Host data. | 373 { // Host data. |
| 380 PrefetchData facebook(PREFETCH_KEY_TYPE_HOST, "www.facebook.com"); | 374 PrefetchData facebook = CreatePrefetchData("www.facebook.com", 4); |
| 381 facebook.last_visit = base::Time::FromInternalValue(4); | 375 InitializeResourceData(facebook.add_resources(), |
| 382 facebook.resources.push_back(CreateResourceData( | 376 "http://www.facebook.com/style.css", |
| 383 "http://www.facebook.com/style.css", content::RESOURCE_TYPE_STYLESHEET, | 377 content::RESOURCE_TYPE_STYLESHEET, 5, 2, 1, 1.1, |
| 384 5, 2, 1, 1.1, net::MEDIUM, false, false)); | 378 net::MEDIUM, false, false); |
| 385 facebook.resources.push_back(CreateResourceData( | 379 InitializeResourceData( |
| 386 "http://www.facebook.com/script.js", content::RESOURCE_TYPE_SCRIPT, 4, | 380 facebook.add_resources(), "http://www.facebook.com/script.js", |
| 387 0, 1, 2.1, net::MEDIUM, false, false)); | 381 content::RESOURCE_TYPE_SCRIPT, 4, 0, 1, 2.1, net::MEDIUM, false, false); |
| 388 facebook.resources.push_back(CreateResourceData( | 382 InitializeResourceData( |
| 389 "http://www.facebook.com/image.png", content::RESOURCE_TYPE_IMAGE, 6, 3, | 383 facebook.add_resources(), "http://www.facebook.com/image.png", |
| 390 0, 2.2, net::MEDIUM, false, false)); | 384 content::RESOURCE_TYPE_IMAGE, 6, 3, 0, 2.2, net::MEDIUM, false, false); |
| 391 facebook.resources.push_back(CreateResourceData( | 385 InitializeResourceData(facebook.add_resources(), |
| 392 "http://www.facebook.com/a.font", content::RESOURCE_TYPE_LAST_TYPE, 2, | 386 "http://www.facebook.com/a.font", |
| 393 0, 0, 5.1, net::MEDIUM, false, false)); | 387 content::RESOURCE_TYPE_LAST_TYPE, 2, 0, 0, 5.1, |
| 394 facebook.resources.push_back( | 388 net::MEDIUM, false, false); |
| 395 CreateResourceData("http://www.resources.facebook.com/script.js", | 389 InitializeResourceData(facebook.add_resources(), |
| 390 "http://www.resources.facebook.com/script.js", |
| 396 content::RESOURCE_TYPE_SCRIPT, 11, 0, 0, 8.5, | 391 content::RESOURCE_TYPE_SCRIPT, 11, 0, 0, 8.5, |
| 397 net::MEDIUM, false, false)); | 392 net::MEDIUM, false, false); |
| 398 | 393 |
| 399 PrefetchData yahoo(PREFETCH_KEY_TYPE_HOST, "www.yahoo.com"); | 394 PrefetchData yahoo = CreatePrefetchData("www.yahoo.com", 5); |
| 400 yahoo.last_visit = base::Time::FromInternalValue(5); | 395 InitializeResourceData(yahoo.add_resources(), "http://google.com/image.png", |
| 401 yahoo.resources.push_back(CreateResourceData( | 396 content::RESOURCE_TYPE_IMAGE, 20, 1, 0, 10.0, |
| 402 "http://google.com/image.png", content::RESOURCE_TYPE_IMAGE, 20, 1, 0, | 397 net::MEDIUM, false, false); |
| 403 10.0, net::MEDIUM, false, false)); | |
| 404 | 398 |
| 405 test_host_data_.clear(); | 399 test_host_data_.clear(); |
| 406 test_host_data_.insert(std::make_pair("www.facebook.com", facebook)); | 400 test_host_data_.insert(std::make_pair(facebook.primary_key(), facebook)); |
| 407 test_host_data_.insert(std::make_pair("www.yahoo.com", yahoo)); | 401 test_host_data_.insert(std::make_pair(yahoo.primary_key(), yahoo)); |
| 408 } | 402 } |
| 409 | 403 |
| 410 { // Url redirect data. | 404 { // Url redirect data. |
| 411 RedirectData facebook; | 405 RedirectData facebook = CreateRedirectData("http://fb.com/google", 6); |
| 412 facebook.set_primary_key("http://fb.com/google"); | |
| 413 facebook.set_last_visit_time(6); | |
| 414 InitializeRedirectStat(facebook.add_redirect_endpoints(), | 406 InitializeRedirectStat(facebook.add_redirect_endpoints(), |
| 415 "https://facebook.com/google", 5, 1, 0); | 407 "https://facebook.com/google", 5, 1, 0); |
| 416 InitializeRedirectStat(facebook.add_redirect_endpoints(), | 408 InitializeRedirectStat(facebook.add_redirect_endpoints(), |
| 417 "https://facebook.com/login", 3, 5, 1); | 409 "https://facebook.com/login", 3, 5, 1); |
| 418 | 410 |
| 419 RedirectData nytimes; | 411 RedirectData nytimes = CreateRedirectData("http://nyt.com", 7); |
| 420 nytimes.set_primary_key("http://nyt.com"); | |
| 421 nytimes.set_last_visit_time(7); | |
| 422 InitializeRedirectStat(nytimes.add_redirect_endpoints(), | 412 InitializeRedirectStat(nytimes.add_redirect_endpoints(), |
| 423 "https://nytimes.com", 2, 0, 0); | 413 "https://nytimes.com", 2, 0, 0); |
| 424 | 414 |
| 425 RedirectData google; | 415 RedirectData google = CreateRedirectData("http://google.com", 8); |
| 426 google.set_primary_key("http://google.com"); | |
| 427 google.set_last_visit_time(8); | |
| 428 InitializeRedirectStat(google.add_redirect_endpoints(), | 416 InitializeRedirectStat(google.add_redirect_endpoints(), |
| 429 "https://google.com", 3, 0, 0); | 417 "https://google.com", 3, 0, 0); |
| 430 | 418 |
| 431 test_url_redirect_data_.clear(); | 419 test_url_redirect_data_.clear(); |
| 432 test_url_redirect_data_.insert( | 420 test_url_redirect_data_.insert( |
| 433 std::make_pair(facebook.primary_key(), facebook)); | 421 std::make_pair(facebook.primary_key(), facebook)); |
| 434 test_url_redirect_data_.insert( | 422 test_url_redirect_data_.insert( |
| 435 std::make_pair(nytimes.primary_key(), nytimes)); | 423 std::make_pair(nytimes.primary_key(), nytimes)); |
| 436 test_url_redirect_data_.insert( | 424 test_url_redirect_data_.insert( |
| 437 std::make_pair(google.primary_key(), google)); | 425 std::make_pair(google.primary_key(), google)); |
| 438 } | 426 } |
| 439 | 427 |
| 440 { // Host redirect data. | 428 { // Host redirect data. |
| 441 RedirectData bbc; | 429 RedirectData bbc = CreateRedirectData("bbc.com", 9); |
| 442 bbc.set_primary_key("bbc.com"); | |
| 443 bbc.set_last_visit_time(9); | |
| 444 InitializeRedirectStat(bbc.add_redirect_endpoints(), "www.bbc.com", 8, 4, | 430 InitializeRedirectStat(bbc.add_redirect_endpoints(), "www.bbc.com", 8, 4, |
| 445 1); | 431 1); |
| 446 InitializeRedirectStat(bbc.add_redirect_endpoints(), "m.bbc.com", 5, 8, 0); | 432 InitializeRedirectStat(bbc.add_redirect_endpoints(), "m.bbc.com", 5, 8, 0); |
| 447 InitializeRedirectStat(bbc.add_redirect_endpoints(), "bbc.co.uk", 1, 3, 0); | 433 InitializeRedirectStat(bbc.add_redirect_endpoints(), "bbc.co.uk", 1, 3, 0); |
| 448 | 434 |
| 449 RedirectData microsoft; | 435 RedirectData microsoft = CreateRedirectData("microsoft.com", 10); |
| 450 microsoft.set_primary_key("microsoft.com"); | |
| 451 microsoft.set_last_visit_time(10); | |
| 452 InitializeRedirectStat(microsoft.add_redirect_endpoints(), | 436 InitializeRedirectStat(microsoft.add_redirect_endpoints(), |
| 453 "www.microsoft.com", 10, 0, 0); | 437 "www.microsoft.com", 10, 0, 0); |
| 454 | 438 |
| 455 test_host_redirect_data_.clear(); | 439 test_host_redirect_data_.clear(); |
| 456 test_host_redirect_data_.insert(std::make_pair(bbc.primary_key(), bbc)); | 440 test_host_redirect_data_.insert(std::make_pair(bbc.primary_key(), bbc)); |
| 457 test_host_redirect_data_.insert( | 441 test_host_redirect_data_.insert( |
| 458 std::make_pair(microsoft.primary_key(), microsoft)); | 442 std::make_pair(microsoft.primary_key(), microsoft)); |
| 459 } | 443 } |
| 460 } | 444 } |
| 461 | 445 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 predictor_->RecordURLResponse(resource1); | 502 predictor_->RecordURLResponse(resource1); |
| 519 URLRequestSummary resource2 = CreateURLRequestSummary( | 503 URLRequestSummary resource2 = CreateURLRequestSummary( |
| 520 1, 1, "https://www.google.com", "https://google.com/script1.js", | 504 1, 1, "https://www.google.com", "https://google.com/script1.js", |
| 521 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM, "text/javascript", false); | 505 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM, "text/javascript", false); |
| 522 predictor_->RecordURLResponse(resource2); | 506 predictor_->RecordURLResponse(resource2); |
| 523 URLRequestSummary resource3 = CreateURLRequestSummary( | 507 URLRequestSummary resource3 = CreateURLRequestSummary( |
| 524 1, 1, "https://www.google.com", "https://google.com/script2.js", | 508 1, 1, "https://www.google.com", "https://google.com/script2.js", |
| 525 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM, "text/javascript", false); | 509 content::RESOURCE_TYPE_SCRIPT, net::MEDIUM, "text/javascript", false); |
| 526 predictor_->RecordURLResponse(resource3); | 510 predictor_->RecordURLResponse(resource3); |
| 527 | 511 |
| 528 PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.google.com"); | 512 PrefetchData host_data = CreatePrefetchData("www.google.com"); |
| 529 host_data.resources.push_back(CreateResourceData( | 513 InitializeResourceData(host_data.add_resources(), |
| 530 "https://google.com/style1.css", content::RESOURCE_TYPE_STYLESHEET, 1, 0, | 514 "https://google.com/style1.css", |
| 531 0, 1.0, net::MEDIUM, false, false)); | 515 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
| 532 host_data.resources.push_back(CreateResourceData( | 516 net::MEDIUM, false, false); |
| 533 "https://google.com/script1.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 517 InitializeResourceData( |
| 534 2.0, net::MEDIUM, false, false)); | 518 host_data.add_resources(), "https://google.com/script1.js", |
| 535 host_data.resources.push_back(CreateResourceData( | 519 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
| 536 "https://google.com/script2.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 520 InitializeResourceData( |
| 537 3.0, net::MEDIUM, false, false)); | 521 host_data.add_resources(), "https://google.com/script2.js", |
| 522 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
| 538 EXPECT_CALL(*mock_tables_.get(), | 523 EXPECT_CALL(*mock_tables_.get(), |
| 539 UpdateData(empty_url_data_, host_data, empty_url_redirect_data_, | 524 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, |
| 540 empty_host_redirect_data_)); | 525 empty_redirect_data_)); |
| 541 | 526 |
| 542 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); | 527 predictor_->RecordMainFrameLoadComplete(main_frame.navigation_id); |
| 543 profile_->BlockUntilHistoryProcessesPendingRequests(); | 528 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 544 } | 529 } |
| 545 | 530 |
| 546 // Single navigation that will be recorded. Will check for duplicate | 531 // Single navigation that will be recorded. Will check for duplicate |
| 547 // resources and also for number of resources saved. | 532 // resources and also for number of resources saved. |
| 548 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) { | 533 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDB) { |
| 549 AddUrlToHistory("http://www.google.com", 4); | 534 AddUrlToHistory("http://www.google.com", 4); |
| 550 | 535 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 575 predictor_->RecordURLResponse(resource5); | 560 predictor_->RecordURLResponse(resource5); |
| 576 URLRequestSummary resource6 = CreateURLRequestSummary( | 561 URLRequestSummary resource6 = CreateURLRequestSummary( |
| 577 1, 1, "http://www.google.com", "http://google.com/image2.png", | 562 1, 1, "http://www.google.com", "http://google.com/image2.png", |
| 578 content::RESOURCE_TYPE_IMAGE, net::MEDIUM, "image/png", false); | 563 content::RESOURCE_TYPE_IMAGE, net::MEDIUM, "image/png", false); |
| 579 predictor_->RecordURLResponse(resource6); | 564 predictor_->RecordURLResponse(resource6); |
| 580 URLRequestSummary resource7 = CreateURLRequestSummary( | 565 URLRequestSummary resource7 = CreateURLRequestSummary( |
| 581 1, 1, "http://www.google.com", "http://google.com/style2.css", | 566 1, 1, "http://www.google.com", "http://google.com/style2.css", |
| 582 content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true); | 567 content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true); |
| 583 predictor_->RecordURLResponse(resource7); | 568 predictor_->RecordURLResponse(resource7); |
| 584 | 569 |
| 585 PrefetchData url_data(PREFETCH_KEY_TYPE_URL, "http://www.google.com/"); | 570 PrefetchData url_data = CreatePrefetchData("http://www.google.com/"); |
| 586 url_data.resources.push_back(CreateResourceData( | 571 InitializeResourceData(url_data.add_resources(), |
| 587 "http://google.com/style1.css", content::RESOURCE_TYPE_STYLESHEET, 1, 0, | 572 "http://google.com/style1.css", |
| 588 0, 1.0, net::MEDIUM, false, false)); | 573 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
| 589 url_data.resources.push_back(CreateResourceData( | 574 net::MEDIUM, false, false); |
| 590 "http://google.com/script1.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 575 InitializeResourceData( |
| 591 2.0, net::MEDIUM, false, false)); | 576 url_data.add_resources(), "http://google.com/script1.js", |
| 592 url_data.resources.push_back(CreateResourceData( | 577 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
| 593 "http://google.com/script2.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 578 InitializeResourceData( |
| 594 3.0, net::MEDIUM, false, false)); | 579 url_data.add_resources(), "http://google.com/script2.js", |
| 595 url_data.resources.push_back(CreateResourceData( | 580 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
| 596 "http://google.com/style2.css", content::RESOURCE_TYPE_STYLESHEET, 1, 0, | 581 InitializeResourceData(url_data.add_resources(), |
| 597 0, 7.0, net::MEDIUM, false, false)); | 582 "http://google.com/style2.css", |
| 583 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
| 584 net::MEDIUM, false, false); |
| 598 EXPECT_CALL(*mock_tables_.get(), | 585 EXPECT_CALL(*mock_tables_.get(), |
| 599 UpdateData(url_data, empty_host_data_, empty_url_redirect_data_, | 586 UpdateData(url_data, empty_resource_data_, empty_redirect_data_, |
| 600 empty_host_redirect_data_)); | 587 empty_redirect_data_)); |
| 601 | 588 |
| 602 PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.google.com"); | 589 PrefetchData host_data = CreatePrefetchData("www.google.com"); |
| 603 host_data.resources = url_data.resources; | 590 host_data.mutable_resources()->CopyFrom(url_data.resources()); |
| 604 EXPECT_CALL(*mock_tables_.get(), | 591 EXPECT_CALL(*mock_tables_.get(), |
| 605 UpdateData(empty_url_data_, host_data, empty_url_redirect_data_, | 592 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, |
| 606 empty_host_redirect_data_)); | 593 empty_redirect_data_)); |
| 607 | 594 |
| 608 predictor_->OnNavigationComplete(main_frame.navigation_id); | 595 predictor_->OnNavigationComplete(main_frame.navigation_id); |
| 609 profile_->BlockUntilHistoryProcessesPendingRequests(); | 596 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 610 } | 597 } |
| 611 | 598 |
| 612 // Tests that navigation is recorded correctly for URL already present in | 599 // Tests that navigation is recorded correctly for URL already present in |
| 613 // the database cache. | 600 // the database cache. |
| 614 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) { | 601 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlInDB) { |
| 615 AddUrlToHistory("http://www.google.com", 4); | 602 AddUrlToHistory("http://www.google.com", 4); |
| 616 | 603 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 predictor_->RecordURLResponse(resource5); | 641 predictor_->RecordURLResponse(resource5); |
| 655 URLRequestSummary resource6 = CreateURLRequestSummary( | 642 URLRequestSummary resource6 = CreateURLRequestSummary( |
| 656 1, 1, "http://www.google.com", "http://google.com/image2.png", | 643 1, 1, "http://www.google.com", "http://google.com/image2.png", |
| 657 content::RESOURCE_TYPE_IMAGE, net::MEDIUM, "image/png", false); | 644 content::RESOURCE_TYPE_IMAGE, net::MEDIUM, "image/png", false); |
| 658 predictor_->RecordURLResponse(resource6); | 645 predictor_->RecordURLResponse(resource6); |
| 659 URLRequestSummary resource7 = CreateURLRequestSummary( | 646 URLRequestSummary resource7 = CreateURLRequestSummary( |
| 660 1, 1, "http://www.google.com", "http://google.com/style2.css", | 647 1, 1, "http://www.google.com", "http://google.com/style2.css", |
| 661 content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true); | 648 content::RESOURCE_TYPE_STYLESHEET, net::MEDIUM, "text/css", true); |
| 662 predictor_->RecordURLResponse(resource7); | 649 predictor_->RecordURLResponse(resource7); |
| 663 | 650 |
| 664 PrefetchData url_data(PREFETCH_KEY_TYPE_URL, "http://www.google.com/"); | 651 PrefetchData url_data = CreatePrefetchData("http://www.google.com/"); |
| 665 url_data.resources.push_back(CreateResourceData( | 652 InitializeResourceData(url_data.add_resources(), |
| 666 "http://google.com/style1.css", content::RESOURCE_TYPE_STYLESHEET, 4, 2, | 653 "http://google.com/style1.css", |
| 667 0, 1.0, net::MEDIUM, false, false)); | 654 content::RESOURCE_TYPE_STYLESHEET, 4, 2, 0, 1.0, |
| 668 url_data.resources.push_back(CreateResourceData( | 655 net::MEDIUM, false, false); |
| 669 "http://google.com/script1.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 656 InitializeResourceData( |
| 670 2.0, net::MEDIUM, false, false)); | 657 url_data.add_resources(), "http://google.com/script1.js", |
| 671 url_data.resources.push_back(CreateResourceData( | 658 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
| 672 "http://google.com/script4.js", content::RESOURCE_TYPE_SCRIPT, 11, 1, 1, | 659 InitializeResourceData( |
| 673 2.1, net::MEDIUM, false, false)); | 660 url_data.add_resources(), "http://google.com/script4.js", |
| 674 url_data.resources.push_back(CreateResourceData( | 661 content::RESOURCE_TYPE_SCRIPT, 11, 1, 1, 2.1, net::MEDIUM, false, false); |
| 675 "http://google.com/script2.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 662 InitializeResourceData( |
| 676 3.0, net::MEDIUM, false, false)); | 663 url_data.add_resources(), "http://google.com/script2.js", |
| 664 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
| 677 EXPECT_CALL(*mock_tables_.get(), | 665 EXPECT_CALL(*mock_tables_.get(), |
| 678 UpdateData(url_data, empty_host_data_, empty_url_redirect_data_, | 666 UpdateData(url_data, empty_resource_data_, empty_redirect_data_, |
| 679 empty_host_redirect_data_)); | 667 empty_redirect_data_)); |
| 680 EXPECT_CALL(*mock_tables_.get(), | 668 EXPECT_CALL(*mock_tables_.get(), |
| 681 DeleteSingleResourceDataPoint("www.facebook.com", | 669 DeleteSingleResourceDataPoint("www.facebook.com", |
| 682 PREFETCH_KEY_TYPE_HOST)); | 670 PREFETCH_KEY_TYPE_HOST)); |
| 683 | 671 |
| 684 PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.google.com"); | 672 PrefetchData host_data = CreatePrefetchData("www.google.com"); |
| 685 host_data.resources.push_back(CreateResourceData( | 673 InitializeResourceData(host_data.add_resources(), |
| 686 "http://google.com/style1.css", content::RESOURCE_TYPE_STYLESHEET, 1, 0, | 674 "http://google.com/style1.css", |
| 687 0, 1.0, net::MEDIUM, false, false)); | 675 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
| 688 host_data.resources.push_back(CreateResourceData( | 676 net::MEDIUM, false, false); |
| 689 "http://google.com/script1.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 677 InitializeResourceData( |
| 690 2.0, net::MEDIUM, false, false)); | 678 host_data.add_resources(), "http://google.com/script1.js", |
| 691 host_data.resources.push_back(CreateResourceData( | 679 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 2.0, net::MEDIUM, false, false); |
| 692 "http://google.com/script2.js", content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, | 680 InitializeResourceData( |
| 693 3.0, net::MEDIUM, false, false)); | 681 host_data.add_resources(), "http://google.com/script2.js", |
| 694 host_data.resources.push_back(CreateResourceData( | 682 content::RESOURCE_TYPE_SCRIPT, 1, 0, 0, 3.0, net::MEDIUM, false, false); |
| 695 "http://google.com/style2.css", content::RESOURCE_TYPE_STYLESHEET, 1, 0, | 683 InitializeResourceData(host_data.add_resources(), |
| 696 0, 7.0, net::MEDIUM, false, false)); | 684 "http://google.com/style2.css", |
| 685 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 7.0, |
| 686 net::MEDIUM, false, false); |
| 697 EXPECT_CALL(*mock_tables_.get(), | 687 EXPECT_CALL(*mock_tables_.get(), |
| 698 UpdateData(empty_url_data_, host_data, empty_url_redirect_data_, | 688 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, |
| 699 empty_host_redirect_data_)); | 689 empty_redirect_data_)); |
| 700 | 690 |
| 701 predictor_->OnNavigationComplete(main_frame.navigation_id); | 691 predictor_->OnNavigationComplete(main_frame.navigation_id); |
| 702 profile_->BlockUntilHistoryProcessesPendingRequests(); | 692 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 703 } | 693 } |
| 704 | 694 |
| 705 // Tests that a URL is deleted before another is added if the cache is full. | 695 // Tests that a URL is deleted before another is added if the cache is full. |
| 706 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDBAndDBFull) { | 696 TEST_F(ResourcePrefetchPredictorTest, NavigationUrlNotInDBAndDBFull) { |
| 707 AddUrlToHistory("http://www.nike.com/", 4); | 697 AddUrlToHistory("http://www.nike.com/", 4); |
| 708 | 698 |
| 709 EXPECT_CALL(*mock_tables_.get(), | 699 EXPECT_CALL(*mock_tables_.get(), |
| (...skipping 23 matching lines...) Expand all Loading... |
| 733 content::RESOURCE_TYPE_IMAGE, net::MEDIUM, "image/png", false); | 723 content::RESOURCE_TYPE_IMAGE, net::MEDIUM, "image/png", false); |
| 734 predictor_->RecordURLResponse(resource2); | 724 predictor_->RecordURLResponse(resource2); |
| 735 | 725 |
| 736 EXPECT_CALL(*mock_tables_.get(), | 726 EXPECT_CALL(*mock_tables_.get(), |
| 737 DeleteSingleResourceDataPoint("http://www.google.com/", | 727 DeleteSingleResourceDataPoint("http://www.google.com/", |
| 738 PREFETCH_KEY_TYPE_URL)); | 728 PREFETCH_KEY_TYPE_URL)); |
| 739 EXPECT_CALL(*mock_tables_.get(), | 729 EXPECT_CALL(*mock_tables_.get(), |
| 740 DeleteSingleResourceDataPoint("www.facebook.com", | 730 DeleteSingleResourceDataPoint("www.facebook.com", |
| 741 PREFETCH_KEY_TYPE_HOST)); | 731 PREFETCH_KEY_TYPE_HOST)); |
| 742 | 732 |
| 743 PrefetchData url_data(PREFETCH_KEY_TYPE_URL, "http://www.nike.com/"); | 733 PrefetchData url_data = CreatePrefetchData("http://www.nike.com/"); |
| 744 url_data.resources.push_back(CreateResourceData( | 734 InitializeResourceData(url_data.add_resources(), "http://nike.com/style1.css", |
| 745 "http://nike.com/style1.css", content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, | 735 content::RESOURCE_TYPE_STYLESHEET, 1, 0, 0, 1.0, |
| 746 1.0, net::MEDIUM, false, false)); | 736 net::MEDIUM, false, false); |
| 747 url_data.resources.push_back(CreateResourceData( | 737 InitializeResourceData(url_data.add_resources(), "http://nike.com/image2.png", |
| 748 "http://nike.com/image2.png", content::RESOURCE_TYPE_IMAGE, 1, 0, 0, 2.0, | 738 content::RESOURCE_TYPE_IMAGE, 1, 0, 0, 2.0, |
| 749 net::MEDIUM, false, false)); | 739 net::MEDIUM, false, false); |
| 750 EXPECT_CALL(*mock_tables_.get(), | 740 EXPECT_CALL(*mock_tables_.get(), |
| 751 UpdateData(url_data, empty_host_data_, empty_url_redirect_data_, | 741 UpdateData(url_data, empty_resource_data_, empty_redirect_data_, |
| 752 empty_host_redirect_data_)); | 742 empty_redirect_data_)); |
| 753 | 743 |
| 754 PrefetchData host_data(PREFETCH_KEY_TYPE_HOST, "www.nike.com"); | 744 PrefetchData host_data = CreatePrefetchData("www.nike.com"); |
| 755 host_data.resources = url_data.resources; | 745 host_data.mutable_resources()->CopyFrom(url_data.resources()); |
| 756 EXPECT_CALL(*mock_tables_.get(), | 746 EXPECT_CALL(*mock_tables_.get(), |
| 757 UpdateData(empty_url_data_, host_data, empty_url_redirect_data_, | 747 UpdateData(empty_resource_data_, host_data, empty_redirect_data_, |
| 758 empty_host_redirect_data_)); | 748 empty_redirect_data_)); |
| 759 | 749 |
| 760 predictor_->OnNavigationComplete(main_frame.navigation_id); | 750 predictor_->OnNavigationComplete(main_frame.navigation_id); |
| 761 profile_->BlockUntilHistoryProcessesPendingRequests(); | 751 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 762 } | 752 } |
| 763 | 753 |
| 764 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlNotInDB) { | 754 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlNotInDB) { |
| 765 AddUrlToHistory("https://facebook.com/google", 4); | 755 AddUrlToHistory("https://facebook.com/google", 4); |
| 766 | 756 |
| 767 URLRequestSummary fb1 = CreateURLRequestSummary(1, 1, "http://fb.com/google"); | 757 URLRequestSummary fb1 = CreateURLRequestSummary(1, 1, "http://fb.com/google"); |
| 768 predictor_->RecordURLRequest(fb1); | 758 predictor_->RecordURLRequest(fb1); |
| 769 EXPECT_EQ(1U, predictor_->inflight_navigations_.size()); | 759 EXPECT_EQ(1U, predictor_->inflight_navigations_.size()); |
| 770 | 760 |
| 771 URLRequestSummary fb2 = CreateRedirectRequestSummary( | 761 URLRequestSummary fb2 = CreateRedirectRequestSummary( |
| 772 1, 1, "http://fb.com/google", "http://facebook.com/google"); | 762 1, 1, "http://fb.com/google", "http://facebook.com/google"); |
| 773 predictor_->RecordURLRedirect(fb2); | 763 predictor_->RecordURLRedirect(fb2); |
| 774 URLRequestSummary fb3 = CreateRedirectRequestSummary( | 764 URLRequestSummary fb3 = CreateRedirectRequestSummary( |
| 775 1, 1, "http://facebook.com/google", "https://facebook.com/google"); | 765 1, 1, "http://facebook.com/google", "https://facebook.com/google"); |
| 776 predictor_->RecordURLRedirect(fb3); | 766 predictor_->RecordURLRedirect(fb3); |
| 777 NavigationID fb_end = CreateNavigationID(1, 1, "https://facebook.com/google"); | 767 NavigationID fb_end = CreateNavigationID(1, 1, "https://facebook.com/google"); |
| 778 | 768 |
| 779 // Since the navigation hasn't resources, corresponding entry | 769 // Since the navigation hasn't resources, corresponding entry |
| 780 // in resource table will be deleted. | 770 // in resource table will be deleted. |
| 781 EXPECT_CALL(*mock_tables_.get(), | 771 EXPECT_CALL(*mock_tables_.get(), |
| 782 DeleteSingleResourceDataPoint("https://facebook.com/google", | 772 DeleteSingleResourceDataPoint("https://facebook.com/google", |
| 783 PREFETCH_KEY_TYPE_URL)); | 773 PREFETCH_KEY_TYPE_URL)); |
| 784 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( | 774 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( |
| 785 "facebook.com", PREFETCH_KEY_TYPE_HOST)); | 775 "facebook.com", PREFETCH_KEY_TYPE_HOST)); |
| 786 | 776 |
| 787 RedirectData url_redirect_data; | 777 RedirectData url_redirect_data = CreateRedirectData("http://fb.com/google"); |
| 788 url_redirect_data.set_primary_key("http://fb.com/google"); | |
| 789 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 778 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
| 790 "https://facebook.com/google", 1, 0, 0); | 779 "https://facebook.com/google", 1, 0, 0); |
| 791 EXPECT_CALL(*mock_tables_.get(), | 780 EXPECT_CALL(*mock_tables_.get(), |
| 792 UpdateData(empty_url_data_, empty_host_data_, url_redirect_data, | 781 UpdateData(empty_resource_data_, empty_resource_data_, |
| 793 empty_host_redirect_data_)); | 782 url_redirect_data, empty_redirect_data_)); |
| 794 | 783 |
| 795 RedirectData host_redirect_data; | 784 RedirectData host_redirect_data = CreateRedirectData("fb.com"); |
| 796 host_redirect_data.set_primary_key("fb.com"); | |
| 797 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 785 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
| 798 "facebook.com", 1, 0, 0); | 786 "facebook.com", 1, 0, 0); |
| 799 EXPECT_CALL(*mock_tables_.get(), | 787 EXPECT_CALL(*mock_tables_.get(), |
| 800 UpdateData(empty_url_data_, empty_host_data_, | 788 UpdateData(empty_resource_data_, empty_resource_data_, |
| 801 empty_url_redirect_data_, host_redirect_data)); | 789 empty_redirect_data_, host_redirect_data)); |
| 802 | 790 |
| 803 predictor_->RecordMainFrameLoadComplete(fb_end); | 791 predictor_->RecordMainFrameLoadComplete(fb_end); |
| 804 profile_->BlockUntilHistoryProcessesPendingRequests(); | 792 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 805 } | 793 } |
| 806 | 794 |
| 807 // Tests that redirect is recorded correctly for URL already present in | 795 // Tests that redirect is recorded correctly for URL already present in |
| 808 // the database cache. | 796 // the database cache. |
| 809 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlInDB) { | 797 TEST_F(ResourcePrefetchPredictorTest, RedirectUrlInDB) { |
| 810 AddUrlToHistory("https://facebook.com/google", 4); | 798 AddUrlToHistory("https://facebook.com/google", 4); |
| 811 | 799 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 838 DeleteSingleRedirectDataPoint("bbc.com", PREFETCH_KEY_TYPE_HOST)); | 826 DeleteSingleRedirectDataPoint("bbc.com", PREFETCH_KEY_TYPE_HOST)); |
| 839 | 827 |
| 840 // Since the navigation hasn't resources, corresponding entry | 828 // Since the navigation hasn't resources, corresponding entry |
| 841 // in resource table will be deleted. | 829 // in resource table will be deleted. |
| 842 EXPECT_CALL(*mock_tables_.get(), | 830 EXPECT_CALL(*mock_tables_.get(), |
| 843 DeleteSingleResourceDataPoint("https://facebook.com/google", | 831 DeleteSingleResourceDataPoint("https://facebook.com/google", |
| 844 PREFETCH_KEY_TYPE_URL)); | 832 PREFETCH_KEY_TYPE_URL)); |
| 845 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( | 833 EXPECT_CALL(*mock_tables_.get(), DeleteSingleResourceDataPoint( |
| 846 "facebook.com", PREFETCH_KEY_TYPE_HOST)); | 834 "facebook.com", PREFETCH_KEY_TYPE_HOST)); |
| 847 | 835 |
| 848 RedirectData url_redirect_data; | 836 RedirectData url_redirect_data = CreateRedirectData("http://fb.com/google"); |
| 849 url_redirect_data.set_primary_key("http://fb.com/google"); | |
| 850 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), | 837 InitializeRedirectStat(url_redirect_data.add_redirect_endpoints(), |
| 851 "https://facebook.com/google", 6, 1, 0); | 838 "https://facebook.com/google", 6, 1, 0); |
| 852 // Existing redirect to https://facebook.com/login will be deleted because of | 839 // Existing redirect to https://facebook.com/login will be deleted because of |
| 853 // too many consecutive misses. | 840 // too many consecutive misses. |
| 854 EXPECT_CALL(*mock_tables_.get(), | 841 EXPECT_CALL(*mock_tables_.get(), |
| 855 UpdateData(empty_url_data_, empty_host_data_, url_redirect_data, | 842 UpdateData(empty_resource_data_, empty_resource_data_, |
| 856 empty_host_redirect_data_)); | 843 url_redirect_data, empty_redirect_data_)); |
| 857 | 844 |
| 858 RedirectData host_redirect_data; | 845 RedirectData host_redirect_data = CreateRedirectData("fb.com"); |
| 859 host_redirect_data.set_primary_key("fb.com"); | |
| 860 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), | 846 InitializeRedirectStat(host_redirect_data.add_redirect_endpoints(), |
| 861 "facebook.com", 1, 0, 0); | 847 "facebook.com", 1, 0, 0); |
| 862 EXPECT_CALL(*mock_tables_.get(), | 848 EXPECT_CALL(*mock_tables_.get(), |
| 863 UpdateData(empty_url_data_, empty_host_data_, | 849 UpdateData(empty_resource_data_, empty_resource_data_, |
| 864 empty_url_redirect_data_, host_redirect_data)); | 850 empty_redirect_data_, host_redirect_data)); |
| 865 | 851 |
| 866 predictor_->RecordMainFrameLoadComplete(fb_end); | 852 predictor_->RecordMainFrameLoadComplete(fb_end); |
| 867 profile_->BlockUntilHistoryProcessesPendingRequests(); | 853 profile_->BlockUntilHistoryProcessesPendingRequests(); |
| 868 } | 854 } |
| 869 | 855 |
| 870 TEST_F(ResourcePrefetchPredictorTest, DeleteUrls) { | 856 TEST_F(ResourcePrefetchPredictorTest, DeleteUrls) { |
| 871 // Add some dummy entries to cache. | 857 // Add some dummy entries to cache. |
| 858 predictor_->url_table_cache_->insert( |
| 859 std::make_pair("http://www.google.com/page1.html", |
| 860 CreatePrefetchData("http://www.google.com/page1.html"))); |
| 861 predictor_->url_table_cache_->insert( |
| 862 std::make_pair("http://www.google.com/page2.html", |
| 863 CreatePrefetchData("http://www.google.com/page2.html"))); |
| 872 predictor_->url_table_cache_->insert(std::make_pair( | 864 predictor_->url_table_cache_->insert(std::make_pair( |
| 873 "http://www.google.com/page1.html", | 865 "http://www.yahoo.com/", CreatePrefetchData("http://www.yahoo.com/"))); |
| 874 PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.google.com/page1.html"))); | |
| 875 predictor_->url_table_cache_->insert(std::make_pair( | 866 predictor_->url_table_cache_->insert(std::make_pair( |
| 876 "http://www.google.com/page2.html", | 867 "http://www.apple.com/", CreatePrefetchData("http://www.apple.com/"))); |
| 877 PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.google.com/page2.html"))); | |
| 878 predictor_->url_table_cache_->insert(std::make_pair( | 868 predictor_->url_table_cache_->insert(std::make_pair( |
| 879 "http://www.yahoo.com/", | 869 "http://www.nike.com/", CreatePrefetchData("http://www.nike.com/"))); |
| 880 PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.yahoo.com/"))); | |
| 881 predictor_->url_table_cache_->insert(std::make_pair( | |
| 882 "http://www.apple.com/", | |
| 883 PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.apple.com/"))); | |
| 884 predictor_->url_table_cache_->insert(std::make_pair( | |
| 885 "http://www.nike.com/", | |
| 886 PrefetchData(PREFETCH_KEY_TYPE_URL, "http://www.nike.com/"))); | |
| 887 | 870 |
| 888 predictor_->host_table_cache_->insert(std::make_pair( | 871 predictor_->host_table_cache_->insert( |
| 889 "www.google.com", | 872 std::make_pair("www.google.com", CreatePrefetchData("www.google.com"))); |
| 890 PrefetchData(PREFETCH_KEY_TYPE_HOST, "www.google.com"))); | 873 predictor_->host_table_cache_->insert( |
| 891 predictor_->host_table_cache_->insert(std::make_pair( | 874 std::make_pair("www.yahoo.com", CreatePrefetchData("www.yahoo.com"))); |
| 892 "www.yahoo.com", | 875 predictor_->host_table_cache_->insert( |
| 893 PrefetchData(PREFETCH_KEY_TYPE_HOST, "www.yahoo.com"))); | 876 std::make_pair("www.apple.com", CreatePrefetchData("www.apple.com"))); |
| 894 predictor_->host_table_cache_->insert(std::make_pair( | |
| 895 "www.apple.com", | |
| 896 PrefetchData(PREFETCH_KEY_TYPE_HOST, "www.apple.com"))); | |
| 897 | 877 |
| 898 predictor_->url_redirect_table_cache_->insert( | 878 predictor_->url_redirect_table_cache_->insert( |
| 899 std::make_pair("http://www.google.com/page1.html", | 879 std::make_pair("http://www.google.com/page1.html", |
| 900 CreateRedirectData("http://www.google.com/page1.html"))); | 880 CreateRedirectData("http://www.google.com/page1.html"))); |
| 901 predictor_->url_redirect_table_cache_->insert( | 881 predictor_->url_redirect_table_cache_->insert( |
| 902 std::make_pair("http://www.google.com/page2.html", | 882 std::make_pair("http://www.google.com/page2.html", |
| 903 CreateRedirectData("http://www.google.com/page2.html"))); | 883 CreateRedirectData("http://www.google.com/page2.html"))); |
| 904 predictor_->url_redirect_table_cache_->insert(std::make_pair( | 884 predictor_->url_redirect_table_cache_->insert(std::make_pair( |
| 905 "http://www.apple.com/", CreateRedirectData("http://www.apple.com/"))); | 885 "http://www.apple.com/", CreateRedirectData("http://www.apple.com/"))); |
| 906 predictor_->url_redirect_table_cache_->insert( | 886 predictor_->url_redirect_table_cache_->insert( |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 url_request_job_factory_.set_response_info(response_info); | 1320 url_request_job_factory_.set_response_info(response_info); |
| 1341 std::unique_ptr<net::URLRequest> request_etag = | 1321 std::unique_ptr<net::URLRequest> request_etag = |
| 1342 CreateURLRequest(GURL("http://www.google.com/cat.png"), net::MEDIUM, | 1322 CreateURLRequest(GURL("http://www.google.com/cat.png"), net::MEDIUM, |
| 1343 content::RESOURCE_TYPE_PREFETCH, 1, 1, true); | 1323 content::RESOURCE_TYPE_PREFETCH, 1, 1, true); |
| 1344 EXPECT_TRUE(URLRequestSummary::SummarizeResponse(*request_etag, &summary)); | 1324 EXPECT_TRUE(URLRequestSummary::SummarizeResponse(*request_etag, &summary)); |
| 1345 EXPECT_TRUE(summary.has_validators); | 1325 EXPECT_TRUE(summary.has_validators); |
| 1346 EXPECT_TRUE(summary.always_revalidate); | 1326 EXPECT_TRUE(summary.always_revalidate); |
| 1347 } | 1327 } |
| 1348 | 1328 |
| 1349 } // namespace predictors | 1329 } // namespace predictors |
| OLD | NEW |