| Index: chromeos/dbus/power_manager_client.cc
|
| diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
|
| index 90097f817c855e77616cbfafd815c99655946755..2ee1a195e42d04e356eff8206be6996c6852147d 100644
|
| --- a/chromeos/dbus/power_manager_client.cc
|
| +++ b/chromeos/dbus/power_manager_client.cc
|
| @@ -29,6 +29,7 @@
|
| #include "chromeos/dbus/power_manager/policy.pb.h"
|
| #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
|
| #include "chromeos/dbus/power_manager/suspend.pb.h"
|
| +#include "chromeos/dbus/power_manager/switch_states.pb.h"
|
| #include "chromeos/system/statistics_provider.h"
|
| #include "components/device_event_log/device_event_log.h"
|
| #include "dbus/bus.h"
|
| @@ -38,6 +39,8 @@
|
|
|
| namespace chromeos {
|
|
|
| +namespace {
|
| +
|
| // Maximum amount of time that the power manager will wait for Chrome to
|
| // say that it's ready for the system to be suspended, in milliseconds.
|
| const int kSuspendDelayTimeoutMs = 5000;
|
| @@ -45,6 +48,40 @@ const int kSuspendDelayTimeoutMs = 5000;
|
| // Human-readable description of Chrome's suspend delay.
|
| const char kSuspendDelayDescription[] = "chrome";
|
|
|
| +// Converts a LidState value from a power_manager::SwitchStates proto to the
|
| +// corresponding PowerManagerClient::LidState value.
|
| +PowerManagerClient::LidState GetLidStateFromProtoEnum(
|
| + power_manager::SwitchStates::LidState state) {
|
| + switch (state) {
|
| + case power_manager::SwitchStates_LidState_OPEN:
|
| + return PowerManagerClient::LidState::OPEN;
|
| + case power_manager::SwitchStates_LidState_CLOSED:
|
| + return PowerManagerClient::LidState::CLOSED;
|
| + case power_manager::SwitchStates_LidState_NOT_PRESENT:
|
| + return PowerManagerClient::LidState::NOT_PRESENT;
|
| + }
|
| + NOTREACHED() << "Unhandled lid state " << state;
|
| + return PowerManagerClient::LidState::NOT_PRESENT;
|
| +}
|
| +
|
| +// Converts a TabletMode value from a power_manager::SwitchStates proto to the
|
| +// corresponding PowerManagerClient::TabletMode value.
|
| +PowerManagerClient::TabletMode GetTabletModeFromProtoEnum(
|
| + power_manager::SwitchStates::TabletMode mode) {
|
| + switch (mode) {
|
| + case power_manager::SwitchStates_TabletMode_ON:
|
| + return PowerManagerClient::TabletMode::ON;
|
| + case power_manager::SwitchStates_TabletMode_OFF:
|
| + return PowerManagerClient::TabletMode::OFF;
|
| + case power_manager::SwitchStates_TabletMode_UNSUPPORTED:
|
| + return PowerManagerClient::TabletMode::UNSUPPORTED;
|
| + }
|
| + NOTREACHED() << "Unhandled tablet mode " << mode;
|
| + return PowerManagerClient::TabletMode::UNSUPPORTED;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // The PowerManagerClient implementation used in production.
|
| class PowerManagerClientImpl : public PowerManagerClient {
|
| public:
|
| @@ -262,6 +299,15 @@ class PowerManagerClientImpl : public PowerManagerClient {
|
| weak_ptr_factory_.GetWeakPtr(), callback));
|
| }
|
|
|
| + void GetSwitchStates(const GetSwitchStatesCallback& callback) override {
|
| + dbus::MethodCall method_call(power_manager::kPowerManagerInterface,
|
| + power_manager::kGetSwitchStatesMethod);
|
| + power_manager_proxy_->CallMethod(
|
| + &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + base::Bind(&PowerManagerClientImpl::OnGetSwitchStates,
|
| + weak_ptr_factory_.GetWeakPtr(), callback));
|
| + }
|
| +
|
| base::Closure GetSuspendReadinessCallback() override {
|
| DCHECK(OnOriginThread());
|
| DCHECK(suspend_is_pending_);
|
| @@ -511,6 +557,23 @@ class PowerManagerClientImpl : public PowerManagerClient {
|
| callback.Run(state);
|
| }
|
|
|
| + void OnGetSwitchStates(const GetSwitchStatesCallback& callback,
|
| + dbus::Response* response) {
|
| + if (!response) {
|
| + POWER_LOG(ERROR) << "Error calling "
|
| + << power_manager::kGetSwitchStatesMethod;
|
| + return;
|
| + }
|
| + power_manager::SwitchStates proto;
|
| + if (!dbus::MessageReader(response).PopArrayOfBytesAsProto(&proto)) {
|
| + POWER_LOG(ERROR) << "Error parsing response from "
|
| + << power_manager::kGetSwitchStatesMethod;
|
| + return;
|
| + }
|
| + callback.Run(GetLidStateFromProtoEnum(proto.lid_state()),
|
| + GetTabletModeFromProtoEnum(proto.tablet_mode()));
|
| + }
|
| +
|
| void HandlePowerSupplyProperties(
|
| const power_manager::PowerSupplyProperties& proto) {
|
| for (auto& observer : observers_)
|
| @@ -694,21 +757,21 @@ class PowerManagerClientImpl : public PowerManagerClient {
|
| break;
|
| }
|
| case power_manager::InputEvent_Type_LID_OPEN:
|
| - case power_manager::InputEvent_Type_LID_CLOSED: {
|
| - bool open =
|
| - (proto.type() == power_manager::InputEvent_Type_LID_OPEN);
|
| for (auto& observer : observers_)
|
| - observer.LidEventReceived(open, timestamp);
|
| + observer.LidEventReceived(LidState::OPEN, timestamp);
|
| + break;
|
| + case power_manager::InputEvent_Type_LID_CLOSED:
|
| + for (auto& observer : observers_)
|
| + observer.LidEventReceived(LidState::CLOSED, timestamp);
|
| break;
|
| - }
|
| case power_manager::InputEvent_Type_TABLET_MODE_ON:
|
| - case power_manager::InputEvent_Type_TABLET_MODE_OFF: {
|
| - bool on =
|
| - (proto.type() == power_manager::InputEvent_Type_TABLET_MODE_ON);
|
| for (auto& observer : observers_)
|
| - observer.TabletModeEventReceived(on, timestamp);
|
| + observer.TabletModeEventReceived(TabletMode::ON, timestamp);
|
| + break;
|
| + case power_manager::InputEvent_Type_TABLET_MODE_OFF:
|
| + for (auto& observer : observers_)
|
| + observer.TabletModeEventReceived(TabletMode::OFF, timestamp);
|
| break;
|
| - }
|
| }
|
| }
|
|
|
|
|