update_engine: Use powerd for rebooting.
Make update_engine call powerd's RequestRestart method to
restart the system instead of running "shutdown -r now"
directly. This avoids races where Chrome asks powerd to shut
down the system but then update_engine sees that an update
has been applied and reboots it instead.
BUG=chromium:372074
TEST=applied an update and requested a reboot from the UI;
checked that the request was logged by powerd. held the
power button to shut down while an update was pending
and checked that the system shut down instead of
rebooting. built update_engine with the
power_management USE flag unset and checked that it was
still able to reboot the system.
CQ-DEPEND=I73f67cca9875b00bd944e4ff9779ad24fc4cd738
CQ-DEPEND=I2888fdde50a71460b74f2ef33d63ac00c5938626
Change-Id: Ic5f7c33c3f7fc5fe92ac8a2e1800830678cac235
Reviewed-on: https://chromium-review.googlesource.com/206074
Tested-by: Daniel Erat <derat@chromium.org>
Reviewed-by: Chris Sosa <sosa@chromium.org>
Commit-Queue: Daniel Erat <derat@chromium.org>
diff --git a/real_dbus_wrapper.h b/real_dbus_wrapper.h
index 4d31651..22dddde 100644
--- a/real_dbus_wrapper.h
+++ b/real_dbus_wrapper.h
@@ -7,6 +7,7 @@
// A mockable interface for DBus.
+#include <base/macros.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <dbus/dbus-glib.h>
@@ -18,25 +19,25 @@
virtual DBusGProxy* ProxyNewForName(DBusGConnection* connection,
const char* name,
const char* path,
- const char* interface) {
+ const char* interface) OVERRIDE {
return dbus_g_proxy_new_for_name(connection,
name,
path,
interface);
}
- virtual void ProxyUnref(DBusGProxy* proxy) {
+ virtual void ProxyUnref(DBusGProxy* proxy) OVERRIDE {
g_object_unref(proxy);
}
- virtual DBusGConnection* BusGet(DBusBusType type, GError** error) {
+ virtual DBusGConnection* BusGet(DBusBusType type, GError** error) OVERRIDE {
return dbus_g_bus_get(type, error);
}
virtual gboolean ProxyCall_0_1(DBusGProxy* proxy,
const char* method,
GError** error,
- GHashTable** out1) {
+ GHashTable** out1) OVERRIDE {
return dbus_g_proxy_call(proxy, method, error, G_TYPE_INVALID,
dbus_g_type_get_map("GHashTable",
G_TYPE_STRING,
@@ -44,12 +45,21 @@
out1, G_TYPE_INVALID);
}
+ virtual gboolean ProxyCall_1_0(DBusGProxy* proxy,
+ const char* method,
+ GError** error,
+ gint in1) OVERRIDE {
+ return dbus_g_proxy_call(proxy, method, error,
+ G_TYPE_INT, in1,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+ }
+
virtual gboolean ProxyCall_3_0(DBusGProxy* proxy,
const char* method,
GError** error,
const char* in1,
const char* in2,
- const char* in3) {
+ const char* in3) OVERRIDE {
return dbus_g_proxy_call(
proxy, method, error,
G_TYPE_STRING, in1, G_TYPE_STRING, in2, G_TYPE_STRING, in3,
@@ -59,7 +69,7 @@
virtual void ProxyAddSignal_2(DBusGProxy* proxy,
const char* signal_name,
GType type1,
- GType type2) {
+ GType type2) OVERRIDE {
dbus_g_proxy_add_signal(proxy, signal_name, type1, type2, G_TYPE_INVALID);
}
@@ -67,7 +77,7 @@
const char* signal_name,
GCallback handler,
void* data,
- GClosureNotify free_data_func) {
+ GClosureNotify free_data_func) OVERRIDE {
dbus_g_proxy_connect_signal(proxy, signal_name, handler, data,
free_data_func);
}
@@ -75,17 +85,18 @@
virtual void ProxyDisconnectSignal(DBusGProxy* proxy,
const char* signal_name,
GCallback handler,
- void* data) {
+ void* data) OVERRIDE {
dbus_g_proxy_disconnect_signal(proxy, signal_name, handler, data);
}
- virtual DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) {
+ virtual DBusConnection* ConnectionGetConnection(
+ DBusGConnection* gbus) OVERRIDE {
return dbus_g_connection_get_connection(gbus);
}
virtual void DBusBusAddMatch(DBusConnection* connection,
const char* rule,
- DBusError* error) {
+ DBusError* error) OVERRIDE {
dbus_bus_add_match(connection, rule, error);
}
@@ -93,7 +104,7 @@
DBusConnection* connection,
DBusHandleMessageFunction function,
void* user_data,
- DBusFreeFunction free_data_function) {
+ DBusFreeFunction free_data_function) OVERRIDE {
return dbus_connection_add_filter(connection,
function,
user_data,
@@ -102,13 +113,13 @@
virtual void DBusConnectionRemoveFilter(DBusConnection* connection,
DBusHandleMessageFunction function,
- void* user_data) {
+ void* user_data) OVERRIDE {
dbus_connection_remove_filter(connection, function, user_data);
}
dbus_bool_t DBusMessageIsSignal(DBusMessage* message,
const char* interface,
- const char* signal_name) {
+ const char* signal_name) OVERRIDE {
return dbus_message_is_signal(message, interface, signal_name);
}
@@ -116,7 +127,7 @@
DBusError* error,
char** out1,
char** out2,
- char** out3) {
+ char** out3) OVERRIDE {
return dbus_message_get_args(message, error,
DBUS_TYPE_STRING, out1,
DBUS_TYPE_STRING, out2,