| 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 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1285 | 1285 |
| 1286 void HistoryBackend::GetVisibleVisitCountToHost( | 1286 void HistoryBackend::GetVisibleVisitCountToHost( |
| 1287 const GURL& url, | 1287 const GURL& url, |
| 1288 VisibleVisitCountToHostResult* result) { | 1288 VisibleVisitCountToHostResult* result) { |
| 1289 result->count = 0; | 1289 result->count = 0; |
| 1290 result->success = db_.get() && | 1290 result->success = db_.get() && |
| 1291 db_->GetVisibleVisitCountToHost( | 1291 db_->GetVisibleVisitCountToHost( |
| 1292 url, &result->count, &result->first_visit); | 1292 url, &result->count, &result->first_visit); |
| 1293 } | 1293 } |
| 1294 | 1294 |
| 1295 void HistoryBackend::QueryMostVisitedURLs( | 1295 void HistoryBackend::QueryMostVisitedURLs(int result_count, |
| 1296 scoped_refptr<QueryMostVisitedURLsRequest> request, | 1296 int days_back, |
| 1297 int result_count, | 1297 MostVisitedURLList* result) { |
| 1298 int days_back) { | 1298 if (!db_) |
| 1299 if (request->canceled()) | |
| 1300 return; | 1299 return; |
| 1301 | 1300 |
| 1302 if (!db_) { | 1301 ScopedVector<PageUsageData> data; |
| 1303 // No History Database - return an empty list. | 1302 db_->QuerySegmentUsage(base::Time::Now() - |
| 1304 request->ForwardResult(request->handle(), MostVisitedURLList()); | 1303 base::TimeDelta::FromDays(days_back), |
| 1305 return; | 1304 result_count, &data.get()); |
| 1305 |
| 1306 for (size_t i = 0; i < data.size(); ++i) { |
| 1307 PageUsageData* current_data = data[i]; |
| 1308 RedirectList redirects; |
| 1309 GetMostRecentRedirectsFrom(current_data->GetURL(), &redirects); |
| 1310 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); |
| 1311 result->push_back(url); |
| 1306 } | 1312 } |
| 1307 | |
| 1308 MostVisitedURLList* result = &request->value; | |
| 1309 QueryMostVisitedURLsImpl(result_count, days_back, result); | |
| 1310 request->ForwardResult(request->handle(), *result); | |
| 1311 } | 1313 } |
| 1312 | 1314 |
| 1313 void HistoryBackend::QueryFilteredURLs( | 1315 void HistoryBackend::QueryFilteredURLs( |
| 1314 scoped_refptr<QueryFilteredURLsRequest> request, | 1316 scoped_refptr<QueryFilteredURLsRequest> request, |
| 1315 int result_count, | 1317 int result_count, |
| 1316 const history::VisitFilter& filter, | 1318 const history::VisitFilter& filter, |
| 1317 bool extended_info) { | 1319 bool extended_info) { |
| 1318 if (request->canceled()) | 1320 if (request->canceled()) |
| 1319 return; | 1321 return; |
| 1320 | 1322 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1386 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); | 1388 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); |
| 1387 STATIC_HISTOGRAM_POINTER_BLOCK( | 1389 STATIC_HISTOGRAM_POINTER_BLOCK( |
| 1388 "NewTabPage.SuggestedSitesLoadTime", | 1390 "NewTabPage.SuggestedSitesLoadTime", |
| 1389 Add(delta_time), | 1391 Add(delta_time), |
| 1390 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", | 1392 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", |
| 1391 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); | 1393 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); |
| 1392 | 1394 |
| 1393 request->ForwardResult(request->handle(), result); | 1395 request->ForwardResult(request->handle(), result); |
| 1394 } | 1396 } |
| 1395 | 1397 |
| 1396 void HistoryBackend::QueryMostVisitedURLsImpl(int result_count, | |
| 1397 int days_back, | |
| 1398 MostVisitedURLList* result) { | |
| 1399 if (!db_) | |
| 1400 return; | |
| 1401 | |
| 1402 ScopedVector<PageUsageData> data; | |
| 1403 db_->QuerySegmentUsage(base::Time::Now() - | |
| 1404 base::TimeDelta::FromDays(days_back), | |
| 1405 result_count, &data.get()); | |
| 1406 | |
| 1407 for (size_t i = 0; i < data.size(); ++i) { | |
| 1408 PageUsageData* current_data = data[i]; | |
| 1409 RedirectList redirects; | |
| 1410 GetMostRecentRedirectsFrom(current_data->GetURL(), &redirects); | |
| 1411 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); | |
| 1412 result->push_back(url); | |
| 1413 } | |
| 1414 } | |
| 1415 | |
| 1416 void HistoryBackend::GetRedirectsFromSpecificVisit( | 1398 void HistoryBackend::GetRedirectsFromSpecificVisit( |
| 1417 VisitID cur_visit, history::RedirectList* redirects) { | 1399 VisitID cur_visit, history::RedirectList* redirects) { |
| 1418 // Follow any redirects from the given visit and add them to the list. | 1400 // Follow any redirects from the given visit and add them to the list. |
| 1419 // It *should* be impossible to get a circular chain here, but we check | 1401 // It *should* be impossible to get a circular chain here, but we check |
| 1420 // just in case to avoid infinite loops. | 1402 // just in case to avoid infinite loops. |
| 1421 GURL cur_url; | 1403 GURL cur_url; |
| 1422 std::set<VisitID> visit_set; | 1404 std::set<VisitID> visit_set; |
| 1423 visit_set.insert(cur_visit); | 1405 visit_set.insert(cur_visit); |
| 1424 while (db_->GetRedirectFromVisit(cur_visit, &cur_visit, &cur_url)) { | 1406 while (db_->GetRedirectFromVisit(cur_visit, &cur_visit, &cur_url)) { |
| 1425 if (visit_set.find(cur_visit) != visit_set.end()) { | 1407 if (visit_set.find(cur_visit) != visit_set.end()) { |
| (...skipping 1328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2754 info.transition = visit.transition; | 2736 info.transition = visit.transition; |
| 2755 // If we don't have a delegate yet during setup or shutdown, we will drop | 2737 // If we don't have a delegate yet during setup or shutdown, we will drop |
| 2756 // these notifications. | 2738 // these notifications. |
| 2757 if (delegate_) | 2739 if (delegate_) |
| 2758 delegate_->NotifyVisitDBObserversOnAddVisit(info); | 2740 delegate_->NotifyVisitDBObserversOnAddVisit(info); |
| 2759 } | 2741 } |
| 2760 | 2742 |
| 2761 #if defined(OS_ANDROID) | 2743 #if defined(OS_ANDROID) |
| 2762 void HistoryBackend::PopulateMostVisitedURLMap() { | 2744 void HistoryBackend::PopulateMostVisitedURLMap() { |
| 2763 MostVisitedURLList most_visited_urls; | 2745 MostVisitedURLList most_visited_urls; |
| 2764 QueryMostVisitedURLsImpl(kPageVisitStatsMaxTopSites, kSegmentDataRetention, | 2746 QueryMostVisitedURLs(kPageVisitStatsMaxTopSites, |
| 2765 &most_visited_urls); | 2747 kSegmentDataRetention, |
| 2748 &most_visited_urls); |
| 2766 | 2749 |
| 2767 DCHECK_LE(most_visited_urls.size(), kPageVisitStatsMaxTopSites); | 2750 DCHECK_LE(most_visited_urls.size(), kPageVisitStatsMaxTopSites); |
| 2768 for (size_t i = 0; i < most_visited_urls.size(); ++i) { | 2751 for (size_t i = 0; i < most_visited_urls.size(); ++i) { |
| 2769 most_visited_urls_map_[most_visited_urls[i].url] = i; | 2752 most_visited_urls_map_[most_visited_urls[i].url] = i; |
| 2770 for (size_t j = 0; j < most_visited_urls[i].redirects.size(); ++j) | 2753 for (size_t j = 0; j < most_visited_urls[i].redirects.size(); ++j) |
| 2771 most_visited_urls_map_[most_visited_urls[i].redirects[j]] = i; | 2754 most_visited_urls_map_[most_visited_urls[i].redirects[j]] = i; |
| 2772 } | 2755 } |
| 2773 } | 2756 } |
| 2774 | 2757 |
| 2775 void HistoryBackend::RecordTopPageVisitStats(const GURL& url) { | 2758 void HistoryBackend::RecordTopPageVisitStats(const GURL& url) { |
| 2776 int rank = kPageVisitStatsMaxTopSites; | 2759 int rank = kPageVisitStatsMaxTopSites; |
| 2777 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); | 2760 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); |
| 2778 if (it != most_visited_urls_map_.end()) | 2761 if (it != most_visited_urls_map_.end()) |
| 2779 rank = (*it).second; | 2762 rank = (*it).second; |
| 2780 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", | 2763 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", |
| 2781 rank, kPageVisitStatsMaxTopSites + 1); | 2764 rank, kPageVisitStatsMaxTopSites + 1); |
| 2782 } | 2765 } |
| 2783 #endif | 2766 #endif |
| 2784 | 2767 |
| 2785 } // namespace history | 2768 } // namespace history |
| OLD | NEW |