1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/wifi/fake_wifi_service.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/json/json_reader.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/message_loop/message_loop.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/onc/onc_constants.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace wifi { 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)FakeWiFiService::FakeWiFiService() { 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Populate data expected by unit test. 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkProperties network_properties; 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.connection_state = onc::connection_state::kConnected; 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_properties.guid = "stub_wifi1_guid"; 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.name = "wifi1"; 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.type = onc::network_type::kWiFi; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.frequency = 0; 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.ssid = "wifi1"; 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.security = onc::wifi::kWEP_PSK; 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.signal_strength = 40; 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.json_extra = 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "{" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"MacAddress\": \"00:11:22:AA:BB:CC\"," 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"IPConfigs\": [{" 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"Gateway\": \"0.0.0.1\"," 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"IPAddress\": \"0.0.0.0\"," 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"RoutingPrefix\": 0," 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"Type\": \"IPv4\"" 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " }]," 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"WiFi\": {" 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"Frequency\": 2400," 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " \"FrequencyList\": [2400]" 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " }" 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "}"; 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) networks_.push_back(network_properties); 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkProperties network_properties; 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.connection_state = onc::connection_state::kNotConnected; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_properties.guid = "stub_wifi2_guid"; 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.name = "wifi2_PSK"; 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.type = onc::network_type::kWiFi; 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.frequency = 5000; 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.frequency_set.insert(2400); 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.frequency_set.insert(5000); 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.ssid = "wifi2_PSK"; 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.security = onc::wifi::kWPA_PSK; 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.signal_strength = 80; 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) networks_.push_back(network_properties); 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)FakeWiFiService::~FakeWiFiService() { 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::Initialize( 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> task_runner) { 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::UnInitialize() { 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::GetProperties(const std::string& network_guid, 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::DictionaryValue* properties, 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkList::iterator network_properties = FindNetwork(network_guid); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (network_properties == networks_.end()) { 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *error = "Error.InvalidNetworkGuid"; 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) properties->Swap(network_properties->ToValue(false).get()); 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::GetManagedProperties( 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& network_guid, 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::DictionaryValue* managed_properties, 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Not implemented 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *error = kErrorWiFiService; 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::GetState(const std::string& network_guid, 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::DictionaryValue* properties, 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkList::iterator network_properties = FindNetwork(network_guid); 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (network_properties == networks_.end()) { 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *error = "Error.InvalidNetworkGuid"; 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) properties->Swap(network_properties->ToValue(true).get()); 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::SetProperties( 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& network_guid, 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::DictionaryValue> properties, 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkList::iterator network_properties = FindNetwork(network_guid); 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (network_properties == networks_.end() || 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) !network_properties->UpdateFromValue(*properties)) { 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *error = "Error.DBusFailed"; 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::CreateNetwork( 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool shared, 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_ptr<base::DictionaryValue> properties, 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* network_guid, 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkProperties network_properties; 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (network_properties.UpdateFromValue(*properties)) { 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_properties.guid = network_properties.ssid; 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) networks_.push_back(network_properties); 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *network_guid = network_properties.guid; 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else { 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *error = "Error.DBusFailed"; 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::GetVisibleNetworks(const std::string& network_type, 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::ListValue* network_list, 12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool include_details) { 12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (NetworkList::const_iterator it = networks_.begin(); 128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) it != networks_.end(); 129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ++it) { 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (network_type.empty() || network_type == onc::network_type::kAllTypes || 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) it->type == network_type) { 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<base::DictionaryValue> network(it->ToValue(!include_details)); 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_list->Append(network.release()); 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::RequestNetworkScan() { 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NotifyNetworkListChanged(networks_); 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::StartConnect(const std::string& network_guid, 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) NetworkList::iterator network_properties = FindNetwork(network_guid); 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (network_properties == networks_.end()) { 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *error = "Error.InvalidNetworkGuid"; 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DisconnectAllNetworksOfType(network_properties->type); 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_properties->connection_state = onc::connection_state::kConnected; 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SortNetworks(); 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NotifyNetworkListChanged(networks_); 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NotifyNetworkChanged(network_guid); 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::StartDisconnect(const std::string& network_guid, 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkList::iterator network_properties = FindNetwork(network_guid); 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (network_properties == networks_.end()) { 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *error = "Error.InvalidNetworkGuid"; 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_properties->connection_state = onc::connection_state::kNotConnected; 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SortNetworks(); 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NotifyNetworkListChanged(networks_); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NotifyNetworkChanged(network_guid); 167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::GetKeyFromSystem(const std::string& network_guid, 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* key_data, 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string* error) { 172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *error = "not-found"; 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::SetEventObservers( 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> message_loop_proxy, 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const NetworkGuidListCallback& networks_changed_observer, 178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const NetworkGuidListCallback& network_list_changed_observer) { 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) message_loop_proxy_.swap(message_loop_proxy); 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) networks_changed_observer_ = networks_changed_observer; 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_list_changed_observer_ = network_list_changed_observer; 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::RequestConnectedNetworkUpdate() { 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)NetworkList::iterator FakeWiFiService::FindNetwork( 188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& network_guid) { 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (NetworkList::iterator it = networks_.begin(); it != networks_.end(); 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ++it) { 191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (it->guid == network_guid) 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return it; 193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return networks_.end(); 195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::DisconnectAllNetworksOfType(const std::string& type) { 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (NetworkList::iterator it = networks_.begin(); it != networks_.end(); 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ++it) { 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (it->type == type) 201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) it->connection_state = onc::connection_state::kNotConnected; 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::SortNetworks() { 206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Sort networks, so connected/connecting is up front, then by type: 207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Ethernet, WiFi, Cellular, VPN 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) networks_.sort(NetworkProperties::OrderByType); 209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 210010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void FakeWiFiService::NotifyNetworkListChanged(const NetworkList& networks) { 212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) WiFiService::NetworkGuidList current_networks; 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (NetworkList::const_iterator it = networks.begin(); it != networks.end(); 214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ++it) { 215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) current_networks.push_back(it->guid); 216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) message_loop_proxy_->PostTask( 219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FROM_HERE, base::Bind(network_list_changed_observer_, current_networks)); 220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 222010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeWiFiService::NotifyNetworkChanged(const std::string& network_guid) { 223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) WiFiService::NetworkGuidList changed_networks(1, network_guid); 224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) message_loop_proxy_->PostTask( 225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FROM_HERE, base::Bind(networks_changed_observer_, changed_networks)); 226010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace wifi 229