0

libchrome: add support for synchronous PropertySet::Set to dbus

The existing PropertySet::Set function is asynchrounous.
This CL adds the synchrounous version of PropertySet::Set.
It is defined as PropertySet::SetAndBlock.

BUG=https://b.corp.google.com/u/0/issues/24131409
TEST=manually tested

Review URL: https://codereview.chromium.org/1361503003

Cr-Commit-Position: refs/heads/master@{#350268}
This commit is contained in:
nywang
2015-09-22 17:06:40 -07:00
committed by Commit bot
parent 84bbc68af0
commit 8dbb26ec72
2 changed files with 24 additions and 0 deletions

@ -174,6 +174,22 @@ void PropertySet::Set(PropertyBase* property, SetCallback callback) {
callback));
}
bool PropertySet::SetAndBlock(PropertyBase* property) {
MethodCall method_call(kPropertiesInterface, kPropertiesSet);
MessageWriter writer(&method_call);
writer.AppendString(interface());
writer.AppendString(property->name());
property->AppendSetValueToWriter(&writer);
DCHECK(object_proxy_);
scoped_ptr<dbus::Response> response(
object_proxy_->CallMethodAndBlock(&method_call,
ObjectProxy::TIMEOUT_USE_DEFAULT));
if (response.get())
return true;
return false;
}
void PropertySet::OnSet(PropertyBase* property,
SetCallback callback,
Response* response) {

@ -276,6 +276,8 @@ class CHROME_DBUS_EXPORT PropertySet {
// depending on the remote object. This method may be overridden by
// sub-classes if interfaces use different method calls.
virtual void Set(PropertyBase* property, SetCallback callback);
// The sychronous version of Set().
virtual bool SetAndBlock(PropertyBase* property);
virtual void OnSet(PropertyBase* property, SetCallback callback,
Response* response);
@ -389,6 +391,12 @@ class CHROME_DBUS_EXPORT Property : public PropertyBase {
property_set()->Set(this, callback);
}
// The sychronous version of Set().
virtual bool SetAndBlock(const T& value) {
set_value_ = value;
return property_set()->SetAndBlock(this);
}
// Method used by PropertySet to retrieve the value from a MessageReader,
// no knowledge of the contained type is required, this method returns
// true if its expected type was found, false if not.