Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / sync / test / engine / injectable_sync_context_proxy.cc
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 #include "sync/test/engine/injectable_sync_context_proxy.h"
6
7 #include "sync/engine/model_type_sync_proxy_impl.h"
8 #include "sync/engine/model_type_sync_worker.h"
9
10 namespace syncer {
11
12 InjectableSyncContextProxy::InjectableSyncContextProxy(
13     ModelTypeSyncWorker* worker)
14     : is_worker_connected_(false), worker_(worker) {
15 }
16
17 InjectableSyncContextProxy::~InjectableSyncContextProxy() {
18 }
19
20 void InjectableSyncContextProxy::ConnectTypeToSync(
21     syncer::ModelType type,
22     const DataTypeState& data_type_state,
23     const UpdateResponseDataList& response_list,
24     const base::WeakPtr<syncer::ModelTypeSyncProxyImpl>& type_sync_proxy) {
25   // This class is allowed to participate in only one connection.
26   DCHECK(!is_worker_connected_);
27   is_worker_connected_ = true;
28
29   // Hands off ownership of our member to the type_sync_proxy, while keeping
30   // an unsafe pointer to it.  This is why we can only connect once.
31   scoped_ptr<ModelTypeSyncWorker> worker(worker_);
32
33   type_sync_proxy->OnConnect(worker.Pass());
34 }
35
36 void InjectableSyncContextProxy::Disconnect(syncer::ModelType type) {
37   // This should delete the worker, but we don't own it.
38   worker_ = NULL;
39 }
40
41 scoped_ptr<SyncContextProxy> InjectableSyncContextProxy::Clone() const {
42   // This confuses ownership.  We trust that our callers are well-behaved.
43   return scoped_ptr<SyncContextProxy>(new InjectableSyncContextProxy(worker_));
44 }
45
46 ModelTypeSyncWorker* InjectableSyncContextProxy::GetWorker() {
47   return worker_;
48 }
49
50 }  // namespace syncer