summaryrefslogtreecommitdiffstats
path: root/chromeos/binder/remote_object.cc
diff options
context:
space:
mode:
authorhashimoto <hashimoto@chromium.org>2016-01-05 23:22:48 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-06 07:23:33 +0000
commitec030a244f07d0ad39cede281af9e5817bf4094b (patch)
tree411df5fecd81769cdc688be91dac16756659d071 /chromeos/binder/remote_object.cc
parentb7c3414768afff35204a6c6b869c47d90d3953e0 (diff)
downloadchromium_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.cc38
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