• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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.
4 
5 #ifndef SYNC_TEST_ENGINE_INJECTABLE_SYNC_CORE_PROXY_H_
6 #define SYNC_TEST_ENGINE_INJECTABLE_SYNC_CORE_PROXY_H_
7 
8 #include "sync/internal_api/public/base/model_type.h"
9 #include "sync/internal_api/public/sync_core_proxy.h"
10 
11 namespace syncer {
12 
13 struct DataTypeState;
14 class NonBlockingTypeProcessor;
15 class NonBlockingTypeProcessorCoreInterface;
16 
17 // A SyncCoreProxy implementation that, when a connection request is made,
18 // initalizes a connection to a previously injected NonBlockingTypeProcessor.
19 class InjectableSyncCoreProxy : public syncer::SyncCoreProxy {
20  public:
21   explicit InjectableSyncCoreProxy(NonBlockingTypeProcessorCoreInterface* core);
22   virtual ~InjectableSyncCoreProxy();
23 
24   virtual void ConnectTypeToCore(
25       syncer::ModelType type,
26       const DataTypeState& data_type_state,
27       base::WeakPtr<syncer::NonBlockingTypeProcessor> type_processor) OVERRIDE;
28   virtual void Disconnect(syncer::ModelType type) OVERRIDE;
29   virtual scoped_ptr<SyncCoreProxy> Clone() const OVERRIDE;
30 
31   NonBlockingTypeProcessorCoreInterface* GetProcessorCore();
32 
33  private:
34   // A flag to ensure ConnectTypeToCore is called at most once.
35   bool is_core_connected_;
36 
37   // The NonBlockingTypeProcessor's contract expects that it gets to own this
38   // object, so we can retain only a non-owned pointer to it.
39   //
40   // This is very unsafe, but we can get away with it since these tests are not
41   // exercising the processor <-> processor_core connection code.
42   NonBlockingTypeProcessorCoreInterface* processor_core_;
43 };
44 
45 }  // namespace syncer
46 
47 #endif  // SYNC_TEST_ENGINE_INJECTABLE_SYNC_CORE_PROXY_H_
48