Ben Chan | 084faca | 2013-07-02 14:25:12 -0700 | [diff] [blame] | 1 | // Copyright (c) 2014 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 "shill/dbus_name_watcher.h" |
| 6 | |
| 7 | #include "shill/dbus_manager.h" |
| 8 | |
| 9 | using std::string; |
| 10 | |
| 11 | namespace shill { |
| 12 | |
| 13 | DBusNameWatcher::DBusNameWatcher( |
| 14 | DBusManager *dbus_manager, |
| 15 | const string &name, |
| 16 | const NameAppearedCallback &name_appeared_callback, |
| 17 | const NameVanishedCallback &name_vanished_callback) |
| 18 | : dbus_manager_(dbus_manager->AsWeakPtr()), |
| 19 | name_(name), |
| 20 | name_appeared_callback_(name_appeared_callback), |
| 21 | name_vanished_callback_(name_vanished_callback) {} |
| 22 | |
| 23 | DBusNameWatcher::~DBusNameWatcher() { |
| 24 | if (dbus_manager_) |
| 25 | dbus_manager_->RemoveNameWatcher(this); |
| 26 | } |
| 27 | |
| 28 | void DBusNameWatcher::OnNameOwnerChanged(const string &owner) const { |
| 29 | if (owner.empty()) { |
| 30 | if (!name_vanished_callback_.is_null()) { |
| 31 | name_vanished_callback_.Run(name_); |
| 32 | } |
| 33 | } else { |
| 34 | if (!name_appeared_callback_.is_null()) { |
| 35 | name_appeared_callback_.Run(name_, owner); |
| 36 | } |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | } // namespace shill |