summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authorderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-21 19:33:42 +0000
committerderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-21 19:33:42 +0000
commit23bf56f2d05f21fc3715ce4979e8e667bfd320de (patch)
tree7135f93865908b0683cb4dac6af927c2f91f86d8 /chromeos
parent84fdfacdb6d60486cec8fcf2c9194d7eff61573e (diff)
downloadchromium_src-23bf56f2d05f21fc3715ce4979e8e667bfd320de.zip
chromium_src-23bf56f2d05f21fc3715ce4979e8e667bfd320de.tar.gz
chromium_src-23bf56f2d05f21fc3715ce4979e8e667bfd320de.tar.bz2
chromeos: Add RootPowerManagerClient.
This adds a RootPowerManagerClient class for communicating over D-Bus with the powerm process. I'm also updating Chrome to use the power button events from powerm instead of the ones from powerd. BUG=chromium-os:36380,chromium-os:36503 Review URL: https://chromiumcodereview.appspot.com/11421023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@169089 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r--chromeos/chromeos.gyp20
-rw-r--r--chromeos/dbus/dbus_thread_manager.cc8
-rw-r--r--chromeos/dbus/dbus_thread_manager.h2
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager.cc8
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager.h6
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc6
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager_without_gmock.h1
-rw-r--r--chromeos/dbus/mock_root_power_manager_client.cc13
-rw-r--r--chromeos/dbus/mock_root_power_manager_client.h25
-rw-r--r--chromeos/dbus/root_power_manager_client.cc148
-rw-r--r--chromeos/dbus/root_power_manager_client.h47
-rw-r--r--chromeos/dbus/root_power_manager_observer.h28
12 files changed, 312 insertions, 0 deletions
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp
index a3ecafb..7699342 100644
--- a/chromeos/chromeos.gyp
+++ b/chromeos/chromeos.gyp
@@ -16,6 +16,7 @@
'../dbus/dbus.gyp:dbus',
'../net/net.gyp:net',
'../third_party/libxml/libxml.gyp:libxml',
+ 'power_manager_proto',
'power_state_control_proto',
'power_supply_properties_proto',
'video_activity_update_proto',
@@ -110,6 +111,9 @@
'dbus/power_manager_client.h',
'dbus/power_supply_status.cc',
'dbus/power_supply_status.h',
+ 'dbus/root_power_manager_client.cc',
+ 'dbus/root_power_manager_client.h',
+ 'dbus/root_power_manager_observer.h',
'dbus/session_manager_client.cc',
'dbus/session_manager_client.h',
'dbus/speech_synthesizer_client.cc',
@@ -210,6 +214,8 @@
'dbus/mock_permission_broker_client.cc',
'dbus/mock_power_manager_client.cc',
'dbus/mock_power_manager_client.h',
+ 'dbus/mock_root_power_manager_client.cc',
+ 'dbus/mock_root_power_manager_client.h',
'dbus/mock_session_manager_client.cc',
'dbus/mock_session_manager_client.h',
'dbus/mock_sms_client.cc',
@@ -310,6 +316,20 @@
],
},
{
+ # Protobuf compiler/generator for power-manager related protocol buffers.
+ # TODO(derat): Remove other protocol buffers in favor of these.
+ 'target_name': 'power_manager_proto',
+ 'type': 'static_library',
+ 'sources': [
+ '../third_party/cros_system_api/dbus/power_manager/input_event.proto',
+ ],
+ 'variables': {
+ 'proto_in_dir': '../third_party/cros_system_api/dbus/power_manager',
+ 'proto_out_dir': 'chromeos/dbus/power_manager',
+ },
+ 'includes': ['../build/protoc.gypi'],
+ },
+ {
# Protobuf compiler / generator for the PowerSupplyProperties protocol
# buffer.
'target_name': 'power_state_control_proto',
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index 2fe96ce..cb15afd 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -40,6 +40,7 @@
#include "chromeos/dbus/modem_messaging_client.h"
#include "chromeos/dbus/permission_broker_client.h"
#include "chromeos/dbus/power_manager_client.h"
+#include "chromeos/dbus/root_power_manager_client.h"
#include "chromeos/dbus/session_manager_client.h"
#include "chromeos/dbus/sms_client.h"
#include "chromeos/dbus/speech_synthesizer_client.h"
@@ -120,6 +121,8 @@ class DBusThreadManagerImpl : public DBusThreadManager {
PermissionBrokerClient::Create(client_type, system_bus_.get()));
power_manager_client_.reset(
PowerManagerClient::Create(client_type_maybe_stub, system_bus_.get()));
+ root_power_manager_client_.reset(RootPowerManagerClient::Create(
+ client_type_maybe_stub, system_bus_.get()));
session_manager_client_.reset(
SessionManagerClient::Create(client_type, system_bus_.get()));
sms_client_.reset(
@@ -289,6 +292,10 @@ class DBusThreadManagerImpl : public DBusThreadManager {
return power_manager_client_.get();
}
+ virtual RootPowerManagerClient* GetRootPowerManagerClient() OVERRIDE {
+ return root_power_manager_client_.get();
+ }
+
virtual SessionManagerClient* GetSessionManagerClient() OVERRIDE {
return session_manager_client_.get();
}
@@ -371,6 +378,7 @@ class DBusThreadManagerImpl : public DBusThreadManager {
scoped_ptr<ModemMessagingClient> modem_messaging_client_;
scoped_ptr<PermissionBrokerClient> permission_broker_client_;
scoped_ptr<PowerManagerClient> power_manager_client_;
+ scoped_ptr<RootPowerManagerClient> root_power_manager_client_;
scoped_ptr<SessionManagerClient> session_manager_client_;
scoped_ptr<SMSClient> sms_client_;
scoped_ptr<SpeechSynthesizerClient> speech_synthesizer_client_;
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h
index d74952d..b60d2e0 100644
--- a/chromeos/dbus/dbus_thread_manager.h
+++ b/chromeos/dbus/dbus_thread_manager.h
@@ -45,6 +45,7 @@ class IntrospectableClient;
class ModemMessagingClient;
class PermissionBrokerClient;
class PowerManagerClient;
+class RootPowerManagerClient;
class SMSClient;
class SessionManagerClient;
class ShillDeviceClient;
@@ -142,6 +143,7 @@ class CHROMEOS_EXPORT DBusThreadManager {
virtual ModemMessagingClient* GetModemMessagingClient() = 0;
virtual PermissionBrokerClient* GetPermissionBrokerClient() = 0;
virtual PowerManagerClient* GetPowerManagerClient() = 0;
+ virtual RootPowerManagerClient* GetRootPowerManagerClient() = 0;
virtual SessionManagerClient* GetSessionManagerClient() = 0;
virtual ShillDeviceClient* GetShillDeviceClient() = 0;
virtual ShillIPConfigClient* GetShillIPConfigClient() = 0;
diff --git a/chromeos/dbus/mock_dbus_thread_manager.cc b/chromeos/dbus/mock_dbus_thread_manager.cc
index 302f40e..2f5f646 100644
--- a/chromeos/dbus/mock_dbus_thread_manager.cc
+++ b/chromeos/dbus/mock_dbus_thread_manager.cc
@@ -27,6 +27,7 @@
#include "chromeos/dbus/mock_modem_messaging_client.h"
#include "chromeos/dbus/mock_permission_broker_client.h"
#include "chromeos/dbus/mock_power_manager_client.h"
+#include "chromeos/dbus/mock_root_power_manager_client.h"
#include "chromeos/dbus/mock_session_manager_client.h"
#include "chromeos/dbus/mock_sms_client.h"
#include "chromeos/dbus/mock_speech_synthesizer_client.h"
@@ -62,6 +63,7 @@ MockDBusThreadManager::MockDBusThreadManager()
mock_modem_messaging_client_(new MockModemMessagingClient),
mock_permission_broker_client_(new MockPermissionBrokerClient),
mock_power_manager_client_(new MockPowerManagerClient),
+ mock_root_power_manager_client_(new MockRootPowerManagerClient),
mock_session_manager_client_(new MockSessionManagerClient),
mock_sms_client_(new MockSMSClient),
mock_speech_synthesizer_client_(new MockSpeechSynthesizerClient),
@@ -108,6 +110,8 @@ MockDBusThreadManager::MockDBusThreadManager()
.WillRepeatedly(Return(mock_modem_messaging_client()));
EXPECT_CALL(*this, GetPowerManagerClient())
.WillRepeatedly(Return(mock_power_manager_client_.get()));
+ EXPECT_CALL(*this, GetRootPowerManagerClient())
+ .WillRepeatedly(Return(mock_root_power_manager_client_.get()));
EXPECT_CALL(*this, GetSessionManagerClient())
.WillRepeatedly(Return(mock_session_manager_client_.get()));
EXPECT_CALL(*this, GetSMSClient())
@@ -125,6 +129,10 @@ MockDBusThreadManager::MockDBusThreadManager()
.Times(AnyNumber());
EXPECT_CALL(*mock_power_manager_client_.get(), RemoveObserver(_))
.Times(AnyNumber());
+ EXPECT_CALL(*mock_root_power_manager_client_.get(), AddObserver(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*mock_root_power_manager_client_.get(), RemoveObserver(_))
+ .Times(AnyNumber());
EXPECT_CALL(*mock_session_manager_client_.get(), AddObserver(_))
.Times(AnyNumber());
EXPECT_CALL(*mock_session_manager_client_.get(), RemoveObserver(_))
diff --git a/chromeos/dbus/mock_dbus_thread_manager.h b/chromeos/dbus/mock_dbus_thread_manager.h
index 92fa127..0bace79 100644
--- a/chromeos/dbus/mock_dbus_thread_manager.h
+++ b/chromeos/dbus/mock_dbus_thread_manager.h
@@ -42,6 +42,7 @@ class MockIntrospectableClient;
class MockModemMessagingClient;
class MockPermissionBrokerClient;
class MockPowerManagerClient;
+class MockRootPowerManagerClient;
class MockSessionManagerClient;
class MockSMSClient;
class MockSpeechSynthesizerClient;
@@ -82,6 +83,7 @@ class MockDBusThreadManager : public DBusThreadManager {
MOCK_METHOD0(GetModemMessagingClient, ModemMessagingClient*(void));
MOCK_METHOD0(GetPermissionBrokerClient, PermissionBrokerClient*(void));
MOCK_METHOD0(GetPowerManagerClient, PowerManagerClient*(void));
+ MOCK_METHOD0(GetRootPowerManagerClient, RootPowerManagerClient*(void));
MOCK_METHOD0(GetSessionManagerClient, SessionManagerClient*(void));
MOCK_METHOD0(GetSMSClient, SMSClient*(void));
MOCK_METHOD0(GetSpeechSynthesizerClient, SpeechSynthesizerClient*(void));
@@ -161,6 +163,9 @@ class MockDBusThreadManager : public DBusThreadManager {
MockPowerManagerClient* mock_power_manager_client() {
return mock_power_manager_client_.get();
}
+ MockRootPowerManagerClient* mock_root_power_manager_client() {
+ return mock_root_power_manager_client_.get();
+ }
MockSessionManagerClient* mock_session_manager_client() {
return mock_session_manager_client_.get();
}
@@ -197,6 +202,7 @@ class MockDBusThreadManager : public DBusThreadManager {
scoped_ptr<MockModemMessagingClient> mock_modem_messaging_client_;
scoped_ptr<MockPermissionBrokerClient> mock_permission_broker_client_;
scoped_ptr<MockPowerManagerClient> mock_power_manager_client_;
+ scoped_ptr<MockRootPowerManagerClient> mock_root_power_manager_client_;
scoped_ptr<MockSessionManagerClient> mock_session_manager_client_;
scoped_ptr<MockSMSClient> mock_sms_client_;
scoped_ptr<MockSpeechSynthesizerClient> mock_speech_synthesizer_client_;
diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc
index 3749a56..bf5d4a0 100644
--- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc
+++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc
@@ -169,6 +169,12 @@ PowerManagerClient* MockDBusThreadManagerWithoutGMock::GetPowerManagerClient() {
return NULL;
}
+RootPowerManagerClient*
+MockDBusThreadManagerWithoutGMock::GetRootPowerManagerClient() {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
SessionManagerClient*
MockDBusThreadManagerWithoutGMock::GetSessionManagerClient() {
NOTIMPLEMENTED();
diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h
index 631101f..2f6d605 100644
--- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h
+++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h
@@ -60,6 +60,7 @@ class MockDBusThreadManagerWithoutGMock : public DBusThreadManager {
virtual ModemMessagingClient* GetModemMessagingClient() OVERRIDE;
virtual PermissionBrokerClient* GetPermissionBrokerClient() OVERRIDE;
virtual PowerManagerClient* GetPowerManagerClient() OVERRIDE;
+ virtual RootPowerManagerClient* GetRootPowerManagerClient() OVERRIDE;
virtual SessionManagerClient* GetSessionManagerClient() OVERRIDE;
virtual SMSClient* GetSMSClient() OVERRIDE;
virtual SpeechSynthesizerClient* GetSpeechSynthesizerClient() OVERRIDE;
diff --git a/chromeos/dbus/mock_root_power_manager_client.cc b/chromeos/dbus/mock_root_power_manager_client.cc
new file mode 100644
index 0000000..51977cc
--- /dev/null
+++ b/chromeos/dbus/mock_root_power_manager_client.cc
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 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/dbus/mock_root_power_manager_client.h"
+
+namespace chromeos {
+
+MockRootPowerManagerClient::MockRootPowerManagerClient() {}
+
+MockRootPowerManagerClient::~MockRootPowerManagerClient() {}
+
+} // namespace chromeos
diff --git a/chromeos/dbus/mock_root_power_manager_client.h b/chromeos/dbus/mock_root_power_manager_client.h
new file mode 100644
index 0000000..6b7cf0d8
--- /dev/null
+++ b/chromeos/dbus/mock_root_power_manager_client.h
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 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_DBUS_MOCK_ROOT_POWER_MANAGER_CLIENT_H_
+#define CHROMEOS_DBUS_MOCK_ROOT_POWER_MANAGER_CLIENT_H_
+
+#include "chromeos/dbus/root_power_manager_client.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace chromeos {
+
+class MockRootPowerManagerClient : public RootPowerManagerClient {
+ public:
+ MockRootPowerManagerClient();
+ virtual ~MockRootPowerManagerClient();
+
+ MOCK_METHOD1(AddObserver, void(RootPowerManagerObserver*));
+ MOCK_METHOD1(RemoveObserver, void(RootPowerManagerObserver*));
+ MOCK_METHOD1(HasObserver, bool(RootPowerManagerObserver*));
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_MOCK_ROOT_POWER_MANAGER_CLIENT_H_
diff --git a/chromeos/dbus/root_power_manager_client.cc b/chromeos/dbus/root_power_manager_client.cc
new file mode 100644
index 0000000..d8c8b11
--- /dev/null
+++ b/chromeos/dbus/root_power_manager_client.cc
@@ -0,0 +1,148 @@
+// Copyright (c) 2012 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/dbus/root_power_manager_client.h"
+
+#include "base/bind.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "base/time.h"
+#include "chromeos/dbus/power_manager/input_event.pb.h"
+#include "chromeos/dbus/root_power_manager_observer.h"
+#include "dbus/bus.h"
+#include "dbus/message.h"
+#include "dbus/object_path.h"
+#include "dbus/object_proxy.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+
+namespace chromeos {
+
+// The RootPowerManagerClient implementation used in production.
+class RootPowerManagerClientImpl : public RootPowerManagerClient {
+ public:
+ explicit RootPowerManagerClientImpl(dbus::Bus* bus)
+ : proxy_(NULL),
+ weak_ptr_factory_(this) {
+ proxy_ = bus->GetObjectProxy(
+ power_manager::kRootPowerManagerServiceName,
+ dbus::ObjectPath(power_manager::kRootPowerManagerServicePath));
+
+ proxy_->ConnectToSignal(
+ power_manager::kRootPowerManagerInterface,
+ power_manager::kInputEventSignal,
+ base::Bind(&RootPowerManagerClientImpl::InputEventReceived,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&RootPowerManagerClientImpl::SignalConnected,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+
+ virtual ~RootPowerManagerClientImpl() {
+ }
+
+ // RootPowerManagerClient overrides:
+ virtual void AddObserver(RootPowerManagerObserver* observer) OVERRIDE {
+ observers_.AddObserver(observer);
+ }
+
+ virtual void RemoveObserver(RootPowerManagerObserver* observer) OVERRIDE {
+ observers_.RemoveObserver(observer);
+ }
+
+ virtual bool HasObserver(RootPowerManagerObserver* observer) OVERRIDE {
+ return observers_.HasObserver(observer);
+ }
+
+ private:
+ // Called when a D-Bus signal is initially connected.
+ void SignalConnected(const std::string& interface_name,
+ const std::string& signal_name,
+ bool success) {
+ if (!success)
+ LOG(WARNING) << "Failed to connect to signal " << signal_name;
+ }
+
+ void InputEventReceived(dbus::Signal* signal) {
+ dbus::MessageReader reader(signal);
+ power_manager::InputEvent proto;
+ if (!reader.PopArrayOfBytesAsProto(&proto)) {
+ LOG(ERROR) << "Unable to decode protocol buffer from "
+ << power_manager::kInputEventSignal << " signal";
+ return;
+ }
+
+ VLOG(1) << "Got " << power_manager::kInputEventSignal << " signal";
+ base::TimeTicks timestamp =
+ base::TimeTicks::FromInternalValue(proto.timestamp());
+ switch (proto.type()) {
+ case power_manager::InputEvent_Type_POWER_BUTTON_DOWN:
+ case power_manager::InputEvent_Type_POWER_BUTTON_UP: {
+ bool down =
+ (proto.type() == power_manager::InputEvent_Type_POWER_BUTTON_DOWN);
+ FOR_EACH_OBSERVER(RootPowerManagerObserver, observers_,
+ OnPowerButtonEvent(down, timestamp));
+ 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_EACH_OBSERVER(RootPowerManagerObserver, observers_,
+ OnLidEvent(open, timestamp));
+ break;
+ }
+ }
+ }
+
+ dbus::ObjectProxy* proxy_;
+
+ ObserverList<RootPowerManagerObserver> observers_;
+
+ // Note: This should remain the last member so it'll be destroyed and
+ // invalidate its weak pointers before any other members are destroyed.
+ base::WeakPtrFactory<RootPowerManagerClientImpl> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(RootPowerManagerClientImpl);
+};
+
+// A no-op RootPowerManagerClient implementation used on Linux desktops.
+class RootPowerManagerClientStubImpl : public RootPowerManagerClient {
+ public:
+ RootPowerManagerClientStubImpl() {}
+ virtual ~RootPowerManagerClientStubImpl() {}
+
+ // RootPowerManagerClient overrides:
+ virtual void AddObserver(RootPowerManagerObserver* observer) OVERRIDE {
+ observers_.AddObserver(observer);
+ }
+
+ virtual void RemoveObserver(RootPowerManagerObserver* observer) OVERRIDE {
+ observers_.RemoveObserver(observer);
+ }
+
+ virtual bool HasObserver(RootPowerManagerObserver* observer) OVERRIDE {
+ return observers_.HasObserver(observer);
+ }
+
+ private:
+ ObserverList<RootPowerManagerObserver> observers_;
+
+ DISALLOW_COPY_AND_ASSIGN(RootPowerManagerClientStubImpl);
+};
+
+RootPowerManagerClient::RootPowerManagerClient() {
+}
+
+RootPowerManagerClient::~RootPowerManagerClient() {
+}
+
+RootPowerManagerClient* RootPowerManagerClient::Create(
+ DBusClientImplementationType type,
+ dbus::Bus* bus) {
+ if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
+ return new RootPowerManagerClientImpl(bus);
+ DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
+ return new RootPowerManagerClientStubImpl();
+}
+
+} // namespace chromeos
diff --git a/chromeos/dbus/root_power_manager_client.h b/chromeos/dbus/root_power_manager_client.h
new file mode 100644
index 0000000..8bdb695
--- /dev/null
+++ b/chromeos/dbus/root_power_manager_client.h
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 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_DBUS_ROOT_POWER_MANAGER_CLIENT_H_
+#define CHROMEOS_DBUS_ROOT_POWER_MANAGER_CLIENT_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client_implementation_type.h"
+
+namespace dbus {
+class Bus;
+}
+
+namespace chromeos {
+
+class RootPowerManagerObserver;
+
+// RootPowerManagerClient is used to communicate with the powerm process.
+class CHROMEOS_EXPORT RootPowerManagerClient {
+ public:
+ // Adds and removes observers.
+ virtual void AddObserver(RootPowerManagerObserver* observer) = 0;
+ virtual void RemoveObserver(RootPowerManagerObserver* observer) = 0;
+ virtual bool HasObserver(RootPowerManagerObserver* observer) = 0;
+
+ // Creates the instance.
+ static RootPowerManagerClient* Create(DBusClientImplementationType type,
+ dbus::Bus* bus);
+
+ virtual ~RootPowerManagerClient();
+
+ protected:
+ // Create() should be used instead.
+ RootPowerManagerClient();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(RootPowerManagerClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_ROOT_POWER_MANAGER_CLIENT_H_
diff --git a/chromeos/dbus/root_power_manager_observer.h b/chromeos/dbus/root_power_manager_observer.h
new file mode 100644
index 0000000..93fb6ec
--- /dev/null
+++ b/chromeos/dbus/root_power_manager_observer.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 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_DBUS_ROOT_POWER_MANAGER_OBSERVER_H_
+#define CHROMEOS_DBUS_ROOT_POWER_MANAGER_OBSERVER_H_
+
+#include "base/time.h"
+#include "chromeos/chromeos_export.h"
+
+namespace chromeos {
+
+class CHROMEOS_EXPORT RootPowerManagerObserver {
+ public:
+ // Called when the power button is pressed or released.
+ virtual void OnPowerButtonEvent(bool down,
+ const base::TimeTicks& timestamp) {}
+
+ // Called when the device's lid is opened or closed.
+ virtual void OnLidEvent(bool open, const base::TimeTicks& timestamp) {}
+
+ protected:
+ virtual ~RootPowerManagerObserver() {}
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_ROOT_POWER_MANAGER_OBSERVER_H_