12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/tray_network_state_observer.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <set> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/location.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_state_handler.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using chromeos::NetworkHandler; 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrayNetworkStateObserver::TrayNetworkStateObserver(Delegate* delegate) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : delegate_(delegate) { 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (NetworkHandler::IsInitialized()) { 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->AddObserver( 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this, FROM_HERE); 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrayNetworkStateObserver::~TrayNetworkStateObserver() { 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (NetworkHandler::IsInitialized()) { 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->RemoveObserver( 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this, FROM_HERE); 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetworkStateObserver::NetworkListChanged() { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NetworkStateChanged(true); 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::network_icon::PurgeNetworkIconCache(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetworkStateObserver::DeviceListChanged() { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NetworkStateChanged(false); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Any change to the Default (primary connected) network, including Strength 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// changes, should trigger a NetworkStateChanged update. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetworkStateObserver::DefaultNetworkChanged( 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::NetworkState* network) { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NetworkStateChanged(true); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Any change to the Connection State should trigger a NetworkStateChanged 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// update. This is important when both a VPN and a physical network are 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// connected. 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void TrayNetworkStateObserver::NetworkConnectionStateChanged( 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const chromeos::NetworkState* network) { 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->NetworkStateChanged(true); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This tracks Strength and other property changes for all networks. It will 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// be called in addition to NetworkConnectionStateChanged for connection state 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// changes. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TrayNetworkStateObserver::NetworkPropertiesUpdated( 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const chromeos::NetworkState* network) { 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (network == 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->DefaultNetwork()) { 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Trigger NetworkStateChanged in case the Strength property of the 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Default network changed. 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->NetworkStateChanged(true); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->NetworkServiceChanged(network); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash 74