1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // InternalComponentsFactory exists so that tests can override creation of
6 // components used by the SyncManager that are not exposed across the sync
9 #ifndef SYNC_INTERNAL_API_PUBLIC_INTERNAL_COMPONENTS_FACTORY_H_
10 #define SYNC_INTERNAL_API_PUBLIC_INTERNAL_COMPONENTS_FACTORY_H_
15 #include "base/files/file_path.h"
16 #include "sync/base/sync_export.h"
17 #include "sync/internal_api/public/engine/model_safe_worker.h"
21 class CancelationSignal
;
22 class ExtensionsActivity
;
23 class ModelTypeRegistry
;
24 class ServerConnectionManager
;
25 class SyncEngineEventListener
;
29 class DebugInfoGetter
;
30 class SyncSessionContext
;
35 class DirectoryBackingStore
;
38 class SYNC_EXPORT InternalComponentsFactory
{
40 enum EncryptionMethod
{
42 // Option to enable support for keystore key based encryption.
46 enum BackoffOverride
{
48 // Use this value for integration testing to avoid long delays /
49 // timing out tests. Uses kInitialBackoffShortRetrySeconds (see
50 // polling_constants.h) for all initial retries.
51 BACKOFF_SHORT_INITIAL_RETRY_OVERRIDE
54 enum PreCommitUpdatesPolicy
{
55 // By default, the server will enable or disable this experiment through the
56 // sync protocol's experiments data type.
57 SERVER_CONTROLLED_PRE_COMMIT_UPDATE_AVOIANCE
,
59 // This flag overrides the server's decision and enables the pre-commit
60 // update avoidance experiment.
61 FORCE_ENABLE_PRE_COMMIT_UPDATE_AVOIDANCE
,
64 // Configuration options for internal components. This struct is expected
65 // to grow and shrink over time with transient features / experiments,
66 // roughly following command line flags in chrome. Implementations of
67 // InternalComponentsFactory can use this information to build components
68 // with appropriate bells and whistles.
70 EncryptionMethod encryption_method
;
71 BackoffOverride backoff_override
;
72 PreCommitUpdatesPolicy pre_commit_updates_policy
;
75 // For selecting the types of storage to use to persist sync data when
76 // BuildDirectoryBackingStore() is called.
78 // BuildDirectoryBackingStore should not use persistent on-disk storage.
80 // Use this if you want BuildDirectoryBackingStore to create/use a real
83 // Use this to defer creating on-disk database until
84 // DirectoryBackingStore::SaveChanges() is called.
85 STORAGE_ON_DISK_DEFERRED
,
86 // Use this to test the case where a directory fails to load.
90 virtual ~InternalComponentsFactory() {}
92 virtual scoped_ptr
<SyncScheduler
> BuildScheduler(
93 const std::string
& name
,
94 sessions::SyncSessionContext
* context
,
95 CancelationSignal
* cancelation_signal
) = 0;
97 virtual scoped_ptr
<sessions::SyncSessionContext
> BuildContext(
98 ServerConnectionManager
* connection_manager
,
99 syncable::Directory
* directory
,
100 ExtensionsActivity
* extensions_activity
,
101 const std::vector
<SyncEngineEventListener
*>& listeners
,
102 sessions::DebugInfoGetter
* debug_info_getter
,
103 ModelTypeRegistry
* model_type_registry
,
104 const std::string
& invalidator_client_id
) = 0;
106 virtual scoped_ptr
<syncable::DirectoryBackingStore
>
107 BuildDirectoryBackingStore(
108 StorageOption storage
,
109 const std::string
& dir_name
,
110 const base::FilePath
& backing_filepath
) = 0;
112 // Returns the Switches struct that this object is using as configuration, if
113 // the implementation is making use of one.
114 virtual Switches
GetSwitches() const = 0;
117 } // namespace syncer
119 #endif // SYNC_INTERNAL_API_PUBLIC_INTERNAL_COMPONENTS_FACTORY_H_