blob: 27de8804a90b5f4522aa072941e0f8cbc5cacacf [file] [log] [blame]
// 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.
#include "sync/test/engine/injectable_sync_context_proxy.h"
#include "sync/engine/model_type_sync_proxy_impl.h"
#include "sync/engine/model_type_sync_worker.h"
namespace syncer {
InjectableSyncContextProxy::InjectableSyncContextProxy(
ModelTypeSyncWorker* worker)
: is_worker_connected_(false), worker_(worker) {
}
InjectableSyncContextProxy::~InjectableSyncContextProxy() {
}
void InjectableSyncContextProxy::ConnectTypeToSync(
syncer::ModelType type,
const DataTypeState& data_type_state,
const base::WeakPtr<syncer::ModelTypeSyncProxyImpl>& type_sync_proxy) {
// This class is allowed to participate in only one connection.
DCHECK(!is_worker_connected_);
is_worker_connected_ = true;
// Hands off ownership of our member to the type_sync_proxy, while keeping
// an unsafe pointer to it. This is why we can only connect once.
scoped_ptr<ModelTypeSyncWorker> worker(worker_);
type_sync_proxy->OnConnect(worker.Pass());
}
void InjectableSyncContextProxy::Disconnect(syncer::ModelType type) {
// This should delete the worker, but we don't own it.
worker_ = NULL;
}
scoped_ptr<SyncContextProxy> InjectableSyncContextProxy::Clone() const {
// This confuses ownership. We trust that our callers are well-behaved.
return scoped_ptr<SyncContextProxy>(new InjectableSyncContextProxy(worker_));
}
ModelTypeSyncWorker* InjectableSyncContextProxy::GetWorker() {
return worker_;
}
} // namespace syncer