Chromium Code Reviews| Index: components/sync_sessions/revisit/typed_url_page_revisit_task.cc |
| diff --git a/components/sync_sessions/revisit/typed_url_page_revisit_task.cc b/components/sync_sessions/revisit/typed_url_page_revisit_task.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..240cdc3c45fa8b95ce9facc4993bf7bb9a158545 |
| --- /dev/null |
| +++ b/components/sync_sessions/revisit/typed_url_page_revisit_task.cc |
| @@ -0,0 +1,76 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "components/sync_sessions/revisit/typed_url_page_revisit_task.h" |
| + |
| +#include "base/metrics/histogram_macros.h" |
| +#include "base/time/time.h" |
| +#include "components/history/core/browser/history_backend.h" |
| +#include "components/history/core/browser/history_service.h" |
| +#include "components/history/core/browser/url_row.h" |
| + |
| +namespace sync_sessions { |
| + |
| +TypedUrlPageRevisitTask::TypedUrlPageRevisitTask( |
| + const GURL& url, |
| + const PageVisitObserver::TransitionType transition) |
| + : url_(url), transition_(transition) {} |
| + |
| +TypedUrlPageRevisitTask::~TypedUrlPageRevisitTask() {} |
| + |
| +bool TypedUrlPageRevisitTask::FillVisitsAndSources( |
| + history::HistoryBackend* backend, |
|
stanisc
2015/10/13 21:53:33
Should HistoryBackend* be a const pointer?
skym
2015/10/13 22:25:14
We could do "history::HistoryBackend* const backen
|
| + history::VisitVector* visits, |
| + history::VisitSourceMap* sources) { |
| + history::URLRow row; |
| + return backend->GetURL(url_, &row) && |
| + backend->GetVisitsForURL(row.id(), visits) && |
| + backend->GetVisitsSource(*visits, sources); |
| +} |
| + |
| +bool TypedUrlPageRevisitTask::FindLastSyncedMatchAge( |
| + history::HistoryBackend* backend, |
| + base::Time* lastVisitTime) { |
| + history::VisitVector visits; |
| + history::VisitSourceMap sources; |
| + if (FillVisitsAndSources(backend, &visits, &sources)) { |
| + // The visits are in chronological order. We only care about the most |
| + // recent remote visit, so iterate backwards. |
| + for (auto row_itr = visits.rbegin(); row_itr != visits.rend(); ++row_itr) { |
| + auto map_itr = sources.find(row_itr->visit_id); |
| + if (map_itr != sources.end() && |
| + map_itr->second == history::SOURCE_SYNCED) { |
| + *lastVisitTime = row_itr->visit_time; |
| + return true; |
| + } |
| + } |
| + } |
| + return false; |
| +} |
| + |
| +bool TypedUrlPageRevisitTask::RunOnDBThread(history::HistoryBackend* backend, |
| + history::HistoryDatabase* db) { |
| + base::TimeTicks start(base::TimeTicks::Now()); |
| + base::Time lastVisitTime; |
| + if (FindLastSyncedMatchAge(backend, &lastVisitTime)) { |
| + REVISIT_HISTOGRAM_AGE("Sync.PageRevisitTypedUrlMatchAge", lastVisitTime); |
| + UMA_HISTOGRAM_ENUMERATION("Sync.PageRevisitTypedUrlMatchTransition", |
| + transition_, |
| + PageVisitObserver::kTransitionTypeLast); |
| + } else { |
| + UMA_HISTOGRAM_ENUMERATION("Sync.PageRevisitTypedUrlMissTransition", |
| + transition_, |
| + PageVisitObserver::kTransitionTypeLast); |
| + } |
| + |
| + base::TimeDelta duration(base::TimeTicks::Now() - start); |
| + UMA_HISTOGRAM_TIMES("Sync.PageRevisitTypedUrlDuration", duration); |
| + |
| + // This indicates success and retring is not needed. |
| + return true; |
| +} |
| + |
| +void TypedUrlPageRevisitTask::DoneRunOnMainThread() {} |
| + |
| +} // namespace sync_sessions |