| // 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_CONTEXT_PROXY_IMPL_H_ |
| #define SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_IMPL_H_ |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/sequenced_task_runner.h" |
| #include "sync/base/sync_export.h" |
| #include "sync/internal_api/public/base/model_type.h" |
| #include "sync/internal_api/public/sync_context_proxy.h" |
| |
| namespace syncer { |
| |
| class SyncContext; |
| class ModelTypeSyncProxyImpl; |
| struct DataTypeState; |
| |
| // Encapsulates a reference to the sync context and the thread it's running on. |
| // Used by sync's data types to connect with the sync context. |
| // |
| // It is expected that this object will be copied to and used on many different |
| // threads. It is small and safe to pass by value. |
| class SYNC_EXPORT_PRIVATE SyncContextProxyImpl : public SyncContextProxy { |
| public: |
| SyncContextProxyImpl( |
| const scoped_refptr<base::SequencedTaskRunner>& sync_task_runner, |
| const base::WeakPtr<SyncContext>& sync_context); |
| ~SyncContextProxyImpl() override; |
| |
| // Attempts to connect a non-blocking type to the sync context. |
| // |
| // This may fail under some unusual circumstances, like shutdown. Due to the |
| // nature of WeakPtrs and cross-thread communication, the caller will be |
| // unable to distinguish a slow success from failure. |
| // |
| // Must be called from the thread where the data type lives. |
| void ConnectTypeToSync( |
| syncer::ModelType type, |
| const DataTypeState& data_type_state, |
| const UpdateResponseDataList& pending_updates, |
| const base::WeakPtr<ModelTypeSyncProxyImpl>& sync_proxy_impl) override; |
| |
| // Disables syncing for the given type on the sync thread. |
| void Disconnect(syncer::ModelType type) override; |
| |
| scoped_ptr<SyncContextProxy> Clone() const override; |
| |
| private: |
| // A SequencedTaskRunner representing the thread where the SyncContext lives. |
| scoped_refptr<base::SequencedTaskRunner> sync_task_runner_; |
| |
| // The SyncContext this object is wrapping. |
| base::WeakPtr<SyncContext> sync_context_; |
| }; |
| |
| } // namespace syncer |
| |
| #endif // SYNC_INTERNAL_API_SYNC_CONTEXT_PROXY_IMPL_H_ |