| 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 1288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1299 | 1299 |
| 1300 for (size_t i = 0; i < data.size(); ++i) { | 1300 for (size_t i = 0; i < data.size(); ++i) { |
| 1301 PageUsageData* current_data = data[i]; | 1301 PageUsageData* current_data = data[i]; |
| 1302 RedirectList redirects; | 1302 RedirectList redirects; |
| 1303 QueryRedirectsFrom(current_data->GetURL(), &redirects); | 1303 QueryRedirectsFrom(current_data->GetURL(), &redirects); |
| 1304 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); | 1304 MostVisitedURL url = MakeMostVisitedURL(*current_data, redirects); |
| 1305 result->push_back(url); | 1305 result->push_back(url); |
| 1306 } | 1306 } |
| 1307 } | 1307 } |
| 1308 | 1308 |
| 1309 void HistoryBackend::QueryFilteredURLs( | 1309 void HistoryBackend::QueryFilteredURLs(int result_count, |
| 1310 scoped_refptr<QueryFilteredURLsRequest> request, | 1310 const history::VisitFilter& filter, |
| 1311 int result_count, | 1311 bool extended_info, |
| 1312 const history::VisitFilter& filter, | 1312 history::FilteredURLList* result) { |
| 1313 bool extended_info) { | 1313 DCHECK(result); |
| 1314 if (request->canceled()) | |
| 1315 return; | |
| 1316 | |
| 1317 base::Time request_start = base::Time::Now(); | 1314 base::Time request_start = base::Time::Now(); |
| 1318 | 1315 |
| 1316 result->clear(); |
| 1319 if (!db_) { | 1317 if (!db_) { |
| 1320 // No History Database - return an empty list. | 1318 // No History Database - return an empty list. |
| 1321 request->ForwardResult(request->handle(), FilteredURLList()); | |
| 1322 return; | 1319 return; |
| 1323 } | 1320 } |
| 1324 | 1321 |
| 1325 VisitVector visits; | 1322 VisitVector visits; |
| 1326 db_->GetDirectVisitsDuringTimes(filter, 0, &visits); | 1323 db_->GetDirectVisitsDuringTimes(filter, 0, &visits); |
| 1327 | 1324 |
| 1328 std::map<URLID, double> score_map; | 1325 std::map<URLID, double> score_map; |
| 1329 for (size_t i = 0; i < visits.size(); ++i) { | 1326 for (size_t i = 0; i < visits.size(); ++i) { |
| 1330 score_map[visits[i].url_id] += filter.GetVisitScore(visits[i]); | 1327 score_map[visits[i].url_id] += filter.GetVisitScore(visits[i]); |
| 1331 } | 1328 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1348 data.resize(result_count); | 1345 data.resize(result_count); |
| 1349 | 1346 |
| 1350 for (size_t i = 0; i < data.size(); ++i) { | 1347 for (size_t i = 0; i < data.size(); ++i) { |
| 1351 URLRow info; | 1348 URLRow info; |
| 1352 if (db_->GetURLRow(data[i]->GetID(), &info)) { | 1349 if (db_->GetURLRow(data[i]->GetID(), &info)) { |
| 1353 data[i]->SetURL(info.url()); | 1350 data[i]->SetURL(info.url()); |
| 1354 data[i]->SetTitle(info.title()); | 1351 data[i]->SetTitle(info.title()); |
| 1355 } | 1352 } |
| 1356 } | 1353 } |
| 1357 | 1354 |
| 1358 FilteredURLList& result = request->value; | |
| 1359 for (size_t i = 0; i < data.size(); ++i) { | 1355 for (size_t i = 0; i < data.size(); ++i) { |
| 1360 PageUsageData* current_data = data[i]; | 1356 PageUsageData* current_data = data[i]; |
| 1361 FilteredURL url(*current_data); | 1357 FilteredURL url(*current_data); |
| 1362 | 1358 |
| 1363 if (extended_info) { | 1359 if (extended_info) { |
| 1364 VisitVector visits; | 1360 VisitVector visits; |
| 1365 db_->GetVisitsForURL(current_data->GetID(), &visits); | 1361 db_->GetVisitsForURL(current_data->GetID(), &visits); |
| 1366 if (visits.size() > 0) { | 1362 if (visits.size() > 0) { |
| 1367 url.extended_info.total_visits = visits.size(); | 1363 url.extended_info.total_visits = visits.size(); |
| 1368 for (size_t i = 0; i < visits.size(); ++i) { | 1364 for (size_t i = 0; i < visits.size(); ++i) { |
| 1369 url.extended_info.duration_opened += | 1365 url.extended_info.duration_opened += |
| 1370 visits[i].visit_duration.InSeconds(); | 1366 visits[i].visit_duration.InSeconds(); |
| 1371 if (visits[i].visit_time > url.extended_info.last_visit_time) { | 1367 if (visits[i].visit_time > url.extended_info.last_visit_time) { |
| 1372 url.extended_info.last_visit_time = visits[i].visit_time; | 1368 url.extended_info.last_visit_time = visits[i].visit_time; |
| 1373 } | 1369 } |
| 1374 } | 1370 } |
| 1375 // TODO(macourteau): implement the url.extended_info.visits stat. | 1371 // TODO(macourteau): implement the url.extended_info.visits stat. |
| 1376 } | 1372 } |
| 1377 } | 1373 } |
| 1378 result.push_back(url); | 1374 result->push_back(url); |
| 1379 } | 1375 } |
| 1380 | 1376 |
| 1381 int delta_time = std::max(1, std::min(999, | 1377 int delta_time = std::max(1, std::min(999, |
| 1382 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); | 1378 static_cast<int>((base::Time::Now() - request_start).InMilliseconds()))); |
| 1383 STATIC_HISTOGRAM_POINTER_BLOCK( | 1379 STATIC_HISTOGRAM_POINTER_BLOCK( |
| 1384 "NewTabPage.SuggestedSitesLoadTime", | 1380 "NewTabPage.SuggestedSitesLoadTime", |
| 1385 Add(delta_time), | 1381 Add(delta_time), |
| 1386 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", | 1382 base::LinearHistogram::FactoryGet("NewTabPage.SuggestedSitesLoadTime", |
| 1387 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); | 1383 1, 1000, 100, base::Histogram::kUmaTargetedHistogramFlag)); |
| 1388 | |
| 1389 request->ForwardResult(request->handle(), result); | |
| 1390 } | 1384 } |
| 1391 | 1385 |
| 1392 void HistoryBackend::GetRedirectsFromSpecificVisit( | 1386 void HistoryBackend::GetRedirectsFromSpecificVisit( |
| 1393 VisitID cur_visit, history::RedirectList* redirects) { | 1387 VisitID cur_visit, history::RedirectList* redirects) { |
| 1394 // Follow any redirects from the given visit and add them to the list. | 1388 // Follow any redirects from the given visit and add them to the list. |
| 1395 // It *should* be impossible to get a circular chain here, but we check | 1389 // It *should* be impossible to get a circular chain here, but we check |
| 1396 // just in case to avoid infinite loops. | 1390 // just in case to avoid infinite loops. |
| 1397 GURL cur_url; | 1391 GURL cur_url; |
| 1398 std::set<VisitID> visit_set; | 1392 std::set<VisitID> visit_set; |
| 1399 visit_set.insert(cur_visit); | 1393 visit_set.insert(cur_visit); |
| (...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2720 int rank = kPageVisitStatsMaxTopSites; | 2714 int rank = kPageVisitStatsMaxTopSites; |
| 2721 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); | 2715 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); |
| 2722 if (it != most_visited_urls_map_.end()) | 2716 if (it != most_visited_urls_map_.end()) |
| 2723 rank = (*it).second; | 2717 rank = (*it).second; |
| 2724 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", | 2718 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", |
| 2725 rank, kPageVisitStatsMaxTopSites + 1); | 2719 rank, kPageVisitStatsMaxTopSites + 1); |
| 2726 } | 2720 } |
| 2727 #endif | 2721 #endif |
| 2728 | 2722 |
| 2729 } // namespace history | 2723 } // namespace history |
| OLD | NEW |