| Index: components/sync_sessions/revisit/typed_url_page_revisit_task_unittest.cc
|
| diff --git a/components/sync_sessions/revisit/typed_url_page_revisit_task_unittest.cc b/components/sync_sessions/revisit/typed_url_page_revisit_task_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d8bf3fab5f34043a83be36b0cd75d31cf9d03d25
|
| --- /dev/null
|
| +++ b/components/sync_sessions/revisit/typed_url_page_revisit_task_unittest.cc
|
| @@ -0,0 +1,150 @@
|
| +// 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/test/histogram_tester.h"
|
| +#include "base/time/time.h"
|
| +#include "components/history/core/browser/history_backend.h"
|
| +#include "components/history/core/browser/history_types.h"
|
| +#include "components/sync_sessions/revisit/page_visit_observer.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "url/gurl.h"
|
| +
|
| +namespace sync_sessions {
|
| +
|
| +namespace {
|
| +
|
| +class FakeTask : public TypedUrlPageRevisitTask {
|
| + public:
|
| + FakeTask(const PageVisitObserver::TransitionType transition,
|
| + bool result,
|
| + const history::VisitVector& visits,
|
| + const history::VisitSourceMap& sources)
|
| + : TypedUrlPageRevisitTask(GURL("http://www.example.com"), transition),
|
| + result_(result),
|
| + visits_(visits),
|
| + sources_(sources) {}
|
| +
|
| + bool FillVisitsAndSources(history::HistoryBackend* backend,
|
| + history::VisitVector* visits,
|
| + history::VisitSourceMap* sources) override {
|
| + *visits = visits_;
|
| + *sources = sources_;
|
| + return result_;
|
| + }
|
| +
|
| + private:
|
| + const bool result_;
|
| + const history::VisitVector visits_;
|
| + const history::VisitSourceMap sources_;
|
| +};
|
| +
|
| +void VerifyMatch(TypedUrlPageRevisitTask* task,
|
| + const PageVisitObserver::TransitionType transition) {
|
| + base::HistogramTester histogram_tester;
|
| + task->RunOnDBThread(nullptr, nullptr);
|
| + histogram_tester.ExpectTotalCount("Sync.PageRevisitTypedUrlMatchAge", 1);
|
| + histogram_tester.ExpectUniqueSample("Sync.PageRevisitTypedUrlMatchTransition",
|
| + PageVisitObserver::kTransitionPage, 1);
|
| + histogram_tester.ExpectTotalCount("Sync.PageRevisitTypedUrlDuration", 1);
|
| +}
|
| +
|
| +void VerifyMiss(TypedUrlPageRevisitTask* task,
|
| + const PageVisitObserver::TransitionType transition) {
|
| + base::HistogramTester histogram_tester;
|
| + task->RunOnDBThread(nullptr, nullptr);
|
| + histogram_tester.ExpectUniqueSample("Sync.PageRevisitTypedUrlMissTransition",
|
| + PageVisitObserver::kTransitionPage, 1);
|
| + histogram_tester.ExpectTotalCount("Sync.PageRevisitTypedUrlDuration", 1);
|
| +}
|
| +
|
| +history::VisitRow Row(history::VisitID id) {
|
| + history::VisitRow row;
|
| + row.visit_id = id;
|
| + return row;
|
| +}
|
| +
|
| +history::VisitRow Row(history::VisitID id, base::Time visit_time) {
|
| + history::VisitRow row;
|
| + row.visit_id = id;
|
| + row.visit_time = visit_time;
|
| + return row;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +TEST(TypedUrlPageRevisitTaskTest, NoMatchesFillReturnsFalse) {
|
| + history::VisitVector visits;
|
| + history::VisitSourceMap sources;
|
| + FakeTask task(PageVisitObserver::TransitionType::kTransitionPage, false,
|
| + visits, sources);
|
| + VerifyMiss(&task, PageVisitObserver::kTransitionPage);
|
| +}
|
| +
|
| +TEST(TypedUrlPageRevisitTaskTest, NoMatchesFillReturnsTrue) {
|
| + history::VisitVector visits;
|
| + history::VisitSourceMap sources;
|
| + FakeTask task(PageVisitObserver::TransitionType::kTransitionPage, true,
|
| + visits, sources);
|
| + VerifyMiss(&task, PageVisitObserver::kTransitionPage);
|
| +}
|
| +
|
| +TEST(TypedUrlPageRevisitTaskTest, NoSyncedSources) {
|
| + history::VisitVector visits;
|
| + visits.push_back(Row(1));
|
| + visits.push_back(Row(2));
|
| + visits.push_back(Row(3));
|
| + visits.push_back(Row(4));
|
| + visits.push_back(Row(5));
|
| + visits.push_back(Row(6));
|
| + visits.push_back(Row(7));
|
| +
|
| + history::VisitSourceMap sources;
|
| + sources[1] = history::SOURCE_BROWSED;
|
| + sources[2] = history::SOURCE_EXTENSION;
|
| + sources[3] = history::SOURCE_EXTENSION;
|
| + sources[4] = history::SOURCE_FIREFOX_IMPORTED;
|
| + sources[5] = history::SOURCE_IE_IMPORTED;
|
| + sources[6] = history::SOURCE_SAFARI_IMPORTED;
|
| + // No source for id 7.
|
| +
|
| + FakeTask task(PageVisitObserver::TransitionType::kTransitionPage, true,
|
| + visits, sources);
|
| + VerifyMiss(&task, PageVisitObserver::kTransitionPage);
|
| +}
|
| +
|
| +TEST(TypedUrlPageRevisitTaskTest, SingleMatch) {
|
| + history::VisitVector visits;
|
| + visits.push_back(Row(1));
|
| +
|
| + history::VisitSourceMap sources;
|
| + sources[1] = history::SOURCE_SYNCED;
|
| +
|
| + FakeTask task(PageVisitObserver::TransitionType::kTransitionPage, true,
|
| + visits, sources);
|
| + VerifyMatch(&task, PageVisitObserver::kTransitionPage);
|
| +}
|
| +
|
| +TEST(TypedUrlPageRevisitTaskTest, MultipleMatches) {
|
| + base::Time expected = base::Time::UnixEpoch() + base::TimeDelta::FromDays(1);
|
| + history::VisitVector visits;
|
| + visits.push_back(Row(1, base::Time::UnixEpoch()));
|
| + visits.push_back(Row(2, expected));
|
| + visits.push_back(
|
| + Row(3, base::Time::UnixEpoch() + base::TimeDelta::FromDays(2)));
|
| +
|
| + history::VisitSourceMap sources;
|
| + sources[1] = history::SOURCE_SYNCED;
|
| + sources[2] = history::SOURCE_SYNCED;
|
| + // No source for id 3.
|
| +
|
| + FakeTask task(PageVisitObserver::TransitionType::kTransitionPage, true,
|
| + visits, sources);
|
| + base::Time lastVisitTime;
|
| + ASSERT_TRUE(task.FindLastSyncedMatchAge(nullptr, &lastVisitTime));
|
| + ASSERT_EQ(expected, lastVisitTime);
|
| +}
|
| +
|
| +} // namespace sync_sessions
|
|
|