Home | History | Annotate | Download | only in dbus
      1 // Copyright 2015 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <brillo/dbus/dbus_service_watcher.h>
      6 
      7 #include <base/bind.h>
      8 
      9 namespace brillo {
     10 namespace dbus_utils {
     11 
     12 DBusServiceWatcher::DBusServiceWatcher(
     13     scoped_refptr<dbus::Bus> bus,
     14     const std::string& connection_name,
     15     const base::Closure& on_connection_vanish)
     16     : bus_{bus},
     17       connection_name_{connection_name},
     18       on_connection_vanish_{on_connection_vanish} {
     19   monitoring_callback_ = base::Bind(
     20       &DBusServiceWatcher::OnServiceOwnerChange, weak_factory_.GetWeakPtr());
     21   // Register to listen, and then request the current owner;
     22   bus_->ListenForServiceOwnerChange(connection_name_, monitoring_callback_);
     23   bus_->GetServiceOwner(connection_name_, monitoring_callback_);
     24 }
     25 
     26 DBusServiceWatcher::~DBusServiceWatcher() {
     27   bus_->UnlistenForServiceOwnerChange(
     28       connection_name_, monitoring_callback_);
     29 }
     30 
     31 void DBusServiceWatcher::OnServiceOwnerChange(
     32     const std::string& service_owner) {
     33   if (service_owner.empty()) {
     34     on_connection_vanish_.Run();
     35   }
     36 }
     37 
     38 }  // namespace dbus_utils
     39 }  // namespace brillo
     40