summaryrefslogtreecommitdiffstats
path: root/sync
diff options
context:
space:
mode:
authorzea <zea@chromium.org>2016-02-24 12:41:48 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-24 20:42:45 +0000
commit32a7684cf7c1173c11ab012591c8cca2d31df52a (patch)
tree7901fd9480b2114ddbb8fed5e48ef61ddaf9bd4f /sync
parenta03e8479b8c2e203d7306817d2f1330132000d8f (diff)
downloadchromium_src-32a7684cf7c1173c11ab012591c8cca2d31df52a.zip
chromium_src-32a7684cf7c1173c11ab012591c8cca2d31df52a.tar.gz
chromium_src-32a7684cf7c1173c11ab012591c8cca2d31df52a.tar.bz2
[Sync] Remove backup/rollback logic from Sync
BUG=586596 Review URL: https://codereview.chromium.org/1703173002 Cr-Commit-Position: refs/heads/master@{#377370}
Diffstat (limited to 'sync')
-rw-r--r--sync/BUILD.gn12
-rw-r--r--sync/engine/sync_scheduler_impl.cc1
-rw-r--r--sync/engine/syncer_proto_util.cc6
-rw-r--r--sync/internal_api/internal_components_factory_impl.cc5
-rw-r--r--sync/internal_api/public/configure_reason.h3
-rw-r--r--sync/internal_api/public/internal_components_factory.h3
-rw-r--r--sync/internal_api/public/shutdown_reason.h2
-rw-r--r--sync/internal_api/public/sync_manager_factory.h11
-rw-r--r--sync/internal_api/sync_backup_manager.cc151
-rw-r--r--sync/internal_api/sync_backup_manager.h70
-rw-r--r--sync/internal_api/sync_backup_manager_unittest.cc185
-rw-r--r--sync/internal_api/sync_manager_factory.cc18
-rw-r--r--sync/internal_api/sync_rollback_manager.cc128
-rw-r--r--sync/internal_api/sync_rollback_manager.h52
-rw-r--r--sync/internal_api/sync_rollback_manager_base.cc329
-rw-r--r--sync/internal_api/sync_rollback_manager_base.h149
-rw-r--r--sync/internal_api/sync_rollback_manager_base_unittest.cc84
-rw-r--r--sync/internal_api/sync_rollback_manager_unittest.cc269
-rw-r--r--sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc6
-rw-r--r--sync/internal_api/test/test_internal_components_factory.cc5
-rw-r--r--sync/protocol/device_info_specifics.proto3
-rw-r--r--sync/protocol/proto_enum_conversions.cc2
-rw-r--r--sync/protocol/proto_value_conversions.cc5
-rw-r--r--sync/protocol/sync_enums.proto2
-rw-r--r--sync/protocol/sync_protocol_error.cc3
-rw-r--r--sync/protocol/sync_protocol_error.h10
-rw-r--r--sync/sync.gyp8
-rw-r--r--sync/sync_tests.gypi4
-rw-r--r--sync/syncable/deferred_on_disk_directory_backing_store.cc72
-rw-r--r--sync/syncable/deferred_on_disk_directory_backing_store.h49
-rw-r--r--sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc117
-rw-r--r--sync/tools/sync_client.cc2
32 files changed, 11 insertions, 1755 deletions
diff --git a/sync/BUILD.gn b/sync/BUILD.gn
index dfa0fae..f28fee8 100644
--- a/sync/BUILD.gn
+++ b/sync/BUILD.gn
@@ -297,8 +297,6 @@ source_set("sync_core") {
"internal_api/read_node.cc",
"internal_api/read_transaction.cc",
"internal_api/shared_model_type_processor.cc",
- "internal_api/sync_backup_manager.cc",
- "internal_api/sync_backup_manager.h",
"internal_api/sync_context.cc",
"internal_api/sync_context_proxy.cc",
"internal_api/sync_context_proxy_impl.cc",
@@ -309,10 +307,6 @@ source_set("sync_core") {
"internal_api/sync_manager_factory.cc",
"internal_api/sync_manager_impl.cc",
"internal_api/sync_manager_impl.h",
- "internal_api/sync_rollback_manager.cc",
- "internal_api/sync_rollback_manager.h",
- "internal_api/sync_rollback_manager_base.cc",
- "internal_api/sync_rollback_manager_base.h",
"internal_api/syncapi_internal.cc",
"internal_api/syncapi_internal.h",
"internal_api/syncapi_server_connection_manager.cc",
@@ -348,8 +342,6 @@ source_set("sync_core") {
"sessions/sync_session.h",
"sessions/sync_session_context.cc",
"sessions/sync_session_context.h",
- "syncable/deferred_on_disk_directory_backing_store.cc",
- "syncable/deferred_on_disk_directory_backing_store.h",
"syncable/dir_open_result.h",
"syncable/directory.cc",
"syncable/directory.h",
@@ -666,12 +658,9 @@ test("sync_unit_tests") {
"internal_api/public/util/proto_value_ptr_unittest.cc",
"internal_api/public/util/weak_handle_unittest.cc",
"internal_api/shared_model_type_processor_unittest.cc",
- "internal_api/sync_backup_manager_unittest.cc",
"internal_api/sync_context_proxy_impl_unittest.cc",
"internal_api/sync_encryption_handler_impl_unittest.cc",
"internal_api/sync_manager_impl_unittest.cc",
- "internal_api/sync_rollback_manager_base_unittest.cc",
- "internal_api/sync_rollback_manager_unittest.cc",
"internal_api/syncapi_server_connection_manager_unittest.cc",
"js/js_event_details_unittest.cc",
"js/sync_js_controller_unittest.cc",
@@ -680,7 +669,6 @@ test("sync_unit_tests") {
"sessions/model_type_registry_unittest.cc",
"sessions/nudge_tracker_unittest.cc",
"sessions/status_controller_unittest.cc",
- "syncable/deferred_on_disk_directory_backing_store_unittest.cc",
"syncable/directory_backing_store_unittest.cc",
"syncable/directory_unittest.cc",
"syncable/directory_unittest.h",
diff --git a/sync/engine/sync_scheduler_impl.cc b/sync/engine/sync_scheduler_impl.cc
index f126473..cc5e4a7 100644
--- a/sync/engine/sync_scheduler_impl.cc
+++ b/sync/engine/sync_scheduler_impl.cc
@@ -58,7 +58,6 @@ bool ShouldRequestEarlyExit(const SyncProtocolError& error) {
case CLIENT_DATA_OBSOLETE:
case CLEAR_PENDING:
case DISABLED_BY_ADMIN:
- case USER_ROLLBACK:
// If we send terminate sync early then |sync_cycle_ended| notification
// would not be sent. If there were no actions then |ACTIONABLE_ERROR|
// notification wouldnt be sent either. Then the UI layer would be left
diff --git a/sync/engine/syncer_proto_util.cc b/sync/engine/syncer_proto_util.cc
index 306137b..66c4013 100644
--- a/sync/engine/syncer_proto_util.cc
+++ b/sync/engine/syncer_proto_util.cc
@@ -124,8 +124,6 @@ SyncProtocolErrorType PBErrorTypeToSyncProtocolErrorType(
return MIGRATION_DONE;
case sync_pb::SyncEnums::DISABLED_BY_ADMIN:
return DISABLED_BY_ADMIN;
- case sync_pb::SyncEnums::USER_ROLLBACK:
- return USER_ROLLBACK;
case sync_pb::SyncEnums::PARTIAL_FAILURE:
return PARTIAL_FAILURE;
case sync_pb::SyncEnums::CLIENT_DATA_OBSOLETE:
@@ -193,8 +191,6 @@ SyncProtocolError ErrorCodeToSyncProtocolError(
error.action = RESET_LOCAL_SYNC_DATA;
} else if (error_type == sync_pb::SyncEnums::DISABLED_BY_ADMIN) {
error.action = STOP_SYNC_FOR_DISABLED_ACCOUNT;
- } else if (error_type == sync_pb::SyncEnums::USER_ROLLBACK) {
- error.action = DISABLE_SYNC_AND_ROLLBACK;
} // There is no other action we can compute for legacy server.
return error;
}
@@ -498,8 +494,6 @@ SyncerError SyncerProtoUtil::PostClientToServerMessage(
return SERVER_RETURN_NOT_MY_BIRTHDAY;
case DISABLED_BY_ADMIN:
return SERVER_RETURN_DISABLED_BY_ADMIN;
- case USER_ROLLBACK:
- return SERVER_RETURN_USER_ROLLBACK;
case PARTIAL_FAILURE:
// This only happens when partial throttling during GetUpdates.
if (!sync_protocol_error.error_data_types.Empty()) {
diff --git a/sync/internal_api/internal_components_factory_impl.cc b/sync/internal_api/internal_components_factory_impl.cc
index 4f2f32e..65fcfaf 100644
--- a/sync/internal_api/internal_components_factory_impl.cc
+++ b/sync/internal_api/internal_components_factory_impl.cc
@@ -11,7 +11,6 @@
#include "sync/engine/syncer.h"
#include "sync/engine/sync_scheduler_impl.h"
#include "sync/sessions/sync_session_context.h"
-#include "sync/syncable/deferred_on_disk_directory_backing_store.h"
#include "sync/syncable/on_disk_directory_backing_store.h"
using base::TimeDelta;
@@ -68,10 +67,6 @@ InternalComponentsFactoryImpl::BuildDirectoryBackingStore(
if (storage == STORAGE_ON_DISK) {
return scoped_ptr<syncable::DirectoryBackingStore>(
new syncable::OnDiskDirectoryBackingStore(dir_name, backing_filepath));
- } else if (storage == STORAGE_ON_DISK_DEFERRED) {
- return scoped_ptr<syncable::DirectoryBackingStore>(
- new syncable::DeferredOnDiskDirectoryBackingStore(dir_name,
- backing_filepath));
} else {
NOTREACHED();
return scoped_ptr<syncable::DirectoryBackingStore>();
diff --git a/sync/internal_api/public/configure_reason.h b/sync/internal_api/public/configure_reason.h
index 8fbbc4e..4d015b9 100644
--- a/sync/internal_api/public/configure_reason.h
+++ b/sync/internal_api/public/configure_reason.h
@@ -33,9 +33,6 @@ enum ConfigureReason {
// cryptographer errors/resolutions.
CONFIGURE_REASON_CRYPTO,
- // Configure data types for backup/rollback.
- CONFIGURE_REASON_BACKUP_ROLLBACK,
-
// The client is configuring because of a programmatic type enable/disable,
// such as when an error is encountered/resolved.
CONFIGURE_REASON_PROGRAMMATIC,
diff --git a/sync/internal_api/public/internal_components_factory.h b/sync/internal_api/public/internal_components_factory.h
index f077af0..fee9bec 100644
--- a/sync/internal_api/public/internal_components_factory.h
+++ b/sync/internal_api/public/internal_components_factory.h
@@ -80,9 +80,6 @@ class SYNC_EXPORT InternalComponentsFactory {
// Use this if you want BuildDirectoryBackingStore to create/use a real
// on disk store.
STORAGE_ON_DISK,
- // Use this to defer creating on-disk database until
- // DirectoryBackingStore::SaveChanges() is called.
- STORAGE_ON_DISK_DEFERRED,
// Use this to test the case where a directory fails to load.
STORAGE_INVALID
};
diff --git a/sync/internal_api/public/shutdown_reason.h b/sync/internal_api/public/shutdown_reason.h
index f913eec..604dc0e 100644
--- a/sync/internal_api/public/shutdown_reason.h
+++ b/sync/internal_api/public/shutdown_reason.h
@@ -14,8 +14,6 @@ enum ShutdownReason {
STOP_SYNC, // Sync is asked to stop, e.g. due to scarce resource.
DISABLE_SYNC, // Sync is disabled, e.g. user sign out, dashboard clear.
BROWSER_SHUTDOWN, // Browser is closed.
- SWITCH_MODE_SYNC, // Engine is shut down and a new engine will start in
- // sync mode.
};
} // namespace syncer
diff --git a/sync/internal_api/public/sync_manager_factory.h b/sync/internal_api/public/sync_manager_factory.h
index ef6ee6b..feb9e8b 100644
--- a/sync/internal_api/public/sync_manager_factory.h
+++ b/sync/internal_api/public/sync_manager_factory.h
@@ -15,22 +15,15 @@ namespace syncer {
class SyncManager;
-// Helper class to allow dependency injection of the SyncManager.
+// Helper class to allow dependency injection of the SyncManager in tests.
class SYNC_EXPORT SyncManagerFactory {
public:
- enum MANAGER_TYPE {
- NORMAL, // Normal sync manager
- BACKUP, // Backup sync manager
- ROLLBACK, // Rollback sync manager
- };
-
- explicit SyncManagerFactory(MANAGER_TYPE type);
+ SyncManagerFactory();
virtual ~SyncManagerFactory();
virtual scoped_ptr<SyncManager> CreateSyncManager(const std::string& name);
private:
- MANAGER_TYPE type_;
DISALLOW_COPY_AND_ASSIGN(SyncManagerFactory);
};
diff --git a/sync/internal_api/sync_backup_manager.cc b/sync/internal_api/sync_backup_manager.cc
deleted file mode 100644
index 9151e52..0000000
--- a/sync/internal_api/sync_backup_manager.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2014 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 "sync/internal_api/sync_backup_manager.h"
-
-#include <stdint.h>
-
-#include <vector>
-
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/syncable/directory.h"
-#include "sync/syncable/mutable_entry.h"
-#include "url/gurl.h"
-
-namespace syncer {
-
-SyncBackupManager::SyncBackupManager()
- : in_normalization_(false) {
-}
-
-SyncBackupManager::~SyncBackupManager() {
-}
-
-void SyncBackupManager::Init(InitArgs* args) {
- if (SyncRollbackManagerBase::InitInternal(
- args->database_location,
- args->internal_components_factory.get(),
- InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED,
- args->unrecoverable_error_handler,
- args->report_unrecoverable_error_function)) {
- GetUserShare()->directory->CollectMetaHandleCounts(
- &status_.num_entries_by_type, &status_.num_to_delete_entries_by_type);
-
- HideSyncPreference(PRIORITY_PREFERENCES);
- HideSyncPreference(PREFERENCES);
- }
-}
-
-void SyncBackupManager::SaveChanges() {
- if (initialized())
- NormalizeEntries();
-}
-
-SyncStatus SyncBackupManager::GetDetailedStatus() const {
- return status_;
-}
-
-ModelTypeSet SyncBackupManager::HandleTransactionEndingChangeEvent(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans) {
- ModelTypeSet types;
- if (in_normalization_) {
- // Skip if in our own WriteTransaction from NormalizeEntries().
- in_normalization_ = false;
- return types;
- }
-
- for (syncable::EntryKernelMutationMap::const_iterator it =
- write_transaction_info.Get().mutations.Get().begin();
- it != write_transaction_info.Get().mutations.Get().end(); ++it) {
- int64_t id = it->first;
- if (unsynced_.find(id) == unsynced_.end()) {
- unsynced_.insert(id);
-
- const syncable::EntryKernel& e = it->second.mutated;
- ModelType type = e.GetModelType();
- types.Put(type);
- if (!e.ref(syncable::ID).ServerKnows())
- status_.num_entries_by_type[type]++;
- if (e.ref(syncable::IS_DEL))
- status_.num_to_delete_entries_by_type[type]++;
- }
- }
- return types;
-}
-
-void SyncBackupManager::NormalizeEntries() {
- WriteTransaction trans(FROM_HERE, GetUserShare());
- in_normalization_ = true;
- for (std::set<int64_t>::const_iterator it = unsynced_.begin();
- it != unsynced_.end(); ++it) {
- syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
- syncable::GET_BY_HANDLE, *it);
- CHECK(entry.good());
-
- if (!entry.GetId().ServerKnows())
- entry.PutId(syncable::Id::CreateFromServerId(entry.GetId().value()));
- if (!entry.GetParentId().IsNull() && !entry.GetParentId().ServerKnows()) {
- entry.PutParentIdPropertyOnly(syncable::Id::CreateFromServerId(
- entry.GetParentId().value()));
- }
- entry.PutBaseVersion(1);
- entry.PutIsUnsynced(false);
- }
- unsynced_.clear();
-}
-
-void SyncBackupManager::HideSyncPreference(ModelType type) {
- WriteTransaction trans(FROM_HERE, GetUserShare());
- ReadNode pref_root(&trans);
- if (BaseNode::INIT_OK != pref_root.InitTypeRoot(type))
- return;
-
- std::vector<int64_t> pref_ids;
- pref_root.GetChildIds(&pref_ids);
- for (uint32_t i = 0; i < pref_ids.size(); ++i) {
- syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
- syncable::GET_BY_HANDLE, pref_ids[i]);
- if (entry.good()) {
- // HACKY: Set IS_DEL to true to remove entry from parent-children
- // index so that it's not returned when syncable service asks
- // for sync data. Syncable service then creates entry for local
- // model. Then the existing entry is undeleted and set to local value
- // because it has the same unique client tag.
- entry.PutIsDel(true);
- entry.PutIsUnsynced(false);
-
- // Don't persist on disk so that if backup is aborted before receiving
- // local preference values, values in sync DB are saved.
- GetUserShare()->directory->UnmarkDirtyEntry(
- trans.GetWrappedWriteTrans(), &entry);
- }
- }
-}
-
-void SyncBackupManager::ShutdownOnSyncThread(ShutdownReason reason) {
- if (reason == SWITCH_MODE_SYNC) {
- NormalizeEntries();
- GetUserShare()->directory->SaveChanges();
- }
-
- SyncRollbackManagerBase::ShutdownOnSyncThread(reason);
-}
-
-void SyncBackupManager::RegisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) {}
-
-void SyncBackupManager::UnregisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) {}
-
-bool SyncBackupManager::HasDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) { return false; }
-
-void SyncBackupManager::RequestEmitDebugInfo() {}
-
-void SyncBackupManager::ClearServerData(
- const ClearServerDataCallback& callback) {}
-
-} // namespace syncer
diff --git a/sync/internal_api/sync_backup_manager.h b/sync/internal_api/sync_backup_manager.h
deleted file mode 100644
index e7e50fa..0000000
--- a/sync/internal_api/sync_backup_manager.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_
-#define SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_
-
-#include <stdint.h>
-
-#include <set>
-
-#include "base/macros.h"
-#include "sync/internal_api/sync_rollback_manager_base.h"
-#include "url/gurl.h"
-
-namespace syncer {
-
-// SyncBackupManager runs before user signs in to sync to back up user's data
-// before sync starts. The data that's backed up can be used to restore user's
-// settings to pre-sync state.
-class SYNC_EXPORT SyncBackupManager : public SyncRollbackManagerBase {
- public:
- SyncBackupManager();
- ~SyncBackupManager() override;
-
- // SyncManager implementation.
- void Init(InitArgs* args) override;
- void SaveChanges() override;
- SyncStatus GetDetailedStatus() const override;
- void ShutdownOnSyncThread(ShutdownReason reason) override;
-
- // DirectoryChangeDelegate implementation.
- ModelTypeSet HandleTransactionEndingChangeEvent(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans) override;
-
- void RegisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) override;
- void UnregisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) override;
- bool HasDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) override;
- void RequestEmitDebugInfo() override;
- void ClearServerData(const ClearServerDataCallback& callback) override;
-
- private:
- // Replaces local IDs with server IDs and clear unsynced bit of modified
- // entries.
- void NormalizeEntries();
-
- // Manipulate preference nodes so that they'll be overwritten by local
- // preference values during model association, i.e. local wins instead of
- // server wins. This is for preventing backup from changing preferences in
- // case backup DB has hijacked preferences.
- void HideSyncPreference(ModelType pref_type);
-
- // Handles of unsynced entries caused by local model changes.
- std::set<int64_t> unsynced_;
-
- // True if NormalizeEntries() is being called.
- bool in_normalization_;
-
- SyncStatus status_;
-
- DISALLOW_COPY_AND_ASSIGN(SyncBackupManager);
-};
-
-} // namespace syncer
-
-#endif // SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_
diff --git a/sync/internal_api/sync_backup_manager_unittest.cc b/sync/internal_api/sync_backup_manager_unittest.cc
deleted file mode 100644
index 919356d..0000000
--- a/sync/internal_api/sync_backup_manager_unittest.cc
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright 2014 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 "sync/internal_api/sync_backup_manager.h"
-
-#include <string>
-
-#include "base/files/scoped_temp_dir.h"
-#include "base/run_loop.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/sessions/sync_session_snapshot.h"
-#include "sync/internal_api/public/test/test_internal_components_factory.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/syncable/entry.h"
-#include "sync/test/test_directory_backing_store.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-using ::testing::_;
-using ::testing::Invoke;
-using ::testing::WithArgs;
-
-namespace syncer {
-
-namespace {
-
-void OnConfigDone(bool success) {
- EXPECT_TRUE(success);
-}
-
-class SyncBackupManagerTest : public syncer::SyncManager::Observer,
- public testing::Test {
- public:
- MOCK_METHOD1(OnSyncCycleCompleted,
- void(const sessions::SyncSessionSnapshot&));
- MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus));
- MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&));
- MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet));
- MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&));
- MOCK_METHOD4(OnInitializationComplete,
- void(const WeakHandle<JsBackend>&,
- const WeakHandle<DataTypeDebugInfoListener>&,
- bool, ModelTypeSet));
-
- protected:
- void SetUp() override {
- CHECK(temp_dir_.CreateUniqueTempDir());
- }
-
- void InitManager(SyncManager* manager,
- InternalComponentsFactory::StorageOption storage_option) {
- manager_ = manager;
- EXPECT_CALL(*this, OnInitializationComplete(_, _, _, _))
- .WillOnce(WithArgs<2>(Invoke(this,
- &SyncBackupManagerTest::HandleInit)));
-
- manager->AddObserver(this);
-
- base::RunLoop run_loop;
-
- SyncManager::InitArgs args;
- args.database_location = temp_dir_.path();
- args.event_handler = MakeWeakHandle(base::WeakPtr<JsEventHandler>());
- args.service_url = GURL("https://example.com/");
- args.post_factory = scoped_ptr<HttpPostProviderFactory>();
- args.internal_components_factory.reset(new TestInternalComponentsFactory(
- InternalComponentsFactory::Switches(), storage_option,
- &storage_used_));
- manager->Init(&args);
- EXPECT_EQ(InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED,
- storage_used_);
- loop_.PostTask(FROM_HERE, run_loop.QuitClosure());
- run_loop.Run();
- }
-
- void CreateEntry(UserShare* user_share, ModelType type,
- const std::string& client_tag) {
- WriteTransaction trans(FROM_HERE, user_share);
-
- WriteNode node(&trans);
- EXPECT_EQ(WriteNode::INIT_SUCCESS,
- node.InitUniqueByCreation(type, client_tag));
- }
-
- void ConfigureSyncer() {
- manager_->ConfigureSyncer(CONFIGURE_REASON_NEW_CLIENT,
- ModelTypeSet(SEARCH_ENGINES),
- ModelTypeSet(), ModelTypeSet(), ModelTypeSet(),
- ModelSafeRoutingInfo(),
- base::Bind(&OnConfigDone, true),
- base::Bind(&OnConfigDone, false));
- }
-
- void HandleInit(bool success) {
- if (success) {
- loop_.PostTask(FROM_HERE,
- base::Bind(&SyncBackupManagerTest::ConfigureSyncer,
- base::Unretained(this)));
- } else {
- manager_->ShutdownOnSyncThread(STOP_SYNC);
- }
- }
-
- base::ScopedTempDir temp_dir_;
- base::MessageLoop loop_; // Needed for WeakHandle
- SyncManager* manager_;
- InternalComponentsFactory::StorageOption storage_used_;
-};
-
-TEST_F(SyncBackupManagerTest, NormalizeEntry) {
- scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
- InitManager(manager.get(), InternalComponentsFactory::STORAGE_IN_MEMORY);
-
- CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test");
-
- {
- // New entry is local and unsynced at first.
- ReadTransaction trans(FROM_HERE, manager->GetUserShare());
- ReadNode pref(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- pref.InitByClientTagLookup(SEARCH_ENGINES, "test"));
- EXPECT_FALSE(pref.GetEntry()->GetId().ServerKnows());
- EXPECT_TRUE(pref.GetEntry()->GetIsUnsynced());
- }
-
- manager->SaveChanges();
-
- {
- // New entry has server ID and unsynced bit is cleared after saving.
- ReadTransaction trans(FROM_HERE, manager->GetUserShare());
- ReadNode pref(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- pref.InitByClientTagLookup(SEARCH_ENGINES, "test"));
- EXPECT_TRUE(pref.GetEntry()->GetId().ServerKnows());
- EXPECT_FALSE(pref.GetEntry()->GetIsUnsynced());
- }
-}
-
-TEST_F(SyncBackupManagerTest, PersistWithSwitchToSyncShutdown) {
- scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
- InitManager(manager.get(),
- InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED);
-
- CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test");
- manager->SaveChanges();
- manager->ShutdownOnSyncThread(SWITCH_MODE_SYNC);
-
- // Reopen db to verify entry is persisted.
- manager.reset(new SyncBackupManager);
- InitManager(manager.get(), InternalComponentsFactory::STORAGE_ON_DISK);
- {
- ReadTransaction trans(FROM_HERE, manager->GetUserShare());
- ReadNode pref(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- pref.InitByClientTagLookup(SEARCH_ENGINES, "test"));
- EXPECT_TRUE(pref.GetEntry()->GetId().ServerKnows());
- EXPECT_FALSE(pref.GetEntry()->GetIsUnsynced());
- }
-}
-
-TEST_F(SyncBackupManagerTest, DontPersistWithOtherShutdown) {
- scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
- InitManager(manager.get(),
- InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED);
-
- CreateEntry(manager->GetUserShare(), SEARCH_ENGINES, "test");
- manager->SaveChanges();
- manager->ShutdownOnSyncThread(STOP_SYNC);
- EXPECT_FALSE(base::PathExists(
- temp_dir_.path().Append(syncable::Directory::kSyncDatabaseFilename)));
-}
-
-TEST_F(SyncBackupManagerTest, FailToInitialize) {
- // Test graceful shutdown on initialization failure.
- scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
- InitManager(manager.get(), InternalComponentsFactory::STORAGE_INVALID);
-}
-
-} // anonymous namespace
-
-} // namespace syncer
diff --git a/sync/internal_api/sync_manager_factory.cc b/sync/internal_api/sync_manager_factory.cc
index 288b5da..48ff69d 100644
--- a/sync/internal_api/sync_manager_factory.cc
+++ b/sync/internal_api/sync_manager_factory.cc
@@ -4,32 +4,18 @@
#include "sync/internal_api/public/sync_manager_factory.h"
-#include "sync/internal_api/sync_backup_manager.h"
#include "sync/internal_api/sync_manager_impl.h"
-#include "sync/internal_api/sync_rollback_manager.h"
namespace syncer {
-SyncManagerFactory::SyncManagerFactory(SyncManagerFactory::MANAGER_TYPE type)
- : type_(type) {
-}
+SyncManagerFactory::SyncManagerFactory() {}
SyncManagerFactory::~SyncManagerFactory() {
}
scoped_ptr<SyncManager> SyncManagerFactory::CreateSyncManager(
const std::string& name) {
- switch (type_) {
- case NORMAL:
- return scoped_ptr<SyncManager>(new SyncManagerImpl(name));
- case BACKUP:
- return scoped_ptr<SyncManager>(new SyncBackupManager());
- case ROLLBACK:
- return scoped_ptr<SyncManager>(new SyncRollbackManager());
- default:
- NOTREACHED();
- return scoped_ptr<SyncManager>(new SyncManagerImpl(name));
- }
+ return scoped_ptr<SyncManager>(new SyncManagerImpl(name));
}
} // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager.cc b/sync/internal_api/sync_rollback_manager.cc
deleted file mode 100644
index e2a5c84..0000000
--- a/sync/internal_api/sync_rollback_manager.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2014 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 "sync/internal_api/sync_rollback_manager.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/util/syncer_error.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/syncable/directory.h"
-#include "sync/syncable/mutable_entry.h"
-#include "url/gurl.h"
-
-namespace syncer {
-
-SyncRollbackManager::SyncRollbackManager()
- : change_delegate_(NULL) {
-}
-
-SyncRollbackManager::~SyncRollbackManager() {
-}
-
-void SyncRollbackManager::Init(InitArgs* args) {
- if (SyncRollbackManagerBase::InitInternal(
- args->database_location,
- args->internal_components_factory.get(),
- InternalComponentsFactory::STORAGE_ON_DISK,
- args->unrecoverable_error_handler,
- args->report_unrecoverable_error_function)) {
- change_delegate_ = args->change_delegate;
-
- for (size_t i = 0; i < args->workers.size(); ++i) {
- ModelSafeGroup group = args->workers[i]->GetModelSafeGroup();
- CHECK(workers_.find(group) == workers_.end());
- workers_[group] = args->workers[i];
- }
-
- rollback_ready_types_ = GetUserShare()->directory->InitialSyncEndedTypes();
- rollback_ready_types_.RetainAll(BackupTypes());
- }
-}
-
-void SyncRollbackManager::StartSyncingNormally(
- const ModelSafeRoutingInfo& routing_info,
- base::Time last_poll_time) {
- if (rollback_ready_types_.Empty()) {
- NotifyRollbackDone();
- return;
- }
-
- std::map<ModelType, syncable::Directory::Metahandles> to_delete;
- {
- WriteTransaction trans(FROM_HERE, GetUserShare());
- syncable::Directory::Metahandles unsynced;
- GetUserShare()->directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(),
- &unsynced);
- for (size_t i = 0; i < unsynced.size(); ++i) {
- syncable::MutableEntry e(trans.GetWrappedWriteTrans(),
- syncable::GET_BY_HANDLE, unsynced[i]);
- if (!e.good() || e.GetIsDel() || e.GetId().ServerKnows())
- continue;
-
- // TODO(haitaol): roll back entries that are backed up but whose content
- // is merged with local model during association.
-
- ModelType type = GetModelTypeFromSpecifics(e.GetSpecifics());
- if (!rollback_ready_types_.Has(type))
- continue;
-
- to_delete[type].push_back(unsynced[i]);
- }
- }
-
- for (std::map<ModelType, syncable::Directory::Metahandles>::iterator it =
- to_delete.begin(); it != to_delete.end(); ++it) {
- ModelSafeGroup group = routing_info.find(it->first)->second;
- CHECK(workers_.find(group) != workers_.end());
- workers_[group]->DoWorkAndWaitUntilDone(
- base::Bind(&SyncRollbackManager::DeleteOnWorkerThread,
- base::Unretained(this),
- it->first, it->second));
- }
-
- NotifyRollbackDone();
-}
-
-SyncerError SyncRollbackManager::DeleteOnWorkerThread(
- ModelType type,
- std::vector<int64_t> handles) {
- CHECK(change_delegate_);
-
- {
- ChangeRecordList deletes;
- WriteTransaction trans(FROM_HERE, GetUserShare());
- for (size_t i = 0; i < handles.size(); ++i) {
- syncable::MutableEntry e(trans.GetWrappedWriteTrans(),
- syncable::GET_BY_HANDLE, handles[i]);
- if (!e.good() || e.GetIsDel())
- continue;
-
- ChangeRecord del;
- del.action = ChangeRecord::ACTION_DELETE;
- del.id = handles[i];
- del.specifics = e.GetSpecifics();
- deletes.push_back(del);
- }
-
- change_delegate_->OnChangesApplied(type, 1, &trans,
- MakeImmutable(&deletes));
- }
-
- change_delegate_->OnChangesComplete(type);
- return SYNCER_OK;
-}
-
-void SyncRollbackManager::NotifyRollbackDone() {
- SyncProtocolError error;
- error.action = ROLLBACK_DONE;
- FOR_EACH_OBSERVER(SyncManager::Observer, *GetObservers(),
- OnActionableError(error));
-}
-
-} // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager.h b/sync/internal_api/sync_rollback_manager.h
deleted file mode 100644
index d41086a..0000000
--- a/sync/internal_api/sync_rollback_manager.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_
-#define SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "sync/internal_api/sync_rollback_manager_base.h"
-
-class GURL;
-
-namespace syncer {
-
-// SyncRollbackManager restores user's data to pre-sync state using backup
-// DB created by SyncBackupManager.
-class SYNC_EXPORT SyncRollbackManager : public SyncRollbackManagerBase {
- public:
- SyncRollbackManager();
- ~SyncRollbackManager() override;
-
- // SyncManager implementation.
- void Init(InitArgs* args) override;
- void StartSyncingNormally(const ModelSafeRoutingInfo& routing_info,
- base::Time last_poll_time) override;
-
- private:
- // Deletes specified entries in local model.
- SyncerError DeleteOnWorkerThread(ModelType type,
- std::vector<int64_t> handles);
-
- void NotifyRollbackDone();
-
- std::map<ModelSafeGroup, scoped_refptr<ModelSafeWorker> > workers_;
-
- SyncManager::ChangeDelegate* change_delegate_;
-
- // Types that can be rolled back.
- ModelTypeSet rollback_ready_types_;
-
- DISALLOW_COPY_AND_ASSIGN(SyncRollbackManager);
-};
-
-} // namespace syncer
-
-#endif // SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_
diff --git a/sync/internal_api/sync_rollback_manager_base.cc b/sync/internal_api/sync_rollback_manager_base.cc
deleted file mode 100644
index d62f354..0000000
--- a/sync/internal_api/sync_rollback_manager_base.cc
+++ /dev/null
@@ -1,329 +0,0 @@
-// Copyright 2014 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 "sync/internal_api/sync_rollback_manager_base.h"
-
-#include <stdint.h>
-
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/syncable/directory_backing_store.h"
-#include "sync/syncable/mutable_entry.h"
-
-namespace {
-
-// Permanent bookmark folders as defined in bookmark_model_associator.cc.
-// No mobile bookmarks because they only exists with sync enabled.
-const char kBookmarkBarTag[] = "bookmark_bar";
-const char kOtherBookmarksTag[] = "other_bookmarks";
-
-class DummyEntryptionHandler : public syncer::SyncEncryptionHandler {
- void AddObserver(Observer* observer) override {}
- void RemoveObserver(Observer* observer) override {}
- void Init() override {}
- void SetEncryptionPassphrase(const std::string& passphrase,
- bool is_explicit) override {}
- void SetDecryptionPassphrase(const std::string& passphrase) override {}
- void EnableEncryptEverything() override {}
- bool IsEncryptEverythingEnabled() const override { return false; }
- syncer::PassphraseType GetPassphraseType() const override {
- return syncer::KEYSTORE_PASSPHRASE;
- }
-};
-
-} // anonymous namespace
-
-namespace syncer {
-
-SyncRollbackManagerBase::SyncRollbackManagerBase()
- : dummy_handler_(new DummyEntryptionHandler),
- initialized_(false),
- weak_ptr_factory_(this) {
-}
-
-SyncRollbackManagerBase::~SyncRollbackManagerBase() {
-}
-
-bool SyncRollbackManagerBase::InitInternal(
- const base::FilePath& database_location,
- InternalComponentsFactory* internal_components_factory,
- InternalComponentsFactory::StorageOption storage,
- const WeakHandle<UnrecoverableErrorHandler>& unrecoverable_error_handler,
- const base::Closure& report_unrecoverable_error_function) {
- unrecoverable_error_handler_ = unrecoverable_error_handler;
- report_unrecoverable_error_function_ = report_unrecoverable_error_function;
-
- if (!InitBackupDB(database_location, internal_components_factory, storage)) {
- NotifyInitializationFailure();
- return false;
- }
-
- initialized_ = true;
- NotifyInitializationSuccess();
- return true;
-}
-
-ModelTypeSet SyncRollbackManagerBase::InitialSyncEndedTypes() {
- return share_.directory->InitialSyncEndedTypes();
-}
-
-ModelTypeSet SyncRollbackManagerBase::GetTypesWithEmptyProgressMarkerToken(
- ModelTypeSet types) {
- ModelTypeSet inited_types = share_.directory->InitialSyncEndedTypes();
- types.RemoveAll(inited_types);
- return types;
-}
-
-bool SyncRollbackManagerBase::PurgePartiallySyncedTypes() {
- NOTREACHED();
- return true;
-}
-
-void SyncRollbackManagerBase::UpdateCredentials(
- const SyncCredentials& credentials) {
-}
-
-void SyncRollbackManagerBase::StartSyncingNormally(
- const ModelSafeRoutingInfo& routing_info,
- base::Time last_poll_time) {}
-
-void SyncRollbackManagerBase::ConfigureSyncer(
- ConfigureReason reason,
- ModelTypeSet to_download,
- ModelTypeSet to_purge,
- ModelTypeSet to_journal,
- ModelTypeSet to_unapply,
- const ModelSafeRoutingInfo& new_routing_info,
- const base::Closure& ready_task,
- const base::Closure& retry_task) {
- for (ModelTypeSet::Iterator type = to_download.First();
- type.Good(); type.Inc()) {
- if (InitTypeRootNode(type.Get())) {
- if (type.Get() == BOOKMARKS) {
- InitBookmarkFolder(kBookmarkBarTag);
- InitBookmarkFolder(kOtherBookmarksTag);
- }
- }
- }
-
- ready_task.Run();
-}
-
-void SyncRollbackManagerBase::SetInvalidatorEnabled(bool invalidator_enabled) {
-}
-
-void SyncRollbackManagerBase::OnIncomingInvalidation(
- syncer::ModelType type,
- scoped_ptr<InvalidationInterface> invalidation) {
- NOTREACHED();
-}
-
-void SyncRollbackManagerBase::AddObserver(SyncManager::Observer* observer) {
- observers_.AddObserver(observer);
-}
-
-void SyncRollbackManagerBase::RemoveObserver(SyncManager::Observer* observer) {
- observers_.RemoveObserver(observer);
-}
-
-SyncStatus SyncRollbackManagerBase::GetDetailedStatus() const {
- return SyncStatus();
-}
-
-void SyncRollbackManagerBase::SaveChanges() {
-}
-
-void SyncRollbackManagerBase::ShutdownOnSyncThread(ShutdownReason reason) {
- if (initialized_) {
- share_.directory.reset();
- initialized_ = false;
- }
-}
-
-UserShare* SyncRollbackManagerBase::GetUserShare() {
- return &share_;
-}
-
-const std::string SyncRollbackManagerBase::cache_guid() {
- return share_.directory->cache_guid();
-}
-
-bool SyncRollbackManagerBase::ReceivedExperiment(Experiments* experiments) {
- return false;
-}
-
-bool SyncRollbackManagerBase::HasUnsyncedItems() {
- ReadTransaction trans(FROM_HERE, &share_);
- syncable::Directory::Metahandles unsynced;
- share_.directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(), &unsynced);
- return !unsynced.empty();
-}
-
-SyncEncryptionHandler* SyncRollbackManagerBase::GetEncryptionHandler() {
- return dummy_handler_.get();
-}
-
-void SyncRollbackManagerBase::RefreshTypes(ModelTypeSet types) {
-}
-
-void SyncRollbackManagerBase::HandleTransactionCompleteChangeEvent(
- ModelTypeSet models_with_changes) {
-}
-
-ModelTypeSet SyncRollbackManagerBase::HandleTransactionEndingChangeEvent(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans) {
- return ModelTypeSet();
-}
-
-void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncApi(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans,
- std::vector<int64_t>* entries_changed) {}
-
-void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncer(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans,
- std::vector<int64_t>* entries_changed) {}
-
-void SyncRollbackManagerBase::OnTransactionWrite(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- ModelTypeSet models_with_changes) {
-}
-
-void SyncRollbackManagerBase::NotifyInitializationSuccess() {
- FOR_EACH_OBSERVER(
- SyncManager::Observer, observers_,
- OnInitializationComplete(
- MakeWeakHandle(base::WeakPtr<JsBackend>()),
- MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()),
- true, InitialSyncEndedTypes()));
-}
-
-void SyncRollbackManagerBase::NotifyInitializationFailure() {
- FOR_EACH_OBSERVER(
- SyncManager::Observer, observers_,
- OnInitializationComplete(
- MakeWeakHandle(base::WeakPtr<JsBackend>()),
- MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()),
- false, ModelTypeSet()));
-}
-
-syncer_v2::SyncContextProxy* SyncRollbackManagerBase::GetSyncContextProxy() {
- return NULL;
-}
-
-ScopedVector<syncer::ProtocolEvent>
-SyncRollbackManagerBase::GetBufferedProtocolEvents() {
- return ScopedVector<syncer::ProtocolEvent>();
-}
-
-scoped_ptr<base::ListValue> SyncRollbackManagerBase::GetAllNodesForType(
- syncer::ModelType type) {
- ReadTransaction trans(FROM_HERE, GetUserShare());
- scoped_ptr<base::ListValue> nodes(
- trans.GetDirectory()->GetNodeDetailsForType(trans.GetWrappedTrans(),
- type));
- return nodes;
-}
-
-bool SyncRollbackManagerBase::InitBackupDB(
- const base::FilePath& sync_folder,
- InternalComponentsFactory* internal_components_factory,
- InternalComponentsFactory::StorageOption storage) {
- base::FilePath backup_db_path = sync_folder.Append(
- syncable::Directory::kSyncDatabaseFilename);
- scoped_ptr<syncable::DirectoryBackingStore> backing_store =
- internal_components_factory->BuildDirectoryBackingStore(storage, "backup",
- backup_db_path);
-
- DCHECK(backing_store.get());
- share_.directory.reset(
- new syncable::Directory(
- backing_store.release(),
- unrecoverable_error_handler_,
- report_unrecoverable_error_function_,
- NULL,
- NULL));
- return syncable::OPENED ==
- share_.directory->Open(
- "backup", this,
- MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()));
-}
-
-bool SyncRollbackManagerBase::InitTypeRootNode(ModelType type) {
- WriteTransaction trans(FROM_HERE, &share_);
- ReadNode root(&trans);
- if (BaseNode::INIT_OK == root.InitTypeRoot(type))
- return true;
-
- syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
- syncable::CREATE_NEW_UPDATE_ITEM,
- syncable::Id::CreateFromServerId(
- ModelTypeToString(type)));
- if (!entry.good())
- return false;
-
- entry.PutParentId(syncable::Id::GetRoot());
- entry.PutBaseVersion(1);
- entry.PutUniqueServerTag(ModelTypeToRootTag(type));
- entry.PutNonUniqueName(ModelTypeToString(type));
- entry.PutIsDel(false);
- entry.PutIsDir(true);
-
- sync_pb::EntitySpecifics specifics;
- AddDefaultFieldValue(type, &specifics);
- entry.PutSpecifics(specifics);
-
- return true;
-}
-
-void SyncRollbackManagerBase::InitBookmarkFolder(const std::string& folder) {
- WriteTransaction trans(FROM_HERE, &share_);
- syncable::Entry bookmark_root(trans.GetWrappedTrans(),
- syncable::GET_TYPE_ROOT,
- BOOKMARKS);
- if (!bookmark_root.good())
- return;
-
- syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
- syncable::CREATE_NEW_UPDATE_ITEM,
- syncable::Id::CreateFromServerId(folder));
- if (!entry.good())
- return;
-
- entry.PutParentId(bookmark_root.GetId());
- entry.PutBaseVersion(1);
- entry.PutUniqueServerTag(folder);
- entry.PutNonUniqueName(folder);
- entry.PutIsDel(false);
- entry.PutIsDir(true);
-
- sync_pb::EntitySpecifics specifics;
- AddDefaultFieldValue(BOOKMARKS, &specifics);
- entry.PutSpecifics(specifics);
-}
-
-base::ObserverList<SyncManager::Observer>*
-SyncRollbackManagerBase::GetObservers() {
- return &observers_;
-}
-
-void SyncRollbackManagerBase::RegisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) {}
-
-void SyncRollbackManagerBase::UnregisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) {}
-
-bool SyncRollbackManagerBase::HasDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) { return false; }
-
-void SyncRollbackManagerBase::RequestEmitDebugInfo() {}
-
-void SyncRollbackManagerBase::ClearServerData(
- const ClearServerDataCallback& callback) {}
-
-} // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager_base.h b/sync/internal_api/sync_rollback_manager_base.h
deleted file mode 100644
index ad3ad62..0000000
--- a/sync/internal_api/sync_rollback_manager_base.h
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_
-#define SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_
-
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "sync/base/sync_export.h"
-#include "sync/internal_api/public/http_post_provider_factory.h"
-#include "sync/internal_api/public/internal_components_factory.h"
-#include "sync/internal_api/public/sync_manager.h"
-#include "sync/internal_api/public/user_share.h"
-#include "sync/syncable/directory_change_delegate.h"
-#include "sync/syncable/transaction_observer.h"
-
-namespace syncer {
-
-class WriteTransaction;
-
-// Base class of sync managers used for backup and rollback. Two major
-// functions are:
-// * Init(): load backup DB into sync directory.
-// * ConfigureSyncer(): initialize permanent sync nodes (root, bookmark
-// permanent folders) for configured type as needed.
-//
-// Most of other functions are no ops.
-class SYNC_EXPORT SyncRollbackManagerBase
- : public SyncManager,
- public syncable::DirectoryChangeDelegate,
- public syncable::TransactionObserver {
- public:
- SyncRollbackManagerBase();
- ~SyncRollbackManagerBase() override;
-
- // SyncManager implementation.
- ModelTypeSet InitialSyncEndedTypes() override;
- ModelTypeSet GetTypesWithEmptyProgressMarkerToken(
- ModelTypeSet types) override;
- bool PurgePartiallySyncedTypes() override;
- void UpdateCredentials(const SyncCredentials& credentials) override;
- void StartSyncingNormally(const ModelSafeRoutingInfo& routing_info,
- base::Time last_poll_time) override;
- void ConfigureSyncer(ConfigureReason reason,
- ModelTypeSet to_download,
- ModelTypeSet to_purge,
- ModelTypeSet to_journal,
- ModelTypeSet to_unapply,
- const ModelSafeRoutingInfo& new_routing_info,
- const base::Closure& ready_task,
- const base::Closure& retry_task) override;
- void SetInvalidatorEnabled(bool invalidator_enabled) override;
- void OnIncomingInvalidation(
- syncer::ModelType type,
- scoped_ptr<InvalidationInterface> invalidation) override;
- void AddObserver(SyncManager::Observer* observer) override;
- void RemoveObserver(SyncManager::Observer* observer) override;
- SyncStatus GetDetailedStatus() const override;
- void SaveChanges() override;
- void ShutdownOnSyncThread(ShutdownReason reason) override;
- UserShare* GetUserShare() override;
- const std::string cache_guid() override;
- bool ReceivedExperiment(Experiments* experiments) override;
- bool HasUnsyncedItems() override;
- SyncEncryptionHandler* GetEncryptionHandler() override;
- void RefreshTypes(ModelTypeSet types) override;
- syncer_v2::SyncContextProxy* GetSyncContextProxy() override;
- ScopedVector<ProtocolEvent> GetBufferedProtocolEvents() override;
- scoped_ptr<base::ListValue> GetAllNodesForType(
- syncer::ModelType type) override;
- void ClearServerData(const ClearServerDataCallback& callback) override;
-
- // DirectoryChangeDelegate implementation.
- void HandleTransactionCompleteChangeEvent(
- ModelTypeSet models_with_changes) override;
- ModelTypeSet HandleTransactionEndingChangeEvent(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans) override;
- void HandleCalculateChangesChangeEventFromSyncApi(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans,
- std::vector<int64_t>* entries_changed) override;
- void HandleCalculateChangesChangeEventFromSyncer(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- syncable::BaseTransaction* trans,
- std::vector<int64_t>* entries_changed) override;
-
- // syncable::TransactionObserver implementation.
- void OnTransactionWrite(
- const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
- ModelTypeSet models_with_changes) override;
-
- protected:
- base::ObserverList<SyncManager::Observer>* GetObservers();
-
- // Initialize sync backup DB.
- bool InitInternal(
- const base::FilePath& database_location,
- InternalComponentsFactory* internal_components_factory,
- InternalComponentsFactory::StorageOption storage,
- const WeakHandle<UnrecoverableErrorHandler>& unrecoverable_error_handler,
- const base::Closure& report_unrecoverable_error_function);
-
- void RegisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) override;
- void UnregisterDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) override;
- bool HasDirectoryTypeDebugInfoObserver(
- syncer::TypeDebugInfoObserver* observer) override;
- void RequestEmitDebugInfo() override;
-
- bool initialized() const {
- return initialized_;
- }
-
- private:
- void NotifyInitializationSuccess();
- void NotifyInitializationFailure();
-
- bool InitBackupDB(const base::FilePath& sync_folder,
- InternalComponentsFactory* internal_components_factory,
- InternalComponentsFactory::StorageOption storage);
-
- bool InitTypeRootNode(ModelType type);
- void InitBookmarkFolder(const std::string& folder);
-
- UserShare share_;
- base::ObserverList<SyncManager::Observer> observers_;
-
- WeakHandle<UnrecoverableErrorHandler> unrecoverable_error_handler_;
- base::Closure report_unrecoverable_error_function_;
-
- scoped_ptr<SyncEncryptionHandler> dummy_handler_;
-
- bool initialized_;
-
- base::WeakPtrFactory<SyncRollbackManagerBase> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(SyncRollbackManagerBase);
-};
-
-} // namespace syncer
-
-#endif // SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_
diff --git a/sync/internal_api/sync_rollback_manager_base_unittest.cc b/sync/internal_api/sync_rollback_manager_base_unittest.cc
deleted file mode 100644
index bb5ec93..0000000
--- a/sync/internal_api/sync_rollback_manager_base_unittest.cc
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2014 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 "sync/internal_api/sync_rollback_manager_base.h"
-
-#include "base/bind.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/test/test_internal_components_factory.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-namespace syncer {
-
-namespace {
-
-void OnConfigDone(bool success) {
- EXPECT_TRUE(success);
-}
-
-class SyncTestRollbackManager : public SyncRollbackManagerBase {
- public:
- void Init(InitArgs* args) override {
- SyncRollbackManagerBase::InitInternal(
- args->database_location,
- args->internal_components_factory.get(),
- InternalComponentsFactory::STORAGE_IN_MEMORY,
- args->unrecoverable_error_handler,
- args->report_unrecoverable_error_function);
- }
-};
-
-class SyncRollbackManagerBaseTest : public testing::Test {
- protected:
- void SetUp() override {
- SyncManager::InitArgs args;
- args.database_location = base::FilePath(base::FilePath::kCurrentDirectory);
- args.service_url = GURL("https://example.com/");
- args.internal_components_factory.reset(new TestInternalComponentsFactory(
- InternalComponentsFactory::Switches(),
- InternalComponentsFactory::STORAGE_IN_MEMORY,
- &storage_used_));
- manager_.Init(&args);
- EXPECT_EQ(InternalComponentsFactory::STORAGE_IN_MEMORY, storage_used_);
- }
-
- SyncTestRollbackManager manager_;
- base::MessageLoop loop_; // Needed for WeakHandle
- InternalComponentsFactory::StorageOption storage_used_;
-};
-
-TEST_F(SyncRollbackManagerBaseTest, InitTypeOnConfiguration) {
- EXPECT_TRUE(manager_.InitialSyncEndedTypes().Empty());
-
- manager_.ConfigureSyncer(
- CONFIGURE_REASON_NEW_CLIENT,
- ModelTypeSet(PREFERENCES, BOOKMARKS),
- ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), ModelSafeRoutingInfo(),
- base::Bind(&OnConfigDone, true),
- base::Bind(&OnConfigDone, false));
-
- ReadTransaction trans(FROM_HERE, manager_.GetUserShare());
- ReadNode pref_root(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- pref_root.InitTypeRoot(PREFERENCES));
-
- ReadNode bookmark_root(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- bookmark_root.InitTypeRoot(BOOKMARKS));
- ReadNode bookmark_bar(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- bookmark_bar.InitByTagLookupForBookmarks("bookmark_bar"));
- ReadNode bookmark_mobile(&trans);
- EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD,
- bookmark_mobile.InitByTagLookupForBookmarks("synced_bookmarks"));
- ReadNode bookmark_other(&trans);
- EXPECT_EQ(BaseNode::INIT_OK,
- bookmark_other.InitByTagLookupForBookmarks("other_bookmarks"));
-}
-
-} // anonymous namespace
-
-} // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager_unittest.cc b/sync/internal_api/sync_rollback_manager_unittest.cc
deleted file mode 100644
index 400cebc..0000000
--- a/sync/internal_api/sync_rollback_manager_unittest.cc
+++ /dev/null
@@ -1,269 +0,0 @@
-// Copyright 2014 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 "sync/internal_api/sync_rollback_manager.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <set>
-
-#include "base/files/scoped_temp_dir.h"
-#include "base/run_loop.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/sessions/sync_session_snapshot.h"
-#include "sync/internal_api/public/test/test_internal_components_factory.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/internal_api/sync_backup_manager.h"
-#include "sync/syncable/entry.h"
-#include "sync/test/engine/fake_model_worker.h"
-#include "sync/test/test_directory_backing_store.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-using ::testing::_;
-using ::testing::DoDefault;
-using ::testing::Invoke;
-using ::testing::Truly;
-using ::testing::WithArgs;
-
-namespace syncer {
-
-namespace {
-
-class TestChangeDelegate : public SyncManager::ChangeDelegate {
- public:
- TestChangeDelegate() {
- ON_CALL(*this, OnChangesApplied(_, _, _, _))
- .WillByDefault(
- WithArgs<3>(Invoke(this,
- &TestChangeDelegate::VerifyDeletes)));
- }
-
- void add_expected_delete(int64_t v) { expected_deletes_.insert(v); }
-
- MOCK_METHOD4(OnChangesApplied,
- void(ModelType model_type,
- int64_t model_version,
- const BaseTransaction* trans,
- const ImmutableChangeRecordList& changes));
- MOCK_METHOD1(OnChangesComplete, void(ModelType model_type));
-
- private:
- void VerifyDeletes(const ImmutableChangeRecordList& changes) {
- std::set<int64_t> deleted;
- for (size_t i = 0; i < changes.Get().size(); ++i) {
- const ChangeRecord& change = (changes.Get())[i];
- EXPECT_EQ(ChangeRecord::ACTION_DELETE, change.action);
- EXPECT_TRUE(deleted.find(change.id) == deleted.end());
- deleted.insert(change.id);
- }
- EXPECT_TRUE(expected_deletes_ == deleted);
- }
-
- std::set<int64_t> expected_deletes_;
-};
-
-class SyncRollbackManagerTest : public testing::Test,
- public SyncManager::Observer {
- protected:
- void SetUp() override {
- CHECK(temp_dir_.CreateUniqueTempDir());
-
- worker_ = new FakeModelWorker(GROUP_UI);
- }
-
- MOCK_METHOD1(OnSyncCycleCompleted,
- void(const sessions::SyncSessionSnapshot&));
- MOCK_METHOD1(OnConnectionStatusChange, void(ConnectionStatus));
- MOCK_METHOD4(OnInitializationComplete,
- void(const WeakHandle<JsBackend>&,
- const WeakHandle<DataTypeDebugInfoListener>&,
- bool, ModelTypeSet));
- MOCK_METHOD1(OnActionableError, void(const SyncProtocolError&));
- MOCK_METHOD1(OnMigrationRequested, void(ModelTypeSet));
- MOCK_METHOD1(OnProtocolEvent, void(const ProtocolEvent&));
-
- void OnConfigDone(bool success) {
- EXPECT_TRUE(success);
- }
-
- int64_t CreateEntry(UserShare* user_share,
- ModelType type,
- const std::string& client_tag) {
- WriteTransaction trans(FROM_HERE, user_share);
- WriteNode node(&trans);
- EXPECT_EQ(WriteNode::INIT_SUCCESS,
- node.InitUniqueByCreation(type, client_tag));
- return node.GetId();
- }
-
- void InitManager(SyncManager* manager, ModelTypeSet types,
- TestChangeDelegate* delegate,
- InternalComponentsFactory::StorageOption storage_option) {
- manager_ = manager;
- types_ = types;
-
- EXPECT_CALL(*this, OnInitializationComplete(_, _, _, _))
- .WillOnce(WithArgs<2>(Invoke(this,
- &SyncRollbackManagerTest::HandleInit)));
-
- manager->AddObserver(this);
-
- base::RunLoop run_loop;
- SyncManager::InitArgs args;
- args.database_location = temp_dir_.path();
- args.service_url = GURL("https://example.com/");
- args.workers.push_back(worker_);
- args.change_delegate = delegate;
-
- InternalComponentsFactory::StorageOption storage_used;
- args.internal_components_factory.reset(new TestInternalComponentsFactory(
- InternalComponentsFactory::Switches(), storage_option, &storage_used));
- manager->Init(&args);
- EXPECT_EQ(storage_option, storage_used);
- loop_.PostTask(FROM_HERE, run_loop.QuitClosure());
- run_loop.Run();
- }
-
- // Create and persist an entry by unique tag in DB.
- void PrepopulateDb(ModelType type, const std::string& client_tag) {
- SyncBackupManager backup_manager;
- TestChangeDelegate delegate;
- InitManager(&backup_manager, ModelTypeSet(type), &delegate,
- InternalComponentsFactory::STORAGE_ON_DISK_DEFERRED);
- CreateEntry(backup_manager.GetUserShare(), type, client_tag);
- backup_manager.ShutdownOnSyncThread(SWITCH_MODE_SYNC);
- }
-
- // Verify entry with |client_tag| exists in sync directory.
- bool VerifyEntry(UserShare* user_share, ModelType type,
- const std::string& client_tag) {
- ReadTransaction trans(FROM_HERE, user_share);
- ReadNode node(&trans);
- return BaseNode::INIT_OK == node.InitByClientTagLookup(type, client_tag);
- }
-
- private:
- void ConfigureSyncer() {
- manager_->ConfigureSyncer(
- CONFIGURE_REASON_NEW_CLIENT,
- types_,
- ModelTypeSet(), ModelTypeSet(), ModelTypeSet(),
- ModelSafeRoutingInfo(),
- base::Bind(&SyncRollbackManagerTest::OnConfigDone,
- base::Unretained(this), true),
- base::Bind(&SyncRollbackManagerTest::OnConfigDone,
- base::Unretained(this), false));
- }
-
- void HandleInit(bool success) {
- if (success) {
- loop_.PostTask(FROM_HERE,
- base::Bind(&SyncRollbackManagerTest::ConfigureSyncer,
- base::Unretained(this)));
- } else {
- manager_->ShutdownOnSyncThread(STOP_SYNC);
- }
- }
-
- base::ScopedTempDir temp_dir_;
- scoped_refptr<ModelSafeWorker> worker_;
- base::MessageLoop loop_; // Needed for WeakHandle
- SyncManager* manager_;
- ModelTypeSet types_;
-};
-
-bool IsRollbackDoneAction(SyncProtocolError e) {
- return e.action == syncer::ROLLBACK_DONE;
-}
-
-TEST_F(SyncRollbackManagerTest, RollbackBasic) {
- PrepopulateDb(PREFERENCES, "pref1");
-
- TestChangeDelegate delegate;
- SyncRollbackManager rollback_manager;
- InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate,
- InternalComponentsFactory::STORAGE_ON_DISK);
-
- // Simulate a new entry added during type initialization.
- int64_t new_pref_id =
- CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2");
-
- delegate.add_expected_delete(new_pref_id);
- EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _))
- .Times(1)
- .WillOnce(DoDefault());
- EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1);
- EXPECT_CALL(*this, OnActionableError(Truly(IsRollbackDoneAction))).Times(1);
-
- ModelSafeRoutingInfo routing_info;
- routing_info[PREFERENCES] = GROUP_UI;
- rollback_manager.StartSyncingNormally(routing_info, base::Time());
-}
-
-TEST_F(SyncRollbackManagerTest, NoRollbackOfTypesNotBackedUp) {
- PrepopulateDb(PREFERENCES, "pref1");
-
- TestChangeDelegate delegate;
- SyncRollbackManager rollback_manager;
- InitManager(&rollback_manager, ModelTypeSet(PREFERENCES, APPS), &delegate,
- InternalComponentsFactory::STORAGE_ON_DISK);
-
- // Simulate new entry added during type initialization.
- int64_t new_pref_id =
- CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2");
- CreateEntry(rollback_manager.GetUserShare(), APPS, "app1");
-
- delegate.add_expected_delete(new_pref_id);
- EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _))
- .Times(1)
- .WillOnce(DoDefault());
- EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1);
-
- ModelSafeRoutingInfo routing_info;
- routing_info[PREFERENCES] = GROUP_UI;
- rollback_manager.StartSyncingNormally(routing_info, base::Time());
-
- // APP entry is still valid.
- EXPECT_TRUE(VerifyEntry(rollback_manager.GetUserShare(), APPS, "app1"));
-}
-
-TEST_F(SyncRollbackManagerTest, BackupDbNotChangedOnAbort) {
- PrepopulateDb(PREFERENCES, "pref1");
-
- TestChangeDelegate delegate;
- scoped_ptr<SyncRollbackManager> rollback_manager(
- new SyncRollbackManager);
- InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate,
- InternalComponentsFactory::STORAGE_ON_DISK);
-
- // Simulate a new entry added during type initialization.
- CreateEntry(rollback_manager->GetUserShare(), PREFERENCES, "pref2");
-
- // Manager was shut down before sync starts.
- rollback_manager->ShutdownOnSyncThread(STOP_SYNC);
-
- // Verify new entry was not persisted.
- rollback_manager.reset(new SyncRollbackManager);
- InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate,
- InternalComponentsFactory::STORAGE_ON_DISK);
- EXPECT_FALSE(VerifyEntry(rollback_manager->GetUserShare(), PREFERENCES,
- "pref2"));
-}
-
-TEST_F(SyncRollbackManagerTest, OnInitializationFailure) {
- // Test graceful shutdown on initialization failure.
- scoped_ptr<SyncRollbackManager> rollback_manager(
- new SyncRollbackManager);
- InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), NULL,
- InternalComponentsFactory::STORAGE_ON_DISK);
-}
-
-} // anonymous namespace
-
-} // namespace syncer
diff --git a/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc b/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc
index ff72bcd..4c0689d 100644
--- a/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc
+++ b/sync/internal_api/test/sync_manager_factory_for_profile_sync_test.cc
@@ -10,7 +10,7 @@ namespace syncer {
SyncManagerFactoryForProfileSyncTest::SyncManagerFactoryForProfileSyncTest(
base::Closure init_callback)
- : SyncManagerFactory(SyncManagerFactory::NORMAL),
+ : SyncManagerFactory(),
init_callback_(init_callback) {
}
@@ -20,9 +20,7 @@ scoped_ptr<syncer::SyncManager>
SyncManagerFactoryForProfileSyncTest::CreateSyncManager(
const std::string& name) {
return scoped_ptr<syncer::SyncManager>(
- new SyncManagerForProfileSyncTest(
- name,
- init_callback_));
+ new SyncManagerForProfileSyncTest(name, init_callback_));
}
} // namespace syncer
diff --git a/sync/internal_api/test/test_internal_components_factory.cc b/sync/internal_api/test/test_internal_components_factory.cc
index 1e26b4e..d6a72fa 100644
--- a/sync/internal_api/test/test_internal_components_factory.cc
+++ b/sync/internal_api/test/test_internal_components_factory.cc
@@ -5,7 +5,6 @@
#include "sync/internal_api/public/test/test_internal_components_factory.h"
#include "sync/sessions/sync_session_context.h"
-#include "sync/syncable/deferred_on_disk_directory_backing_store.h"
#include "sync/syncable/in_memory_directory_backing_store.h"
#include "sync/syncable/on_disk_directory_backing_store.h"
#include "sync/syncable/invalid_directory_backing_store.h"
@@ -69,10 +68,6 @@ TestInternalComponentsFactory::BuildDirectoryBackingStore(
return scoped_ptr<syncable::DirectoryBackingStore>(
new syncable::OnDiskDirectoryBackingStore(dir_name,
backing_filepath));
- case STORAGE_ON_DISK_DEFERRED:
- return scoped_ptr<syncable::DirectoryBackingStore>(
- new syncable::DeferredOnDiskDirectoryBackingStore(dir_name,
- backing_filepath));
case STORAGE_INVALID:
return scoped_ptr<syncable::DirectoryBackingStore>(
new syncable::InvalidDirectoryBackingStore());
diff --git a/sync/protocol/device_info_specifics.proto b/sync/protocol/device_info_specifics.proto
index 99af88b..0103aa6 100644
--- a/sync/protocol/device_info_specifics.proto
+++ b/sync/protocol/device_info_specifics.proto
@@ -37,7 +37,8 @@ message DeviceInfoSpecifics {
// Last time when pre-sync data on the device was saved. The device can be
// restored to state back to this time. In millisecond since UNIX epoch.
- optional int64 backup_timestamp = 6;
+ // DEPRECATED in M50.
+ optional int64 deprecated_backup_timestamp = 6 [deprecated=true];
// Device_id that is stable until user signs out. This device_id is used for
// annotating login scoped refresh token.
diff --git a/sync/protocol/proto_enum_conversions.cc b/sync/protocol/proto_enum_conversions.cc
index 0c6cf73..84a5b03 100644
--- a/sync/protocol/proto_enum_conversions.cc
+++ b/sync/protocol/proto_enum_conversions.cc
@@ -164,7 +164,7 @@ const char* GetErrorTypeString(sync_pb::SyncEnums::ErrorType error_type) {
ENUM_CASE(sync_pb::SyncEnums, TRANSIENT_ERROR);
ENUM_CASE(sync_pb::SyncEnums, MIGRATION_DONE);
ENUM_CASE(sync_pb::SyncEnums, DISABLED_BY_ADMIN);
- ENUM_CASE(sync_pb::SyncEnums, USER_ROLLBACK);
+ ENUM_CASE(sync_pb::SyncEnums, DEPRECATED_USER_ROLLBACK);
ENUM_CASE(sync_pb::SyncEnums, PARTIAL_FAILURE);
ENUM_CASE(sync_pb::SyncEnums, CLIENT_DATA_OBSOLETE);
ENUM_CASE(sync_pb::SyncEnums, UNKNOWN);
diff --git a/sync/protocol/proto_value_conversions.cc b/sync/protocol/proto_value_conversions.cc
index 4fee4ee..327723c 100644
--- a/sync/protocol/proto_value_conversions.cc
+++ b/sync/protocol/proto_value_conversions.cc
@@ -80,10 +80,6 @@ scoped_ptr<base::ListValue> MakeRepeatedValue(const F& fields,
return list;
}
-base::string16 TimestampToString(int64_t tm) {
- return base::TimeFormatShortDateAndTime(syncer::ProtoTimeToTime(tm));
-}
-
} // namespace
// Helper macros to reduce the amount of boilerplate.
@@ -412,7 +408,6 @@ scoped_ptr<base::DictionaryValue> DeviceInfoSpecificsToValue(
SET_ENUM(device_type, GetDeviceTypeString);
SET_STR(sync_user_agent);
SET_STR(chrome_version);
- SET_TIME_STR(backup_timestamp);
SET_STR(signin_scoped_device_id);
return value;
}
diff --git a/sync/protocol/sync_enums.proto b/sync/protocol/sync_enums.proto
index bdfb45e..0e18575 100644
--- a/sync/protocol/sync_enums.proto
+++ b/sync/protocol/sync_enums.proto
@@ -96,7 +96,7 @@ message SyncEnums {
// a server.
DISABLED_BY_ADMIN = 10; // An administrator disabled sync for this
// domain.
- USER_ROLLBACK = 11; // Client told to stop syncing and roll back.
+ DEPRECATED_USER_ROLLBACK = 11; // Deprecated in M50.
PARTIAL_FAILURE = 12; // Return when client want to update several
// data types, but some of them failed(e.g.
// throttled).
diff --git a/sync/protocol/sync_protocol_error.cc b/sync/protocol/sync_protocol_error.cc
index 992f6ac..c82d32e 100644
--- a/sync/protocol/sync_protocol_error.cc
+++ b/sync/protocol/sync_protocol_error.cc
@@ -22,7 +22,6 @@ const char* GetSyncErrorTypeString(SyncProtocolErrorType type) {
ENUM_CASE(MIGRATION_DONE);
ENUM_CASE(INVALID_CREDENTIAL);
ENUM_CASE(DISABLED_BY_ADMIN);
- ENUM_CASE(USER_ROLLBACK);
ENUM_CASE(PARTIAL_FAILURE);
ENUM_CASE(CLIENT_DATA_OBSOLETE);
ENUM_CASE(UNKNOWN_ERROR);
@@ -39,8 +38,6 @@ const char* GetClientActionString(ClientAction action) {
ENUM_CASE(STOP_AND_RESTART_SYNC);
ENUM_CASE(DISABLE_SYNC_ON_CLIENT);
ENUM_CASE(STOP_SYNC_FOR_DISABLED_ACCOUNT);
- ENUM_CASE(DISABLE_SYNC_AND_ROLLBACK);
- ENUM_CASE(ROLLBACK_DONE);
ENUM_CASE(RESET_LOCAL_SYNC_DATA);
ENUM_CASE(UNKNOWN_ACTION);
}
diff --git a/sync/protocol/sync_protocol_error.h b/sync/protocol/sync_protocol_error.h
index 38c5f18..7ba8d6c 100644
--- a/sync/protocol/sync_protocol_error.h
+++ b/sync/protocol/sync_protocol_error.h
@@ -38,9 +38,6 @@ enum SyncProtocolErrorType {
// An administrator disabled sync for this domain.
DISABLED_BY_ADMIN,
- // Client told to stop syncing this device and roll back local data.
- USER_ROLLBACK,
-
// Some of servers are busy. Try later with busy servers.
PARTIAL_FAILURE,
@@ -72,13 +69,6 @@ enum ClientAction {
// settings page that account is disabled.
STOP_SYNC_FOR_DISABLED_ACCOUNT,
- // Disable sync and roll back local model to pre-sync state.
- DISABLE_SYNC_AND_ROLLBACK,
-
- // Generated by SyncRollbackManager to notify ProfileSyncService that
- // rollback is finished.
- ROLLBACK_DONE,
-
// Generated in response to CLIENT_DATA_OBSOLETE error. ProfileSyncService
// should stop sync engine, delete directory and restart sync engine.
RESET_LOCAL_SYNC_DATA,
diff --git a/sync/sync.gyp b/sync/sync.gyp
index 9981376..f5303cb 100644
--- a/sync/sync.gyp
+++ b/sync/sync.gyp
@@ -350,8 +350,6 @@
'internal_api/read_node.cc',
'internal_api/read_transaction.cc',
'internal_api/shared_model_type_processor.cc',
- 'internal_api/sync_backup_manager.cc',
- 'internal_api/sync_backup_manager.h',
'internal_api/sync_context.cc',
'internal_api/sync_context_proxy.cc',
'internal_api/sync_context_proxy_impl.cc',
@@ -362,10 +360,6 @@
'internal_api/sync_manager_factory.cc',
'internal_api/sync_manager_impl.cc',
'internal_api/sync_manager_impl.h',
- 'internal_api/sync_rollback_manager.cc',
- 'internal_api/sync_rollback_manager.h',
- 'internal_api/sync_rollback_manager_base.cc',
- 'internal_api/sync_rollback_manager_base.h',
'internal_api/syncapi_internal.cc',
'internal_api/syncapi_internal.h',
'internal_api/syncapi_server_connection_manager.cc',
@@ -401,8 +395,6 @@
'sessions/sync_session.h',
'sessions/sync_session_context.cc',
'sessions/sync_session_context.h',
- 'syncable/deferred_on_disk_directory_backing_store.cc',
- 'syncable/deferred_on_disk_directory_backing_store.h',
'syncable/dir_open_result.h',
'syncable/directory.cc',
'syncable/directory.h',
diff --git a/sync/sync_tests.gypi b/sync/sync_tests.gypi
index 122641e..bacf837 100644
--- a/sync/sync_tests.gypi
+++ b/sync/sync_tests.gypi
@@ -321,12 +321,9 @@
'internal_api/public/util/proto_value_ptr_unittest.cc',
'internal_api/public/util/weak_handle_unittest.cc',
'internal_api/shared_model_type_processor_unittest.cc',
- 'internal_api/sync_backup_manager_unittest.cc',
'internal_api/sync_context_proxy_impl_unittest.cc',
'internal_api/sync_encryption_handler_impl_unittest.cc',
'internal_api/sync_manager_impl_unittest.cc',
- 'internal_api/sync_rollback_manager_base_unittest.cc',
- 'internal_api/sync_rollback_manager_unittest.cc',
'internal_api/syncapi_server_connection_manager_unittest.cc',
'js/js_event_details_unittest.cc',
'js/sync_js_controller_unittest.cc',
@@ -335,7 +332,6 @@
'sessions/model_type_registry_unittest.cc',
'sessions/nudge_tracker_unittest.cc',
'sessions/status_controller_unittest.cc',
- 'syncable/deferred_on_disk_directory_backing_store_unittest.cc',
'syncable/directory_backing_store_unittest.cc',
'syncable/directory_unittest.cc',
'syncable/directory_unittest.h',
diff --git a/sync/syncable/deferred_on_disk_directory_backing_store.cc b/sync/syncable/deferred_on_disk_directory_backing_store.cc
deleted file mode 100644
index 5e960d2..0000000
--- a/sync/syncable/deferred_on_disk_directory_backing_store.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2014 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 "sync/syncable/deferred_on_disk_directory_backing_store.h"
-
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/stl_util.h"
-#include "sync/syncable/syncable-inl.h"
-
-namespace syncer {
-namespace syncable {
-
-DeferredOnDiskDirectoryBackingStore::DeferredOnDiskDirectoryBackingStore(
- const std::string& dir_name,
- const base::FilePath& backing_file_path)
- : OnDiskDirectoryBackingStore(dir_name, backing_file_path),
- created_on_disk_(false) {
-}
-
-DeferredOnDiskDirectoryBackingStore::~DeferredOnDiskDirectoryBackingStore() {}
-
-bool DeferredOnDiskDirectoryBackingStore::SaveChanges(
- const Directory::SaveChangesSnapshot& snapshot) {
- DCHECK(CalledOnValidThread());
-
- // Back out early if there is nothing to save.
- if (!snapshot.HasUnsavedMetahandleChanges()) {
- return true;
- }
- if (!created_on_disk_ && !CreateOnDisk())
- return false;
- return OnDiskDirectoryBackingStore::SaveChanges(snapshot);
-}
-
-bool DeferredOnDiskDirectoryBackingStore::CreateOnDisk() {
- DCHECK(CalledOnValidThread());
- DCHECK(!created_on_disk_);
- ResetAndCreateConnection();
- if (!base::DeleteFile(backing_file_path(), false))
- return false;
- if (!Open(backing_file_path()) || !InitializeTables())
- return false;
- created_on_disk_ = true;
- return true;
-}
-
-DirOpenResult DeferredOnDiskDirectoryBackingStore::Load(
- Directory::MetahandlesMap* handles_map,
- JournalIndex* delete_journals,
- MetahandleSet* metahandles_to_purge,
- Directory::KernelLoadInfo* kernel_load_info) {
- DCHECK(CalledOnValidThread());
- // Open an in-memory database at first to create initial sync data needed by
- // Directory.
- CHECK(!IsOpen());
- if (!OpenInMemory())
- return FAILED_OPEN_DATABASE;
-
- if (!InitializeTables())
- return FAILED_OPEN_DATABASE;
- if (!LoadEntries(handles_map, metahandles_to_purge))
- return FAILED_DATABASE_CORRUPT;
- if (!LoadInfo(kernel_load_info))
- return FAILED_DATABASE_CORRUPT;
-
- return OPENED;
-}
-
-} // namespace syncable
-} // namespace syncer
diff --git a/sync/syncable/deferred_on_disk_directory_backing_store.h b/sync/syncable/deferred_on_disk_directory_backing_store.h
deleted file mode 100644
index 0531737..0000000
--- a/sync/syncable/deferred_on_disk_directory_backing_store.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef SYNC_SYNCABLE_DEFERRED_ON_DISK_DIRECTORY_BACKING_STORE_H_
-#define SYNC_SYNCABLE_DEFERRED_ON_DISK_DIRECTORY_BACKING_STORE_H_
-
-#include <string>
-
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "sync/base/sync_export.h"
-#include "sync/syncable/on_disk_directory_backing_store.h"
-
-namespace syncer {
-namespace syncable {
-
-// Store used for backing up user's data before first sync. It creates an
-// in-memory store first and switch to on-disk store if SaveChanges() is
-// called, which only happens when SyncBackupManager is shut down and a
-// syncing backend is to be created. Thus we guarantee that user data is not
-// persisted until user is actually going to sync.
-class SYNC_EXPORT DeferredOnDiskDirectoryBackingStore
- : public OnDiskDirectoryBackingStore {
- public:
- DeferredOnDiskDirectoryBackingStore(const std::string& dir_name,
- const base::FilePath& backing_file_path);
- ~DeferredOnDiskDirectoryBackingStore() override;
- DirOpenResult Load(Directory::MetahandlesMap* handles_map,
- JournalIndex* delete_journals,
- MetahandleSet* metahandles_to_purge,
- Directory::KernelLoadInfo* kernel_load_info) override;
- bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot) override;
-
- private:
- // Create an on-disk directory backing store. Returns true on success, false
- // on error.
- bool CreateOnDisk();
-
- // Whether an on-disk directory backing store has been created.
- bool created_on_disk_;
-
- DISALLOW_COPY_AND_ASSIGN(DeferredOnDiskDirectoryBackingStore);
-};
-
-} // namespace syncable
-} // namespace syncer
-
-#endif // SYNC_SYNCABLE_DEFERRED_ON_DISK_DIRECTORY_BACKING_STORE_H_
diff --git a/sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc b/sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc
deleted file mode 100644
index a62060a..0000000
--- a/sync/syncable/deferred_on_disk_directory_backing_store_unittest.cc
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2014 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 "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "sync/syncable/deferred_on_disk_directory_backing_store.h"
-#include "sync/syncable/directory.h"
-#include "sync/syncable/entry_kernel.h"
-#include "sync/syncable/on_disk_directory_backing_store.h"
-#include "sync/syncable/syncable_delete_journal.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace syncer {
-namespace syncable {
-namespace {
-
-static const base::FilePath::CharType kSyncDataFolderName[] =
- FILE_PATH_LITERAL("Sync Data");
-
-class DeferredOnDiskDirectoryBackingStoreTest : public testing::Test {
- protected:
- void SetUp() override {
- CHECK(temp_dir_.CreateUniqueTempDir());
- db_path_ = temp_dir_.path().Append(kSyncDataFolderName);
- }
-
- void TearDown() override { STLDeleteValues(&handles_map_); }
-
- base::MessageLoop message_loop_;
- base::ScopedTempDir temp_dir_;
- base::FilePath db_path_;
- Directory::MetahandlesMap handles_map_;
- JournalIndex delete_journals_;
- MetahandleSet metahandles_to_purge_;
- Directory::KernelLoadInfo kernel_load_info_;
-};
-
-// Test initialization of root entry when calling Load().
-TEST_F(DeferredOnDiskDirectoryBackingStoreTest, Load) {
- DeferredOnDiskDirectoryBackingStore store("test", db_path_);
- EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_,
- &metahandles_to_purge_, &kernel_load_info_));
- EXPECT_TRUE(delete_journals_.empty());
- EXPECT_TRUE(metahandles_to_purge_.empty());
- ASSERT_EQ(1u, handles_map_.size()); // root node
- ASSERT_TRUE(handles_map_.count(1));
- EntryKernel* root = handles_map_[1];
- EXPECT_TRUE(root->ref(ID).IsRoot());
- EXPECT_EQ(1, root->ref(META_HANDLE));
- EXPECT_TRUE(root->ref(IS_DIR));
-}
-
-// Test on-disk DB is not created if SaveChanges() is not called.
-TEST_F(DeferredOnDiskDirectoryBackingStoreTest,
- DontPersistIfSavingChangesNotCalled) {
- {
- // Open and close.
- DeferredOnDiskDirectoryBackingStore store("test", db_path_);
- EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_,
- &metahandles_to_purge_, &kernel_load_info_));
- }
-
- EXPECT_FALSE(base::PathExists(db_path_));
-}
-
-// Test on-disk DB is not created when there are no changes.
-TEST_F(DeferredOnDiskDirectoryBackingStoreTest,
- DontPersistWhenSavingNoChanges) {
- {
- // Open and close.
- DeferredOnDiskDirectoryBackingStore store("test", db_path_);
- EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_,
- &metahandles_to_purge_, &kernel_load_info_));
-
- Directory::SaveChangesSnapshot snapshot;
- store.SaveChanges(snapshot);
- }
-
- EXPECT_FALSE(base::PathExists(db_path_));
-}
-
-// Test changes are persisted to disk when SaveChanges() is called.
-TEST_F(DeferredOnDiskDirectoryBackingStoreTest, PersistWhenSavingValidChanges) {
- {
- // Open and close.
- DeferredOnDiskDirectoryBackingStore store("test", db_path_);
- EXPECT_EQ(OPENED, store.Load(&handles_map_, &delete_journals_,
- &metahandles_to_purge_, &kernel_load_info_));
-
- Directory::SaveChangesSnapshot snapshot;
- EntryKernel* entry = new EntryKernel();
- entry->put(ID, Id::CreateFromClientString("test_entry"));
- entry->put(META_HANDLE, 2);
- entry->mark_dirty(NULL);
- snapshot.dirty_metas.insert(entry);
- store.SaveChanges(snapshot);
- }
-
- STLDeleteValues(&handles_map_);
-
- ASSERT_TRUE(base::PathExists(db_path_));
- OnDiskDirectoryBackingStore read_store("test", db_path_);
- EXPECT_EQ(OPENED,
- read_store.Load(&handles_map_, &delete_journals_,
- &metahandles_to_purge_, &kernel_load_info_));
- ASSERT_EQ(2u, handles_map_.size());
- ASSERT_TRUE(handles_map_.count(1)); // root node
- ASSERT_TRUE(handles_map_.count(2));
- EntryKernel* entry = handles_map_[2];
- EXPECT_EQ(Id::CreateFromClientString("test_entry"), entry->ref(ID));
-}
-
-} // namespace
-} // namespace syncable
-} // namespace syncer
diff --git a/sync/tools/sync_client.cc b/sync/tools/sync_client.cc
index deba666..36c7561 100644
--- a/sync/tools/sync_client.cc
+++ b/sync/tools/sync_client.cc
@@ -396,7 +396,7 @@ int SyncClientMain(int argc, char* argv[]) {
workers.push_back(passive_model_safe_worker);
// Set up sync manager.
- SyncManagerFactory sync_manager_factory(SyncManagerFactory::NORMAL);
+ SyncManagerFactory sync_manager_factory;
scoped_ptr<SyncManager> sync_manager =
sync_manager_factory.CreateSyncManager("sync_client manager");
LoggingJsEventHandler js_event_handler;