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
10namespace syncer {
11
12InjectableSyncContextProxy::InjectableSyncContextProxy(
13    ModelTypeSyncWorker* worker)
14    : is_worker_connected_(false), worker_(worker) {
15}
16
17InjectableSyncContextProxy::~InjectableSyncContextProxy() {
18}
19
20void 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
36void InjectableSyncContextProxy::Disconnect(syncer::ModelType type) {
37  // This should delete the worker, but we don't own it.
38  worker_ = NULL;
39}
40
41scoped_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
46ModelTypeSyncWorker* InjectableSyncContextProxy::GetWorker() {
47  return worker_;
48}
49
50}  // namespace syncer
51