// Copyright 2015 The Chromium OS 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 <brillo/dbus/dbus_service_watcher.h>

#include <base/bind.h>

namespace brillo {
namespace dbus_utils {

DBusServiceWatcher::DBusServiceWatcher(
    scoped_refptr<dbus::Bus> bus,
    const std::string& connection_name,
    const base::Closure& on_connection_vanish)
    : bus_{bus},
      connection_name_{connection_name},
      on_connection_vanish_{on_connection_vanish} {
  monitoring_callback_ = base::Bind(&DBusServiceWatcher::OnServiceOwnerChange,
                                    weak_factory_.GetWeakPtr());
  // Register to listen, and then request the current owner;
  bus_->ListenForServiceOwnerChange(connection_name_, monitoring_callback_);
  bus_->GetServiceOwner(connection_name_, monitoring_callback_);
}

DBusServiceWatcher::~DBusServiceWatcher() {
  bus_->UnlistenForServiceOwnerChange(connection_name_, monitoring_callback_);
}

void DBusServiceWatcher::OnServiceOwnerChange(
    const std::string& service_owner) {
  if (service_owner.empty()) {
    on_connection_vanish_.Run();
  }
}

}  // namespace dbus_utils
}  // namespace brillo
