| 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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 | 373 |
| 374 // Finally, increase the counter for that segment / day. | 374 // Finally, increase the counter for that segment / day. |
| 375 if (!db_->IncreaseSegmentVisitCount(segment_id, ts, 1)) { | 375 if (!db_->IncreaseSegmentVisitCount(segment_id, ts, 1)) { |
| 376 NOTREACHED(); | 376 NOTREACHED(); |
| 377 return 0; | 377 return 0; |
| 378 } | 378 } |
| 379 return segment_id; | 379 return segment_id; |
| 380 } | 380 } |
| 381 | 381 |
| 382 void HistoryBackend::UpdateWithPageEndTime(ContextID context_id, | 382 void HistoryBackend::UpdateWithPageEndTime(ContextID context_id, |
| 383 int32 page_id, | 383 int nav_entry_id, |
| 384 const GURL& url, | 384 const GURL& url, |
| 385 Time end_ts) { | 385 Time end_ts) { |
| 386 // Will be filled with the URL ID and the visit ID of the last addition. | 386 // Will be filled with the URL ID and the visit ID of the last addition. |
| 387 VisitID visit_id = tracker_.GetLastVisit(context_id, page_id, url); | 387 VisitID visit_id = tracker_.GetLastVisit(context_id, nav_entry_id, url); |
| 388 UpdateVisitDuration(visit_id, end_ts); | 388 UpdateVisitDuration(visit_id, end_ts); |
| 389 } | 389 } |
| 390 | 390 |
| 391 void HistoryBackend::UpdateVisitDuration(VisitID visit_id, const Time end_ts) { | 391 void HistoryBackend::UpdateVisitDuration(VisitID visit_id, const Time end_ts) { |
| 392 if (!db_) | 392 if (!db_) |
| 393 return; | 393 return; |
| 394 | 394 |
| 395 // Get the starting visit_time for visit_id. | 395 // Get the starting visit_time for visit_id. |
| 396 VisitRow visit_row; | 396 VisitRow visit_row; |
| 397 if (db_->GetRowForVisit(visit_id, &visit_row)) { | 397 if (db_->GetRowForVisit(visit_id, &visit_row)) { |
| 398 // We should never have a negative duration time even when time is skewed. | 398 // We should never have a negative duration time even when time is skewed. |
| 399 visit_row.visit_duration = end_ts > visit_row.visit_time ? | 399 visit_row.visit_duration = end_ts > visit_row.visit_time ? |
| 400 end_ts - visit_row.visit_time : TimeDelta::FromMicroseconds(0); | 400 end_ts - visit_row.visit_time : TimeDelta::FromMicroseconds(0); |
| 401 db_->UpdateVisitRow(visit_row); | 401 db_->UpdateVisitRow(visit_row); |
| 402 } | 402 } |
| 403 } | 403 } |
| 404 | 404 |
| 405 void HistoryBackend::AddPage(const HistoryAddPageArgs& request) { | 405 void HistoryBackend::AddPage(const HistoryAddPageArgs& request) { |
| 406 if (!db_) | 406 if (!db_) |
| 407 return; | 407 return; |
| 408 | 408 |
| 409 // Will be filled with the URL ID and the visit ID of the last addition. | 409 // Will be filled with the URL ID and the visit ID of the last addition. |
| 410 std::pair<URLID, VisitID> last_ids(0, tracker_.GetLastVisit( | 410 std::pair<URLID, VisitID> last_ids(0, tracker_.GetLastVisit( |
| 411 request.context_id, request.page_id, request.referrer)); | 411 request.context_id, request.nav_entry_id, request.referrer)); |
| 412 | 412 |
| 413 VisitID from_visit_id = last_ids.second; | 413 VisitID from_visit_id = last_ids.second; |
| 414 | 414 |
| 415 // If a redirect chain is given, we expect the last item in that chain to be | 415 // If a redirect chain is given, we expect the last item in that chain to be |
| 416 // the final URL. | 416 // the final URL. |
| 417 DCHECK(request.redirects.empty() || | 417 DCHECK(request.redirects.empty() || |
| 418 request.redirects.back() == request.url); | 418 request.redirects.back() == request.url); |
| 419 | 419 |
| 420 // If the user is adding older history, we need to make sure our times | 420 // If the user is adding older history, we need to make sure our times |
| 421 // are correct. | 421 // are correct. |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 // TODO(brettw) bug 1140015: Add an "add page" notification so the history | 564 // TODO(brettw) bug 1140015: Add an "add page" notification so the history |
| 565 // views can keep in sync. | 565 // views can keep in sync. |
| 566 | 566 |
| 567 // Add the last visit to the tracker so we can get outgoing transitions. | 567 // Add the last visit to the tracker so we can get outgoing transitions. |
| 568 // TODO(evanm): Due to http://b/1194536 we lose the referrers of a subframe | 568 // TODO(evanm): Due to http://b/1194536 we lose the referrers of a subframe |
| 569 // navigation anyway, so last_visit_id is always zero for them. But adding | 569 // navigation anyway, so last_visit_id is always zero for them. But adding |
| 570 // them here confuses main frame history, so we skip them for now. | 570 // them here confuses main frame history, so we skip them for now. |
| 571 if (stripped_transition != ui::PAGE_TRANSITION_AUTO_SUBFRAME && | 571 if (stripped_transition != ui::PAGE_TRANSITION_AUTO_SUBFRAME && |
| 572 stripped_transition != ui::PAGE_TRANSITION_MANUAL_SUBFRAME && | 572 stripped_transition != ui::PAGE_TRANSITION_MANUAL_SUBFRAME && |
| 573 !is_keyword_generated) { | 573 !is_keyword_generated) { |
| 574 tracker_.AddVisit(request.context_id, request.page_id, request.url, | 574 tracker_.AddVisit(request.context_id, request.nav_entry_id, request.url, |
| 575 last_ids.second); | 575 last_ids.second); |
| 576 } | 576 } |
| 577 | 577 |
| 578 ScheduleCommit(); | 578 ScheduleCommit(); |
| 579 } | 579 } |
| 580 | 580 |
| 581 void HistoryBackend::InitImpl(const std::string& languages) { | 581 void HistoryBackend::InitImpl(const std::string& languages) { |
| 582 DCHECK(!db_) << "Initializing HistoryBackend twice"; | 582 DCHECK(!db_) << "Initializing HistoryBackend twice"; |
| 583 // In the rare case where the db fails to initialize a dialog may get shown | 583 // In the rare case where the db fails to initialize a dialog may get shown |
| 584 // the blocks the caller, yet allows other messages through. For this reason | 584 // the blocks the caller, yet allows other messages through. For this reason |
| (...skipping 2105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2690 info.url_id = visit.url_id; | 2690 info.url_id = visit.url_id; |
| 2691 info.time = visit.visit_time; | 2691 info.time = visit.visit_time; |
| 2692 info.transition = visit.transition; | 2692 info.transition = visit.transition; |
| 2693 // If we don't have a delegate yet during setup or shutdown, we will drop | 2693 // If we don't have a delegate yet during setup or shutdown, we will drop |
| 2694 // these notifications. | 2694 // these notifications. |
| 2695 if (delegate_) | 2695 if (delegate_) |
| 2696 delegate_->NotifyAddVisit(info); | 2696 delegate_->NotifyAddVisit(info); |
| 2697 } | 2697 } |
| 2698 | 2698 |
| 2699 } // namespace history | 2699 } // namespace history |
| OLD | NEW |