Commit 91037c1a authored by thestig's avatar thestig Committed by Commit bot

Do not call GetDisplayDevice for older UPower versions.

On Linux, older versions of UPower did not have the GetDisplayDevice
method. Trying to call it generates log spam.

Modernize the modified file with base::MakeUnique while we are here.

BUG=695383

Review-Url: https://codereview.chromium.org/2795713003
Cr-Commit-Position: refs/heads/master@{#463358}
parent 4d3963df
...@@ -61,7 +61,7 @@ base::Version UPowerProperties::daemon_version() { ...@@ -61,7 +61,7 @@ base::Version UPowerProperties::daemon_version() {
class UPowerObject { class UPowerObject {
public: public:
typedef dbus::PropertySet::PropertyChangedCallback PropertyChangedCallback; using PropertyChangedCallback = dbus::PropertySet::PropertyChangedCallback;
UPowerObject(dbus::Bus* dbus, UPowerObject(dbus::Bus* dbus,
const PropertyChangedCallback property_changed_callback); const PropertyChangedCallback property_changed_callback);
...@@ -225,7 +225,7 @@ uint32_t BatteryProperties::type(uint32_t default_value) { ...@@ -225,7 +225,7 @@ uint32_t BatteryProperties::type(uint32_t default_value) {
class BatteryObject { class BatteryObject {
public: public:
typedef dbus::PropertySet::PropertyChangedCallback PropertyChangedCallback; using PropertyChangedCallback = dbus::PropertySet::PropertyChangedCallback;
BatteryObject(dbus::Bus* dbus, BatteryObject(dbus::Bus* dbus,
const dbus::ObjectPath& device_path, const dbus::ObjectPath& device_path,
...@@ -334,8 +334,8 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread ...@@ -334,8 +334,8 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread
if (!system_bus_) if (!system_bus_)
InitDBus(); InitDBus();
upower_.reset(new UPowerObject(system_bus_.get(), upower_ = base::MakeUnique<UPowerObject>(
UPowerObject::PropertyChangedCallback())); system_bus_.get(), UPowerObject::PropertyChangedCallback());
upower_->proxy()->ConnectToSignal( upower_->proxy()->ConnectToSignal(
kUPowerServiceName, kUPowerSignalDeviceAdded, kUPowerServiceName, kUPowerSignalDeviceAdded,
base::Bind(&BatteryStatusNotificationThread::DeviceAdded, base::Bind(&BatteryStatusNotificationThread::DeviceAdded,
...@@ -397,14 +397,14 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread ...@@ -397,14 +397,14 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread
[&current, this](const dbus::ObjectPath& device_path) { [&current, this](const dbus::ObjectPath& device_path) {
if (current && current->proxy()->object_path() == device_path) if (current && current->proxy()->object_path() == device_path)
return std::move(current); return std::move(current);
else return CreateBattery(device_path);
return CreateBattery(device_path);
}; };
dbus::ObjectPath display_device_path = upower_->GetDisplayDevice(); dbus::ObjectPath display_device_path;
if (!IsDaemonVersionBelow_0_99())
display_device_path = upower_->GetDisplayDevice();
if (display_device_path.IsValid()) { if (display_device_path.IsValid()) {
std::unique_ptr<BatteryObject> battery = auto battery = UseCurrentOrCreateBattery(display_device_path);
UseCurrentOrCreateBattery(display_device_path);
if (battery->IsValid()) if (battery->IsValid())
battery_ = std::move(battery); battery_ = std::move(battery);
} }
...@@ -412,9 +412,7 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread ...@@ -412,9 +412,7 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread
if (!battery_) { if (!battery_) {
int num_batteries = 0; int num_batteries = 0;
for (const auto& device_path : upower_->EnumerateDevices()) { for (const auto& device_path : upower_->EnumerateDevices()) {
std::unique_ptr<BatteryObject> battery = auto battery = UseCurrentOrCreateBattery(device_path);
UseCurrentOrCreateBattery(device_path);
if (!battery->IsValid()) if (!battery->IsValid())
continue; continue;
...@@ -433,14 +431,14 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread ...@@ -433,14 +431,14 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread
UpdateNumberBatteriesHistogram(num_batteries); UpdateNumberBatteriesHistogram(num_batteries);
} }
if (battery_) { if (!battery_) {
battery_->properties()->ConnectSignals();
NotifyBatteryStatus();
} else {
callback_.Run(mojom::BatteryStatus()); callback_.Run(mojom::BatteryStatus());
return; return;
} }
battery_->properties()->ConnectSignals();
NotifyBatteryStatus();
if (IsDaemonVersionBelow_0_99()) { if (IsDaemonVersionBelow_0_99()) {
// UPower Version 0.99 replaced the Changed signal with the // UPower Version 0.99 replaced the Changed signal with the
// PropertyChanged signal. For older versions we need to listen // PropertyChanged signal. For older versions we need to listen
...@@ -476,11 +474,10 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread ...@@ -476,11 +474,10 @@ class BatteryStatusManagerLinux::BatteryStatusNotificationThread
std::unique_ptr<BatteryObject> CreateBattery( std::unique_ptr<BatteryObject> CreateBattery(
const dbus::ObjectPath& device_path) { const dbus::ObjectPath& device_path) {
std::unique_ptr<BatteryObject> battery(new BatteryObject( return base::MakeUnique<BatteryObject>(
system_bus_.get(), device_path, system_bus_.get(), device_path,
base::Bind(&BatteryStatusNotificationThread::BatteryPropertyChanged, base::Bind(&BatteryStatusNotificationThread::BatteryPropertyChanged,
base::Unretained(this)))); base::Unretained(this)));
return battery;
} }
void DeviceAdded(dbus::Signal* signal /* unused */) { void DeviceAdded(dbus::Signal* signal /* unused */) {
...@@ -589,13 +586,14 @@ bool BatteryStatusManagerLinux::StartNotifierThreadIfNecessary() { ...@@ -589,13 +586,14 @@ bool BatteryStatusManagerLinux::StartNotifierThreadIfNecessary() {
return true; return true;
base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0); base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
notifier_thread_.reset(new BatteryStatusNotificationThread(callback_)); auto notifier_thread =
if (!notifier_thread_->StartWithOptions(thread_options)) { base::MakeUnique<BatteryStatusNotificationThread>(callback_);
notifier_thread_.reset(); if (!notifier_thread->StartWithOptions(thread_options)) {
LOG(ERROR) << "Could not start the " << kBatteryNotifierThreadName LOG(ERROR) << "Could not start the " << kBatteryNotifierThreadName
<< " thread"; << " thread";
return false; return false;
} }
notifier_thread_ = std::move(notifier_thread);
return true; return true;
} }
...@@ -608,20 +606,17 @@ std::unique_ptr<BatteryStatusManagerLinux> ...@@ -608,20 +606,17 @@ std::unique_ptr<BatteryStatusManagerLinux>
BatteryStatusManagerLinux::CreateForTesting( BatteryStatusManagerLinux::CreateForTesting(
const BatteryStatusService::BatteryUpdateCallback& callback, const BatteryStatusService::BatteryUpdateCallback& callback,
dbus::Bus* bus) { dbus::Bus* bus) {
std::unique_ptr<BatteryStatusManagerLinux> manager( auto manager = base::MakeUnique<BatteryStatusManagerLinux>(callback);
new BatteryStatusManagerLinux(callback)); if (!manager->StartNotifierThreadIfNecessary())
if (manager->StartNotifierThreadIfNecessary()) return nullptr;
manager->notifier_thread_->SetDBusForTesting(bus); manager->notifier_thread_->SetDBusForTesting(bus);
else
manager.reset();
return manager; return manager;
} }
// static // static
std::unique_ptr<BatteryStatusManager> BatteryStatusManager::Create( std::unique_ptr<BatteryStatusManager> BatteryStatusManager::Create(
const BatteryStatusService::BatteryUpdateCallback& callback) { const BatteryStatusService::BatteryUpdateCallback& callback) {
return std::unique_ptr<BatteryStatusManager>( return base::MakeUnique<BatteryStatusManagerLinux>(callback);
new BatteryStatusManagerLinux(callback));
} }
} // namespace device } // namespace device
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment