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