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

Unified Diff: sync/internal_api/sync_manager_impl.h

Issue 10704214: [Sync] Refactor sync manager into interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Comments Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sync/internal_api/sync_manager_impl.h
diff --git a/sync/internal_api/sync_manager_impl.h b/sync/internal_api/sync_manager_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..783822d4c95ee833f9ab0dc7044758de5ea2166d
--- /dev/null
+++ b/sync/internal_api/sync_manager_impl.h
@@ -0,0 +1,128 @@
+// 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.
+
+#ifndef SYNC_INTERNAL_API_SYNC_MANAGER_H_
+#define SYNC_INTERNAL_API_SYNC_MANAGER_H_
+
+#include <string>
+#include <vector>
+
+#include "sync/internal_api/public/sync_manager.h"
+
+namespace syncer {
+
+// SyncManager encapsulates syncable::Directory and serves as the parent of all
+// other objects in the sync API. If multiple threads interact with the same
+// local sync repository (i.e. the same sqlite database), they should share a
+// single SyncManager instance. The caller should typically create one
+// SyncManager for the lifetime of a user session.
+//
+// Unless stated otherwise, all methods of SyncManager should be called on the
+// same thread.
+class SyncManagerImpl : public SyncManager {
+ public:
+ // SyncInternal contains the implementation of SyncManager, while abstracting
+ // internal types from clients of the interface.
+ class SyncInternal;
+
+ // Create an uninitialized SyncManager. Callers must Init() before using.
+ explicit SyncManagerImpl(const std::string& name);
+ virtual ~SyncManagerImpl();
+
+ // SyncManager implementation.
+ virtual bool Init(
+ const FilePath& database_location,
+ const syncer::WeakHandle<syncer::JsEventHandler>& event_handler,
+ const std::string& sync_server_and_path,
+ int sync_server_port,
+ bool use_ssl,
+ const scoped_refptr<base::TaskRunner>& blocking_task_runner,
+ scoped_ptr<HttpPostProviderFactory> post_factory,
+ const syncer::ModelSafeRoutingInfo& model_safe_routing_info,
+ const std::vector<syncer::ModelSafeWorker*>& workers,
+ syncer::ExtensionsActivityMonitor* extensions_activity_monitor,
+ SyncManager::ChangeDelegate* change_delegate,
+ const SyncCredentials& credentials,
+ scoped_ptr<syncer::SyncNotifier> sync_notifier,
+ const std::string& restored_key_for_bootstrapping,
+ TestingMode testing_mode,
+ syncer::Encryptor* encryptor,
+ syncer::UnrecoverableErrorHandler* unrecoverable_error_handler,
+ syncer::ReportUnrecoverableErrorFunction
+ report_unrecoverable_error_function) OVERRIDE;
+ virtual void ThrowUnrecoverableError() OVERRIDE;
+ virtual syncer::ModelTypeSet InitialSyncEndedTypes() OVERRIDE;
+ virtual syncer::ModelTypeSet GetTypesWithEmptyProgressMarkerToken(
+ syncer::ModelTypeSet types) OVERRIDE;
+ virtual bool PurgePartiallySyncedTypes() OVERRIDE;
+ virtual void UpdateCredentials(const SyncCredentials& credentials) OVERRIDE;
+ virtual void UpdateEnabledTypes(
+ const syncer::ModelTypeSet& enabled_types) OVERRIDE;
+ virtual void StartSyncingNormally(
+ const syncer::ModelSafeRoutingInfo& routing_info) OVERRIDE;
+ virtual void SetEncryptionPassphrase(const std::string& passphrase,
+ bool is_explicit) OVERRIDE;
+ virtual void SetDecryptionPassphrase(const std::string& passphrase) OVERRIDE;
+ virtual void ConfigureSyncer(
+ ConfigureReason reason,
+ const syncer::ModelTypeSet& types_to_config,
+ const syncer::ModelSafeRoutingInfo& new_routing_info,
+ const base::Closure& ready_task,
+ const base::Closure& retry_task) OVERRIDE;
+ virtual void AddObserver(Observer* observer) OVERRIDE;
+ virtual void RemoveObserver(Observer* observer) OVERRIDE;
+ virtual SyncStatus GetDetailedStatus() const OVERRIDE;
+ virtual bool IsUsingExplicitPassphrase() OVERRIDE;
+ virtual void SaveChanges() OVERRIDE;
+ virtual void StopSyncingForShutdown(const base::Closure& callback) OVERRIDE;
+ virtual void ShutdownOnSyncThread() OVERRIDE;
+ virtual UserShare* GetUserShare() const OVERRIDE;
+ virtual void RefreshNigori(const std::string& chrome_version,
+ const base::Closure& done_callback) OVERRIDE;
+ virtual void EnableEncryptEverything() OVERRIDE;
+ virtual bool ReceivedExperiment(
+ syncer::Experiments* experiments) const OVERRIDE;
+ virtual bool HasUnsyncedItems() const OVERRIDE;
+
+ // Functions used for testing.
+
+ // Returns true if we are currently encrypting all sync data. May
+ // be called on any thread.
+ bool EncryptEverythingEnabledForTest() const;
+
+ // Gets the set of encrypted types from the cryptographer
+ // Note: opens a transaction. May be called from any thread.
+ syncer::ModelTypeSet GetEncryptedDataTypesForTest() const;
+
+ void SimulateEnableNotificationsForTest();
+ void SimulateDisableNotificationsForTest(int reason);
+ void TriggerOnIncomingNotificationForTest(syncer::ModelTypeSet model_types);
+
+ static int GetDefaultNudgeDelay();
+ static int GetPreferencesNudgeDelay();
+
+ private:
+ friend class SyncManagerTest;
+ FRIEND_TEST_ALL_PREFIXES(SyncManagerTest, NudgeDelayTest);
+ FRIEND_TEST_ALL_PREFIXES(SyncManagerTest, OnNotificationStateChange);
+ FRIEND_TEST_ALL_PREFIXES(SyncManagerTest, OnIncomingNotification);
+
+ base::TimeDelta GetNudgeDelayTimeDelta(const syncer::ModelType& model_type);
+
+ // Set the internal scheduler for testing purposes.
+ // TODO(sync): Use dependency injection instead. crbug.com/133061
+ void SetSyncSchedulerForTest(
+ scoped_ptr<syncer::SyncScheduler> scheduler);
+
+ base::ThreadChecker thread_checker_;
+
+ // An opaque pointer to the nested private class.
+ SyncInternal* data_;
+
+ DISALLOW_COPY_AND_ASSIGN(SyncManagerImpl);
+};
+
+} // namespace syncer
+
+#endif // SYNC_INTERNAL_API_SYNC_MANAGER_H_

Powered by Google App Engine
This is Rietveld 408576698