| 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 <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 // Some form of learning has to be enabled. | 385 // Some form of learning has to be enabled. |
| 386 DCHECK(config_.IsLearningEnabled()); | 386 DCHECK(config_.IsLearningEnabled()); |
| 387 if (config_.IsURLPrefetchingEnabled(profile_)) | 387 if (config_.IsURLPrefetchingEnabled(profile_)) |
| 388 DCHECK(config_.IsURLLearningEnabled()); | 388 DCHECK(config_.IsURLLearningEnabled()); |
| 389 if (config_.IsHostPrefetchingEnabled(profile_)) | 389 if (config_.IsHostPrefetchingEnabled(profile_)) |
| 390 DCHECK(config_.IsHostLearningEnabled()); | 390 DCHECK(config_.IsHostLearningEnabled()); |
| 391 } | 391 } |
| 392 | 392 |
| 393 ResourcePrefetchPredictor::~ResourcePrefetchPredictor() {} | 393 ResourcePrefetchPredictor::~ResourcePrefetchPredictor() {} |
| 394 | 394 |
| 395 void ResourcePrefetchPredictor::StartInitialization() { |
| 396 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 397 |
| 398 DCHECK_EQ(NOT_INITIALIZED, initialization_state_); |
| 399 initialization_state_ = INITIALIZING; |
| 400 |
| 401 // Create local caches using the database as loaded. |
| 402 auto url_data_map = base::MakeUnique<PrefetchDataMap>(); |
| 403 auto host_data_map = base::MakeUnique<PrefetchDataMap>(); |
| 404 auto url_redirect_data_map = base::MakeUnique<RedirectDataMap>(); |
| 405 auto host_redirect_data_map = base::MakeUnique<RedirectDataMap>(); |
| 406 |
| 407 // Get raw pointers to pass to the first task. Ownership of the unique_ptrs |
| 408 // will be passed to the reply task. |
| 409 auto url_data_map_ptr = url_data_map.get(); |
| 410 auto host_data_map_ptr = host_data_map.get(); |
| 411 auto url_redirect_data_map_ptr = url_redirect_data_map.get(); |
| 412 auto host_redirect_data_map_ptr = host_redirect_data_map.get(); |
| 413 |
| 414 BrowserThread::PostTaskAndReply( |
| 415 BrowserThread::DB, FROM_HERE, |
| 416 base::Bind(&ResourcePrefetchPredictorTables::GetAllData, tables_, |
| 417 url_data_map_ptr, host_data_map_ptr, url_redirect_data_map_ptr, |
| 418 host_redirect_data_map_ptr), |
| 419 base::Bind(&ResourcePrefetchPredictor::CreateCaches, AsWeakPtr(), |
| 420 base::Passed(&url_data_map), base::Passed(&host_data_map), |
| 421 base::Passed(&url_redirect_data_map), |
| 422 base::Passed(&host_redirect_data_map))); |
| 423 } |
| 424 |
| 395 void ResourcePrefetchPredictor::RecordURLRequest( | 425 void ResourcePrefetchPredictor::RecordURLRequest( |
| 396 const URLRequestSummary& request) { | 426 const URLRequestSummary& request) { |
| 397 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 427 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 398 if (initialization_state_ != INITIALIZED) | 428 if (initialization_state_ != INITIALIZED) |
| 399 return; | 429 return; |
| 400 | 430 |
| 401 CHECK_EQ(request.resource_type, content::RESOURCE_TYPE_MAIN_FRAME); | 431 CHECK_EQ(request.resource_type, content::RESOURCE_TYPE_MAIN_FRAME); |
| 402 OnMainFrameRequest(request); | 432 OnMainFrameRequest(request); |
| 403 } | 433 } |
| 404 | 434 |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 resource.number_of_hits() < | 667 resource.number_of_hits() < |
| 638 config_.min_resource_hits_to_trigger_prefetch) | 668 config_.min_resource_hits_to_trigger_prefetch) |
| 639 continue; | 669 continue; |
| 640 | 670 |
| 641 urls->push_back(GURL(resource.resource_url())); | 671 urls->push_back(GURL(resource.resource_url())); |
| 642 } | 672 } |
| 643 | 673 |
| 644 return urls->size() > initial_size; | 674 return urls->size() > initial_size; |
| 645 } | 675 } |
| 646 | 676 |
| 647 void ResourcePrefetchPredictor::StartInitialization() { | |
| 648 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
| 649 | |
| 650 DCHECK_EQ(NOT_INITIALIZED, initialization_state_); | |
| 651 initialization_state_ = INITIALIZING; | |
| 652 | |
| 653 // Create local caches using the database as loaded. | |
| 654 auto url_data_map = base::MakeUnique<PrefetchDataMap>(); | |
| 655 auto host_data_map = base::MakeUnique<PrefetchDataMap>(); | |
| 656 auto url_redirect_data_map = base::MakeUnique<RedirectDataMap>(); | |
| 657 auto host_redirect_data_map = base::MakeUnique<RedirectDataMap>(); | |
| 658 | |
| 659 // Get raw pointers to pass to the first task. Ownership of the unique_ptrs | |
| 660 // will be passed to the reply task. | |
| 661 auto url_data_map_ptr = url_data_map.get(); | |
| 662 auto host_data_map_ptr = host_data_map.get(); | |
| 663 auto url_redirect_data_map_ptr = url_redirect_data_map.get(); | |
| 664 auto host_redirect_data_map_ptr = host_redirect_data_map.get(); | |
| 665 | |
| 666 BrowserThread::PostTaskAndReply( | |
| 667 BrowserThread::DB, FROM_HERE, | |
| 668 base::Bind(&ResourcePrefetchPredictorTables::GetAllData, tables_, | |
| 669 url_data_map_ptr, host_data_map_ptr, url_redirect_data_map_ptr, | |
| 670 host_redirect_data_map_ptr), | |
| 671 base::Bind(&ResourcePrefetchPredictor::CreateCaches, AsWeakPtr(), | |
| 672 base::Passed(&url_data_map), base::Passed(&host_data_map), | |
| 673 base::Passed(&url_redirect_data_map), | |
| 674 base::Passed(&host_redirect_data_map))); | |
| 675 } | |
| 676 | |
| 677 void ResourcePrefetchPredictor::CreateCaches( | 677 void ResourcePrefetchPredictor::CreateCaches( |
| 678 std::unique_ptr<PrefetchDataMap> url_data_map, | 678 std::unique_ptr<PrefetchDataMap> url_data_map, |
| 679 std::unique_ptr<PrefetchDataMap> host_data_map, | 679 std::unique_ptr<PrefetchDataMap> host_data_map, |
| 680 std::unique_ptr<RedirectDataMap> url_redirect_data_map, | 680 std::unique_ptr<RedirectDataMap> url_redirect_data_map, |
| 681 std::unique_ptr<RedirectDataMap> host_redirect_data_map) { | 681 std::unique_ptr<RedirectDataMap> host_redirect_data_map) { |
| 682 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 682 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 683 | 683 |
| 684 DCHECK_EQ(INITIALIZING, initialization_state_); | 684 DCHECK_EQ(INITIALIZING, initialization_state_); |
| 685 DCHECK(!url_table_cache_); | 685 DCHECK(!url_table_cache_); |
| 686 DCHECK(!host_table_cache_); | 686 DCHECK(!host_table_cache_); |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 TestObserver::~TestObserver() { | 1169 TestObserver::~TestObserver() { |
| 1170 predictor_->SetObserverForTesting(nullptr); | 1170 predictor_->SetObserverForTesting(nullptr); |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 TestObserver::TestObserver(ResourcePrefetchPredictor* predictor) | 1173 TestObserver::TestObserver(ResourcePrefetchPredictor* predictor) |
| 1174 : predictor_(predictor) { | 1174 : predictor_(predictor) { |
| 1175 predictor_->SetObserverForTesting(this); | 1175 predictor_->SetObserverForTesting(this); |
| 1176 } | 1176 } |
| 1177 | 1177 |
| 1178 } // namespace predictors | 1178 } // namespace predictors |
| OLD | NEW |