Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Side by Side Diff: chromeos/network/shill_property_handler.cc

Issue 330833003: Rely on Service.Visible instead of Manager.Services (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix stubs for tests Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/network/shill_property_handler.h" 5 #include "chromeos/network/shill_property_handler.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 237
238 void ShillPropertyHandler::ManagerPropertiesCallback( 238 void ShillPropertyHandler::ManagerPropertiesCallback(
239 DBusMethodCallStatus call_status, 239 DBusMethodCallStatus call_status,
240 const base::DictionaryValue& properties) { 240 const base::DictionaryValue& properties) {
241 if (call_status != DBUS_METHOD_CALL_SUCCESS) { 241 if (call_status != DBUS_METHOD_CALL_SUCCESS) {
242 NET_LOG_ERROR("ManagerPropertiesCallback", 242 NET_LOG_ERROR("ManagerPropertiesCallback",
243 base::StringPrintf("Failed: %d", call_status)); 243 base::StringPrintf("Failed: %d", call_status));
244 return; 244 return;
245 } 245 }
246 NET_LOG_EVENT("ManagerPropertiesCallback", "Success"); 246 NET_LOG_EVENT("ManagerPropertiesCallback", "Success");
247 const base::Value* update_service_value = NULL;
248 const base::Value* update_service_complete_value = NULL;
249 for (base::DictionaryValue::Iterator iter(properties); 247 for (base::DictionaryValue::Iterator iter(properties);
250 !iter.IsAtEnd(); iter.Advance()) { 248 !iter.IsAtEnd(); iter.Advance()) {
251 // Defer updating Services until all other properties have been updated. 249 ManagerPropertyChanged(iter.key(), iter.value());
252 if (iter.key() == shill::kServicesProperty)
253 update_service_value = &iter.value();
254 else if (iter.key() == shill::kServiceCompleteListProperty)
255 update_service_complete_value = &iter.value();
256 else
257 ManagerPropertyChanged(iter.key(), iter.value());
258 } 250 }
259 // Update Service lists after other Manager properties. Update
260 // ServiceCompleteList first so that Services (visible) entries already exist.
261 if (update_service_complete_value) {
262 ManagerPropertyChanged(shill::kServiceCompleteListProperty,
263 *update_service_complete_value);
264 }
265 if (update_service_value)
266 ManagerPropertyChanged(shill::kServicesProperty, *update_service_value);
267 251
268 CheckPendingStateListUpdates(""); 252 CheckPendingStateListUpdates("");
269 } 253 }
270 254
271 void ShillPropertyHandler::CheckPendingStateListUpdates( 255 void ShillPropertyHandler::CheckPendingStateListUpdates(
272 const std::string& key) { 256 const std::string& key) {
273 // Once there are no pending updates, signal the state list changed callbacks. 257 // Once there are no pending updates, signal the state list changed callbacks.
274 if ((key.empty() || key == shill::kServiceCompleteListProperty) && 258 if ((key.empty() || key == shill::kServiceCompleteListProperty) &&
275 pending_updates_[ManagedState::MANAGED_TYPE_NETWORK].size() == 0) { 259 pending_updates_[ManagedState::MANAGED_TYPE_NETWORK].size() == 0) {
276 listener_->ManagedStateListChanged(ManagedState::MANAGED_TYPE_NETWORK); 260 listener_->ManagedStateListChanged(ManagedState::MANAGED_TYPE_NETWORK);
277 } 261 }
278 if ((key.empty() || key == shill::kDevicesProperty) && 262 if ((key.empty() || key == shill::kDevicesProperty) &&
279 pending_updates_[ManagedState::MANAGED_TYPE_DEVICE].size() == 0) { 263 pending_updates_[ManagedState::MANAGED_TYPE_DEVICE].size() == 0) {
280 listener_->ManagedStateListChanged(ManagedState::MANAGED_TYPE_DEVICE); 264 listener_->ManagedStateListChanged(ManagedState::MANAGED_TYPE_DEVICE);
281 } 265 }
282 // For emitted Services updates only, we also need to signal that the list
283 // changed in case the visibility changed.
284 if (key == shill::kServicesProperty &&
285 pending_updates_[ManagedState::MANAGED_TYPE_NETWORK].size() == 0) {
286 listener_->ManagedStateListChanged(ManagedState::MANAGED_TYPE_NETWORK);
287 }
288 } 266 }
289 267
290 void ShillPropertyHandler::ManagerPropertyChanged(const std::string& key, 268 void ShillPropertyHandler::ManagerPropertyChanged(const std::string& key,
291 const base::Value& value) { 269 const base::Value& value) {
292 NET_LOG_DEBUG("ManagerPropertyChanged", key); 270 NET_LOG_DEBUG("ManagerPropertyChanged", key);
293 if (key == shill::kDefaultServiceProperty) { 271 if (key == shill::kDefaultServiceProperty) {
294 std::string service_path; 272 std::string service_path;
295 value.GetAsString(&service_path); 273 value.GetAsString(&service_path);
296 listener_->DefaultNetworkServiceChanged(service_path); 274 listener_->DefaultNetworkServiceChanged(service_path);
297 } else if (key == shill::kServicesProperty) { 275 } else if (key == shill::kServicesProperty) {
298 const base::ListValue* vlist = GetListValue(key, value); 276 const base::ListValue* vlist = GetListValue(key, value);
299 if (vlist) { 277 if (vlist) {
300 // Update the visibility of networks in ServiceCompleteList. Note that 278 // We only use the Services property to determine which networks we
301 // this relies on Shill emitting changes to ServiceCompleteList before 279 // observe. This is more convenient and reliable than waiting to revceive
302 // changes to Services. TODO(stevenjb): Eliminate this and rely on 280 // the Visible property of each kServiceCompleteList entry. We limit the
303 // Service.Visible instead. 281 // number of observed networks to kMaxObserved.
304 listener_->UpdateVisibleNetworks(*vlist);
305
306 // UpdateObserved used to use kServiceWatchListProperty for TYPE_NETWORK,
307 // however that prevents us from receiving Strength updates from inactive
308 // networks. The overhead for observing all services is not unreasonable
309 // (and we limit the max number of observed services to kMaxObserved).
310 UpdateObserved(ManagedState::MANAGED_TYPE_NETWORK, *vlist); 282 UpdateObserved(ManagedState::MANAGED_TYPE_NETWORK, *vlist);
311 } 283 }
312 } else if (key == shill::kServiceCompleteListProperty) { 284 } else if (key == shill::kServiceCompleteListProperty) {
313 const base::ListValue* vlist = GetListValue(key, value); 285 const base::ListValue* vlist = GetListValue(key, value);
314 if (vlist) { 286 if (vlist) {
315 listener_->UpdateManagedList(ManagedState::MANAGED_TYPE_NETWORK, *vlist); 287 listener_->UpdateManagedList(ManagedState::MANAGED_TYPE_NETWORK, *vlist);
316 UpdateProperties(ManagedState::MANAGED_TYPE_NETWORK, *vlist); 288 UpdateProperties(ManagedState::MANAGED_TYPE_NETWORK, *vlist);
289 UpdateObserved(ManagedState::MANAGED_TYPE_NETWORK, *vlist);
317 } 290 }
318 } else if (key == shill::kServiceWatchListProperty) {
319 // Currently we ignore the watch list.
320 } else if (key == shill::kDevicesProperty) { 291 } else if (key == shill::kDevicesProperty) {
321 const base::ListValue* vlist = GetListValue(key, value); 292 const base::ListValue* vlist = GetListValue(key, value);
322 if (vlist) { 293 if (vlist) {
323 listener_->UpdateManagedList(ManagedState::MANAGED_TYPE_DEVICE, *vlist); 294 listener_->UpdateManagedList(ManagedState::MANAGED_TYPE_DEVICE, *vlist);
324 UpdateProperties(ManagedState::MANAGED_TYPE_DEVICE, *vlist); 295 UpdateProperties(ManagedState::MANAGED_TYPE_DEVICE, *vlist);
325 UpdateObserved(ManagedState::MANAGED_TYPE_DEVICE, *vlist); 296 UpdateObserved(ManagedState::MANAGED_TYPE_DEVICE, *vlist);
326 } 297 }
327 } else if (key == shill::kAvailableTechnologiesProperty) { 298 } else if (key == shill::kAvailableTechnologiesProperty) {
328 const base::ListValue* vlist = GetListValue(key, value); 299 const base::ListValue* vlist = GetListValue(key, value);
329 if (vlist) 300 if (vlist)
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 NET_LOG_ERROR("Failed to get IP Config properties", 532 NET_LOG_ERROR("Failed to get IP Config properties",
562 base::StringPrintf("%s: %d", path.c_str(), call_status)); 533 base::StringPrintf("%s: %d", path.c_str(), call_status));
563 return; 534 return;
564 } 535 }
565 NET_LOG_EVENT("IP Config properties received", path); 536 NET_LOG_EVENT("IP Config properties received", path);
566 listener_->UpdateIPConfigProperties(type, path, ip_config_path, properties); 537 listener_->UpdateIPConfigProperties(type, path, ip_config_path, properties);
567 } 538 }
568 539
569 } // namespace internal 540 } // namespace internal
570 } // namespace chromeos 541 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/network/shill_property_handler.h ('k') | chromeos/network/shill_property_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698