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

Side by Side Diff: chrome/browser/chromeos/cros/network_library.cc

Issue 4229006: Revert 64888 - Push for ers:... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 1 month 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/chromeos/cros/network_library.h" 5 #include "chrome/browser/chromeos/cros/network_library.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
11 #include "base/stl_util-inl.h" 11 #include "base/stl_util-inl.h"
12 #include "base/string_number_conversions.h" 12 #include "base/string_number_conversions.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "base/values.h"
16 #include "chrome/browser/browser_thread.h" 15 #include "chrome/browser/browser_thread.h"
17 #include "chrome/browser/chromeos/cros/cros_library.h" 16 #include "chrome/browser/chromeos/cros/cros_library.h"
18 #include "grit/generated_resources.h" 17 #include "grit/generated_resources.h"
19 18
20 namespace chromeos { 19 namespace chromeos {
21 20
22 namespace {
23 // TODO(ers) These string constants and Parse functions are copied
24 // straight out of libcros:chromeos_network.cc. Fix this by moving
25 // all handling of properties into libcros.
26 // Network service properties we are interested in monitoring
27 static const char* kIsActiveProperty = "IsActive";
28 static const char* kStateProperty = "State";
29 static const char* kSignalStrengthProperty = "Strength";
30 static const char* kActivationStateProperty = "Cellular.ActivationState";
31 static const char* kNetworkTechnologyProperty = "Cellular.NetworkTechnology";
32 static const char* kPaymentURLProperty = "Cellular.OlpUrl";
33 static const char* kRestrictedPoolProperty = "Cellular.RestrictedPool";
34 static const char* kRoamingStateProperty = "Cellular.RoamingState";
35
36 // Connman state options.
37 static const char* kStateIdle = "idle";
38 static const char* kStateCarrier = "carrier";
39 static const char* kStateAssociation = "association";
40 static const char* kStateConfiguration = "configuration";
41 static const char* kStateReady = "ready";
42 static const char* kStateDisconnect = "disconnect";
43 static const char* kStateFailure = "failure";
44 static const char* kStateActivationFailure = "activation-failure";
45
46 // Connman activation state options
47 static const char* kActivationStateActivated = "activated";
48 static const char* kActivationStateActivating = "activating";
49 static const char* kActivationStateNotActivated = "not-activated";
50 static const char* kActivationStatePartiallyActivated = "partially-activated";
51 static const char* kActivationStateUnknown = "unknown";
52
53 // Connman network technology options.
54 static const char* kNetworkTechnology1Xrtt = "1xRTT";
55 static const char* kNetworkTechnologyEvdo = "EVDO";
56 static const char* kNetworkTechnologyGprs = "GPRS";
57 static const char* kNetworkTechnologyEdge = "EDGE";
58 static const char* kNetworkTechnologyUmts = "UMTS";
59 static const char* kNetworkTechnologyHspa = "HSPA";
60 static const char* kNetworkTechnologyHspaPlus = "HSPA+";
61 static const char* kNetworkTechnologyLte = "LTE";
62 static const char* kNetworkTechnologyLteAdvanced = "LTE Advanced";
63
64 // Connman roaming state options
65 static const char* kRoamingStateHome = "home";
66 static const char* kRoamingStateRoaming = "roaming";
67 static const char* kRoamingStateUnknown = "unknown";
68
69 static ConnectionState ParseState(const std::string& state) {
70 if (state == kStateIdle)
71 return STATE_IDLE;
72 if (state == kStateCarrier)
73 return STATE_CARRIER;
74 if (state == kStateAssociation)
75 return STATE_ASSOCIATION;
76 if (state == kStateConfiguration)
77 return STATE_CONFIGURATION;
78 if (state == kStateReady)
79 return STATE_READY;
80 if (state == kStateDisconnect)
81 return STATE_DISCONNECT;
82 if (state == kStateFailure)
83 return STATE_FAILURE;
84 if (state == kStateActivationFailure)
85 return STATE_ACTIVATION_FAILURE;
86 return STATE_UNKNOWN;
87 }
88
89 static ActivationState ParseActivationState(
90 const std::string& activation_state) {
91 if (activation_state == kActivationStateActivated)
92 return ACTIVATION_STATE_ACTIVATED;
93 if (activation_state == kActivationStateActivating)
94 return ACTIVATION_STATE_ACTIVATING;
95 if (activation_state == kActivationStateNotActivated)
96 return ACTIVATION_STATE_NOT_ACTIVATED;
97 if (activation_state == kActivationStateUnknown)
98 return ACTIVATION_STATE_UNKNOWN;
99 if (activation_state == kActivationStatePartiallyActivated)
100 return ACTIVATION_STATE_PARTIALLY_ACTIVATED;
101 return ACTIVATION_STATE_UNKNOWN;
102 }
103
104 static NetworkTechnology ParseNetworkTechnology(
105 const std::string& technology) {
106 if (technology == kNetworkTechnology1Xrtt)
107 return NETWORK_TECHNOLOGY_1XRTT;
108 if (technology == kNetworkTechnologyEvdo)
109 return NETWORK_TECHNOLOGY_EVDO;
110 if (technology == kNetworkTechnologyGprs)
111 return NETWORK_TECHNOLOGY_GPRS;
112 if (technology == kNetworkTechnologyEdge)
113 return NETWORK_TECHNOLOGY_EDGE;
114 if (technology == kNetworkTechnologyUmts)
115 return NETWORK_TECHNOLOGY_UMTS;
116 if (technology == kNetworkTechnologyHspa)
117 return NETWORK_TECHNOLOGY_HSPA;
118 if (technology == kNetworkTechnologyHspaPlus)
119 return NETWORK_TECHNOLOGY_HSPA_PLUS;
120 if (technology == kNetworkTechnologyLte)
121 return NETWORK_TECHNOLOGY_LTE;
122 if (technology == kNetworkTechnologyLteAdvanced)
123 return NETWORK_TECHNOLOGY_LTE_ADVANCED;
124 return NETWORK_TECHNOLOGY_UNKNOWN;
125 }
126 static NetworkRoamingState ParseRoamingState(
127 const std::string& roaming_state) {
128 if (roaming_state == kRoamingStateHome)
129 return ROAMING_STATE_HOME;
130 if (roaming_state == kRoamingStateRoaming)
131 return ROAMING_STATE_ROAMING;
132 if (roaming_state == kRoamingStateUnknown)
133 return ROAMING_STATE_UNKNOWN;
134 return ROAMING_STATE_UNKNOWN;
135 }
136
137 }
138
139 // Helper function to wrap Html with <th> tag. 21 // Helper function to wrap Html with <th> tag.
140 static std::string WrapWithTH(std::string text) { 22 static std::string WrapWithTH(std::string text) {
141 return "<th>" + text + "</th>"; 23 return "<th>" + text + "</th>";
142 } 24 }
143 25
144 // Helper function to wrap Html with <td> tag. 26 // Helper function to wrap Html with <td> tag.
145 static std::string WrapWithTD(std::string text) { 27 static std::string WrapWithTD(std::string text) {
146 return "<td>" + text + "</td>"; 28 return "<td>" + text + "</td>";
147 } 29 }
148 30
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 state_ = network.state(); 92 state_ = network.state();
211 error_ = network.error(); 93 error_ = network.error();
212 } 94 }
213 95
214 void Network::Clear() { 96 void Network::Clear() {
215 state_ = STATE_UNKNOWN; 97 state_ = STATE_UNKNOWN;
216 error_ = ERROR_UNKNOWN; 98 error_ = ERROR_UNKNOWN;
217 service_path_.clear(); 99 service_path_.clear();
218 device_path_.clear(); 100 device_path_.clear();
219 ip_address_.clear(); 101 ip_address_.clear();
220 is_active_ = false;
221 } 102 }
222 103
223 Network::Network(const ServiceInfo* service) { 104 Network::Network(const ServiceInfo* service) {
224 type_ = service->type; 105 type_ = service->type;
225 state_ = service->state; 106 state_ = service->state;
226 error_ = service->error; 107 error_ = service->error;
227 service_path_ = SafeString(service->service_path); 108 service_path_ = SafeString(service->service_path);
228 device_path_ = SafeString(service->device_path); 109 device_path_ = SafeString(service->device_path);
229 is_active_ = service->is_active;
230 ip_address_.clear(); 110 ip_address_.clear();
231 // If connected, get ip config. 111 // If connected, get ip config.
232 if (EnsureCrosLoaded() && connected() && service->device_path) { 112 if (EnsureCrosLoaded() && connected() && service->device_path) {
233 IPConfigStatus* ipconfig_status = ListIPConfigs(service->device_path); 113 IPConfigStatus* ipconfig_status = ListIPConfigs(service->device_path);
234 if (ipconfig_status) { 114 if (ipconfig_status) {
235 for (int i = 0; i < ipconfig_status->size; i++) { 115 for (int i = 0; i < ipconfig_status->size; i++) {
236 IPConfig ipconfig = ipconfig_status->ips[i]; 116 IPConfig ipconfig = ipconfig_status->ips[i];
237 if (strlen(ipconfig.address) > 0) 117 if (strlen(ipconfig.address) > 0)
238 ip_address_ = ipconfig.address; 118 ip_address_ = ipconfig.address;
239 } 119 }
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 } 503 }
624 return false; 504 return false;
625 } 505 }
626 506
627 //////////////////////////////////////////////////////////////////////////////// 507 ////////////////////////////////////////////////////////////////////////////////
628 // NetworkLibrary 508 // NetworkLibrary
629 509
630 class NetworkLibraryImpl : public NetworkLibrary { 510 class NetworkLibraryImpl : public NetworkLibrary {
631 public: 511 public:
632 NetworkLibraryImpl() 512 NetworkLibraryImpl()
633 : network_manager_monitor_(NULL), 513 : network_status_connection_(NULL),
634 data_plan_monitor_(NULL), 514 data_plan_monitor_(NULL),
635 ethernet_(NULL), 515 ethernet_(NULL),
636 wifi_(NULL), 516 wifi_(NULL),
637 cellular_(NULL), 517 cellular_(NULL),
638 available_devices_(0), 518 available_devices_(0),
639 enabled_devices_(0), 519 enabled_devices_(0),
640 connected_devices_(0), 520 connected_devices_(0),
641 offline_mode_(false) { 521 offline_mode_(false) {
642 if (EnsureCrosLoaded()) { 522 if (EnsureCrosLoaded()) {
643 Init(); 523 Init();
644 network_manager_monitor_ =
645 MonitorNetworkManager(&NetworkManagerStatusChangedHandler,
646 this);
647 data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler,
648 this);
649 } else { 524 } else {
650 InitTestData(); 525 InitTestData();
651 } 526 }
652 } 527 }
653 528
654 ~NetworkLibraryImpl() { 529 ~NetworkLibraryImpl() {
655 DCHECK(!network_manager_observers_.size()); 530 if (network_status_connection_) {
656 DCHECK(network_manager_monitor_); 531 DisconnectMonitorNetwork(network_status_connection_);
657 DisconnectPropertyChangeMonitor(network_manager_monitor_); 532 }
658 DCHECK(!data_plan_observers_.size()); 533 if (data_plan_monitor_) {
659 DCHECK(data_plan_monitor_); 534 DisconnectDataPlanUpdateMonitor(data_plan_monitor_);
660 DisconnectDataPlanUpdateMonitor(data_plan_monitor_); 535 }
661 DCHECK(!network_observers_.size()); 536 // DCHECK(!observers_.size());
662 STLDeleteValues(&network_observers_); 537 DCHECK(!property_observers_.size());
538 STLDeleteValues(&property_observers_);
663 ClearNetworks(); 539 ClearNetworks();
664 } 540 }
665 541
666 virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) { 542 void AddObserver(Observer* observer) {
667 network_manager_observers_.AddObserver(observer); 543 observers_.AddObserver(observer);
668 } 544 }
669 545
670 virtual void RemoveNetworkManagerObserver(NetworkManagerObserver* observer) { 546 void RemoveObserver(Observer* observer) {
671 if (!network_manager_observers_.HasObserver(observer)) 547 observers_.RemoveObserver(observer);
672 network_manager_observers_.RemoveObserver(observer);
673 } 548 }
674 549
675 virtual void AddNetworkObserver(const std::string& service_path, 550 virtual void AddProperyObserver(const char* service_path,
676 NetworkObserver* observer) { 551 PropertyObserver* observer) {
552 DCHECK(service_path);
677 DCHECK(observer); 553 DCHECK(observer);
678 if (!EnsureCrosLoaded()) 554 if (!EnsureCrosLoaded())
679 return; 555 return;
680 // First, add the observer to the callback map. 556 // First, add the observer to the callback map.
681 NetworkObserverMap::iterator iter = network_observers_.find(service_path); 557 PropertyChangeObserverMap::iterator iter = property_observers_.find(
682 NetworkObserverList* oblist; 558 std::string(service_path));
683 if (iter != network_observers_.end()) { 559 if (iter != property_observers_.end()) {
684 oblist = iter->second; 560 iter->second->AddObserver(observer);
685 } else { 561 } else {
686 std::pair<NetworkObserverMap::iterator, bool> inserted = 562 std::pair<PropertyChangeObserverMap::iterator, bool> inserted =
687 network_observers_.insert( 563 property_observers_.insert(
688 std::make_pair<std::string, NetworkObserverList*>( 564 std::pair<std::string, PropertyObserverList*>(
689 service_path, 565 std::string(service_path),
690 new NetworkObserverList(this, service_path))); 566 new PropertyObserverList(this, service_path)));
691 oblist = inserted.first->second; 567 inserted.first->second->AddObserver(observer);
692 } 568 }
693 if (!oblist->HasObserver(observer))
694 oblist->AddObserver(observer);
695 } 569 }
696 570
697 virtual void RemoveNetworkObserver(const std::string& service_path, 571 virtual void RemoveProperyObserver(PropertyObserver* observer) {
698 NetworkObserver* observer) {
699 DCHECK(observer); 572 DCHECK(observer);
700 DCHECK(service_path.size()); 573 PropertyChangeObserverMap::iterator map_iter =
701 NetworkObserverMap::iterator map_iter = network_observers_.find( 574 property_observers_.begin();
702 service_path); 575 while (map_iter != property_observers_.end()) {
703 if (map_iter != network_observers_.end()) {
704 map_iter->second->RemoveObserver(observer); 576 map_iter->second->RemoveObserver(observer);
705 if (!map_iter->second->size()) { 577 if (!map_iter->second->size()) {
706 delete map_iter->second; 578 delete map_iter->second;
707 network_observers_.erase(map_iter++); 579 property_observers_.erase(map_iter++);
708 }
709 }
710 }
711
712 virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) {
713 DCHECK(observer);
714 NetworkObserverMap::iterator map_iter = network_observers_.begin();
715 while (map_iter != network_observers_.end()) {
716 map_iter->second->RemoveObserver(observer);
717 if (!map_iter->second->size()) {
718 delete map_iter->second;
719 network_observers_.erase(map_iter++);
720 } else { 580 } else {
721 ++map_iter; 581 ++map_iter;
722 } 582 }
723 } 583 }
724 } 584 }
725 585
726 virtual void AddCellularDataPlanObserver(CellularDataPlanObserver* observer) {
727 if (!data_plan_observers_.HasObserver(observer))
728 data_plan_observers_.AddObserver(observer);
729 }
730
731 virtual void RemoveCellularDataPlanObserver(
732 CellularDataPlanObserver* observer) {
733 data_plan_observers_.RemoveObserver(observer);
734 }
735
736 virtual EthernetNetwork* ethernet_network() { return ethernet_; } 586 virtual EthernetNetwork* ethernet_network() { return ethernet_; }
737 virtual bool ethernet_connecting() const { 587 virtual bool ethernet_connecting() const {
738 return ethernet_ ? ethernet_->connecting() : false; 588 return ethernet_ ? ethernet_->connecting() : false;
739 } 589 }
740 virtual bool ethernet_connected() const { 590 virtual bool ethernet_connected() const {
741 return ethernet_ ? ethernet_->connected() : false; 591 return ethernet_ ? ethernet_->connected() : false;
742 } 592 }
743 593
744 virtual WifiNetwork* wifi_network() { return wifi_; } 594 virtual WifiNetwork* wifi_network() { return wifi_; }
745 virtual bool wifi_connecting() const { 595 virtual bool wifi_connecting() const {
(...skipping 13 matching lines...) Expand all
759 609
760 bool Connected() const { 610 bool Connected() const {
761 return ethernet_connected() || wifi_connected() || cellular_connected(); 611 return ethernet_connected() || wifi_connected() || cellular_connected();
762 } 612 }
763 613
764 bool Connecting() const { 614 bool Connecting() const {
765 return ethernet_connecting() || wifi_connecting() || cellular_connecting(); 615 return ethernet_connecting() || wifi_connecting() || cellular_connecting();
766 } 616 }
767 617
768 const std::string& IPAddress() const { 618 const std::string& IPAddress() const {
769 // Returns IP address for the active network. 619 // Returns highest priority IP address.
770 const Network* active = active_network(); 620 if (ethernet_connected())
771 if (active != NULL)
772 return active->ip_address();
773 if (ethernet_)
774 return ethernet_->ip_address(); 621 return ethernet_->ip_address();
775 static std::string null_address("0.0.0.0"); 622 if (wifi_connected())
776 return null_address; 623 return wifi_->ip_address();
624 if (cellular_connected())
625 return cellular_->ip_address();
626 return ethernet_->ip_address();
777 } 627 }
778 628
779 virtual const WifiNetworkVector& wifi_networks() const { 629 virtual const WifiNetworkVector& wifi_networks() const {
780 return wifi_networks_; 630 return wifi_networks_;
781 } 631 }
782 632
783 virtual const WifiNetworkVector& remembered_wifi_networks() const { 633 virtual const WifiNetworkVector& remembered_wifi_networks() const {
784 return remembered_wifi_networks_; 634 return remembered_wifi_networks_;
785 } 635 }
786 636
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 return true; 681 return true;
832 } 682 }
833 683
834 virtual void ConnectToWifiNetwork(const WifiNetwork* network, 684 virtual void ConnectToWifiNetwork(const WifiNetwork* network,
835 const std::string& password, 685 const std::string& password,
836 const std::string& identity, 686 const std::string& identity,
837 const std::string& certpath) { 687 const std::string& certpath) {
838 DCHECK(network); 688 DCHECK(network);
839 if (!EnsureCrosLoaded()) 689 if (!EnsureCrosLoaded())
840 return; 690 return;
841 // TODO(ers) make wifi the highest priority service type
842 if (ConnectToNetworkWithCertInfo(network->service_path().c_str(), 691 if (ConnectToNetworkWithCertInfo(network->service_path().c_str(),
843 password.empty() ? NULL : password.c_str(), 692 password.empty() ? NULL : password.c_str(),
844 identity.empty() ? NULL : identity.c_str(), 693 identity.empty() ? NULL : identity.c_str(),
845 certpath.empty() ? NULL : certpath.c_str())) { 694 certpath.empty() ? NULL : certpath.c_str())) {
846 // Update local cache and notify listeners. 695 // Update local cache and notify listeners.
847 WifiNetwork* wifi = GetWirelessNetworkByPath( 696 WifiNetwork* wifi = GetWirelessNetworkByPath(
848 wifi_networks_, network->service_path()); 697 wifi_networks_, network->service_path());
849 if (wifi) { 698 if (wifi) {
850 wifi->set_passphrase(password); 699 wifi->set_passphrase(password);
851 wifi->set_identity(identity); 700 wifi->set_identity(identity);
852 wifi->set_cert_path(certpath); 701 wifi->set_cert_path(certpath);
853 wifi->set_connecting(true); 702 wifi->set_connecting(true);
854 wifi_ = wifi; 703 wifi_ = wifi;
855 } 704 }
856 NotifyNetworkManagerChanged(); 705 NotifyNetworkChanged();
857 } 706 }
858 } 707 }
859 708
860 virtual void ConnectToWifiNetwork(ConnectionSecurity security, 709 virtual void ConnectToWifiNetwork(ConnectionSecurity security,
861 const std::string& ssid, 710 const std::string& ssid,
862 const std::string& password, 711 const std::string& password,
863 const std::string& identity, 712 const std::string& identity,
864 const std::string& certpath, 713 const std::string& certpath,
865 bool auto_connect) { 714 bool auto_connect) {
866 if (!EnsureCrosLoaded()) 715 if (!EnsureCrosLoaded())
867 return; 716 return;
868 717
869 // First create a service from hidden network. 718 // First create a service from hidden network.
870 ServiceInfo* service = GetWifiService(ssid.c_str(), security); 719 ServiceInfo* service = GetWifiService(ssid.c_str(), security);
871 if (service) { 720 if (service) {
872 // Set auto-connect. 721 // Set auto-connect.
873 SetAutoConnect(service->service_path, auto_connect); 722 SetAutoConnect(service->service_path, auto_connect);
874 // Now connect to that service. 723 // Now connect to that service.
875 // TODO(ers) make wifi the highest priority service type
876 ConnectToNetworkWithCertInfo(service->service_path, 724 ConnectToNetworkWithCertInfo(service->service_path,
877 password.empty() ? NULL : password.c_str(), 725 password.empty() ? NULL : password.c_str(),
878 identity.empty() ? NULL : identity.c_str(), 726 identity.empty() ? NULL : identity.c_str(),
879 certpath.empty() ? NULL : certpath.c_str()); 727 certpath.empty() ? NULL : certpath.c_str());
880 728
881 // Clean up ServiceInfo object. 729 // Clean up ServiceInfo object.
882 FreeServiceInfo(service); 730 FreeServiceInfo(service);
883 } else { 731 } else {
884 LOG(WARNING) << "Cannot find hidden network: " << ssid; 732 LOG(WARNING) << "Cannot find hidden network: " << ssid;
885 // TODO(chocobo): Show error message. 733 // TODO(chocobo): Show error message.
886 } 734 }
887 } 735 }
888 736
889 virtual void ConnectToCellularNetwork(const CellularNetwork* network) { 737 virtual void ConnectToCellularNetwork(const CellularNetwork* network) {
890 DCHECK(network); 738 DCHECK(network);
891 if (!EnsureCrosLoaded()) 739 if (!EnsureCrosLoaded())
892 return; 740 return;
893 // TODO(ers) make cellular the highest priority service type
894 if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) { 741 if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) {
895 // Update local cache and notify listeners. 742 // Update local cache and notify listeners.
896 CellularNetwork* cellular = GetWirelessNetworkByPath( 743 CellularNetwork* cellular = GetWirelessNetworkByPath(
897 cellular_networks_, network->service_path()); 744 cellular_networks_, network->service_path());
898 if (cellular) { 745 if (cellular) {
899 cellular->set_connecting(true); 746 cellular->set_connecting(true);
900 cellular_ = cellular; 747 cellular_ = cellular;
901 } 748 }
902 NotifyNetworkManagerChanged(); 749 NotifyNetworkChanged();
903 } 750 }
904 } 751 }
905 752
906 virtual void RefreshCellularDataPlans(const CellularNetwork* network) { 753 virtual void RefreshCellularDataPlans(const CellularNetwork* network) {
907 DCHECK(network); 754 DCHECK(network);
908 if (!EnsureCrosLoaded() || !network) 755 if (!EnsureCrosLoaded() || !network)
909 return; 756 return;
910 RequestCellularDataPlanUpdate(network->service_path().c_str()); 757 RequestCellularDataPlanUpdate(network->service_path().c_str());
911 } 758 }
912 759
913 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) { 760 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {
914 DCHECK(network); 761 DCHECK(network);
915 if (!EnsureCrosLoaded() || !network) 762 if (!EnsureCrosLoaded() || !network)
916 return; 763 return;
917 // TODO(ers) restore default service type priority ordering?
918 if (DisconnectFromNetwork(network->service_path().c_str())) { 764 if (DisconnectFromNetwork(network->service_path().c_str())) {
919 // Update local cache and notify listeners. 765 // Update local cache and notify listeners.
920 if (network->type() == TYPE_WIFI) { 766 if (network->type() == TYPE_WIFI) {
921 WifiNetwork* wifi = GetWirelessNetworkByPath( 767 WifiNetwork* wifi = GetWirelessNetworkByPath(
922 wifi_networks_, network->service_path()); 768 wifi_networks_, network->service_path());
923 if (wifi) { 769 if (wifi) {
924 wifi->set_connected(false); 770 wifi->set_connected(false);
925 wifi_ = NULL; 771 wifi_ = NULL;
926 } 772 }
927 } else if (network->type() == TYPE_CELLULAR) { 773 } else if (network->type() == TYPE_CELLULAR) {
928 CellularNetwork* cellular = GetWirelessNetworkByPath( 774 CellularNetwork* cellular = GetWirelessNetworkByPath(
929 cellular_networks_, network->service_path()); 775 cellular_networks_, network->service_path());
930 if (cellular) { 776 if (cellular) {
931 cellular->set_connected(false); 777 cellular->set_connected(false);
932 cellular_ = NULL; 778 cellular_ = NULL;
933 } 779 }
934 } 780 }
935 NotifyNetworkManagerChanged(); 781 NotifyNetworkChanged();
936 } 782 }
937 } 783 }
938 784
939 virtual void SaveCellularNetwork(const CellularNetwork* network) { 785 virtual void SaveCellularNetwork(const CellularNetwork* network) {
940 DCHECK(network); 786 DCHECK(network);
941 // Update the cellular network with libcros. 787 // Update the cellular network with libcros.
942 if (!EnsureCrosLoaded() || !network) 788 if (!EnsureCrosLoaded() || !network)
943 return; 789 return;
944 790
945 SetAutoConnect(network->service_path().c_str(), network->auto_connect()); 791 SetAutoConnect(network->service_path().c_str(), network->auto_connect());
(...skipping 21 matching lines...) Expand all
967 for (WifiNetworkVector::iterator iter = 813 for (WifiNetworkVector::iterator iter =
968 remembered_wifi_networks_.begin(); 814 remembered_wifi_networks_.begin();
969 iter != remembered_wifi_networks_.end(); 815 iter != remembered_wifi_networks_.end();
970 ++iter) { 816 ++iter) {
971 if ((*iter)->service_path() == service_path) { 817 if ((*iter)->service_path() == service_path) {
972 delete (*iter); 818 delete (*iter);
973 remembered_wifi_networks_.erase(iter); 819 remembered_wifi_networks_.erase(iter);
974 break; 820 break;
975 } 821 }
976 } 822 }
977 NotifyNetworkManagerChanged(); 823 NotifyNetworkChanged();
978 } 824 }
979 } 825 }
980 826
981 virtual bool ethernet_available() const { 827 virtual bool ethernet_available() const {
982 return available_devices_ & (1 << TYPE_ETHERNET); 828 return available_devices_ & (1 << TYPE_ETHERNET);
983 } 829 }
984 virtual bool wifi_available() const { 830 virtual bool wifi_available() const {
985 return available_devices_ & (1 << TYPE_WIFI); 831 return available_devices_ & (1 << TYPE_WIFI);
986 } 832 }
987 virtual bool cellular_available() const { 833 virtual bool cellular_available() const {
988 return available_devices_ & (1 << TYPE_CELLULAR); 834 return available_devices_ & (1 << TYPE_CELLULAR);
989 } 835 }
990 836
991 virtual bool ethernet_enabled() const { 837 virtual bool ethernet_enabled() const {
992 return enabled_devices_ & (1 << TYPE_ETHERNET); 838 return enabled_devices_ & (1 << TYPE_ETHERNET);
993 } 839 }
994 virtual bool wifi_enabled() const { 840 virtual bool wifi_enabled() const {
995 return enabled_devices_ & (1 << TYPE_WIFI); 841 return enabled_devices_ & (1 << TYPE_WIFI);
996 } 842 }
997 virtual bool cellular_enabled() const { 843 virtual bool cellular_enabled() const {
998 return enabled_devices_ & (1 << TYPE_CELLULAR); 844 return enabled_devices_ & (1 << TYPE_CELLULAR);
999 } 845 }
1000 846
1001 virtual bool offline_mode() const { return offline_mode_; } 847 virtual bool offline_mode() const { return offline_mode_; }
1002 848
1003 virtual const Network* active_network() const {
1004 if (ethernet_ && ethernet_->is_active())
1005 return ethernet_;
1006 if (wifi_ && wifi_->is_active())
1007 return wifi_;
1008 if (cellular_ && cellular_->is_active())
1009 return cellular_;
1010 return NULL;
1011 }
1012
1013 virtual void EnableEthernetNetworkDevice(bool enable) { 849 virtual void EnableEthernetNetworkDevice(bool enable) {
1014 EnableNetworkDeviceType(TYPE_ETHERNET, enable); 850 EnableNetworkDeviceType(TYPE_ETHERNET, enable);
1015 } 851 }
1016 852
1017 virtual void EnableWifiNetworkDevice(bool enable) { 853 virtual void EnableWifiNetworkDevice(bool enable) {
1018 EnableNetworkDeviceType(TYPE_WIFI, enable); 854 EnableNetworkDeviceType(TYPE_WIFI, enable);
1019 } 855 }
1020 856
1021 virtual void EnableCellularNetworkDevice(bool enable) { 857 virtual void EnableCellularNetworkDevice(bool enable) {
1022 EnableNetworkDeviceType(TYPE_CELLULAR, enable); 858 EnableNetworkDeviceType(TYPE_CELLULAR, enable);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 output.append("<tr>" + ToHtmlTableRow(remembered_wifi_networks_[i]) + 944 output.append("<tr>" + ToHtmlTableRow(remembered_wifi_networks_[i]) +
1109 "</tr>"); 945 "</tr>");
1110 } 946 }
1111 947
1112 output.append("</table></body></html>"); 948 output.append("</table></body></html>");
1113 return output; 949 return output;
1114 } 950 }
1115 951
1116 private: 952 private:
1117 953
1118 class NetworkObserverList : public ObserverList<NetworkObserver> { 954 class PropertyObserverList : public ObserverList<PropertyObserver> {
1119 public: 955 public:
1120 NetworkObserverList(NetworkLibraryImpl* library, 956 PropertyObserverList(NetworkLibraryImpl* library,
1121 const std::string& service_path) { 957 const char* service_path) {
1122 network_monitor_ = MonitorNetworkService(&NetworkStatusChangedHandler, 958 DCHECK(service_path);
1123 service_path.c_str(), 959 property_change_monitor_ = MonitorNetworkService(&PropertyChangeHandler,
1124 library); 960 service_path,
961 library);
1125 } 962 }
1126 963
1127 virtual ~NetworkObserverList() { 964 virtual ~PropertyObserverList() {
1128 if (network_monitor_) 965 if (property_change_monitor_)
1129 DisconnectPropertyChangeMonitor(network_monitor_); 966 DisconnectPropertyChangeMonitor(property_change_monitor_);
1130 } 967 }
1131 968
1132 private: 969 private:
1133 static void NetworkStatusChangedHandler(void* object, 970 static void PropertyChangeHandler(void* object,
1134 const char* path, 971 const char* path,
1135 const char* key, 972 const char* key,
1136 const Value* value) { 973 const Value* value) {
1137 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object); 974 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
1138 DCHECK(networklib); 975 DCHECK(network);
1139 networklib->UpdateNetworkStatus(path, key, value); 976 network->NotifyPropertyChange(path, key, value);
1140 } 977 }
1141 PropertyChangeMonitor network_monitor_; 978 PropertyChangeMonitor property_change_monitor_;
1142 }; 979 };
1143 980
1144 typedef std::map<std::string, NetworkObserverList*> NetworkObserverMap; 981 typedef std::map<std::string, PropertyObserverList*>
982 PropertyChangeObserverMap;
1145 983
1146 static void NetworkManagerStatusChangedHandler(void* object, 984 static void NetworkStatusChangedHandler(void* object) {
1147 const char* path, 985 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
1148 const char* key, 986 DCHECK(network);
1149 const Value* value) { 987 network->UpdateNetworkStatus();
1150 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
1151 DCHECK(networklib);
1152 networklib->UpdateNetworkManagerStatus();
1153 } 988 }
1154 989
1155 static void DataPlanUpdateHandler(void* object, 990 static void DataPlanUpdateHandler(void* object,
1156 const char* modem_service_path, 991 const char* modem_service_path,
1157 const CellularDataPlanList* dataplan) { 992 const CellularDataPlanList* dataplan) {
1158 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object); 993 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
1159 DCHECK(networklib && networklib->cellular_network()); 994 DCHECK(network && network->cellular_network());
1160 // Store data plan for currently connected cellular network. 995 // Store data plan for currently connected cellular network.
1161 if (networklib->cellular_network()->service_path() 996 if (network->cellular_network()->service_path()
1162 .compare(modem_service_path) == 0) { 997 .compare(modem_service_path) == 0) {
1163 if (dataplan != NULL) { 998 if (dataplan != NULL) {
1164 networklib->UpdateCellularDataPlan(*dataplan); 999 network->UpdateCellularDataPlan(*dataplan);
1165 } 1000 }
1166 } 1001 }
1167 } 1002 }
1168 1003
1169 static void ParseSystem(SystemInfo* system, 1004 static void ParseSystem(SystemInfo* system,
1170 EthernetNetwork** ethernet, 1005 EthernetNetwork** ethernet,
1171 WifiNetworkVector* wifi_networks, 1006 WifiNetworkVector* wifi_networks,
1172 CellularNetworkVector* cellular_networks, 1007 CellularNetworkVector* cellular_networks,
1173 WifiNetworkVector* remembered_wifi_networks) { 1008 WifiNetworkVector* remembered_wifi_networks) {
1174 DVLOG(1) << "ParseSystem:"; 1009 DVLOG(1) << "ParseSystem:";
1175 DCHECK(!(*ethernet)); 1010 DCHECK(!(*ethernet));
1176 for (int i = 0; i < system->service_size; i++) { 1011 for (int i = 0; i < system->service_size; i++) {
1177 const ServiceInfo* service = system->GetServiceInfo(i); 1012 const ServiceInfo* service = system->GetServiceInfo(i);
1178 DVLOG(1) << " (" << service->type << ") " << service->name 1013 DVLOG(1) << " (" << service->type << ") " << service->name
1179 << " mode=" << service->mode 1014 << " mode=" << service->mode
1180 << " state=" << service->state 1015 << " state=" << service->state
1181 << " sec=" << service->security 1016 << " sec=" << service->security
1182 << " req=" << service->passphrase_required 1017 << " req=" << service->passphrase_required
1183 << " pass=" << service->passphrase 1018 << " pass=" << service->passphrase
1184 << " id=" << service->identity 1019 << " id=" << service->identity
1185 << " certpath=" << service->cert_path 1020 << " certpath=" << service->cert_path
1186 << " str=" << service->strength 1021 << " str=" << service->strength
1187 << " fav=" << service->favorite 1022 << " fav=" << service->favorite
1188 << " auto=" << service->auto_connect 1023 << " auto=" << service->auto_connect
1189 << " is_active=" << service->is_active
1190 << " error=" << service->error; 1024 << " error=" << service->error;
1191 // Once a connected ethernet service is found, disregard other ethernet 1025 // Once a connected ethernet service is found, disregard other ethernet
1192 // services that are also found 1026 // services that are also found
1193 if (service->type == TYPE_ETHERNET) 1027 if (service->type == TYPE_ETHERNET)
1194 (*ethernet) = new EthernetNetwork(service); 1028 (*ethernet) = new EthernetNetwork(service);
1195 else if (service->type == TYPE_WIFI) { 1029 else if (service->type == TYPE_WIFI) {
1196 wifi_networks->push_back(new WifiNetwork(service)); 1030 wifi_networks->push_back(new WifiNetwork(service));
1197 } else if (service->type == TYPE_CELLULAR) { 1031 } else if (service->type == TYPE_CELLULAR) {
1198 cellular_networks->push_back(new CellularNetwork(service)); 1032 cellular_networks->push_back(new CellularNetwork(service));
1199 } 1033 }
(...skipping 19 matching lines...) Expand all
1219 << " certpath=" << service->cert_path 1053 << " certpath=" << service->cert_path
1220 << " auto=" << service->auto_connect; 1054 << " auto=" << service->auto_connect;
1221 if (service->type == TYPE_WIFI) { 1055 if (service->type == TYPE_WIFI) {
1222 remembered_wifi_networks->push_back(new WifiNetwork(service)); 1056 remembered_wifi_networks->push_back(new WifiNetwork(service));
1223 } 1057 }
1224 } 1058 }
1225 } 1059 }
1226 } 1060 }
1227 1061
1228 void Init() { 1062 void Init() {
1229 // First, get the currently available networks. This data is cached 1063 // First, get the currently available networks. This data is cached
1230 // on the connman side, so the call should be quick. 1064 // on the connman side, so the call should be quick.
1231 VLOG(1) << "Getting initial CrOS network info."; 1065 VLOG(1) << "Getting initial CrOS network info.";
1232 UpdateSystemInfo(); 1066 UpdateSystemInfo();
1067
1068 VLOG(1) << "Registering for network status updates.";
1069 // Now, register to receive updates on network status.
1070 network_status_connection_ = MonitorNetwork(&NetworkStatusChangedHandler,
1071 this);
1072 VLOG(1) << "Registering for cellular data plan updates.";
1073 data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler, this);
1233 } 1074 }
1234 1075
1235 void InitTestData() { 1076 void InitTestData() {
1236 ethernet_ = new EthernetNetwork(); 1077 ethernet_ = new EthernetNetwork();
1237 ethernet_->set_connected(true); 1078 ethernet_->set_connected(true);
1238 ethernet_->set_service_path("eth1"); 1079 ethernet_->set_service_path("eth1");
1239 1080
1240 STLDeleteElements(&wifi_networks_); 1081 STLDeleteElements(&wifi_networks_);
1241 wifi_networks_.clear(); 1082 wifi_networks_.clear();
1242 WifiNetwork* wifi1 = new WifiNetwork(); 1083 WifiNetwork* wifi1 = new WifiNetwork();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 test_plan.plan_type = CELLULAR_DATA_PLAN_METERED_PAID; 1142 test_plan.plan_type = CELLULAR_DATA_PLAN_METERED_PAID;
1302 test_plan.update_time = base::Time::Now().ToInternalValue() / 1143 test_plan.update_time = base::Time::Now().ToInternalValue() /
1303 base::Time::kMicrosecondsPerSecond; 1144 base::Time::kMicrosecondsPerSecond;
1304 chromeos::CellularDataPlanList test_plans; 1145 chromeos::CellularDataPlanList test_plans;
1305 test_plans.push_back(test_plan); 1146 test_plans.push_back(test_plan);
1306 cellular_->SetDataPlans(test_plans); 1147 cellular_->SetDataPlans(test_plans);
1307 } 1148 }
1308 1149
1309 void UpdateSystemInfo() { 1150 void UpdateSystemInfo() {
1310 if (EnsureCrosLoaded()) { 1151 if (EnsureCrosLoaded()) {
1311 UpdateNetworkManagerStatus(); 1152 UpdateNetworkStatus();
1312 } 1153 }
1313 } 1154 }
1314 1155
1315 WifiNetwork* GetWifiNetworkByName(const std::string& name) { 1156 WifiNetwork* GetWifiNetworkByName(const std::string& name) {
1316 for (size_t i = 0; i < wifi_networks_.size(); ++i) { 1157 for (size_t i = 0; i < wifi_networks_.size(); ++i) {
1317 if (wifi_networks_[i]->name().compare(name) == 0) { 1158 if (wifi_networks_[i]->name().compare(name) == 0) {
1318 return wifi_networks_[i]; 1159 return wifi_networks_[i];
1319 } 1160 }
1320 } 1161 }
1321 return NULL; 1162 return NULL;
(...skipping 28 matching lines...) Expand all
1350 } 1191 }
1351 if (!enable && !(enabled_devices_ & (1 << device))) { 1192 if (!enable && !(enabled_devices_ & (1 << device))) {
1352 LOG(WARNING) << "Trying to disable a device that's already disabled: " 1193 LOG(WARNING) << "Trying to disable a device that's already disabled: "
1353 << device; 1194 << device;
1354 return; 1195 return;
1355 } 1196 }
1356 1197
1357 EnableNetworkDevice(device, enable); 1198 EnableNetworkDevice(device, enable);
1358 } 1199 }
1359 1200
1360 void NotifyNetworkManagerChanged() { 1201 void NotifyNetworkChanged() {
1361 FOR_EACH_OBSERVER(NetworkManagerObserver, 1202 FOR_EACH_OBSERVER(Observer, observers_, NetworkChanged(this));
1362 network_manager_observers_,
1363 OnNetworkManagerChanged(this));
1364 } 1203 }
1365 1204
1366 void NotifyNetworkChanged(Network* network) { 1205 void NotifyCellularDataPlanChanged() {
1367 DCHECK(network); 1206 FOR_EACH_OBSERVER(Observer, observers_, CellularDataPlanChanged(this));
1368 NetworkObserverMap::const_iterator iter = network_observers_.find( 1207 }
1369 network->service_path()); 1208
1370 if (iter != network_observers_.end()) { 1209 void NotifyPropertyChange(const char* service_path,
1371 FOR_EACH_OBSERVER(NetworkObserver, 1210 const char* key,
1372 *(iter->second), 1211 const Value* value) {
1373 OnNetworkChanged(this, network)); 1212 DCHECK(service_path);
1213 DCHECK(key);
1214 DCHECK(value);
1215 PropertyChangeObserverMap::const_iterator iter = property_observers_.find(
1216 std::string(service_path));
1217 if (iter != property_observers_.end()) {
1218 FOR_EACH_OBSERVER(PropertyObserver, *(iter->second),
1219 PropertyChanged(service_path, key, value));
1374 } else { 1220 } else {
1375 NOTREACHED() << 1221 NOTREACHED() <<
1376 "There weren't supposed to be any property change observers of " << 1222 "There weren't supposed to be any property change observers of " <<
1377 network->service_path(); 1223 service_path;
1378 } 1224 }
1379 } 1225 }
1380 1226
1381 void NotifyCellularDataPlanChanged() { 1227 void ClearNetworks() {
1382 FOR_EACH_OBSERVER(CellularDataPlanObserver, 1228 if (ethernet_)
1383 data_plan_observers_, 1229 delete ethernet_;
1384 OnCellularDataPlanChanged(this)); 1230 ethernet_ = NULL;
1231 wifi_ = NULL;
1232 cellular_ = NULL;
1233 STLDeleteElements(&wifi_networks_);
1234 wifi_networks_.clear();
1235 STLDeleteElements(&cellular_networks_);
1236 cellular_networks_.clear();
1237 STLDeleteElements(&remembered_wifi_networks_);
1238 remembered_wifi_networks_.clear();
1385 } 1239 }
1386 1240
1387 void UpdateNetworkManagerStatus() { 1241 void UpdateNetworkStatus() {
1388 // Make sure we run on UI thread. 1242 // Make sure we run on UI thread.
1389 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 1243 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1390 BrowserThread::PostTask( 1244 BrowserThread::PostTask(
1391 BrowserThread::UI, FROM_HERE, 1245 BrowserThread::UI, FROM_HERE,
1392 NewRunnableMethod(this, 1246 NewRunnableMethod(this,
1393 &NetworkLibraryImpl::UpdateNetworkManagerStatus)); 1247 &NetworkLibraryImpl::UpdateNetworkStatus));
1394 return; 1248 return;
1395 } 1249 }
1396 1250
1397 SystemInfo* system = GetSystemInfo(); 1251 SystemInfo* system = GetSystemInfo();
1398 if (!system) 1252 if (!system)
1399 return; 1253 return;
1400 1254
1401 1255
1402 std::string prev_cellular_service_path = cellular_ ? 1256 std::string prev_cellular_service_path = cellular_ ?
1403 cellular_->service_path() : std::string(); 1257 cellular_->service_path() : std::string();
(...skipping 23 matching lines...) Expand all
1427 } 1281 }
1428 break; // There is only one connected or connecting cellular network. 1282 break; // There is only one connected or connecting cellular network.
1429 } 1283 }
1430 } 1284 }
1431 1285
1432 available_devices_ = system->available_technologies; 1286 available_devices_ = system->available_technologies;
1433 enabled_devices_ = system->enabled_technologies; 1287 enabled_devices_ = system->enabled_technologies;
1434 connected_devices_ = system->connected_technologies; 1288 connected_devices_ = system->connected_technologies;
1435 offline_mode_ = system->offline_mode; 1289 offline_mode_ = system->offline_mode;
1436 1290
1437 NotifyNetworkManagerChanged(); 1291 NotifyNetworkChanged();
1438 FreeSystemInfo(system); 1292 FreeSystemInfo(system);
1439 } 1293 }
1440 1294
1441 void UpdateNetworkStatus(const char* path,
1442 const char* key,
1443 const Value* value) {
1444 if (key == NULL || value == NULL)
1445 return;
1446 // Make sure we run on UI thread.
1447 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1448 BrowserThread::PostTask(
1449 BrowserThread::UI, FROM_HERE,
1450 NewRunnableMethod(this,
1451 &NetworkLibraryImpl::UpdateNetworkStatus,
1452 path, key, value));
1453 return;
1454 }
1455
1456 bool boolval = false;
1457 int intval = 0;
1458 std::string stringval;
1459 Network* network;
1460 if (ethernet_->service_path() == path) {
1461 network = ethernet_;
1462 } else {
1463 CellularNetwork* cellular =
1464 GetWirelessNetworkByPath(cellular_networks_, path);
1465 WifiNetwork* wifi =
1466 GetWirelessNetworkByPath(wifi_networks_, path);
1467 if (cellular == NULL && wifi == NULL)
1468 return;
1469
1470 WirelessNetwork* wireless;
1471 if (wifi != NULL)
1472 wireless = static_cast<WirelessNetwork*>(wifi);
1473 else
1474 wireless = static_cast<WirelessNetwork*>(cellular);
1475
1476 if (strcmp(key, kSignalStrengthProperty) == 0) {
1477 if (value->GetAsInteger(&intval))
1478 wireless->set_strength(intval);
1479 } else if (cellular != NULL) {
1480 if (strcmp(key, kRestrictedPoolProperty) == 0) {
1481 if (value->GetAsBoolean(&boolval))
1482 cellular->set_restricted_pool(boolval);
1483 } else if (strcmp(key, kActivationStateProperty) == 0) {
1484 if (value->GetAsString(&stringval))
1485 cellular->set_activation_state(ParseActivationState(stringval));
1486 } else if (strcmp(key, kPaymentURLProperty) == 0) {
1487 if (value->GetAsString(&stringval))
1488 cellular->set_payment_url(stringval);
1489 } else if (strcmp(key, kNetworkTechnologyProperty) == 0) {
1490 if (value->GetAsString(&stringval))
1491 cellular->set_network_technology(
1492 ParseNetworkTechnology(stringval));
1493 } else if (strcmp(key, kRoamingStateProperty) == 0) {
1494 if (value->GetAsString(&stringval))
1495 cellular->set_roaming_state(ParseRoamingState(stringval));
1496 }
1497 }
1498 network = wireless;
1499 }
1500 if (strcmp(key, kIsActiveProperty) == 0) {
1501 if (value->GetAsBoolean(&boolval))
1502 network->set_active(boolval);
1503 } else if (strcmp(key, kStateProperty) == 0) {
1504 if (value->GetAsString(&stringval))
1505 network->set_state(ParseState(stringval));
1506 }
1507 NotifyNetworkChanged(network);
1508 }
1509
1510 void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) { 1295 void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) {
1511 DCHECK(cellular_); 1296 DCHECK(cellular_);
1512 cellular_->SetDataPlans(data_plans); 1297 cellular_->SetDataPlans(data_plans);
1513 NotifyCellularDataPlanChanged(); 1298 NotifyCellularDataPlanChanged();
1514 } 1299 }
1515 1300
1516 void ClearNetworks() { 1301 ObserverList<Observer> observers_;
1517 if (ethernet_)
1518 delete ethernet_;
1519 ethernet_ = NULL;
1520 wifi_ = NULL;
1521 cellular_ = NULL;
1522 STLDeleteElements(&wifi_networks_);
1523 wifi_networks_.clear();
1524 STLDeleteElements(&cellular_networks_);
1525 cellular_networks_.clear();
1526 STLDeleteElements(&remembered_wifi_networks_);
1527 remembered_wifi_networks_.clear();
1528 }
1529 1302
1530 // Network manager observer list 1303 // Property change observer map
1531 ObserverList<NetworkManagerObserver> network_manager_observers_; 1304 PropertyChangeObserverMap property_observers_;
1532 1305
1533 // Cellular data plan observer list 1306 // The network status connection for monitoring network status changes.
1534 ObserverList<CellularDataPlanObserver> data_plan_observers_; 1307 MonitorNetworkConnection network_status_connection_;
1535
1536 // Network observer map
1537 NetworkObserverMap network_observers_;
1538
1539 // For monitoring network manager status changes.
1540 PropertyChangeMonitor network_manager_monitor_;
1541 1308
1542 // For monitoring data plan changes to the connected cellular network. 1309 // For monitoring data plan changes to the connected cellular network.
1543 DataPlanUpdateMonitor data_plan_monitor_; 1310 DataPlanUpdateMonitor data_plan_monitor_;
1544 1311
1312 // The property change connection for monitoring service property changes.
1313 std::map<std::string, PropertyChangeMonitor> property_change_monitors_;
1314
1545 // The ethernet network. 1315 // The ethernet network.
1546 EthernetNetwork* ethernet_; 1316 EthernetNetwork* ethernet_;
1547 1317
1548 // The list of available wifi networks. 1318 // The list of available wifi networks.
1549 WifiNetworkVector wifi_networks_; 1319 WifiNetworkVector wifi_networks_;
1550 1320
1551 // The current connected (or connecting) wifi network. 1321 // The current connected (or connecting) wifi network.
1552 WifiNetwork* wifi_; 1322 WifiNetwork* wifi_;
1553 1323
1554 // The remembered wifi networks. 1324 // The remembered wifi networks.
(...skipping 21 matching lines...) Expand all
1576 1346
1577 class NetworkLibraryStubImpl : public NetworkLibrary { 1347 class NetworkLibraryStubImpl : public NetworkLibrary {
1578 public: 1348 public:
1579 NetworkLibraryStubImpl() 1349 NetworkLibraryStubImpl()
1580 : ip_address_("1.1.1.1"), 1350 : ip_address_("1.1.1.1"),
1581 ethernet_(new EthernetNetwork()), 1351 ethernet_(new EthernetNetwork()),
1582 wifi_(NULL), 1352 wifi_(NULL),
1583 cellular_(NULL) { 1353 cellular_(NULL) {
1584 } 1354 }
1585 ~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; } 1355 ~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; }
1586 virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) {} 1356 virtual void AddObserver(Observer* observer) {}
1587 virtual void RemoveNetworkManagerObserver(NetworkManagerObserver* observer) {} 1357 virtual void RemoveObserver(Observer* observer) {}
1588 virtual void AddNetworkObserver(const std::string& service_path, 1358 virtual void AddProperyObserver(const char* service_path,
1589 NetworkObserver* observer) {} 1359 PropertyObserver* observer) {}
1590 virtual void RemoveNetworkObserver(const std::string& service_path, 1360 virtual void RemoveProperyObserver(PropertyObserver* observer) {}
1591 NetworkObserver* observer) {}
1592 virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) {}
1593 virtual void AddCellularDataPlanObserver(
1594 CellularDataPlanObserver* observer) {}
1595 virtual void RemoveCellularDataPlanObserver(
1596 CellularDataPlanObserver* observer) {}
1597 virtual EthernetNetwork* ethernet_network() { 1361 virtual EthernetNetwork* ethernet_network() {
1598 return ethernet_; 1362 return ethernet_;
1599 } 1363 }
1600 virtual bool ethernet_connecting() const { return false; } 1364 virtual bool ethernet_connecting() const { return false; }
1601 virtual bool ethernet_connected() const { return true; } 1365 virtual bool ethernet_connected() const { return true; }
1602 virtual WifiNetwork* wifi_network() { 1366 virtual WifiNetwork* wifi_network() {
1603 return wifi_; 1367 return wifi_;
1604 } 1368 }
1605 virtual bool wifi_connecting() const { return false; } 1369 virtual bool wifi_connecting() const { return false; }
1606 virtual bool wifi_connected() const { return false; } 1370 virtual bool wifi_connected() const { return false; }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {} 1415 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {}
1652 virtual void SaveCellularNetwork(const CellularNetwork* network) {} 1416 virtual void SaveCellularNetwork(const CellularNetwork* network) {}
1653 virtual void SaveWifiNetwork(const WifiNetwork* network) {} 1417 virtual void SaveWifiNetwork(const WifiNetwork* network) {}
1654 virtual void ForgetWifiNetwork(const std::string& service_path) {} 1418 virtual void ForgetWifiNetwork(const std::string& service_path) {}
1655 virtual bool ethernet_available() const { return true; } 1419 virtual bool ethernet_available() const { return true; }
1656 virtual bool wifi_available() const { return false; } 1420 virtual bool wifi_available() const { return false; }
1657 virtual bool cellular_available() const { return false; } 1421 virtual bool cellular_available() const { return false; }
1658 virtual bool ethernet_enabled() const { return true; } 1422 virtual bool ethernet_enabled() const { return true; }
1659 virtual bool wifi_enabled() const { return false; } 1423 virtual bool wifi_enabled() const { return false; }
1660 virtual bool cellular_enabled() const { return false; } 1424 virtual bool cellular_enabled() const { return false; }
1661 virtual const Network* active_network() const { return NULL; }
1662 virtual bool offline_mode() const { return false; } 1425 virtual bool offline_mode() const { return false; }
1663 virtual void EnableEthernetNetworkDevice(bool enable) {} 1426 virtual void EnableEthernetNetworkDevice(bool enable) {}
1664 virtual void EnableWifiNetworkDevice(bool enable) {} 1427 virtual void EnableWifiNetworkDevice(bool enable) {}
1665 virtual void EnableCellularNetworkDevice(bool enable) {} 1428 virtual void EnableCellularNetworkDevice(bool enable) {}
1666 virtual void EnableOfflineMode(bool enable) {} 1429 virtual void EnableOfflineMode(bool enable) {}
1667 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path, 1430 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path,
1668 std::string* hardware_address) { 1431 std::string* hardware_address) {
1669 hardware_address->clear(); 1432 hardware_address->clear();
1670 return NetworkIPConfigVector(); 1433 return NetworkIPConfigVector();
1671 } 1434 }
(...skipping 15 matching lines...) Expand all
1687 return new NetworkLibraryStubImpl(); 1450 return new NetworkLibraryStubImpl();
1688 else 1451 else
1689 return new NetworkLibraryImpl(); 1452 return new NetworkLibraryImpl();
1690 } 1453 }
1691 1454
1692 } // namespace chromeos 1455 } // namespace chromeos
1693 1456
1694 // Allows InvokeLater without adding refcounting. This class is a Singleton and 1457 // Allows InvokeLater without adding refcounting. This class is a Singleton and
1695 // won't be deleted until it's last InvokeLater is run. 1458 // won't be deleted until it's last InvokeLater is run.
1696 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); 1459 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl);
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | chrome/browser/chromeos/dom_ui/internet_options_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698