OLD | NEW |
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/network_sms_handler.h" | 5 #include "chromeos/network/network_sms_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
11 #include <deque> | 11 #include <deque> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "base/bind.h" | 14 #include "base/bind.h" |
15 #include "base/macros.h" | 15 #include "base/macros.h" |
| 16 #include "base/memory/ptr_util.h" |
16 #include "base/values.h" | 17 #include "base/values.h" |
17 #include "chromeos/dbus/dbus_thread_manager.h" | 18 #include "chromeos/dbus/dbus_thread_manager.h" |
18 #include "chromeos/dbus/gsm_sms_client.h" | 19 #include "chromeos/dbus/gsm_sms_client.h" |
19 #include "chromeos/dbus/modem_messaging_client.h" | 20 #include "chromeos/dbus/modem_messaging_client.h" |
20 #include "chromeos/dbus/shill_device_client.h" | 21 #include "chromeos/dbus/shill_device_client.h" |
21 #include "chromeos/dbus/shill_manager_client.h" | 22 #include "chromeos/dbus/shill_manager_client.h" |
22 #include "chromeos/dbus/sms_client.h" | 23 #include "chromeos/dbus/sms_client.h" |
23 #include "dbus/object_path.h" | 24 #include "dbus/object_path.h" |
24 #include "third_party/cros_system_api/dbus/service_constants.h" | 25 #include "third_party/cros_system_api/dbus/service_constants.h" |
25 | 26 |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 this); | 347 this); |
347 // Request network manager properties so that we can get the list of devices. | 348 // Request network manager properties so that we can get the list of devices. |
348 DBusThreadManager::Get()->GetShillManagerClient()->GetProperties( | 349 DBusThreadManager::Get()->GetShillManagerClient()->GetProperties( |
349 base::Bind(&NetworkSmsHandler::ManagerPropertiesCallback, | 350 base::Bind(&NetworkSmsHandler::ManagerPropertiesCallback, |
350 weak_ptr_factory_.GetWeakPtr())); | 351 weak_ptr_factory_.GetWeakPtr())); |
351 } | 352 } |
352 | 353 |
353 void NetworkSmsHandler::RequestUpdate(bool request_existing) { | 354 void NetworkSmsHandler::RequestUpdate(bool request_existing) { |
354 // If we already received messages and |request_existing| is true, send | 355 // If we already received messages and |request_existing| is true, send |
355 // updates for existing messages. | 356 // updates for existing messages. |
356 for (ScopedVector<base::DictionaryValue>::iterator iter = | 357 for (const auto& message : received_messages_) { |
357 received_messages_.begin(); | |
358 iter != received_messages_.end(); ++iter) { | |
359 base::DictionaryValue* message = *iter; | |
360 NotifyMessageReceived(*message); | 358 NotifyMessageReceived(*message); |
361 } | 359 } |
362 // Request updates from each device. | 360 // Request updates from each device. |
363 for (ScopedVector<NetworkSmsDeviceHandler>::iterator iter = | 361 for (auto& handler : device_handlers_) { |
364 device_handlers_.begin(); iter != device_handlers_.end(); ++iter) { | 362 handler->RequestUpdate(); |
365 (*iter)->RequestUpdate(); | |
366 } | 363 } |
367 } | 364 } |
368 | 365 |
369 void NetworkSmsHandler::AddObserver(Observer* observer) { | 366 void NetworkSmsHandler::AddObserver(Observer* observer) { |
370 observers_.AddObserver(observer); | 367 observers_.AddObserver(observer); |
371 } | 368 } |
372 | 369 |
373 void NetworkSmsHandler::RemoveObserver(Observer* observer) { | 370 void NetworkSmsHandler::RemoveObserver(Observer* observer) { |
374 observers_.RemoveObserver(observer); | 371 observers_.RemoveObserver(observer); |
375 } | 372 } |
376 | 373 |
377 void NetworkSmsHandler::OnPropertyChanged(const std::string& name, | 374 void NetworkSmsHandler::OnPropertyChanged(const std::string& name, |
378 const base::Value& value) { | 375 const base::Value& value) { |
379 if (name != shill::kDevicesProperty) | 376 if (name != shill::kDevicesProperty) |
380 return; | 377 return; |
381 const base::ListValue* devices = NULL; | 378 const base::ListValue* devices = NULL; |
382 if (!value.GetAsList(&devices) || !devices) | 379 if (!value.GetAsList(&devices) || !devices) |
383 return; | 380 return; |
384 UpdateDevices(devices); | 381 UpdateDevices(devices); |
385 } | 382 } |
386 | 383 |
387 // Private methods | 384 // Private methods |
388 | 385 |
389 void NetworkSmsHandler::AddReceivedMessage( | 386 void NetworkSmsHandler::AddReceivedMessage( |
390 const base::DictionaryValue& message) { | 387 const base::DictionaryValue& message) { |
391 base::DictionaryValue* new_message = message.DeepCopy(); | |
392 if (received_messages_.size() >= kMaxReceivedMessages) | 388 if (received_messages_.size() >= kMaxReceivedMessages) |
393 received_messages_.erase(received_messages_.begin()); | 389 received_messages_.erase(received_messages_.begin()); |
394 received_messages_.push_back(new_message); | 390 received_messages_.push_back(message.CreateDeepCopy()); |
395 } | 391 } |
396 | 392 |
397 void NetworkSmsHandler::NotifyMessageReceived( | 393 void NetworkSmsHandler::NotifyMessageReceived( |
398 const base::DictionaryValue& message) { | 394 const base::DictionaryValue& message) { |
399 FOR_EACH_OBSERVER(Observer, observers_, MessageReceived(message)); | 395 FOR_EACH_OBSERVER(Observer, observers_, MessageReceived(message)); |
400 } | 396 } |
401 | 397 |
402 void NetworkSmsHandler::MessageReceived(const base::DictionaryValue& message) { | 398 void NetworkSmsHandler::MessageReceived(const base::DictionaryValue& message) { |
403 AddReceivedMessage(message); | 399 AddReceivedMessage(message); |
404 NotifyMessageReceived(message); | 400 NotifyMessageReceived(message); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 | 463 |
468 std::string object_path_string; | 464 std::string object_path_string; |
469 if (!properties.GetStringWithoutPathExpansion( | 465 if (!properties.GetStringWithoutPathExpansion( |
470 shill::kDBusObjectProperty, &object_path_string)) { | 466 shill::kDBusObjectProperty, &object_path_string)) { |
471 LOG(ERROR) << "Device has no DBusObject Property: " << device_path; | 467 LOG(ERROR) << "Device has no DBusObject Property: " << device_path; |
472 return; | 468 return; |
473 } | 469 } |
474 dbus::ObjectPath object_path(object_path_string); | 470 dbus::ObjectPath object_path(object_path_string); |
475 if (service_name == modemmanager::kModemManager1ServiceName) { | 471 if (service_name == modemmanager::kModemManager1ServiceName) { |
476 device_handlers_.push_back( | 472 device_handlers_.push_back( |
477 new ModemManager1NetworkSmsDeviceHandler( | 473 base::MakeUnique<ModemManager1NetworkSmsDeviceHandler>( |
478 this, service_name, object_path)); | 474 this, service_name, object_path)); |
479 } else { | 475 } else { |
480 device_handlers_.push_back( | 476 device_handlers_.push_back( |
481 new ModemManagerNetworkSmsDeviceHandler( | 477 base::MakeUnique<ModemManagerNetworkSmsDeviceHandler>( |
482 this, service_name, object_path)); | 478 this, service_name, object_path)); |
483 } | 479 } |
484 } | 480 } |
485 | 481 |
486 } // namespace chromeos | 482 } // namespace chromeos |
OLD | NEW |