Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Unified Diff: components/browser_sync/browser/profile_sync_service_typed_url_unittest.cc

Issue 2345843003: [Sync] Merge //components/browser_sync into one directory. (Closed)
Patch Set: Address comment + rebase. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/browser_sync/browser/profile_sync_service_typed_url_unittest.cc
diff --git a/components/browser_sync/browser/profile_sync_service_typed_url_unittest.cc b/components/browser_sync/browser/profile_sync_service_typed_url_unittest.cc
deleted file mode 100644
index 8da243784f90aa033d8c026d1a3ca76a345ee98a..0000000000000000000000000000000000000000
--- a/components/browser_sync/browser/profile_sync_service_typed_url_unittest.cc
+++ /dev/null
@@ -1,1088 +0,0 @@
-// Copyright (c) 2012 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 <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/memory/ref_counted.h"
-#include "base/run_loop.h"
-#include "base/strings/string16.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/time.h"
-#include "components/browser_sync/browser/abstract_profile_sync_service_test.h"
-#include "components/browser_sync/browser/test_profile_sync_service.h"
-#include "components/history/core/browser/history_backend.h"
-#include "components/history/core/browser/history_backend_client.h"
-#include "components/history/core/browser/history_backend_notifier.h"
-#include "components/history/core/browser/history_db_task.h"
-#include "components/history/core/browser/history_service.h"
-#include "components/history/core/browser/typed_url_data_type_controller.h"
-#include "components/signin/core/browser/signin_manager.h"
-#include "components/sync/api/data_type_error_handler_mock.h"
-#include "components/sync/core/read_node.h"
-#include "components/sync/core/read_transaction.h"
-#include "components/sync/core/write_node.h"
-#include "components/sync/core/write_transaction.h"
-#include "components/sync/driver/data_type_manager_impl.h"
-#include "components/sync/protocol/typed_url_specifics.pb.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-using browser_sync::TypedUrlDataTypeController;
-using history::HistoryBackend;
-using history::HistoryBackendNotifier;
-using history::TypedUrlSyncableService;
-using testing::DoAll;
-using testing::Return;
-using testing::SetArgumentPointee;
-using testing::_;
-
-namespace {
-
-const char kDummySavingBrowserHistoryDisabled[] = "dummyPref";
-
-// Visits with this timestamp are treated as expired.
-static const int EXPIRED_VISIT = -1;
-
-ACTION(ReturnNewDataTypeManager) {
- return new sync_driver::DataTypeManagerImpl(arg0, arg1, arg2, arg3, arg4);
-}
-
-class HistoryBackendMock : public HistoryBackend {
- public:
- HistoryBackendMock()
- : HistoryBackend(nullptr, nullptr, base::ThreadTaskRunnerHandle::Get()) {}
- bool IsExpiredVisitTime(const base::Time& time) override {
- return time.ToInternalValue() == EXPIRED_VISIT;
- }
- MOCK_METHOD1(GetAllTypedURLs, bool(history::URLRows* entries));
- MOCK_METHOD3(GetMostRecentVisitsForURL, bool(history::URLID id,
- int max_visits,
- history::VisitVector* visits));
- MOCK_METHOD2(UpdateURL, bool(history::URLID id, const history::URLRow& url));
- MOCK_METHOD3(AddVisits, bool(const GURL& url,
- const std::vector<history::VisitInfo>& visits,
- history::VisitSource visit_source));
- MOCK_METHOD2(GetURL, bool(const GURL& url_id, history::URLRow* url_row));
- MOCK_METHOD2(SetPageTitle, void(const GURL& url,
- const base::string16& title));
- MOCK_METHOD1(DeleteURL, void(const GURL& url));
-
- private:
- friend class ProfileSyncServiceTypedUrlTest;
-
- virtual ~HistoryBackendMock() {}
-};
-
-class HistoryServiceMock : public history::HistoryService {
- public:
- HistoryServiceMock() : history::HistoryService(), backend_(nullptr) {}
-
- base::CancelableTaskTracker::TaskId ScheduleDBTask(
- std::unique_ptr<history::HistoryDBTask> task,
- base::CancelableTaskTracker* tracker) override {
- // Explicitly copy out the raw pointer -- compilers might decide to
- // evaluate task.release() before the arguments for the first Bind().
- history::HistoryDBTask* task_raw = task.get();
- task_runner_->PostTaskAndReply(
- FROM_HERE,
- base::Bind(&HistoryServiceMock::RunTaskOnDBThread,
- base::Unretained(this), task_raw),
- base::Bind(&base::DeletePointer<history::HistoryDBTask>,
- task.release()));
- return base::CancelableTaskTracker::kBadTaskId; // unused
- }
-
- ~HistoryServiceMock() override {}
-
- void set_task_runner(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
- DCHECK(task_runner.get());
- task_runner_ = task_runner;
- }
-
- void set_backend(scoped_refptr<history::HistoryBackend> backend) {
- backend_ = backend;
- }
-
- private:
- void RunTaskOnDBThread(history::HistoryDBTask* task) {
- EXPECT_TRUE(task->RunOnDBThread(backend_.get(), NULL));
- }
-
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
- scoped_refptr<history::HistoryBackend> backend_;
-};
-
-class TestTypedUrlSyncableService : public TypedUrlSyncableService {
- // TODO(gangwu): remove TestProfileSyncService or even remove whole test
- // suite, and make sure typed_url_syncable_service_unittest.cc and the various
- // typed url integration tests.
- public:
- explicit TestTypedUrlSyncableService(history::HistoryBackend* history_backend)
- : TypedUrlSyncableService(history_backend) {}
-
- static void WriteToSyncNode(const history::URLRow& url,
- const history::VisitVector& visits,
- syncer::WriteNode* node) {
- sync_pb::TypedUrlSpecifics typed_url;
- WriteToTypedUrlSpecifics(url, visits, &typed_url);
- node->SetTypedUrlSpecifics(typed_url);
- }
-
- protected:
- // Don't clear error stats - that way we can verify their values in our
- // tests.
- void ClearErrorStats() override {}
-};
-
-class ProfileSyncServiceTypedUrlTest : public AbstractProfileSyncServiceTest {
- public:
- void AddTypedUrlSyncNode(const history::URLRow& url,
- const history::VisitVector& visits) {
- syncer::WriteTransaction trans(FROM_HERE, sync_service()->GetUserShare());
-
- syncer::WriteNode node(&trans);
- std::string tag = url.url().spec();
- syncer::WriteNode::InitUniqueByCreationResult result =
- node.InitUniqueByCreation(syncer::TYPED_URLS, tag);
- ASSERT_EQ(syncer::WriteNode::INIT_SUCCESS, result);
- TestTypedUrlSyncableService::WriteToSyncNode(url, visits, &node);
- }
-
- protected:
- ProfileSyncServiceTypedUrlTest() {
- profile_sync_service_bundle()
- ->pref_service()
- ->registry()
- ->RegisterBooleanPref(kDummySavingBrowserHistoryDisabled, false);
-
- data_type_thread()->Start();
- base::RunLoop run_loop;
- data_type_thread()->task_runner()->PostTaskAndReply(
- FROM_HERE,
- base::Bind(&ProfileSyncServiceTypedUrlTest::CreateHistoryService,
- base::Unretained(this)),
- run_loop.QuitClosure());
- run_loop.Run();
- history_service_ = base::WrapUnique(new HistoryServiceMock);
- history_service_->set_task_runner(data_type_thread()->task_runner());
- history_service_->set_backend(history_backend_);
-
- browser_sync::ProfileSyncServiceBundle::SyncClientBuilder builder(
- profile_sync_service_bundle());
- builder.SetHistoryService(history_service_.get());
- builder.SetSyncServiceCallback(GetSyncServiceCallback());
- builder.SetSyncableServiceCallback(
- base::Bind(&ProfileSyncServiceTypedUrlTest::GetSyncableServiceForType,
- base::Unretained(this)));
- builder.set_activate_model_creation();
- sync_client_ = builder.Build();
- }
-
- void CreateHistoryService() {
- history_backend_ = new HistoryBackendMock();
- syncable_service_ =
- base::MakeUnique<TestTypedUrlSyncableService>(history_backend_.get());
- }
-
- void DeleteSyncableService() {
- syncable_service_.reset();
- history_backend_ = nullptr;
- }
-
- ~ProfileSyncServiceTypedUrlTest() override {
- history_service_->Shutdown();
-
- // Request stop to get deletion tasks related to the HistoryService posted
- // on the Sync thread. It is important to not Shutdown at this moment,
- // because after shutdown the Sync thread is not returned to the sync
- // service, so we could not get the thread's message loop to wait for the
- // deletions to be finished.
- sync_service()->RequestStop(sync_driver::SyncService::CLEAR_DATA);
- // Spin the sync thread.
- {
- base::RunLoop run_loop;
- sync_service()->GetSyncLoopForTest()->task_runner()->PostTaskAndReply(
- FROM_HERE, base::Bind(&base::DoNothing), run_loop.QuitClosure());
- run_loop.Run();
- }
-
- // Spin the loop again for deletion tasks posted from the Sync thread.
- base::RunLoop().RunUntilIdle();
-
- {
- base::RunLoop run_loop;
- data_type_thread()->task_runner()->PostTaskAndReply(
- FROM_HERE,
- base::Bind(&ProfileSyncServiceTypedUrlTest::DeleteSyncableService,
- base::Unretained(this)),
- run_loop.QuitClosure());
- run_loop.Run();
- }
- }
-
- TypedUrlSyncableService* StartSyncService(const base::Closure& callback) {
- if (!sync_service()) {
- std::string account_id =
- profile_sync_service_bundle()->account_tracker()->SeedAccountInfo(
- "gaia_id", "test");
- SigninManagerBase* signin =
- profile_sync_service_bundle()->signin_manager();
- signin->SetAuthenticatedAccountInfo("gaia_id", "test");
- CreateSyncService(std::move(sync_client_), callback);
- EXPECT_CALL(*profile_sync_service_bundle()->component_factory(),
- CreateDataTypeManager(_, _, _, _, _))
- .WillOnce(ReturnNewDataTypeManager());
-
- profile_sync_service_bundle()->auth_service()->UpdateCredentials(
- account_id, "oauth2_login_token");
-
- sync_service()->RegisterDataTypeController(
- base::MakeUnique<TypedUrlDataTypeController>(
- base::Bind(&base::DoNothing), sync_service()->GetSyncClient(),
- kDummySavingBrowserHistoryDisabled));
-
- sync_service()->Initialize();
- base::RunLoop().Run();
- }
- return syncable_service_.get();
- }
-
- void GetTypedUrlsFromSyncDB(history::URLRows* urls) {
- urls->clear();
- syncer::ReadTransaction trans(FROM_HERE, sync_service()->GetUserShare());
- syncer::ReadNode typed_url_root(&trans);
- if (typed_url_root.InitTypeRoot(syncer::TYPED_URLS) !=
- syncer::BaseNode::INIT_OK)
- return;
-
- int64_t child_id = typed_url_root.GetFirstChildId();
- while (child_id != syncer::kInvalidId) {
- syncer::ReadNode child_node(&trans);
- if (child_node.InitByIdLookup(child_id) != syncer::BaseNode::INIT_OK)
- return;
-
- const sync_pb::TypedUrlSpecifics& typed_url(
- child_node.GetTypedUrlSpecifics());
- history::URLRow new_url(GURL(typed_url.url()));
-
- new_url.set_title(base::UTF8ToUTF16(typed_url.title()));
- DCHECK(typed_url.visits_size());
- DCHECK_EQ(typed_url.visits_size(), typed_url.visit_transitions_size());
- new_url.set_last_visit(base::Time::FromInternalValue(
- typed_url.visits(typed_url.visits_size() - 1)));
- new_url.set_hidden(typed_url.hidden());
-
- urls->push_back(new_url);
- child_id = child_node.GetSuccessorId();
- }
- }
-
- void SetIdleChangeProcessorExpectations() {
- EXPECT_CALL((history_backend()), SetPageTitle(_, _)).Times(0);
- EXPECT_CALL((history_backend()), UpdateURL(_, _)).Times(0);
- EXPECT_CALL((history_backend()), GetURL(_, _)).Times(0);
- EXPECT_CALL((history_backend()), DeleteURL(_)).Times(0);
- }
-
- void SendNotification(const base::Closure& task) {
- data_type_thread()->task_runner()->PostTaskAndReply(
- FROM_HERE, task,
- base::Bind(&base::MessageLoop::QuitNow,
- base::Unretained(base::MessageLoop::current())));
- base::RunLoop().Run();
- }
-
- void SendNotificationURLVisited(ui::PageTransition transition,
- const history::URLRow& row) {
- base::Time visit_time;
- history::RedirectList redirects;
- SendNotification(
- base::Bind(&HistoryBackendNotifier::NotifyURLVisited,
- base::Unretained(history_backend_.get()),
- transition,
- row,
- redirects,
- visit_time));
- }
-
- void SendNotificationURLsModified(const history::URLRows& rows) {
- SendNotification(base::Bind(&HistoryBackendNotifier::NotifyURLsModified,
- base::Unretained(history_backend_.get()),
- rows));
- }
-
- void SendNotificationURLsDeleted(bool all_history,
- bool expired,
- const history::URLRows& deleted_rows,
- const std::set<GURL>& favicon_urls) {
- SendNotification(base::Bind(&HistoryBackendNotifier::NotifyURLsDeleted,
- base::Unretained(history_backend_.get()),
- all_history, expired, deleted_rows,
- favicon_urls));
- }
-
- static bool URLsEqual(const history::URLRow& lhs,
- const history::URLRow& rhs) {
- // Only verify the fields we explicitly sync (i.e. don't verify typed_count
- // or visit_count because we rely on the history DB to manage those values
- // and they are left unchanged by HistoryBackendMock).
- return (lhs.url().spec().compare(rhs.url().spec()) == 0) &&
- (lhs.title().compare(rhs.title()) == 0) &&
- (lhs.last_visit() == rhs.last_visit()) &&
- (lhs.hidden() == rhs.hidden());
- }
-
- static history::URLRow MakeTypedUrlEntry(const char* url,
- const char* title,
- int typed_count,
- int64_t last_visit,
- bool hidden,
- history::VisitVector* visits) {
- // Give each URL a unique ID, to mimic the behavior of the real database.
- static int unique_url_id = 0;
- GURL gurl(url);
- history::URLRow history_url(gurl, ++unique_url_id);
- history_url.set_title(base::UTF8ToUTF16(title));
- history_url.set_typed_count(typed_count);
- history_url.set_last_visit(
- base::Time::FromInternalValue(last_visit));
- history_url.set_hidden(hidden);
- visits->push_back(history::VisitRow(
- history_url.id(), history_url.last_visit(), 0,
- ui::PAGE_TRANSITION_TYPED, 0));
- history_url.set_visit_count(visits->size());
- return history_url;
- }
-
- base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
- syncer::ModelType type) {
- DCHECK_EQ(syncer::TYPED_URLS, type);
- return syncable_service_->AsWeakPtr();
- }
-
- HistoryBackendMock& history_backend() { return *history_backend_.get(); }
-
- private:
- scoped_refptr<HistoryBackendMock> history_backend_;
- std::unique_ptr<HistoryServiceMock> history_service_;
- syncer::DataTypeErrorHandlerMock error_handler_;
- std::unique_ptr<TestTypedUrlSyncableService> syncable_service_;
- std::unique_ptr<sync_driver::FakeSyncClient> sync_client_;
-
- DISALLOW_COPY_AND_ASSIGN(ProfileSyncServiceTypedUrlTest);
-};
-
-void AddTypedUrlEntries(ProfileSyncServiceTypedUrlTest* test,
- const history::URLRows& entries) {
- test->CreateRoot(syncer::TYPED_URLS);
- for (size_t i = 0; i < entries.size(); ++i) {
- history::VisitVector visits;
- visits.push_back(history::VisitRow(
- entries[i].id(), entries[i].last_visit(), 0,
- ui::PageTransitionFromInt(0), 0));
- test->AddTypedUrlSyncNode(entries[i], visits);
- }
-}
-
-} // namespace
-
-TEST_F(ProfileSyncServiceTypedUrlTest, EmptyNativeEmptySync) {
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_)).WillOnce(Return(true));
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- TypedUrlSyncableService* syncable_service =
- StartSyncService(create_root.callback());
- history::URLRows sync_entries;
- GetTypedUrlsFromSyncDB(&sync_entries);
- EXPECT_EQ(0U, sync_entries.size());
- ASSERT_EQ(0, syncable_service->GetErrorPercentage());
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, HasNativeEmptySync) {
- history::URLRows entries;
- history::VisitVector visits;
- entries.push_back(MakeTypedUrlEntry("http://foo.com", "bar",
- 2, 15, false, &visits));
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(DoAll(SetArgumentPointee<2>(visits), Return(true)));
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- TypedUrlSyncableService* syncable_service =
- StartSyncService(create_root.callback());
- history::URLRows sync_entries;
- GetTypedUrlsFromSyncDB(&sync_entries);
- ASSERT_EQ(1U, sync_entries.size());
- EXPECT_TRUE(URLsEqual(entries[0], sync_entries[0]));
- ASSERT_EQ(0, syncable_service->GetErrorPercentage());
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, HasNativeErrorReadingVisits) {
- history::URLRows entries;
- history::VisitVector visits;
- history::URLRow native_entry1(MakeTypedUrlEntry("http://foo.com", "bar",
- 2, 15, false, &visits));
- history::URLRow native_entry2(MakeTypedUrlEntry("http://foo2.com", "bar",
- 3, 15, false, &visits));
- entries.push_back(native_entry1);
- entries.push_back(native_entry2);
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true)));
- // Return an error from GetMostRecentVisitsForURL() for the second URL.
- EXPECT_CALL((history_backend()),
- GetMostRecentVisitsForURL(native_entry1.id(), _, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL((history_backend()),
- GetMostRecentVisitsForURL(native_entry2.id(), _, _))
- .WillRepeatedly(Return(false));
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
- history::URLRows sync_entries;
- GetTypedUrlsFromSyncDB(&sync_entries);
- ASSERT_EQ(1U, sync_entries.size());
- EXPECT_TRUE(URLsEqual(native_entry1, sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, HasNativeWithBlankEmptySync) {
- std::vector<history::URLRow> entries;
- history::VisitVector visits;
- // Add an empty URL.
- entries.push_back(MakeTypedUrlEntry("", "bar",
- 2, 15, false, &visits));
- entries.push_back(MakeTypedUrlEntry("http://foo.com", "bar",
- 2, 15, false, &visits));
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(DoAll(SetArgumentPointee<2>(visits), Return(true)));
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
- std::vector<history::URLRow> sync_entries;
- GetTypedUrlsFromSyncDB(&sync_entries);
- // The empty URL should be ignored.
- ASSERT_EQ(1U, sync_entries.size());
- EXPECT_TRUE(URLsEqual(entries[1], sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, HasNativeHasSyncNoMerge) {
- history::VisitVector native_visits;
- history::VisitVector sync_visits;
- history::URLRow native_entry(MakeTypedUrlEntry("http://native.com", "entry",
- 2, 15, false, &native_visits));
- history::URLRow sync_entry(MakeTypedUrlEntry("http://sync.com", "entry",
- 3, 16, false, &sync_visits));
-
- history::URLRows native_entries;
- native_entries.push_back(native_entry);
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(native_visits), Return(true)));
- EXPECT_CALL((history_backend()), AddVisits(_, _, history::SOURCE_SYNCED))
- .WillRepeatedly(Return(true));
-
- history::URLRows sync_entries;
- sync_entries.push_back(sync_entry);
-
- EXPECT_CALL((history_backend()), UpdateURL(_, _))
- .WillRepeatedly(Return(true));
- StartSyncService(base::Bind(&AddTypedUrlEntries, this, sync_entries));
-
- std::map<std::string, history::URLRow> expected;
- expected[native_entry.url().spec()] = native_entry;
- expected[sync_entry.url().spec()] = sync_entry;
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- EXPECT_TRUE(new_sync_entries.size() == expected.size());
- for (history::URLRows::iterator entry = new_sync_entries.begin();
- entry != new_sync_entries.end(); ++entry) {
- EXPECT_TRUE(URLsEqual(expected[entry->url().spec()], *entry));
- }
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, EmptyNativeExpiredSync) {
- history::VisitVector sync_visits;
- history::URLRow sync_entry(MakeTypedUrlEntry("http://sync.com", "entry",
- 3, EXPIRED_VISIT, false,
- &sync_visits));
- history::URLRows sync_entries;
- sync_entries.push_back(sync_entry);
-
- // Since all our URLs are expired, no backend calls to add new URLs will be
- // made.
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_)).WillOnce(Return(true));
- SetIdleChangeProcessorExpectations();
-
- StartSyncService(base::Bind(&AddTypedUrlEntries, this, sync_entries));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, HasNativeHasSyncMerge) {
- history::VisitVector native_visits;
- history::URLRow native_entry(MakeTypedUrlEntry("http://native.com", "entry",
- 2, 15, false, &native_visits));
- history::VisitVector sync_visits;
- history::URLRow sync_entry(MakeTypedUrlEntry("http://native.com", "name",
- 1, 17, false, &sync_visits));
- history::VisitVector merged_visits;
- merged_visits.push_back(history::VisitRow(
- sync_entry.id(), base::Time::FromInternalValue(15), 0,
- ui::PageTransitionFromInt(0), 0));
-
- history::URLRow merged_entry(MakeTypedUrlEntry("http://native.com", "name",
- 2, 17, false, &merged_visits));
-
- history::URLRows native_entries;
- native_entries.push_back(native_entry);
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(native_visits), Return(true)));
- EXPECT_CALL((history_backend()), AddVisits(_, _, history::SOURCE_SYNCED))
- .WillRepeatedly(Return(true));
-
- history::URLRows sync_entries;
- sync_entries.push_back(sync_entry);
-
- EXPECT_CALL((history_backend()), UpdateURL(_, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL((history_backend()), SetPageTitle(_, _)).WillRepeatedly(Return());
- StartSyncService(base::Bind(&AddTypedUrlEntries, this, sync_entries));
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(merged_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, HasNativeWithErrorHasSyncMerge) {
- history::VisitVector native_visits;
- history::URLRow native_entry(MakeTypedUrlEntry("http://native.com", "native",
- 2, 15, false, &native_visits));
- history::VisitVector sync_visits;
- history::URLRow sync_entry(MakeTypedUrlEntry("http://native.com", "sync",
- 1, 17, false, &sync_visits));
-
- history::URLRows native_entries;
- native_entries.push_back(native_entry);
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true)));
- // Return an error getting the visits for the native URL.
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(Return(false));
- EXPECT_CALL((history_backend()), GetURL(_, _))
- .WillRepeatedly(DoAll(SetArgumentPointee<1>(native_entry), Return(true)));
- EXPECT_CALL((history_backend()), AddVisits(_, _, history::SOURCE_SYNCED))
- .WillRepeatedly(Return(true));
-
- history::URLRows sync_entries;
- sync_entries.push_back(sync_entry);
-
- EXPECT_CALL((history_backend()), UpdateURL(_, _))
- .WillRepeatedly(Return(true));
- EXPECT_CALL((history_backend()), SetPageTitle(_, _)).WillRepeatedly(Return());
- StartSyncService(base::Bind(&AddTypedUrlEntries, this, sync_entries));
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(sync_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeAdd) {
- history::VisitVector added_visits;
- history::URLRow added_entry(MakeTypedUrlEntry("http://added.com", "entry",
- 2, 15, false, &added_visits));
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_)).WillOnce(Return(true));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(added_visits), Return(true)));
-
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::URLRows changed_urls;
- changed_urls.push_back(added_entry);
- SendNotificationURLsModified(changed_urls);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(added_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeAddWithBlank) {
- history::VisitVector added_visits;
- history::URLRow empty_entry(MakeTypedUrlEntry("", "entry",
- 2, 15, false, &added_visits));
- history::URLRow added_entry(MakeTypedUrlEntry("http://added.com", "entry",
- 2, 15, false, &added_visits));
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_)).WillOnce(Return(true));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(DoAll(SetArgumentPointee<2>(added_visits), Return(true)));
-
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::URLRows changed_urls;
- changed_urls.push_back(empty_entry);
- changed_urls.push_back(added_entry);
- SendNotificationURLsModified(changed_urls);
-
- std::vector<history::URLRow> new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(added_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeUpdate) {
- history::VisitVector original_visits;
- history::URLRow original_entry(MakeTypedUrlEntry("http://mine.com", "entry",
- 2, 15, false,
- &original_visits));
- history::URLRows original_entries;
- original_entries.push_back(original_entry);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(original_visits), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::VisitVector updated_visits;
- history::URLRow updated_entry(MakeTypedUrlEntry("http://mine.com", "entry",
- 7, 17, false,
- &updated_visits));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(updated_visits), Return(true)));
-
- history::URLRows changed_urls;
- changed_urls.push_back(updated_entry);
- SendNotificationURLsModified(changed_urls);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(updated_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeAddFromVisit) {
- history::VisitVector added_visits;
- history::URLRow added_entry(MakeTypedUrlEntry("http://added.com", "entry",
- 2, 15, false, &added_visits));
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_)).WillOnce(Return(true));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(added_visits), Return(true)));
-
- SetIdleChangeProcessorExpectations();
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- SendNotificationURLVisited(ui::PAGE_TRANSITION_TYPED, added_entry);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(added_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeUpdateFromVisit) {
- history::VisitVector original_visits;
- history::URLRow original_entry(MakeTypedUrlEntry("http://mine.com", "entry",
- 2, 15, false,
- &original_visits));
- history::URLRows original_entries;
- original_entries.push_back(original_entry);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(original_visits), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::VisitVector updated_visits;
- history::URLRow updated_entry(MakeTypedUrlEntry("http://mine.com", "entry",
- 7, 17, false,
- &updated_visits));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(updated_visits), Return(true)));
-
- SendNotificationURLVisited(ui::PAGE_TRANSITION_TYPED, updated_entry);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(updated_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserIgnoreChangeUpdateFromVisit) {
- history::VisitVector original_visits;
- history::URLRow original_entry(MakeTypedUrlEntry("http://mine.com", "entry",
- 2, 15, false,
- &original_visits));
- history::URLRows original_entries;
- original_entries.push_back(original_entry);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(original_visits), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(original_entry, new_sync_entries[0]));
-
- history::VisitVector updated_visits;
- history::URLRow updated_entry(MakeTypedUrlEntry("http://mine.com", "entry",
- 7, 15, false,
- &updated_visits));
-
- // Should ignore this change because it's not TYPED.
- SendNotificationURLVisited(ui::PAGE_TRANSITION_RELOAD, updated_entry);
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- // Should be no changes to the sync DB from this notification.
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(original_entry, new_sync_entries[0]));
-
- // Now, try updating it with a large number of visits not divisible by 10
- // (should ignore this visit).
- history::URLRow twelve_visits(MakeTypedUrlEntry("http://mine.com", "entry",
- 12, 15, false,
- &updated_visits));
- SendNotificationURLVisited(ui::PAGE_TRANSITION_TYPED, twelve_visits);
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- // Should be no changes to the sync DB from this notification.
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(original_entry, new_sync_entries[0]));
-
- // Now, try updating it with a large number of visits that is divisible by 10
- // (should *not* be ignored).
- history::URLRow twenty_visits(MakeTypedUrlEntry("http://mine.com", "entry",
- 20, 15, false,
- &updated_visits));
- SendNotificationURLVisited(ui::PAGE_TRANSITION_TYPED, twenty_visits);
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(twenty_visits, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeRemove) {
- history::VisitVector original_visits1;
- history::URLRow original_entry1(MakeTypedUrlEntry("http://mine.com", "entry",
- 2, 15, false,
- &original_visits1));
- history::VisitVector original_visits2;
- history::URLRow original_entry2(MakeTypedUrlEntry("http://mine2.com",
- "entry2",
- 3, 15, false,
- &original_visits2));
- history::URLRows original_entries;
- original_entries.push_back(original_entry1);
- original_entries.push_back(original_entry2);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(original_visits1), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::URLRows rows;
- rows.push_back(history::URLRow(GURL("http://mine.com")));
- SendNotificationURLsDeleted(false, false, rows, std::set<GURL>());
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(original_entry2, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeRemoveExpired) {
- history::VisitVector original_visits1;
- history::URLRow original_entry1(MakeTypedUrlEntry("http://mine.com", "entry",
- 2, 15, false,
- &original_visits1));
- history::VisitVector original_visits2;
- history::URLRow original_entry2(MakeTypedUrlEntry("http://mine2.com",
- "entry2",
- 3, 15, false,
- &original_visits2));
- history::URLRows original_entries;
- original_entries.push_back(original_entry1);
- original_entries.push_back(original_entry2);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(original_visits1), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- // Setting expired=true should cause the sync code to ignore this deletion.
- history::URLRows rows;
- rows.push_back(history::URLRow(GURL("http://mine.com")));
- SendNotificationURLsDeleted(false, true, rows, std::set<GURL>());
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- // Both URLs should still be there.
- ASSERT_EQ(2U, new_sync_entries.size());
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, ProcessUserChangeRemoveAll) {
- history::VisitVector original_visits1;
- history::URLRow original_entry1(MakeTypedUrlEntry("http://mine.com", "entry",
- 2, 15, false,
- &original_visits1));
- history::VisitVector original_visits2;
- history::URLRow original_entry2(MakeTypedUrlEntry("http://mine2.com",
- "entry2",
- 3, 15, false,
- &original_visits2));
- history::URLRows original_entries;
- original_entries.push_back(original_entry1);
- original_entries.push_back(original_entry2);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(original_visits1), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(2U, new_sync_entries.size());
-
- SendNotificationURLsDeleted(true, false, history::URLRows(),
- std::set<GURL>());
-
- GetTypedUrlsFromSyncDB(&new_sync_entries);
- ASSERT_EQ(0U, new_sync_entries.size());
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, FailWriteToHistoryBackend) {
- history::VisitVector native_visits;
- history::VisitVector sync_visits;
- history::URLRow native_entry(MakeTypedUrlEntry("http://native.com", "entry",
- 2, 15, false, &native_visits));
- history::URLRow sync_entry(MakeTypedUrlEntry("http://sync.com", "entry",
- 3, 16, false, &sync_visits));
-
- history::URLRows native_entries;
- native_entries.push_back(native_entry);
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetURL(_, _))
- .WillOnce(DoAll(SetArgumentPointee<1>(native_entry), Return(false)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(native_visits), Return(true)));
- EXPECT_CALL((history_backend()), AddVisits(_, _, history::SOURCE_SYNCED))
- .WillRepeatedly(Return(false));
-
- history::URLRows sync_entries;
- sync_entries.push_back(sync_entry);
-
- EXPECT_CALL((history_backend()), UpdateURL(_, _))
- .WillRepeatedly(Return(false));
- TypedUrlSyncableService* syncable_service =
- StartSyncService(base::Bind(&AddTypedUrlEntries, this, sync_entries));
- // Errors writing to the DB should be recorded, but should not cause an
- // unrecoverable error.
- ASSERT_FALSE(sync_service()->data_type_status_table().GetFailedTypes().Has(
- syncer::TYPED_URLS));
- // Some calls should have succeeded, so the error percentage should be
- // somewhere > 0 and < 100.
- ASSERT_NE(0, syncable_service->GetErrorPercentage());
- ASSERT_NE(100, syncable_service->GetErrorPercentage());
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, FailToGetTypedURLs) {
- history::VisitVector native_visits;
- history::VisitVector sync_visits;
- history::URLRow native_entry(MakeTypedUrlEntry("http://native.com", "entry",
- 2, 15, false, &native_visits));
- history::URLRow sync_entry(MakeTypedUrlEntry("http://sync.com", "entry",
- 3, 16, false, &sync_visits));
-
- history::URLRows native_entries;
- native_entries.push_back(native_entry);
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillOnce(DoAll(SetArgumentPointee<0>(native_entries), Return(false)));
-
- history::URLRows sync_entries;
- sync_entries.push_back(sync_entry);
-
- StartSyncService(base::Bind(&AddTypedUrlEntries, this, sync_entries));
- // Errors getting typed URLs will cause an unrecoverable error (since we can
- // do *nothing* in that case).
- ASSERT_TRUE(sync_service()->data_type_status_table().GetFailedTypes().Has(
- syncer::TYPED_URLS));
- ASSERT_EQ(1u,
- sync_service()->data_type_status_table().GetFailedTypes().Size());
- // Can't check GetErrorPercentage(), because generating an unrecoverable
- // error will free the model associator.
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, IgnoreLocalFileURL) {
- history::VisitVector original_visits;
- // Create http and file url.
- history::URLRow url_entry(MakeTypedUrlEntry("http://yey.com",
- "yey", 12, 15, false,
- &original_visits));
- history::URLRow file_entry(MakeTypedUrlEntry("file:///kitty.jpg",
- "kitteh", 12, 15, false,
- &original_visits));
-
- history::URLRows original_entries;
- original_entries.push_back(url_entry);
- original_entries.push_back(file_entry);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(original_visits), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::VisitVector updated_visits;
- // Create updates for the previous urls + a new file one.
- history::URLRow updated_url_entry(MakeTypedUrlEntry("http://yey.com",
- "yey", 20, 15, false,
- &updated_visits));
- history::URLRow updated_file_entry(MakeTypedUrlEntry("file:///cat.jpg",
- "cat", 20, 15, false,
- &updated_visits));
- history::URLRow new_file_entry(MakeTypedUrlEntry("file:///dog.jpg",
- "dog", 20, 15, false,
- &updated_visits));
-
- history::URLRows changed_urls;
- changed_urls.push_back(updated_url_entry);
- changed_urls.push_back(updated_file_entry);
- changed_urls.push_back(new_file_entry);
- SendNotificationURLsModified(changed_urls);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- // We should ignore the local file urls (existing and updated),
- // and only be left with the updated http url.
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(updated_url_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, IgnoreLocalhostURL) {
- history::VisitVector original_visits;
- // Create http and localhost url.
- history::URLRow url_entry(MakeTypedUrlEntry("http://yey.com",
- "yey", 12, 15, false,
- &original_visits));
- history::URLRow localhost_entry(MakeTypedUrlEntry("http://localhost",
- "localhost", 12, 15, false,
- &original_visits));
-
- history::URLRows original_entries;
- original_entries.push_back(url_entry);
- original_entries.push_back(localhost_entry);
-
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<0>(original_entries), Return(true)));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(
- DoAll(SetArgumentPointee<2>(original_visits), Return(true)));
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::VisitVector updated_visits;
- // Update the previous entries and add a new localhost.
- history::URLRow updated_url_entry(MakeTypedUrlEntry("http://yey.com",
- "yey", 20, 15, false,
- &updated_visits));
- history::URLRow updated_localhost_entry(MakeTypedUrlEntry(
- "http://localhost:80",
- "localhost", 20, 15, false,
- &original_visits));
- history::URLRow localhost_ip_entry(MakeTypedUrlEntry("http://127.0.0.1",
- "localhost", 12, 15, false,
- &original_visits));
-
- history::URLRows changed_urls;
- changed_urls.push_back(updated_url_entry);
- changed_urls.push_back(updated_localhost_entry);
- changed_urls.push_back(localhost_ip_entry);
- SendNotificationURLsModified(changed_urls);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- // We should ignore the localhost urls and left only with http url.
- ASSERT_EQ(1U, new_sync_entries.size());
- EXPECT_TRUE(URLsEqual(updated_url_entry, new_sync_entries[0]));
-}
-
-TEST_F(ProfileSyncServiceTypedUrlTest, IgnoreModificationWithoutValidVisit) {
- EXPECT_CALL((history_backend()), GetAllTypedURLs(_))
- .WillRepeatedly(Return(true));
- EXPECT_CALL((history_backend()), GetMostRecentVisitsForURL(_, _, _))
- .WillRepeatedly(Return(true));
-
- CreateRootHelper create_root(this, syncer::TYPED_URLS);
- StartSyncService(create_root.callback());
-
- history::VisitVector updated_visits;
- history::URLRow updated_url_entry(MakeTypedUrlEntry("http://yey.com",
- "yey", 20, 0, false,
- &updated_visits));
-
- history::URLRows changed_urls;
- changed_urls.push_back(updated_url_entry);
- SendNotificationURLsModified(changed_urls);
-
- history::URLRows new_sync_entries;
- GetTypedUrlsFromSyncDB(&new_sync_entries);
-
- // The change should be ignored.
- ASSERT_EQ(0U, new_sync_entries.size());
-}

Powered by Google App Engine
This is Rietveld 408576698