blob: 763d9cf1ef84ab81cb8b6fbbb5064bcd4a8f3f08 [file] [log] [blame]
// Copyright 2015 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 "chromeos/binder/remote_object.h"
#include "base/location.h"
#include "base/threading/thread_task_runner_handle.h"
#include "chromeos/binder/command_broker.h"
namespace binder {
RemoteObject::RemoteObject(CommandBroker* command_broker, int32_t handle)
: release_closure_(command_broker->GetReleaseReferenceClosure(handle)),
release_task_runner_(base::ThreadTaskRunnerHandle::Get()),
handle_(handle) {
command_broker->AddReference(handle_);
}
RemoteObject::~RemoteObject() {
if (release_task_runner_->BelongsToCurrentThread()) {
release_closure_.Run();
} else {
release_task_runner_->PostTask(FROM_HERE, release_closure_);
}
}
Object::Type RemoteObject::GetType() const {
return TYPE_REMOTE;
}
bool RemoteObject::Transact(CommandBroker* command_broker,
const TransactionData& data,
std::unique_ptr<TransactionData>* reply) {
return command_broker->Transact(handle_, data, reply);
}
} // namespace binder