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()); |
-} |