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

Unified Diff: chrome/browser/sync/test_profile_sync_service.cc

Issue 3913005: sync: enable password sync by default. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/debug
Patch Set: fix mac again Created 10 years, 2 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
« no previous file with comments | « chrome/browser/sync/test_profile_sync_service.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/test_profile_sync_service.cc
diff --git a/chrome/browser/sync/test_profile_sync_service.cc b/chrome/browser/sync/test_profile_sync_service.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1ef298f11195db6ed39655880e9e512b66769929
--- /dev/null
+++ b/chrome/browser/sync/test_profile_sync_service.cc
@@ -0,0 +1,181 @@
+// Copyright (c) 2010 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 "chrome/browser/sync/test_profile_sync_service.h"
+#include "chrome/browser/sync/abstract_profile_sync_service_test.h"
+
+namespace browser_sync {
+
+SyncBackendHostForProfileSyncTest::SyncBackendHostForProfileSyncTest(
+ TestProfileSyncService* service,
+ Profile* profile,
+ const FilePath& profile_path,
+ const DataTypeController::TypeMap& data_type_controllers,
+ Task* initial_condition_setup_task,
+ int num_expected_resumes,
+ int num_expected_pauses,
+ bool set_initial_sync_ended_on_init,
+ bool synchronous_init)
+ : browser_sync::SyncBackendHost(service, profile, profile_path,
+ data_type_controllers),
+ initial_condition_setup_task_(initial_condition_setup_task),
+ set_initial_sync_ended_on_init_(set_initial_sync_ended_on_init),
+ synchronous_init_(synchronous_init),
+ test_service_(service) {
+ // By default, the RequestPause and RequestResume methods will
+ // send the confirmation notification and return true.
+ ON_CALL(*this, RequestPause()).
+ WillByDefault(testing::DoAll(CallOnPaused(core_),
+ testing::Return(true)));
+ ON_CALL(*this, RequestResume()).
+ WillByDefault(testing::DoAll(CallOnResumed(core_),
+ testing::Return(true)));
+ ON_CALL(*this, RequestNudge()).WillByDefault(testing::Invoke(this,
+ &SyncBackendHostForProfileSyncTest::
+ SimulateSyncCycleCompletedInitialSyncEnded));
+
+ EXPECT_CALL(*this, RequestPause()).Times(num_expected_pauses);
+ EXPECT_CALL(*this, RequestResume()).Times(num_expected_resumes);
+ EXPECT_CALL(*this, RequestNudge()).
+ Times(set_initial_sync_ended_on_init ? 0 : 1);
+}
+
+void SyncBackendHostForProfileSyncTest::SetInitialSyncEndedForEnabledTypes() {
+ UserShare* user_share = core_->syncapi()->GetUserShare();
+ DirectoryManager* dir_manager = user_share->dir_manager.get();
+
+ ScopedDirLookup dir(dir_manager, user_share->name);
+ if (!dir.good())
+ FAIL();
+
+ ModelSafeRoutingInfo enabled_types;
+ GetModelSafeRoutingInfo(&enabled_types);
+ for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin();
+ i != enabled_types.end(); ++i) {
+ dir->set_initial_sync_ended_for_type(i->first, true);
+ }
+}
+
+void SyncBackendHostForProfileSyncTest::
+ HandleInitializationCompletedOnFrontendLoop() {
+ set_syncapi_initialized(); // Need to do this asap so task below works.
+
+ // Set up any nodes the test wants around before model association.
+ if (initial_condition_setup_task_) {
+ initial_condition_setup_task_->Run();
+ }
+
+ // Pretend we downloaded initial updates and set initial sync ended bits
+ // if we were asked to.
+ if (set_initial_sync_ended_on_init_) {
+ UserShare* user_share = core_->syncapi()->GetUserShare();
+ DirectoryManager* dir_manager = user_share->dir_manager.get();
+
+ ScopedDirLookup dir(dir_manager, user_share->name);
+ if (!dir.good())
+ FAIL();
+
+ // Do this check as some tests load from storage and we don't want to add
+ // twice.
+ // TODO(tim): This is madness. Too much test setup code!
+ if (!dir->initial_sync_ended_for_type(syncable::NIGORI)) {
+ ProfileSyncServiceTestHelper::CreateRoot(
+ syncable::NIGORI, test_service_, test_service_->id_factory());
+ }
+
+ SetInitialSyncEndedForEnabledTypes();
+ }
+
+ SyncBackendHost::HandleInitializationCompletedOnFrontendLoop();
+}
+
+// Called when a nudge comes in.
+void SyncBackendHostForProfileSyncTest::
+ SimulateSyncCycleCompletedInitialSyncEnded() {
+ syncable::ModelTypeBitSet sync_ended;
+ ModelSafeRoutingInfo enabled_types;
+ GetModelSafeRoutingInfo(&enabled_types);
+ for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin();
+ i != enabled_types.end(); ++i) {
+ sync_ended.set(i->first);
+ }
+ core_->HandleSyncCycleCompletedOnFrontendLoop(new SyncSessionSnapshot(
+ SyncerStatus(), ErrorCounters(), 0, 0, false,
+ sync_ended, false, false, 0, 0, false));
+}
+
+void SyncBackendHostForProfileSyncTest::InitCore(
+ const Core::DoInitializeOptions& options) {
+ std::wstring user = L"testuser";
+ core_loop()->PostTask(FROM_HERE,
+ NewRunnableMethod(core_.get(),
+ &SyncBackendHost::Core::DoInitializeForTest,
+ user,
+ options.http_bridge_factory,
+ options.delete_sync_data_folder));
+
+ // TODO(akalin): Figure out a better way to do this.
+ if (synchronous_init_) {
+ // The SyncBackend posts a task to the current loop when
+ // initialization completes.
+ MessageLoop::current()->Run();
+ }
+}
+
+void SyncBackendHostForProfileSyncTest::
+ SetDefaultExpectationsForWorkerCreation(ProfileMock* profile) {
+ EXPECT_CALL(*profile, GetPasswordStore(testing::_)).
+ WillOnce(testing::Return((PasswordStore*)NULL));
+ EXPECT_CALL(*profile, GetHistoryService(testing::_)).
+ WillOnce(testing::Return((HistoryService*)NULL));
+}
+
+} // namespace browser_sync
+
+TestProfileSyncService::TestProfileSyncService(ProfileSyncFactory* factory,
+ Profile* profile,
+ const std::string& test_user,
+ bool synchronous_backend_initialization,
+ Task* initial_condition_setup_task)
+ : ProfileSyncService(factory, profile,
+ !test_user.empty() ?
+ test_user : ""),
+ synchronous_backend_initialization_(
+ synchronous_backend_initialization),
+ synchronous_sync_configuration_(false),
+ num_expected_resumes_(1),
+ num_expected_pauses_(1),
+ initial_condition_setup_task_(initial_condition_setup_task),
+ set_initial_sync_ended_on_init_(true) {
+ RegisterPreferences();
+ SetSyncSetupCompleted();
+}
+
+void TestProfileSyncService::CreateBackend() {
+ backend_.reset(new browser_sync::SyncBackendHostForProfileSyncTest(
+ this, profile(),
+ profile()->GetPath(), data_type_controllers(),
+ initial_condition_setup_task_.release(),
+ num_expected_resumes_, num_expected_pauses_,
+ set_initial_sync_ended_on_init_,
+ synchronous_backend_initialization_));
+}
+
+void TestProfileSyncService::OnBackendInitialized() {
+ ProfileSyncService::OnBackendInitialized();
+ // TODO(akalin): Figure out a better way to do this.
+ if (synchronous_backend_initialization_) {
+ MessageLoop::current()->Quit();
+ }
+}
+
+void TestProfileSyncService::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ ProfileSyncService::Observe(type, source, details);
+ if (type == NotificationType::SYNC_CONFIGURE_DONE &&
+ !synchronous_sync_configuration_) {
+ MessageLoop::current()->Quit();
+ }
+}
« no previous file with comments | « chrome/browser/sync/test_profile_sync_service.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698