diff options
author | hashimoto <hashimoto@chromium.org> | 2016-01-05 23:22:48 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-06 07:23:33 +0000 |
commit | ec030a244f07d0ad39cede281af9e5817bf4094b (patch) | |
tree | 411df5fecd81769cdc688be91dac16756659d071 /chromeos/binder/remote_object.cc | |
parent | b7c3414768afff35204a6c6b869c47d90d3953e0 (diff) | |
download | chromium_src-ec030a244f07d0ad39cede281af9e5817bf4094b.zip chromium_src-ec030a244f07d0ad39cede281af9e5817bf4094b.tar.gz chromium_src-ec030a244f07d0ad39cede281af9e5817bf4094b.tar.bz2 |
Add binder::Object
Object is the base class of LocalObject and RemoteObject.
LocalObject handles incoming transactions by actually implementing the
behavior.
RemoteObject transacts with an object living in a different process.
BUG=563282
Review URL: https://codereview.chromium.org/1538813002
Cr-Commit-Position: refs/heads/master@{#367790}
Diffstat (limited to 'chromeos/binder/remote_object.cc')
-rw-r--r-- | chromeos/binder/remote_object.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/chromeos/binder/remote_object.cc b/chromeos/binder/remote_object.cc new file mode 100644 index 0000000..c00ba3f --- /dev/null +++ b/chromeos/binder/remote_object.cc @@ -0,0 +1,38 @@ +// 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/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, + scoped_ptr<TransactionData>* reply) { + return command_broker->Transact(handle_, data, reply); +} + +} // namespace binder |