Flesh out PowerManagerMojo::ScreenBrightnessChanged
Type mapping is added for the change cause enum and the
BacklightBrightnessChange struct
Bug: 644348
Change-Id: I8e194790324b2e71b5690c7bf6ebc72ea09a4db8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1570250
Reviewed-by: Ken Rockot <rockot@google.com>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#653685}
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_client.cc b/chromeos/services/power/public/cpp/power_manager_mojo_client.cc
index eb1b9de..05a75fe 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_client.cc
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_client.cc
@@ -133,13 +133,18 @@
void PowerManagerMojoClient::DeferScreenDim() {}
-void PowerManagerMojoClient::ScreenBrightnessChanged(double percent) {
- power_manager::BacklightBrightnessChange change;
- change.set_percent(percent);
+void PowerManagerMojoClient::ScreenBrightnessChanged(
+ const power_manager::BacklightBrightnessChange& change) {
for (auto& observer : observers_)
observer.ScreenBrightnessChanged(change);
}
+void PowerManagerMojoClient::KeyboardBrightnessChanged(
+ const power_manager::BacklightBrightnessChange& change) {
+ for (auto& observer : observers_)
+ observer.KeyboardBrightnessChanged(change);
+}
+
void PowerManagerMojoClient::InitAfterInterfaceBound() {
DCHECK(controller_.is_bound());
power::mojom::PowerManagerObserverAssociatedPtrInfo ptr_info;
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_client.h b/chromeos/services/power/public/cpp/power_manager_mojo_client.h
index 853889a..637c7d4a 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_client.h
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_client.h
@@ -73,7 +73,10 @@
void DeferScreenDim() override;
// power::mojom::PowerManagerObserver:
- void ScreenBrightnessChanged(double percent) override;
+ void ScreenBrightnessChanged(
+ const power_manager::BacklightBrightnessChange& change) override;
+ void KeyboardBrightnessChanged(
+ const power_manager::BacklightBrightnessChange& change) override;
power::mojom::PowerManagerControllerPtr* interface_ptr() {
return &controller_;
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc b/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc
index 148df0c6..8cec9a9 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_controller.cc
@@ -45,8 +45,12 @@
void PowerManagerMojoController::ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) {
- // TODO(estade): serialize and pass all of |change|.
- client_->ScreenBrightnessChanged(change.percent());
+ client_->ScreenBrightnessChanged(change);
+}
+
+void PowerManagerMojoController::KeyboardBrightnessChanged(
+ const power_manager::BacklightBrightnessChange& change) {
+ client_->KeyboardBrightnessChanged(change);
}
} // namespace chromeos
diff --git a/chromeos/services/power/public/cpp/power_manager_mojo_controller.h b/chromeos/services/power/public/cpp/power_manager_mojo_controller.h
index 1a27d49..a45d92f 100644
--- a/chromeos/services/power/public/cpp/power_manager_mojo_controller.h
+++ b/chromeos/services/power/public/cpp/power_manager_mojo_controller.h
@@ -34,6 +34,8 @@
// PowerManagerClient::Observer:
void ScreenBrightnessChanged(
const power_manager::BacklightBrightnessChange& change) override;
+ void KeyboardBrightnessChanged(
+ const power_manager::BacklightBrightnessChange& change) override;
private:
mojo::BindingSet<power::mojom::PowerManagerController> binding_set_;
diff --git a/chromeos/services/power/public/mojom/OWNERS b/chromeos/services/power/public/mojom/OWNERS
index 08850f4..2c44a46 100644
--- a/chromeos/services/power/public/mojom/OWNERS
+++ b/chromeos/services/power/public/mojom/OWNERS
@@ -1,2 +1,6 @@
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
+per-file *_struct_traits*.*=set noparent
+per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
+per-file *.typemap=set noparent
+per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/chromeos/services/power/public/mojom/mojom_traits.cc b/chromeos/services/power/public/mojom/mojom_traits.cc
new file mode 100644
index 0000000..7b1c1b8
--- /dev/null
+++ b/chromeos/services/power/public/mojom/mojom_traits.cc
@@ -0,0 +1,125 @@
+// Copyright 2019 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/services/power/public/mojom/mojom_traits.h"
+
+namespace mojo {
+
+// static
+chromeos::power::mojom::BacklightBrightnessChangeCause
+EnumTraits<chromeos::power::mojom::BacklightBrightnessChangeCause,
+ power_manager::BacklightBrightnessChange_Cause>::
+ ToMojom(power_manager::BacklightBrightnessChange_Cause cause) {
+ switch (cause) {
+ case power_manager::BacklightBrightnessChange_Cause_USER_REQUEST:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kUserRequest;
+ case power_manager::BacklightBrightnessChange_Cause_USER_ACTIVITY:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kUserActivity;
+ case power_manager::BacklightBrightnessChange_Cause_USER_INACTIVITY:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kUserInactivity;
+ case power_manager::BacklightBrightnessChange_Cause_AMBIENT_LIGHT_CHANGED:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kAmbientLightChanged;
+ case power_manager::
+ BacklightBrightnessChange_Cause_EXTERNAL_POWER_CONNECTED:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kExternalPowerConnected;
+ case power_manager::
+ BacklightBrightnessChange_Cause_EXTERNAL_POWER_DISCONNECTED:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kExternalPowerDisconnected;
+ case power_manager::BacklightBrightnessChange_Cause_FORCED_OFF:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::kForcedOff;
+ case power_manager::BacklightBrightnessChange_Cause_NO_LONGER_FORCED_OFF:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kNoLongerForcedOff;
+ case power_manager::BacklightBrightnessChange_Cause_OTHER:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::kOther;
+ case power_manager::BacklightBrightnessChange_Cause_MODEL:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::kModel;
+ case power_manager::BacklightBrightnessChange_Cause_WAKE_NOTIFICATION:
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kWakeNotification;
+ }
+ NOTREACHED();
+ return chromeos::power::mojom::BacklightBrightnessChangeCause::kUserRequest;
+}
+
+// static
+bool EnumTraits<chromeos::power::mojom::BacklightBrightnessChangeCause,
+ power_manager::BacklightBrightnessChange_Cause>::
+ FromMojom(chromeos::power::mojom::BacklightBrightnessChangeCause cause,
+ power_manager::BacklightBrightnessChange_Cause* out) {
+ switch (cause) {
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::kUserRequest:
+ *out = power_manager::BacklightBrightnessChange_Cause_USER_REQUEST;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::kUserActivity:
+ *out = power_manager::BacklightBrightnessChange_Cause_USER_ACTIVITY;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kUserInactivity:
+ *out = power_manager::BacklightBrightnessChange_Cause_USER_INACTIVITY;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kAmbientLightChanged:
+ *out =
+ power_manager::BacklightBrightnessChange_Cause_AMBIENT_LIGHT_CHANGED;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kExternalPowerConnected:
+ *out = power_manager::
+ BacklightBrightnessChange_Cause_EXTERNAL_POWER_CONNECTED;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kExternalPowerDisconnected:
+ *out = power_manager::
+ BacklightBrightnessChange_Cause_EXTERNAL_POWER_DISCONNECTED;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::kForcedOff:
+ *out = power_manager::BacklightBrightnessChange_Cause_FORCED_OFF;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kNoLongerForcedOff:
+ *out =
+ power_manager::BacklightBrightnessChange_Cause_NO_LONGER_FORCED_OFF;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::kOther:
+ *out = power_manager::BacklightBrightnessChange_Cause_OTHER;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::kModel:
+ *out = power_manager::BacklightBrightnessChange_Cause_MODEL;
+ return true;
+ case chromeos::power::mojom::BacklightBrightnessChangeCause::
+ kWakeNotification:
+ *out = power_manager::BacklightBrightnessChange_Cause_WAKE_NOTIFICATION;
+ return true;
+ }
+
+ NOTREACHED();
+ return false;
+}
+
+// static
+bool StructTraits<chromeos::power::mojom::BacklightBrightnessChangeDataView,
+ power_manager::BacklightBrightnessChange>::
+ Read(chromeos::power::mojom::BacklightBrightnessChangeDataView data,
+ power_manager::BacklightBrightnessChange* out) {
+ if (data.percent() < 0. || data.percent() > 100.)
+ return false;
+
+ out->set_percent(data.percent());
+
+ power_manager::BacklightBrightnessChange_Cause cause;
+ if (!data.ReadCause(&cause))
+ return false;
+
+ out->set_cause(cause);
+ return true;
+}
+
+} // namespace mojo
diff --git a/chromeos/services/power/public/mojom/mojom_traits.h b/chromeos/services/power/public/mojom/mojom_traits.h
new file mode 100644
index 0000000..f41a567
--- /dev/null
+++ b/chromeos/services/power/public/mojom/mojom_traits.h
@@ -0,0 +1,44 @@
+// Copyright 2019 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.
+
+#ifndef CHROMEOS_SERVICES_POWER_PUBLIC_MOJOM_MOJOM_TRAITS_H_
+#define CHROMEOS_SERVICES_POWER_PUBLIC_MOJOM_MOJOM_TRAITS_H_
+
+#include "chromeos/dbus/power_manager/backlight.pb.h"
+#include "chromeos/services/power/public/mojom/power_manager.mojom-shared.h"
+#include "chromeos/services/power/public/mojom/power_manager.mojom.h"
+#include "mojo/public/cpp/bindings/enum_traits.h"
+
+namespace mojo {
+
+template <>
+struct EnumTraits<chromeos::power::mojom::BacklightBrightnessChangeCause,
+ power_manager::BacklightBrightnessChange_Cause> {
+ static chromeos::power::mojom::BacklightBrightnessChangeCause ToMojom(
+ power_manager::BacklightBrightnessChange_Cause cause);
+
+ static bool FromMojom(
+ chromeos::power::mojom::BacklightBrightnessChangeCause cause,
+ power_manager::BacklightBrightnessChange_Cause* out);
+};
+
+template <>
+struct StructTraits<chromeos::power::mojom::BacklightBrightnessChangeDataView,
+ power_manager::BacklightBrightnessChange> {
+ static double percent(
+ const power_manager::BacklightBrightnessChange& change) {
+ return change.percent();
+ }
+ static power_manager::BacklightBrightnessChange_Cause cause(
+ const power_manager::BacklightBrightnessChange& change) {
+ return change.cause();
+ }
+ static bool Read(
+ chromeos::power::mojom::BacklightBrightnessChangeDataView data,
+ power_manager::BacklightBrightnessChange* out);
+};
+
+} // namespace mojo
+
+#endif // CHROMEOS_SERVICES_POWER_PUBLIC_MOJOM_MOJOM_TRAITS_H_
diff --git a/chromeos/services/power/public/mojom/power_manager.mojom b/chromeos/services/power/public/mojom/power_manager.mojom
index 9fb289c6..f084e2e80 100644
--- a/chromeos/services/power/public/mojom/power_manager.mojom
+++ b/chromeos/services/power/public/mojom/power_manager.mojom
@@ -7,9 +7,32 @@
// TODO(https://crbug.com/657632): This struct wrapper exists to allow the value
// to be null.
struct Brightness {
+ // Brightness percent, in the range [0.0, 100.0].
double value;
};
+// Correlates to power_manager::BacklightBrightnessChange_Cause
+enum BacklightBrightnessChangeCause {
+ kUserRequest,
+ kUserActivity,
+ kUserInactivity,
+ kAmbientLightChanged,
+ kExternalPowerConnected,
+ kExternalPowerDisconnected,
+ kForcedOff,
+ kNoLongerForcedOff,
+ kOther,
+ kModel,
+ kWakeNotification,
+};
+
+// Correlates to power_manager::BacklightBrightnessChange
+struct BacklightBrightnessChange {
+ // The brightness percent is in the range [0.0, 100.0].
+ double percent;
+ BacklightBrightnessChangeCause cause;
+};
+
// The interface for handling out-of-process calls that query or adjust power
// related state. The implementation relays calls to the D-Bus client, which
// uses D-Bus to communicate with the Power Manager daemon. In Mash, this lives
@@ -25,6 +48,8 @@
// An interface for observing changes to power state. The changes are dispatched
// over mojo from PowerManagerController.
interface PowerManagerObserver {
- // TODO(estade): the parameter should be a BacklightBrightnessChange.
- ScreenBrightnessChanged(double percent);
+ // All following methods and their semantics are copied from the
+ // PowerManagerClient::Observer interface. Refer to that for documentation.
+ ScreenBrightnessChanged(BacklightBrightnessChange change);
+ KeyboardBrightnessChanged(BacklightBrightnessChange change);
};
diff --git a/chromeos/services/power/public/mojom/power_types.typemap b/chromeos/services/power/public/mojom/power_types.typemap
new file mode 100644
index 0000000..9f81e2d
--- /dev/null
+++ b/chromeos/services/power/public/mojom/power_types.typemap
@@ -0,0 +1,18 @@
+# Copyright 2019 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.
+
+mojom = "//chromeos/services/power/public/mojom/power_manager.mojom"
+public_headers = [ "chromeos/dbus/power_manager/backlight.pb.h" ]
+traits_headers = [ "//chromeos/services/power/public/mojom/mojom_traits.h" ]
+sources = [
+ "//chromeos/services/power/public/mojom/mojom_traits.cc",
+]
+deps = [
+ "//chromeos/dbus/power:power_manager_proto",
+]
+
+type_mappings = [
+ "chromeos.power.mojom.BacklightBrightnessChange=power_manager::BacklightBrightnessChange",
+ "chromeos.power.mojom.BacklightBrightnessChangeCause=power_manager::BacklightBrightnessChange_Cause",
+]
diff --git a/chromeos/services/power/public/mojom/typemaps.gni b/chromeos/services/power/public/mojom/typemaps.gni
new file mode 100644
index 0000000..7296993
--- /dev/null
+++ b/chromeos/services/power/public/mojom/typemaps.gni
@@ -0,0 +1,5 @@
+# Copyright 2019 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.
+
+typemaps = [ "//chromeos/services/power/public/mojom/power_types.typemap" ]
diff --git a/mojo/public/tools/bindings/chromium_bindings_configuration.gni b/mojo/public/tools/bindings/chromium_bindings_configuration.gni
index c2a0f44..5310784 100644
--- a/mojo/public/tools/bindings/chromium_bindings_configuration.gni
+++ b/mojo/public/tools/bindings/chromium_bindings_configuration.gni
@@ -11,6 +11,7 @@
"//chromecast/typemaps.gni",
"//chromeos/typemaps.gni",
"//chromeos/components/multidevice/mojom/typemaps.gni",
+ "//chromeos/services/power/public/mojom/typemaps.gni",
"//chromeos/services/secure_channel/public/mojom/typemaps.gni",
"//components/arc/common/typemaps.gni",
"//components/chromeos_camera/common/typemaps.gni",