| 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/history/history_backend.h" | 5 #include "chrome/browser/history/history_backend.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <list> | 9 #include <list> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1310 const GURL& url) { | 1310 const GURL& url) { |
| 1311 if (request->canceled()) | 1311 if (request->canceled()) |
| 1312 return; | 1312 return; |
| 1313 int count = 0; | 1313 int count = 0; |
| 1314 Time first_visit; | 1314 Time first_visit; |
| 1315 const bool success = db_.get() && | 1315 const bool success = db_.get() && |
| 1316 db_->GetVisibleVisitCountToHost(url, &count, &first_visit); | 1316 db_->GetVisibleVisitCountToHost(url, &count, &first_visit); |
| 1317 request->ForwardResult(request->handle(), success, count, first_visit); | 1317 request->ForwardResult(request->handle(), success, count, first_visit); |
| 1318 } | 1318 } |
| 1319 | 1319 |
| 1320 void HistoryBackend::QueryMostVisitedURLs( | 1320 void HistoryBackend::QueryMostVisitedURLs(int result_count, |
| 1321 scoped_refptr<QueryMostVisitedURLsRequest> request, | 1321 int days_back, |
| 1322 int result_count, | 1322 MostVisitedURLList* result) { |
| 1323 int days_back) { | 1323 if (!db_) |
| 1324 if (request->canceled()) | |
| 1325 return; | 1324 return; |
| 1326 | 1325 |
| 1327 if (!db_) { | 1326 ScopedVector<PageUsageData> data; |
| 1328 // No History Database - return an empty list. | 1327 db_->QuerySegmentUsage( |
| 1329 request->ForwardResult(request->handle(), MostVisitedURLList()); | 1328 base::Time::Now() - base::TimeDelta::FromDays(days_back), |
| 1330 return; | 1329 result_count, |
| 1330 &data.get()); |
| 1331 |
| 1332 for (size_t i = 0; i < data.size(); ++i) { |
| 1333 PageUsageData* current_data = data[i]; |
| 1334 RedirectList redirects; |
| 1335 QueryRedirectsFrom(current_data->GetURL(), &redirects); |
| 1336 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); |
| 1337 result->push_back(url); |
| 1331 } | 1338 } |
| 1332 | |
| 1333 MostVisitedURLList* result = &request->value; | |
| 1334 QueryMostVisitedURLsImpl(result_count, days_back, result); | |
| 1335 request->ForwardResult(request->handle(), *result); | |
| 1336 } | 1339 } |
| 1337 | 1340 |
| 1338 void HistoryBackend::QueryFilteredURLs( | 1341 void HistoryBackend::QueryFilteredURLs( |
| 1339 scoped_refptr<QueryFilteredURLsRequest> request, | 1342 scoped_refptr<QueryFilteredURLsRequest> request, |
| 1340 int result_count, | 1343 int result_count, |
| 1341 const history::VisitFilter& filter, | 1344 const history::VisitFilter& filter, |
| 1342 bool extended_info) { | 1345 bool extended_info) { |
| 1343 if (request->canceled()) | 1346 if (request->canceled()) |
| 1344 return; | 1347 return; |
| 1345 | 1348 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1411 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); | 1414 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); |
| 1412 STATIC_HISTOGRAM_POINTER_BLOCK( | 1415 STATIC_HISTOGRAM_POINTER_BLOCK( |
| 1413 "NewTabPage.SuggestedSitesLoadTime", | 1416 "NewTabPage.SuggestedSitesLoadTime", |
| 1414 Add(delta_time), | 1417 Add(delta_time), |
| 1415 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", | 1418 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", |
| 1416 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); | 1419 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); |
| 1417 | 1420 |
| 1418 request->ForwardResult(request->handle(), result); | 1421 request->ForwardResult(request->handle(), result); |
| 1419 } | 1422 } |
| 1420 | 1423 |
| 1421 void HistoryBackend::QueryMostVisitedURLsImpl(int result_count, | |
| 1422 int days_back, | |
| 1423 MostVisitedURLList* result) { | |
| 1424 if (!db_) | |
| 1425 return; | |
| 1426 | |
| 1427 ScopedVector<PageUsageData> data; | |
| 1428 db_->QuerySegmentUsage(base::Time::Now() - | |
| 1429 base::TimeDelta::FromDays(days_back), | |
| 1430 result_count, &data.get()); | |
| 1431 | |
| 1432 for (size_t i = 0; i < data.size(); ++i) { | |
| 1433 PageUsageData* current_data = data[i]; | |
| 1434 RedirectList redirects; | |
| 1435 QueryRedirectsFrom(current_data->GetURL(), &redirects); | |
| 1436 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); | |
| 1437 result->push_back(url); | |
| 1438 } | |
| 1439 } | |
| 1440 | |
| 1441 void HistoryBackend::GetRedirectsFromSpecificVisit( | 1424 void HistoryBackend::GetRedirectsFromSpecificVisit( |
| 1442 VisitID cur_visit, history::RedirectList* redirects) { | 1425 VisitID cur_visit, history::RedirectList* redirects) { |
| 1443 // Follow any redirects from the given visit and add them to the list. | 1426 // Follow any redirects from the given visit and add them to the list. |
| 1444 // It *should* be impossible to get a circular chain here, but we check | 1427 // It *should* be impossible to get a circular chain here, but we check |
| 1445 // just in case to avoid infinite loops. | 1428 // just in case to avoid infinite loops. |
| 1446 GURL cur_url; | 1429 GURL cur_url; |
| 1447 std::set<VisitID> visit_set; | 1430 std::set<VisitID> visit_set; |
| 1448 visit_set.insert(cur_visit); | 1431 visit_set.insert(cur_visit); |
| 1449 while (db_->GetRedirectFromVisit(cur_visit, &cur_visit, &cur_url)) { | 1432 while (db_->GetRedirectFromVisit(cur_visit, &cur_visit, &cur_url)) { |
| 1450 if (visit_set.find(cur_visit) != visit_set.end()) { | 1433 if (visit_set.find(cur_visit) != visit_set.end()) { |
| (...skipping 1296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2747 info.transition = visit.transition; | 2730 info.transition = visit.transition; |
| 2748 // If we don't have a delegate yet during setup or shutdown, we will drop | 2731 // If we don't have a delegate yet during setup or shutdown, we will drop |
| 2749 // these notifications. | 2732 // these notifications. |
| 2750 if (delegate_) | 2733 if (delegate_) |
| 2751 delegate_->NotifyVisitDBObserversOnAddVisit(info); | 2734 delegate_->NotifyVisitDBObserversOnAddVisit(info); |
| 2752 } | 2735 } |
| 2753 | 2736 |
| 2754 #if defined(OS_ANDROID) | 2737 #if defined(OS_ANDROID) |
| 2755 void HistoryBackend::PopulateMostVisitedURLMap() { | 2738 void HistoryBackend::PopulateMostVisitedURLMap() { |
| 2756 MostVisitedURLList most_visited_urls; | 2739 MostVisitedURLList most_visited_urls; |
| 2757 QueryMostVisitedURLsImpl(kPageVisitStatsMaxTopSites, kSegmentDataRetention, | 2740 QueryMostVisitedURLs( |
| 2758 &most_visited_urls); | 2741 kPageVisitStatsMaxTopSites, kSegmentDataRetention, &most_visited_urls); |
| 2759 | 2742 |
| 2760 DCHECK_LE(most_visited_urls.size(), kPageVisitStatsMaxTopSites); | 2743 DCHECK_LE(most_visited_urls.size(), kPageVisitStatsMaxTopSites); |
| 2761 for (size_t i = 0; i < most_visited_urls.size(); ++i) { | 2744 for (size_t i = 0; i < most_visited_urls.size(); ++i) { |
| 2762 most_visited_urls_map_[most_visited_urls[i].url] = i; | 2745 most_visited_urls_map_[most_visited_urls[i].url] = i; |
| 2763 for (size_t j = 0; j < most_visited_urls[i].redirects.size(); ++j) | 2746 for (size_t j = 0; j < most_visited_urls[i].redirects.size(); ++j) |
| 2764 most_visited_urls_map_[most_visited_urls[i].redirects[j]] = i; | 2747 most_visited_urls_map_[most_visited_urls[i].redirects[j]] = i; |
| 2765 } | 2748 } |
| 2766 } | 2749 } |
| 2767 | 2750 |
| 2768 void HistoryBackend::RecordTopPageVisitStats(const GURL& url) { | 2751 void HistoryBackend::RecordTopPageVisitStats(const GURL& url) { |
| 2769 int rank = kPageVisitStatsMaxTopSites; | 2752 int rank = kPageVisitStatsMaxTopSites; |
| 2770 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); | 2753 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); |
| 2771 if (it != most_visited_urls_map_.end()) | 2754 if (it != most_visited_urls_map_.end()) |
| 2772 rank = (*it).second; | 2755 rank = (*it).second; |
| 2773 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", | 2756 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", |
| 2774 rank, kPageVisitStatsMaxTopSites + 1); | 2757 rank, kPageVisitStatsMaxTopSites + 1); |
| 2775 } | 2758 } |
| 2776 #endif | 2759 #endif |
| 2777 | 2760 |
| 2778 } // namespace history | 2761 } // namespace history |
| OLD | NEW |