1 // Copyright (c) 2012 The Chromium 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 "ash/system/chromeos/network/tray_network_state_observer.h" 6 7 #include <set> 8 #include <string> 9 10 #include "ash/system/chromeos/network/network_icon.h" 11 #include "base/location.h" 12 #include "chromeos/network/network_state.h" 13 #include "chromeos/network/network_state_handler.h" 14 #include "third_party/cros_system_api/dbus/service_constants.h" 15 16 using chromeos::NetworkHandler; 17 18 namespace ash { 19 20 TrayNetworkStateObserver::TrayNetworkStateObserver(Delegate* delegate) 21 : delegate_(delegate) { 22 if (NetworkHandler::IsInitialized()) { 23 NetworkHandler::Get()->network_state_handler()->AddObserver( 24 this, FROM_HERE); 25 } 26 } 27 28 TrayNetworkStateObserver::~TrayNetworkStateObserver() { 29 if (NetworkHandler::IsInitialized()) { 30 NetworkHandler::Get()->network_state_handler()->RemoveObserver( 31 this, FROM_HERE); 32 } 33 } 34 35 void TrayNetworkStateObserver::NetworkListChanged() { 36 delegate_->NetworkStateChanged(true); 37 network_icon::PurgeNetworkIconCache(); 38 } 39 40 void TrayNetworkStateObserver::DeviceListChanged() { 41 delegate_->NetworkStateChanged(false); 42 } 43 44 // Any change to the Default (primary connected) network, including Strength 45 // changes, should trigger a NetworkStateChanged update. 46 void TrayNetworkStateObserver::DefaultNetworkChanged( 47 const chromeos::NetworkState* network) { 48 delegate_->NetworkStateChanged(true); 49 } 50 51 // Any change to the Connection State should trigger a NetworkStateChanged 52 // update. This is important when both a VPN and a physical network are 53 // connected. 54 void TrayNetworkStateObserver::NetworkConnectionStateChanged( 55 const chromeos::NetworkState* network) { 56 delegate_->NetworkStateChanged(true); 57 } 58 59 // This tracks Strength and other property changes for all networks. It will 60 // be called in addition to NetworkConnectionStateChanged for connection state 61 // changes. 62 void TrayNetworkStateObserver::NetworkPropertiesUpdated( 63 const chromeos::NetworkState* network) { 64 if (network == 65 NetworkHandler::Get()->network_state_handler()->DefaultNetwork()) { 66 // Trigger NetworkStateChanged in case the Strength property of the 67 // Default network changed. 68 delegate_->NetworkStateChanged(true); 69 } 70 delegate_->NetworkServiceChanged(network); 71 } 72 73 } // namespace ash 74