diff options
author | jennyz@chromium.org <jennyz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-14 14:54:19 +0000 |
---|---|---|
committer | jennyz@chromium.org <jennyz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-14 14:54:19 +0000 |
commit | ce3b13abc2404989ad6f31959a60881f700dd26d (patch) | |
tree | ef7730fcd6cbae8f0577826b532bd66101f8868e | |
parent | d35992788a69b2ec9ae2ac8f00ca95285a2612d4 (diff) | |
download | chromium_src-ce3b13abc2404989ad6f31959a60881f700dd26d.zip chromium_src-ce3b13abc2404989ad6f31959a60881f700dd26d.tar.gz chromium_src-ce3b13abc2404989ad6f31959a60881f700dd26d.tar.bz2 |
Hook up system clock update dbus signal to chrome and ash tray ui. cros will send tlsdate.TimeUpdated dbus signal when system clock is updated from server, chrome will listen to the signal and update ash tray ui for time.
BUG=177970
Review URL: https://chromiumcodereview.appspot.com/12564007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188070 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/system/date/clock_observer.h | 1 | ||||
-rw-r--r-- | ash/system/date/tray_date.cc | 5 | ||||
-rw-r--r-- | ash/system/date/tray_date.h | 1 | ||||
-rw-r--r-- | ash/system/tray/system_tray_notifier.cc | 6 | ||||
-rw-r--r-- | ash/system/tray/system_tray_notifier.h | 1 | ||||
-rw-r--r-- | chrome/browser/chromeos/system/ash_system_tray_delegate.cc | 9 | ||||
-rw-r--r-- | chromeos/chromeos.gyp | 4 | ||||
-rw-r--r-- | chromeos/dbus/dbus_thread_manager.cc | 10 | ||||
-rw-r--r-- | chromeos/dbus/dbus_thread_manager.h | 2 | ||||
-rw-r--r-- | chromeos/dbus/mock_dbus_thread_manager.cc | 10 | ||||
-rw-r--r-- | chromeos/dbus/mock_dbus_thread_manager.h | 6 | ||||
-rw-r--r-- | chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc | 5 | ||||
-rw-r--r-- | chromeos/dbus/mock_dbus_thread_manager_without_gmock.h | 1 | ||||
-rw-r--r-- | chromeos/dbus/mock_system_clock_client.cc | 13 | ||||
-rw-r--r-- | chromeos/dbus/mock_system_clock_client.h | 29 | ||||
-rw-r--r-- | chromeos/dbus/system_clock_client.cc | 111 | ||||
-rw-r--r-- | chromeos/dbus/system_clock_client.h | 52 |
17 files changed, 265 insertions, 1 deletions
diff --git a/ash/system/date/clock_observer.h b/ash/system/date/clock_observer.h index b82df02..3046528 100644 --- a/ash/system/date/clock_observer.h +++ b/ash/system/date/clock_observer.h @@ -12,6 +12,7 @@ class ClockObserver { virtual ~ClockObserver() {} virtual void OnDateFormatChanged() = 0; + virtual void OnSystemClockTimeUpdated() = 0; // Force a refresh (e.g. after the system is resumed). virtual void Refresh() = 0; diff --git a/ash/system/date/tray_date.cc b/ash/system/date/tray_date.cc index c603b26..4b25bbc 100644 --- a/ash/system/date/tray_date.cc +++ b/ash/system/date/tray_date.cc @@ -188,6 +188,11 @@ void TrayDate::OnDateFormatChanged() { time_tray_->UpdateTimeFormat(); } +void TrayDate::OnSystemClockTimeUpdated() { + if (time_tray_) + time_tray_->UpdateTimeFormat(); +} + void TrayDate::Refresh() { if (time_tray_) time_tray_->UpdateText(); diff --git a/ash/system/date/tray_date.h b/ash/system/date/tray_date.h index 6e11642..dc8988c 100644 --- a/ash/system/date/tray_date.h +++ b/ash/system/date/tray_date.h @@ -43,6 +43,7 @@ class TrayDate : public SystemTrayItem, // Overridden from ClockObserver. virtual void OnDateFormatChanged() OVERRIDE; + virtual void OnSystemClockTimeUpdated() OVERRIDE; virtual void Refresh() OVERRIDE; void SetupLabelForTimeTray(views::Label* label); diff --git a/ash/system/tray/system_tray_notifier.cc b/ash/system/tray/system_tray_notifier.cc index 8897917..e174e0d 100644 --- a/ash/system/tray/system_tray_notifier.cc +++ b/ash/system/tray/system_tray_notifier.cc @@ -228,6 +228,12 @@ void SystemTrayNotifier::NotifyDateFormatChanged() { OnDateFormatChanged()); } +void SystemTrayNotifier::NotifySystemClockTimeUpdated() { + FOR_EACH_OBSERVER(ClockObserver, + clock_observers_, + OnSystemClockTimeUpdated()); +} + void SystemTrayNotifier::NotifyRefreshDrive(DriveOperationStatusList& list) { FOR_EACH_OBSERVER(DriveObserver, drive_observers_, diff --git a/ash/system/tray/system_tray_notifier.h b/ash/system/tray/system_tray_notifier.h index 7437efc..8933687 100644 --- a/ash/system/tray/system_tray_notifier.h +++ b/ash/system/tray/system_tray_notifier.h @@ -107,6 +107,7 @@ public: void NotifyCapsLockChanged(bool enabled, bool search_mapped_to_caps_lock); void NotifyRefreshClock(); void NotifyDateFormatChanged(); + void NotifySystemClockTimeUpdated(); void NotifyRefreshDrive(DriveOperationStatusList& list); void NotifyRefreshIME(bool show_message); void NotifyShowLoginButtonChanged(bool show_login_button); diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc index a251ca2..684d31e 100644 --- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc +++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc @@ -82,6 +82,7 @@ #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power_manager_client.h" #include "chromeos/dbus/session_manager_client.h" +#include "chromeos/dbus/system_clock_client.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_service.h" @@ -197,6 +198,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, public content::NotificationObserver, public input_method::InputMethodManager::Observer, public system::TimezoneSettings::Observer, + public chromeos::SystemClockClient::Observer, public device::BluetoothAdapter::Observer, public SystemKeyEventListener::CapsLockObserver, public ash::NetworkTrayDelegate, @@ -265,6 +267,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, input_method::GetInputMethodManager()->AddObserver(this); system::TimezoneSettings::GetInstance()->AddObserver(this); + DBusThreadManager::Get()->GetSystemClockClient()->AddObserver(this); if (SystemKeyEventListener::GetInstance()) SystemKeyEventListener::GetInstance()->AddCapsLockObserver(this); @@ -313,6 +316,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, audiohandler->RemoveVolumeObserver(this); DBusThreadManager::Get()->GetSessionManagerClient()->RemoveObserver(this); DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this); + DBusThreadManager::Get()->GetSystemClockClient()->RemoveObserver(this); NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); if (crosnet) crosnet->RemoveNetworkManagerObserver(this); @@ -1307,6 +1311,11 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, GetSystemTrayNotifier()->NotifyRefreshClock(); } + // Overridden from SystemClockClient::Observer. + virtual void SystemClockUpdated() OVERRIDE { + GetSystemTrayNotifier()->NotifySystemClockTimeUpdated(); + } + // Overridden from BluetoothAdapter::Observer. virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter, bool present) OVERRIDE { diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index 7fe11e8..7255fe2 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp @@ -131,6 +131,8 @@ 'dbus/session_manager_client.h', 'dbus/sms_client.cc', 'dbus/sms_client.h', + 'dbus/system_clock_client.cc', + 'dbus/system_clock_client.h', 'dbus/update_engine_client.cc', 'dbus/update_engine_client.h', 'disks/disk_mount_manager.cc', @@ -285,6 +287,8 @@ 'dbus/mock_session_manager_client.h', 'dbus/mock_sms_client.cc', 'dbus/mock_sms_client.h', + 'dbus/mock_system_clock_client.cc', + 'dbus/mock_system_clock_client.h', 'dbus/mock_update_engine_client.cc', 'dbus/mock_update_engine_client.h', 'disks/mock_disk_mount_manager.cc', diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc index 79de3d0..4c30323 100644 --- a/chromeos/dbus/dbus_thread_manager.cc +++ b/chromeos/dbus/dbus_thread_manager.cc @@ -22,12 +22,13 @@ #include "chromeos/dbus/dbus_client_implementation_type.h" #include "chromeos/dbus/dbus_thread_manager_observer.h" #include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/gsm_sms_client.h" #include "chromeos/dbus/shill_device_client.h" #include "chromeos/dbus/shill_ipconfig_client.h" #include "chromeos/dbus/shill_manager_client.h" #include "chromeos/dbus/shill_profile_client.h" #include "chromeos/dbus/shill_service_client.h" -#include "chromeos/dbus/gsm_sms_client.h" +#include "chromeos/dbus/system_clock_client.h" #include "chromeos/dbus/ibus/ibus_client.h" #include "chromeos/dbus/ibus/ibus_config_client.h" #include "chromeos/dbus/ibus/ibus_engine_factory_service.h" @@ -128,6 +129,8 @@ class DBusThreadManagerImpl : public DBusThreadManager { SessionManagerClient::Create(client_type_, system_bus_.get())); sms_client_.reset( SMSClient::Create(client_type_, system_bus_.get())); + system_clock_client_.reset( + SystemClockClient::Create(client_type_, system_bus_.get())); update_engine_client_.reset( UpdateEngineClient::Create(client_type_, system_bus_.get())); @@ -306,6 +309,10 @@ class DBusThreadManagerImpl : public DBusThreadManager { return sms_client_.get(); } + virtual SystemClockClient* GetSystemClockClient() OVERRIDE { + return system_clock_client_.get(); + } + virtual UpdateEngineClient* GetUpdateEngineClient() OVERRIDE { return update_engine_client_.get(); } @@ -384,6 +391,7 @@ class DBusThreadManagerImpl : public DBusThreadManager { scoped_ptr<IntrospectableClient> introspectable_client_; scoped_ptr<ModemMessagingClient> modem_messaging_client_; scoped_ptr<PermissionBrokerClient> permission_broker_client_; + scoped_ptr<SystemClockClient> system_clock_client_; scoped_ptr<PowerManagerClient> power_manager_client_; scoped_ptr<SessionManagerClient> session_manager_client_; scoped_ptr<SMSClient> sms_client_; diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h index 8ae4fab..94509dc 100644 --- a/chromeos/dbus/dbus_thread_manager.h +++ b/chromeos/dbus/dbus_thread_manager.h @@ -55,6 +55,7 @@ class ShillIPConfigClient; class ShillManagerClient; class ShillProfileClient; class ShillServiceClient; +class SystemClockClient; class UpdateEngineClient; // DBusThreadManager manages the D-Bus thread, the thread dedicated to @@ -149,6 +150,7 @@ class CHROMEOS_EXPORT DBusThreadManager { virtual ShillProfileClient* GetShillProfileClient() = 0; virtual ShillServiceClient* GetShillServiceClient() = 0; virtual SMSClient* GetSMSClient() = 0; + virtual SystemClockClient* GetSystemClockClient() = 0; virtual UpdateEngineClient* GetUpdateEngineClient() = 0; // Removes the ibus engine services for |object_path|. diff --git a/chromeos/dbus/mock_dbus_thread_manager.cc b/chromeos/dbus/mock_dbus_thread_manager.cc index e269fd5..59f90ed 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_power_manager_client.h" #include "chromeos/dbus/mock_session_manager_client.h" #include "chromeos/dbus/mock_sms_client.h" +#include "chromeos/dbus/mock_system_clock_client.h" #include "chromeos/dbus/mock_update_engine_client.h" #include "chromeos/dbus/power_policy_controller.h" @@ -60,6 +61,7 @@ MockDBusThreadManager::MockDBusThreadManager() mock_power_manager_client_(new MockPowerManagerClient), mock_session_manager_client_(new MockSessionManagerClient), mock_sms_client_(new MockSMSClient), + mock_system_clock_client_(new MockSystemClockClient), mock_update_engine_client_(new MockUpdateEngineClient) { EXPECT_CALL(*this, GetBluetoothAdapterClient()) .WillRepeatedly(Return(mock_bluetooth_adapter_client_.get())); @@ -103,6 +105,8 @@ MockDBusThreadManager::MockDBusThreadManager() .WillRepeatedly(Return(mock_session_manager_client_.get())); EXPECT_CALL(*this, GetSMSClient()) .WillRepeatedly(Return(mock_sms_client_.get())); + EXPECT_CALL(*this, GetSystemClockClient()) + .WillRepeatedly(Return(mock_system_clock_client())); EXPECT_CALL(*this, GetUpdateEngineClient()) .WillRepeatedly(Return(mock_update_engine_client_.get())); EXPECT_CALL(*this, GetIBusInputContextClient()) @@ -141,6 +145,12 @@ MockDBusThreadManager::MockDBusThreadManager() .Times(AnyNumber()); EXPECT_CALL(*mock_update_engine_client_.get(), AddObserver(_)) .Times(AnyNumber()); + EXPECT_CALL(*mock_system_clock_client_.get(), AddObserver(_)) + .Times(AnyNumber()); + EXPECT_CALL(*mock_system_clock_client_.get(), RemoveObserver(_)) + .Times(AnyNumber()); + EXPECT_CALL(*mock_system_clock_client_.get(), HasObserver(_)) + .Times(AnyNumber()); EXPECT_CALL(*mock_update_engine_client_.get(), RemoveObserver(_)) .Times(AnyNumber()); EXPECT_CALL(*mock_bluetooth_manager_client_.get(), AddObserver(_)) diff --git a/chromeos/dbus/mock_dbus_thread_manager.h b/chromeos/dbus/mock_dbus_thread_manager.h index ee6aeb5..85d752f 100644 --- a/chromeos/dbus/mock_dbus_thread_manager.h +++ b/chromeos/dbus/mock_dbus_thread_manager.h @@ -42,6 +42,7 @@ class MockPermissionBrokerClient; class MockPowerManagerClient; class MockSessionManagerClient; class MockSMSClient; +class MockSystemClockClient; class MockUpdateEngineClient; class PowerPolicyController; @@ -82,6 +83,7 @@ class MockDBusThreadManager : public DBusThreadManager { MOCK_METHOD0(GetPowerPolicyController, PowerPolicyController*(void)); MOCK_METHOD0(GetSessionManagerClient, SessionManagerClient*(void)); MOCK_METHOD0(GetSMSClient, SMSClient*(void)); + MOCK_METHOD0(GetSystemClockClient, SystemClockClient*(void)); MOCK_METHOD0(GetUpdateEngineClient, UpdateEngineClient*(void)); MOCK_METHOD0(GetIBusClient, IBusClient*(void)); MOCK_METHOD0(GetIBusConfigClient, IBusConfigClient*(void)); @@ -159,6 +161,9 @@ class MockDBusThreadManager : public DBusThreadManager { MockSMSClient* mock_sms_client() { return mock_sms_client_.get(); } + MockSystemClockClient* mock_system_clock_client() { + return mock_system_clock_client_.get(); + } MockUpdateEngineClient* mock_update_engine_client() { return mock_update_engine_client_.get(); } @@ -190,6 +195,7 @@ class MockDBusThreadManager : public DBusThreadManager { scoped_ptr<MockPowerManagerClient> mock_power_manager_client_; scoped_ptr<MockSessionManagerClient> mock_session_manager_client_; scoped_ptr<MockSMSClient> mock_sms_client_; + scoped_ptr<MockSystemClockClient> mock_system_clock_client_; scoped_ptr<MockUpdateEngineClient> mock_update_engine_client_; scoped_ptr<PowerPolicyController> power_policy_controller_; diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc index 3e0234e..692d703 100644 --- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc +++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc @@ -177,6 +177,11 @@ SMSClient* MockDBusThreadManagerWithoutGMock::GetSMSClient() { return NULL; } +SystemClockClient* MockDBusThreadManagerWithoutGMock::GetSystemClockClient() { + NOTIMPLEMENTED(); + return NULL; +} + UpdateEngineClient* MockDBusThreadManagerWithoutGMock::GetUpdateEngineClient() { NOTIMPLEMENTED(); return NULL; diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h index 6fe4551..dc69937 100644 --- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h +++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h @@ -63,6 +63,7 @@ class MockDBusThreadManagerWithoutGMock : public DBusThreadManager { virtual PowerPolicyController* GetPowerPolicyController() OVERRIDE; virtual SessionManagerClient* GetSessionManagerClient() OVERRIDE; virtual SMSClient* GetSMSClient() OVERRIDE; + virtual SystemClockClient* GetSystemClockClient() OVERRIDE; virtual UpdateEngineClient* GetUpdateEngineClient() OVERRIDE; virtual BluetoothOutOfBandClient* GetBluetoothOutOfBandClient() OVERRIDE; virtual IBusClient* GetIBusClient() OVERRIDE; diff --git a/chromeos/dbus/mock_system_clock_client.cc b/chromeos/dbus/mock_system_clock_client.cc new file mode 100644 index 0000000..5269719 --- /dev/null +++ b/chromeos/dbus/mock_system_clock_client.cc @@ -0,0 +1,13 @@ +// Copyright (c) 2013 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_system_clock_client.h" + + +namespace chromeos { + +MockSystemClockClient::MockSystemClockClient() {} +MockSystemClockClient::~MockSystemClockClient() {} + +} // namespace chromeos diff --git a/chromeos/dbus/mock_system_clock_client.h b/chromeos/dbus/mock_system_clock_client.h new file mode 100644 index 0000000..547c385 --- /dev/null +++ b/chromeos/dbus/mock_system_clock_client.h @@ -0,0 +1,29 @@ +// Copyright (c) 2013 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_SYSTEM_CLOCK_CLIENT_H_ +#define CHROMEOS_DBUS_MOCK_SYSTEM_CLOCK_CLIENT_H_ + +#include "chromeos/dbus/system_clock_client.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace chromeos { + +// SystemClockClient is used to communicate with the system clock. +class MockSystemClockClient : public SystemClockClient { + public: + MockSystemClockClient(); + virtual ~MockSystemClockClient(); + + MOCK_METHOD1(AddObserver, void(Observer*)); + MOCK_METHOD1(RemoveObserver, void(Observer*)); + MOCK_METHOD1(HasObserver, bool(Observer*)); + + private: + DISALLOW_COPY_AND_ASSIGN(MockSystemClockClient); +}; + +} // namespace chromeos + +#endif // CHROMEOS_DBUS_MOCK_SYSTEM_CLOCK_CLIENT_H_ diff --git a/chromeos/dbus/system_clock_client.cc b/chromeos/dbus/system_clock_client.cc new file mode 100644 index 0000000..a9daa2f --- /dev/null +++ b/chromeos/dbus/system_clock_client.cc @@ -0,0 +1,111 @@ +// Copyright (c) 2013 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/system_clock_client.h" + +#include "base/bind.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 SystemClockClient implementation used in production. +class SystemClockClientImpl : public SystemClockClient { + public: + explicit SystemClockClientImpl(dbus::Bus* bus) + : system_clock_proxy_(NULL), + weak_ptr_factory_(this) { + system_clock_proxy_ = bus->GetObjectProxy( + system_clock::kSystemClockServiceName, + dbus::ObjectPath(system_clock::kSystemClockServicePath)); + + // Monitor the D-Bus signal for TimeUpdated changes. + system_clock_proxy_->ConnectToSignal( + system_clock::kSystemClockInterface, + system_clock::kSystemClockUpdated, + base::Bind(&SystemClockClientImpl::TimeUpdatedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::Bind(&SystemClockClientImpl::TimeUpdatedConnected, + weak_ptr_factory_.GetWeakPtr())); + } + + virtual ~SystemClockClientImpl() { + } + + // SystemClockClient overrides: + virtual void AddObserver(Observer* observer) OVERRIDE { + observers_.AddObserver(observer); + } + + virtual void RemoveObserver(Observer* observer) OVERRIDE { + observers_.RemoveObserver(observer); + } + + virtual bool HasObserver(Observer* observer) OVERRIDE { + return observers_.HasObserver(observer); + } + + private: + // Called when a TimeUpdated signal is received. + void TimeUpdatedReceived(dbus::Signal* signal) { + VLOG(1) << "TimeUpdated signal received: " << signal->ToString(); + dbus::MessageReader reader(signal); + FOR_EACH_OBSERVER(Observer, observers_, SystemClockUpdated()); + } + + // Called when the TimeUpdated signal is initially connected. + void TimeUpdatedConnected(const std::string& interface_name, + const std::string& signal_name, + bool success) { + LOG_IF(ERROR, !success) + << "Failed to connect to TimeUpdated signal."; + } + + dbus::ObjectProxy* system_clock_proxy_; + ObserverList<Observer> 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<SystemClockClientImpl> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(SystemClockClientImpl); +}; + +// The SystemClockClient implementation used on Linux desktop, +// which does nothing. +class SystemClockClientStubImpl : public SystemClockClient { + public: + SystemClockClientStubImpl() {} + ~SystemClockClientStubImpl() {} + + // SystemClockClient overrides: + virtual void AddObserver(Observer* observer) OVERRIDE {} + virtual void RemoveObserver(Observer* observer) OVERRIDE {} + virtual bool HasObserver(Observer* observer) OVERRIDE { return false; } + + private: + DISALLOW_COPY_AND_ASSIGN(SystemClockClientStubImpl); +}; + +SystemClockClient::SystemClockClient() { +} + +SystemClockClient::~SystemClockClient() { +} + +// static +SystemClockClient* SystemClockClient::Create( + DBusClientImplementationType type, + dbus::Bus* bus) { + if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) { + return new SystemClockClientImpl(bus); + } + DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); + return new SystemClockClientStubImpl(); +} + +} // namespace chromeos diff --git a/chromeos/dbus/system_clock_client.h b/chromeos/dbus/system_clock_client.h new file mode 100644 index 0000000..38158da --- /dev/null +++ b/chromeos/dbus/system_clock_client.h @@ -0,0 +1,52 @@ +// Copyright (c) 2013 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_SYSTEM_CLOCK_CLIENT_H_ +#define CHROMEOS_DBUS_SYSTEM_CLOCK_CLIENT_H_ + +#include "base/observer_list.h" +#include "chromeos/chromeos_export.h" +#include "chromeos/dbus/dbus_client_implementation_type.h" + +namespace dbus { +class Bus; +} // namespace + +namespace chromeos { + +// SystemClockClient is used to communicate with the system clock. +class CHROMEOS_EXPORT SystemClockClient { + public: + // Interface for observing changes from the system clock. + class Observer { + public: + // Called when the status is updated. + virtual void SystemClockUpdated() {} + protected: + virtual ~Observer() {} + }; + + virtual ~SystemClockClient(); + + // Adds and removes the observer. + virtual void AddObserver(Observer* observer) = 0; + virtual void RemoveObserver(Observer* observer) = 0; + // Returns true if this object has the given observer. + virtual bool HasObserver(Observer* observer) = 0; + + // Creates the instance. + static SystemClockClient* Create(DBusClientImplementationType type, + dbus::Bus* bus); + + protected: + // Create() should be used instead. + SystemClockClient(); + + private: + DISALLOW_COPY_AND_ASSIGN(SystemClockClient); +}; + +} // namespace chromeos + +#endif // CHROMEOS_DBUS_SYSTEM_CLOCK_CLIENT_H_ |