diff options
author | nywang <nywang@chromium.org> | 2015-09-28 15:46:36 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-28 22:48:10 +0000 |
commit | a5523d02410fc00401b569cfcac06f71b09b1c66 (patch) | |
tree | a1a0a4151ffbd7304449a23021536920079b7ad5 /dbus/property.cc | |
parent | 45cbfc953362be66bb1813b38d3c0d76a68fe9a0 (diff) | |
download | chromium_src-a5523d02410fc00401b569cfcac06f71b09b1c66.zip chromium_src-a5523d02410fc00401b569cfcac06f71b09b1c66.tar.gz chromium_src-a5523d02410fc00401b569cfcac06f71b09b1c66.tar.bz2 |
dbus: add support for synchronous PropertySet::Get
The existing PropertySet::Get function is asynchronous.
This CL adds the synchronous version of PropertySet::Get.
It is defined as PropertySet::GetAndBlock.
Also fix some typos and indent problems in previous
introduced SetAndBlock().
BUG=https://b.corp.google.com/u/0/issues/24131409
TEST=manually tested
Review URL: https://codereview.chromium.org/1368713002
Cr-Commit-Position: refs/heads/master@{#351185}
Diffstat (limited to 'dbus/property.cc')
-rw-r--r-- | dbus/property.cc | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/dbus/property.cc b/dbus/property.cc index b7a0c8b..234036c 100644 --- a/dbus/property.cc +++ b/dbus/property.cc @@ -133,6 +133,35 @@ void PropertySet::OnGet(PropertyBase* property, GetCallback callback, callback.Run(response); } +bool PropertySet::GetAndBlock(PropertyBase* property) { + MethodCall method_call(kPropertiesInterface, kPropertiesGet); + MessageWriter writer(&method_call); + writer.AppendString(interface()); + writer.AppendString(property->name()); + + DCHECK(object_proxy_); + scoped_ptr<dbus::Response> response( + object_proxy_->CallMethodAndBlock(&method_call, + ObjectProxy::TIMEOUT_USE_DEFAULT)); + + if (!response.get()) { + LOG(WARNING) << property->name() << ": GetAndBlock: failed."; + return false; + } + + MessageReader reader(response.get()); + if (property->PopValueFromReader(&reader)) { + property->set_valid(true); + NotifyPropertyChanged(property->name()); + } else { + if (property->is_valid()) { + property->set_valid(false); + NotifyPropertyChanged(property->name()); + } + } + return true; +} + void PropertySet::GetAll() { MethodCall method_call(kPropertiesInterface, kPropertiesGetAll); MessageWriter writer(&method_call); @@ -184,7 +213,7 @@ bool PropertySet::SetAndBlock(PropertyBase* property) { DCHECK(object_proxy_); scoped_ptr<dbus::Response> response( object_proxy_->CallMethodAndBlock(&method_call, - ObjectProxy::TIMEOUT_USE_DEFAULT)); + ObjectProxy::TIMEOUT_USE_DEFAULT)); if (response.get()) return true; return false; |