| 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 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1341 | 1341 |
| 1342 for (size_t i = 0; i < data.size(); ++i) { | 1342 for (size_t i = 0; i < data.size(); ++i) { |
| 1343 PageUsageData* current_data = data[i]; | 1343 PageUsageData* current_data = data[i]; |
| 1344 RedirectList redirects; | 1344 RedirectList redirects; |
| 1345 QueryRedirectsFrom(current_data->GetURL(), &redirects); | 1345 QueryRedirectsFrom(current_data->GetURL(), &redirects); |
| 1346 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); | 1346 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); |
| 1347 result->push_back(url); | 1347 result->push_back(url); |
| 1348 } | 1348 } |
| 1349 } | 1349 } |
| 1350 | 1350 |
| 1351 void HistoryBackend::QueryFilteredURLs( | 1351 void HistoryBackend::QueryFilteredURLs(int result_count, |
| 1352 scoped_refptr<QueryFilteredURLsRequest> request, | 1352 const history::VisitFilter& filter, |
| 1353 int result_count, | 1353 bool extended_info, |
| 1354 const history::VisitFilter& filter, | 1354 history::FilteredURLList* result) { |
| 1355 bool extended_info) { | 1355 DCHECK(result); |
| 1356 if (request->canceled()) | |
| 1357 return; | |
| 1358 | |
| 1359 base::Time request_start = base::Time::Now(); | 1356 base::Time request_start = base::Time::Now(); |
| 1360 | 1357 |
| 1358 result->clear(); |
| 1361 if (!db_) { | 1359 if (!db_) { |
| 1362 // No History Database - return an empty list. | 1360 // No History Database - return an empty list. |
| 1363 request->ForwardResult(request->handle(), FilteredURLList()); | |
| 1364 return; | 1361 return; |
| 1365 } | 1362 } |
| 1366 | 1363 |
| 1367 VisitVector visits; | 1364 VisitVector visits; |
| 1368 db_->GetDirectVisitsDuringTimes(filter, 0, &visits); | 1365 db_->GetDirectVisitsDuringTimes(filter, 0, &visits); |
| 1369 | 1366 |
| 1370 std::map<URLID, double> score_map; | 1367 std::map<URLID, double> score_map; |
| 1371 for (size_t i = 0; i < visits.size(); ++i) { | 1368 for (size_t i = 0; i < visits.size(); ++i) { |
| 1372 score_map[visits[i].url_id] += filter.GetVisitScore(visits[i]); | 1369 score_map[visits[i].url_id] += filter.GetVisitScore(visits[i]); |
| 1373 } | 1370 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1390 data.resize(result_count); | 1387 data.resize(result_count); |
| 1391 | 1388 |
| 1392 for (size_t i = 0; i < data.size(); ++i) { | 1389 for (size_t i = 0; i < data.size(); ++i) { |
| 1393 URLRow info; | 1390 URLRow info; |
| 1394 if (db_->GetURLRow(data[i]->GetID(), &info)) { | 1391 if (db_->GetURLRow(data[i]->GetID(), &info)) { |
| 1395 data[i]->SetURL(info.url()); | 1392 data[i]->SetURL(info.url()); |
| 1396 data[i]->SetTitle(info.title()); | 1393 data[i]->SetTitle(info.title()); |
| 1397 } | 1394 } |
| 1398 } | 1395 } |
| 1399 | 1396 |
| 1400 FilteredURLList& result = request->value; | |
| 1401 for (size_t i = 0; i < data.size(); ++i) { | 1397 for (size_t i = 0; i < data.size(); ++i) { |
| 1402 PageUsageData* current_data = data[i]; | 1398 PageUsageData* current_data = data[i]; |
| 1403 FilteredURL url(*current_data); | 1399 FilteredURL url(*current_data); |
| 1404 | 1400 |
| 1405 if (extended_info) { | 1401 if (extended_info) { |
| 1406 VisitVector visits; | 1402 VisitVector visits; |
| 1407 db_->GetVisitsForURL(current_data->GetID(), &visits); | 1403 db_->GetVisitsForURL(current_data->GetID(), &visits); |
| 1408 if (visits.size() > 0) { | 1404 if (visits.size() > 0) { |
| 1409 url.extended_info.total_visits = visits.size(); | 1405 url.extended_info.total_visits = visits.size(); |
| 1410 for (size_t i = 0; i < visits.size(); ++i) { | 1406 for (size_t i = 0; i < visits.size(); ++i) { |
| 1411 url.extended_info.duration_opened += | 1407 url.extended_info.duration_opened += |
| 1412 visits[i].visit_duration.InSeconds(); | 1408 visits[i].visit_duration.InSeconds(); |
| 1413 if (visits[i].visit_time > url.extended_info.last_visit_time) { | 1409 if (visits[i].visit_time > url.extended_info.last_visit_time) { |
| 1414 url.extended_info.last_visit_time = visits[i].visit_time; | 1410 url.extended_info.last_visit_time = visits[i].visit_time; |
| 1415 } | 1411 } |
| 1416 } | 1412 } |
| 1417 // TODO(macourteau): implement the url.extended_info.visits stat. | 1413 // TODO(macourteau): implement the url.extended_info.visits stat. |
| 1418 } | 1414 } |
| 1419 } | 1415 } |
| 1420 result.push_back(url); | 1416 result->push_back(url); |
| 1421 } | 1417 } |
| 1422 | 1418 |
| 1423 int delta_time = std::max(1, std::min(999, | 1419 int delta_time = std::max(1, std::min(999, |
| 1424 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); | 1420 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); |
| 1425 STATIC_HISTOGRAM_POINTER_BLOCK( | 1421 STATIC_HISTOGRAM_POINTER_BLOCK( |
| 1426 "NewTabPage.SuggestedSitesLoadTime", | 1422 "NewTabPage.SuggestedSitesLoadTime", |
| 1427 Add(delta_time), | 1423 Add(delta_time), |
| 1428 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", | 1424 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", |
| 1429 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); | 1425 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); |
| 1430 | |
| 1431 request->ForwardResult(request->handle(), result); | |
| 1432 } | 1426 } |
| 1433 | 1427 |
| 1434 void HistoryBackend::GetRedirectsFromSpecificVisit( | 1428 void HistoryBackend::GetRedirectsFromSpecificVisit( |
| 1435 VisitID cur_visit, history::RedirectList* redirects) { | 1429 VisitID cur_visit, history::RedirectList* redirects) { |
| 1436 // Follow any redirects from the given visit and add them to the list. | 1430 // Follow any redirects from the given visit and add them to the list. |
| 1437 // It *should* be impossible to get a circular chain here, but we check | 1431 // It *should* be impossible to get a circular chain here, but we check |
| 1438 // just in case to avoid infinite loops. | 1432 // just in case to avoid infinite loops. |
| 1439 GURL cur_url; | 1433 GURL cur_url; |
| 1440 std::set<VisitID> visit_set; | 1434 std::set<VisitID> visit_set; |
| 1441 visit_set.insert(cur_visit); | 1435 visit_set.insert(cur_visit); |
| (...skipping 1321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2763 int rank = kPageVisitStatsMaxTopSites; | 2757 int rank = kPageVisitStatsMaxTopSites; |
| 2764 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); | 2758 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); |
| 2765 if (it != most_visited_urls_map_.end()) | 2759 if (it != most_visited_urls_map_.end()) |
| 2766 rank = (*it).second; | 2760 rank = (*it).second; |
| 2767 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", | 2761 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", |
| 2768 rank, kPageVisitStatsMaxTopSites + 1); | 2762 rank, kPageVisitStatsMaxTopSites + 1); |
| 2769 } | 2763 } |
| 2770 #endif | 2764 #endif |
| 2771 | 2765 |
| 2772 } // namespace history | 2766 } // namespace history |
| OLD | NEW |