| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/prerender/prerender_local_predictor.h" | 5 #include "chrome/browser/prerender/prerender_local_predictor.h" |
| 6 | 6 |
| 7 #include <ctype.h> | 7 #include <ctype.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 } | 521 } |
| 522 | 522 |
| 523 base::hash_map<string, ListEntry*> entries_; | 523 base::hash_map<string, ListEntry*> entries_; |
| 524 std::list<ListEntry*> entry_list_; | 524 std::list<ListEntry*> entry_list_; |
| 525 DISALLOW_COPY_AND_ASSIGN(PrefetchList); | 525 DISALLOW_COPY_AND_ASSIGN(PrefetchList); |
| 526 }; | 526 }; |
| 527 | 527 |
| 528 PrerenderLocalPredictor::PrerenderLocalPredictor( | 528 PrerenderLocalPredictor::PrerenderLocalPredictor( |
| 529 PrerenderManager* prerender_manager) | 529 PrerenderManager* prerender_manager) |
| 530 : prerender_manager_(prerender_manager), | 530 : prerender_manager_(prerender_manager), |
| 531 is_history_service_observer_(false), | |
| 532 weak_factory_(this), | 531 weak_factory_(this), |
| 533 prefetch_list_(new PrefetchList()) { | 532 prefetch_list_(new PrefetchList()), |
| 533 history_service_observer_(this) { |
| 534 RecordEvent(EVENT_CONSTRUCTED); | 534 RecordEvent(EVENT_CONSTRUCTED); |
| 535 if (base::MessageLoop::current()) { | 535 if (base::MessageLoop::current()) { |
| 536 timer_.Start(FROM_HERE, | 536 timer_.Start(FROM_HERE, |
| 537 base::TimeDelta::FromMilliseconds(kInitDelayMs), | 537 base::TimeDelta::FromMilliseconds(kInitDelayMs), |
| 538 this, | 538 this, |
| 539 &PrerenderLocalPredictor::Init); | 539 &PrerenderLocalPredictor::Init); |
| 540 RecordEvent(EVENT_INIT_SCHEDULED); | 540 RecordEvent(EVENT_INIT_SCHEDULED); |
| 541 } | 541 } |
| 542 | 542 |
| 543 static const size_t kChecksumHashSize = 32; | 543 static const size_t kChecksumHashSize = 32; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 if (p->prerender_handle) | 576 if (p->prerender_handle) |
| 577 p->prerender_handle->OnCancel(); | 577 p->prerender_handle->OnCancel(); |
| 578 } | 578 } |
| 579 STLDeleteContainerPairPointers( | 579 STLDeleteContainerPairPointers( |
| 580 outstanding_prerender_service_requests_.begin(), | 580 outstanding_prerender_service_requests_.begin(), |
| 581 outstanding_prerender_service_requests_.end()); | 581 outstanding_prerender_service_requests_.end()); |
| 582 } | 582 } |
| 583 | 583 |
| 584 void PrerenderLocalPredictor::Shutdown() { | 584 void PrerenderLocalPredictor::Shutdown() { |
| 585 timer_.Stop(); | 585 timer_.Stop(); |
| 586 if (is_history_service_observer_) { | 586 history_service_observer_.RemoveAll(); |
| 587 HistoryService* history = GetHistoryIfExists(); | |
| 588 CHECK(history); | |
| 589 history->RemoveObserver(this); | |
| 590 is_history_service_observer_ = false; | |
| 591 } | |
| 592 } | 587 } |
| 593 | 588 |
| 594 void PrerenderLocalPredictor::OnAddVisit(HistoryService* history_service, | 589 void PrerenderLocalPredictor::OnAddVisit(HistoryService* history_service, |
| 595 const history::BriefVisitInfo& info) { | 590 const history::BriefVisitInfo& info) { |
| 596 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 591 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 597 RecordEvent(EVENT_ADD_VISIT); | 592 RecordEvent(EVENT_ADD_VISIT); |
| 598 if (!visit_history_.get()) | 593 if (!visit_history_.get()) |
| 599 return; | 594 return; |
| 600 visit_history_->push_back(info); | 595 visit_history_->push_back(info); |
| 601 if (static_cast<int>(visit_history_->size()) > kVisitHistoryPruneThreshold) { | 596 if (static_cast<int>(visit_history_->size()) > kVisitHistoryPruneThreshold) { |
| (...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1132 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 1133 RecordEvent(EVENT_INIT_STARTED); | 1128 RecordEvent(EVENT_INIT_STARTED); |
| 1134 Profile* profile = prerender_manager_->profile(); | 1129 Profile* profile = prerender_manager_->profile(); |
| 1135 if (!profile || | 1130 if (!profile || |
| 1136 ShouldDisableLocalPredictorBasedOnSyncAndConfiguration(profile)) { | 1131 ShouldDisableLocalPredictorBasedOnSyncAndConfiguration(profile)) { |
| 1137 RecordEvent(EVENT_INIT_FAILED_UNENCRYPTED_SYNC_NOT_ENABLED); | 1132 RecordEvent(EVENT_INIT_FAILED_UNENCRYPTED_SYNC_NOT_ENABLED); |
| 1138 return; | 1133 return; |
| 1139 } | 1134 } |
| 1140 HistoryService* history = GetHistoryIfExists(); | 1135 HistoryService* history = GetHistoryIfExists(); |
| 1141 if (history) { | 1136 if (history) { |
| 1142 CHECK(!is_history_service_observer_); | 1137 CHECK(!history_service_observer_.IsObserving(history)); |
| 1143 history->ScheduleDBTask( | 1138 history->ScheduleDBTask( |
| 1144 scoped_ptr<history::HistoryDBTask>( | 1139 scoped_ptr<history::HistoryDBTask>( |
| 1145 new GetVisitHistoryTask(this, kMaxVisitHistory)), | 1140 new GetVisitHistoryTask(this, kMaxVisitHistory)), |
| 1146 &history_db_tracker_); | 1141 &history_db_tracker_); |
| 1147 history->AddObserver(this); | 1142 history_service_observer_.Add(history); |
| 1148 is_history_service_observer_ = true; | |
| 1149 } else { | 1143 } else { |
| 1150 RecordEvent(EVENT_INIT_FAILED_NO_HISTORY); | 1144 RecordEvent(EVENT_INIT_FAILED_NO_HISTORY); |
| 1151 } | 1145 } |
| 1152 } | 1146 } |
| 1153 | 1147 |
| 1154 void PrerenderLocalPredictor::OnPLTEventForURL(const GURL& url, | 1148 void PrerenderLocalPredictor::OnPLTEventForURL(const GURL& url, |
| 1155 base::TimeDelta page_load_time) { | 1149 base::TimeDelta page_load_time) { |
| 1156 if (prefetch_list_->MarkPLTSeen(url, page_load_time)) { | 1150 if (prefetch_list_->MarkPLTSeen(url, page_load_time)) { |
| 1157 UMA_HISTOGRAM_CUSTOM_TIMES("Prerender.LocalPredictorPrefetchMatchPLT", | 1151 UMA_HISTOGRAM_CUSTOM_TIMES("Prerender.LocalPredictorPrefetchMatchPLT", |
| 1158 page_load_time, | 1152 page_load_time, |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1573 break; | 1567 break; |
| 1574 case content::SessionStorageNamespace::MERGE_RESULT_MERGEABLE: | 1568 case content::SessionStorageNamespace::MERGE_RESULT_MERGEABLE: |
| 1575 RecordEvent(EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_MERGEABLE); | 1569 RecordEvent(EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_MERGEABLE); |
| 1576 break; | 1570 break; |
| 1577 default: | 1571 default: |
| 1578 NOTREACHED(); | 1572 NOTREACHED(); |
| 1579 } | 1573 } |
| 1580 } | 1574 } |
| 1581 | 1575 |
| 1582 } // namespace prerender | 1576 } // namespace prerender |
| OLD | NEW |