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 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 void HistoryBackend::Closing() { | 213 void HistoryBackend::Closing() { |
214 // Any scheduled commit will have a reference to us, we must make it | 214 // Any scheduled commit will have a reference to us, we must make it |
215 // release that reference before we can be destroyed. | 215 // release that reference before we can be destroyed. |
216 CancelScheduledCommit(); | 216 CancelScheduledCommit(); |
217 | 217 |
218 // Release our reference to the delegate, this reference will be keeping the | 218 // Release our reference to the delegate, this reference will be keeping the |
219 // history service alive. | 219 // history service alive. |
220 delegate_.reset(); | 220 delegate_.reset(); |
221 } | 221 } |
222 | 222 |
223 void HistoryBackend::NotifyRenderProcessHostDestruction(const void* host) { | 223 void HistoryBackend::ClearCachedDataForContextID(ContextID context_id) { |
224 tracker_.NotifyRenderProcessHostDestruction(host); | 224 tracker_.ClearCachedDataForContextID(context_id); |
225 } | 225 } |
226 | 226 |
227 base::FilePath HistoryBackend::GetThumbnailFileName() const { | 227 base::FilePath HistoryBackend::GetThumbnailFileName() const { |
228 return history_dir_.Append(chrome::kThumbnailsFilename); | 228 return history_dir_.Append(chrome::kThumbnailsFilename); |
229 } | 229 } |
230 | 230 |
231 base::FilePath HistoryBackend::GetFaviconsFileName() const { | 231 base::FilePath HistoryBackend::GetFaviconsFileName() const { |
232 return history_dir_.Append(chrome::kFaviconsFilename); | 232 return history_dir_.Append(chrome::kFaviconsFilename); |
233 } | 233 } |
234 | 234 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 } | 332 } |
333 | 333 |
334 // Finally, increase the counter for that segment / day. | 334 // Finally, increase the counter for that segment / day. |
335 if (!db_->IncreaseSegmentVisitCount(segment_id, ts, 1)) { | 335 if (!db_->IncreaseSegmentVisitCount(segment_id, ts, 1)) { |
336 NOTREACHED(); | 336 NOTREACHED(); |
337 return 0; | 337 return 0; |
338 } | 338 } |
339 return segment_id; | 339 return segment_id; |
340 } | 340 } |
341 | 341 |
342 void HistoryBackend::UpdateWithPageEndTime(const void* host, | 342 void HistoryBackend::UpdateWithPageEndTime(ContextID context_id, |
343 int32 page_id, | 343 int32 page_id, |
344 const GURL& url, | 344 const GURL& url, |
345 Time end_ts) { | 345 Time end_ts) { |
346 // Will be filled with the URL ID and the visit ID of the last addition. | 346 // Will be filled with the URL ID and the visit ID of the last addition. |
347 VisitID visit_id = tracker_.GetLastVisit(host, page_id, url); | 347 VisitID visit_id = tracker_.GetLastVisit(context_id, page_id, url); |
348 UpdateVisitDuration(visit_id, end_ts); | 348 UpdateVisitDuration(visit_id, end_ts); |
349 } | 349 } |
350 | 350 |
351 void HistoryBackend::UpdateVisitDuration(VisitID visit_id, const Time end_ts) { | 351 void HistoryBackend::UpdateVisitDuration(VisitID visit_id, const Time end_ts) { |
352 if (!db_) | 352 if (!db_) |
353 return; | 353 return; |
354 | 354 |
355 // Get the starting visit_time for visit_id. | 355 // Get the starting visit_time for visit_id. |
356 VisitRow visit_row; | 356 VisitRow visit_row; |
357 if (db_->GetRowForVisit(visit_id, &visit_row)) { | 357 if (db_->GetRowForVisit(visit_id, &visit_row)) { |
358 // We should never have a negative duration time even when time is skewed. | 358 // We should never have a negative duration time even when time is skewed. |
359 visit_row.visit_duration = end_ts > visit_row.visit_time ? | 359 visit_row.visit_duration = end_ts > visit_row.visit_time ? |
360 end_ts - visit_row.visit_time : TimeDelta::FromMicroseconds(0); | 360 end_ts - visit_row.visit_time : TimeDelta::FromMicroseconds(0); |
361 db_->UpdateVisitRow(visit_row); | 361 db_->UpdateVisitRow(visit_row); |
362 } | 362 } |
363 } | 363 } |
364 | 364 |
365 void HistoryBackend::AddPage(const HistoryAddPageArgs& request) { | 365 void HistoryBackend::AddPage(const HistoryAddPageArgs& request) { |
366 if (!db_) | 366 if (!db_) |
367 return; | 367 return; |
368 | 368 |
369 // Will be filled with the URL ID and the visit ID of the last addition. | 369 // Will be filled with the URL ID and the visit ID of the last addition. |
370 std::pair<URLID, VisitID> last_ids(0, tracker_.GetLastVisit( | 370 std::pair<URLID, VisitID> last_ids(0, tracker_.GetLastVisit( |
371 request.id_scope, request.page_id, request.referrer)); | 371 request.context_id, request.page_id, request.referrer)); |
372 | 372 |
373 VisitID from_visit_id = last_ids.second; | 373 VisitID from_visit_id = last_ids.second; |
374 | 374 |
375 // If a redirect chain is given, we expect the last item in that chain to be | 375 // If a redirect chain is given, we expect the last item in that chain to be |
376 // the final URL. | 376 // the final URL. |
377 DCHECK(request.redirects.empty() || | 377 DCHECK(request.redirects.empty() || |
378 request.redirects.back() == request.url); | 378 request.redirects.back() == request.url); |
379 | 379 |
380 // If the user is adding older history, we need to make sure our times | 380 // If the user is adding older history, we need to make sure our times |
381 // are correct. | 381 // are correct. |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 // TODO(brettw) bug 1140015: Add an "add page" notification so the history | 524 // TODO(brettw) bug 1140015: Add an "add page" notification so the history |
525 // views can keep in sync. | 525 // views can keep in sync. |
526 | 526 |
527 // Add the last visit to the tracker so we can get outgoing transitions. | 527 // Add the last visit to the tracker so we can get outgoing transitions. |
528 // TODO(evanm): Due to http://b/1194536 we lose the referrers of a subframe | 528 // TODO(evanm): Due to http://b/1194536 we lose the referrers of a subframe |
529 // navigation anyway, so last_visit_id is always zero for them. But adding | 529 // navigation anyway, so last_visit_id is always zero for them. But adding |
530 // them here confuses main frame history, so we skip them for now. | 530 // them here confuses main frame history, so we skip them for now. |
531 if (stripped_transition != content::PAGE_TRANSITION_AUTO_SUBFRAME && | 531 if (stripped_transition != content::PAGE_TRANSITION_AUTO_SUBFRAME && |
532 stripped_transition != content::PAGE_TRANSITION_MANUAL_SUBFRAME && | 532 stripped_transition != content::PAGE_TRANSITION_MANUAL_SUBFRAME && |
533 !is_keyword_generated) { | 533 !is_keyword_generated) { |
534 tracker_.AddVisit(request.id_scope, request.page_id, request.url, | 534 tracker_.AddVisit(request.context_id, request.page_id, request.url, |
535 last_ids.second); | 535 last_ids.second); |
536 } | 536 } |
537 | 537 |
538 ScheduleCommit(); | 538 ScheduleCommit(); |
539 } | 539 } |
540 | 540 |
541 void HistoryBackend::InitImpl(const std::string& languages) { | 541 void HistoryBackend::InitImpl(const std::string& languages) { |
542 DCHECK(!db_) << "Initializing HistoryBackend twice"; | 542 DCHECK(!db_) << "Initializing HistoryBackend twice"; |
543 // In the rare case where the db fails to initialize a dialog may get shown | 543 // In the rare case where the db fails to initialize a dialog may get shown |
544 // the blocks the caller, yet allows other messages through. For this reason | 544 // the blocks the caller, yet allows other messages through. For this reason |
(...skipping 2303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2848 int rank = kPageVisitStatsMaxTopSites; | 2848 int rank = kPageVisitStatsMaxTopSites; |
2849 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); | 2849 std::map<GURL, int>::const_iterator it = most_visited_urls_map_.find(url); |
2850 if (it != most_visited_urls_map_.end()) | 2850 if (it != most_visited_urls_map_.end()) |
2851 rank = (*it).second; | 2851 rank = (*it).second; |
2852 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", | 2852 UMA_HISTOGRAM_ENUMERATION("History.TopSitesVisitsByRank", |
2853 rank, kPageVisitStatsMaxTopSites + 1); | 2853 rank, kPageVisitStatsMaxTopSites + 1); |
2854 } | 2854 } |
2855 #endif | 2855 #endif |
2856 | 2856 |
2857 } // namespace history | 2857 } // namespace history |
OLD | NEW |