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

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

Issue 4482003: Landing change for ers@chromium.org: http://codereview.chromium.org/4134012/s... (Closed) Base URL: svn://chrome-svn/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"
15 #include "chrome/browser/browser_thread.h" 16 #include "chrome/browser/browser_thread.h"
16 #include "chrome/browser/chromeos/cros/cros_library.h" 17 #include "chrome/browser/chromeos/cros/cros_library.h"
17 #include "grit/generated_resources.h" 18 #include "grit/generated_resources.h"
18 19
19 namespace chromeos { 20 namespace chromeos {
20 21
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
21 // Helper function to wrap Html with <th> tag. 138 // Helper function to wrap Html with <th> tag.
22 static std::string WrapWithTH(std::string text) { 139 static std::string WrapWithTH(std::string text) {
23 return "<th>" + text + "</th>"; 140 return "<th>" + text + "</th>";
24 } 141 }
25 142
26 // Helper function to wrap Html with <td> tag. 143 // Helper function to wrap Html with <td> tag.
27 static std::string WrapWithTD(std::string text) { 144 static std::string WrapWithTD(std::string text) {
28 return "<td>" + text + "</td>"; 145 return "<td>" + text + "</td>";
29 } 146 }
30 147
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 state_ = network.state(); 209 state_ = network.state();
93 error_ = network.error(); 210 error_ = network.error();
94 } 211 }
95 212
96 void Network::Clear() { 213 void Network::Clear() {
97 state_ = STATE_UNKNOWN; 214 state_ = STATE_UNKNOWN;
98 error_ = ERROR_UNKNOWN; 215 error_ = ERROR_UNKNOWN;
99 service_path_.clear(); 216 service_path_.clear();
100 device_path_.clear(); 217 device_path_.clear();
101 ip_address_.clear(); 218 ip_address_.clear();
219 is_active_ = false;
102 } 220 }
103 221
104 Network::Network(const ServiceInfo* service) { 222 Network::Network(const ServiceInfo* service) {
105 type_ = service->type; 223 type_ = service->type;
106 state_ = service->state; 224 state_ = service->state;
107 error_ = service->error; 225 error_ = service->error;
108 service_path_ = SafeString(service->service_path); 226 service_path_ = SafeString(service->service_path);
109 device_path_ = SafeString(service->device_path); 227 device_path_ = SafeString(service->device_path);
228 is_active_ = service->is_active;
110 ip_address_.clear(); 229 ip_address_.clear();
111 // If connected, get ip config. 230 // If connected, get ip config.
112 if (EnsureCrosLoaded() && connected() && service->device_path) { 231 if (EnsureCrosLoaded() && connected() && service->device_path) {
113 IPConfigStatus* ipconfig_status = ListIPConfigs(service->device_path); 232 IPConfigStatus* ipconfig_status = ListIPConfigs(service->device_path);
114 if (ipconfig_status) { 233 if (ipconfig_status) {
115 for (int i = 0; i < ipconfig_status->size; i++) { 234 for (int i = 0; i < ipconfig_status->size; i++) {
116 IPConfig ipconfig = ipconfig_status->ips[i]; 235 IPConfig ipconfig = ipconfig_status->ips[i];
117 if (strlen(ipconfig.address) > 0) 236 if (strlen(ipconfig.address) > 0)
118 ip_address_ = ipconfig.address; 237 ip_address_ = ipconfig.address;
119 } 238 }
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 } 626 }
508 return false; 627 return false;
509 } 628 }
510 629
511 //////////////////////////////////////////////////////////////////////////////// 630 ////////////////////////////////////////////////////////////////////////////////
512 // NetworkLibrary 631 // NetworkLibrary
513 632
514 class NetworkLibraryImpl : public NetworkLibrary { 633 class NetworkLibraryImpl : public NetworkLibrary {
515 public: 634 public:
516 NetworkLibraryImpl() 635 NetworkLibraryImpl()
517 : network_status_connection_(NULL), 636 : network_manager_monitor_(NULL),
518 data_plan_monitor_(NULL), 637 data_plan_monitor_(NULL),
519 ethernet_(NULL), 638 ethernet_(NULL),
520 wifi_(NULL), 639 wifi_(NULL),
521 cellular_(NULL), 640 cellular_(NULL),
522 available_devices_(0), 641 available_devices_(0),
523 enabled_devices_(0), 642 enabled_devices_(0),
524 connected_devices_(0), 643 connected_devices_(0),
525 offline_mode_(false) { 644 offline_mode_(false) {
526 if (EnsureCrosLoaded()) { 645 if (EnsureCrosLoaded()) {
527 Init(); 646 Init();
647 network_manager_monitor_ =
648 MonitorNetworkManager(&NetworkManagerStatusChangedHandler,
649 this);
650 data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler,
651 this);
528 } else { 652 } else {
529 InitTestData(); 653 InitTestData();
530 } 654 }
531 } 655 }
532 656
533 ~NetworkLibraryImpl() { 657 ~NetworkLibraryImpl() {
534 if (network_status_connection_) { 658 network_manager_observers_.Clear();
535 DisconnectMonitorNetwork(network_status_connection_); 659 if (network_manager_monitor_)
536 } 660 DisconnectPropertyChangeMonitor(network_manager_monitor_);
537 if (data_plan_monitor_) { 661 data_plan_observers_.Clear();
662 if (data_plan_monitor_)
538 DisconnectDataPlanUpdateMonitor(data_plan_monitor_); 663 DisconnectDataPlanUpdateMonitor(data_plan_monitor_);
539 } 664 STLDeleteValues(&network_observers_);
540 // DCHECK(!observers_.size());
541 DCHECK(!property_observers_.size());
542 STLDeleteValues(&property_observers_);
543 ClearNetworks(); 665 ClearNetworks();
544 } 666 }
545 667
546 void AddObserver(Observer* observer) { 668 virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) {
547 observers_.AddObserver(observer); 669 if (!network_manager_observers_.HasObserver(observer))
670 network_manager_observers_.AddObserver(observer);
548 } 671 }
549 672
550 void RemoveObserver(Observer* observer) { 673 virtual void RemoveNetworkManagerObserver(NetworkManagerObserver* observer) {
551 observers_.RemoveObserver(observer); 674 network_manager_observers_.RemoveObserver(observer);
552 } 675 }
553 676
554 virtual void AddProperyObserver(const char* service_path, 677 virtual void AddNetworkObserver(const std::string& service_path,
555 PropertyObserver* observer) { 678 NetworkObserver* observer) {
556 DCHECK(service_path);
557 DCHECK(observer); 679 DCHECK(observer);
558 if (!EnsureCrosLoaded()) 680 if (!EnsureCrosLoaded())
559 return; 681 return;
560 // First, add the observer to the callback map. 682 // First, add the observer to the callback map.
561 PropertyChangeObserverMap::iterator iter = property_observers_.find( 683 NetworkObserverMap::iterator iter = network_observers_.find(service_path);
562 std::string(service_path)); 684 NetworkObserverList* oblist;
563 if (iter != property_observers_.end()) { 685 if (iter != network_observers_.end()) {
564 iter->second->AddObserver(observer); 686 oblist = iter->second;
565 } else { 687 } else {
566 std::pair<PropertyChangeObserverMap::iterator, bool> inserted = 688 std::pair<NetworkObserverMap::iterator, bool> inserted =
567 property_observers_.insert( 689 network_observers_.insert(
568 std::pair<std::string, PropertyObserverList*>( 690 std::make_pair<std::string, NetworkObserverList*>(
569 std::string(service_path), 691 service_path,
570 new PropertyObserverList(this, service_path))); 692 new NetworkObserverList(this, service_path)));
571 inserted.first->second->AddObserver(observer); 693 oblist = inserted.first->second;
694 }
695 if (!oblist->HasObserver(observer))
696 oblist->AddObserver(observer);
697 }
698
699 virtual void RemoveNetworkObserver(const std::string& service_path,
700 NetworkObserver* observer) {
701 DCHECK(observer);
702 DCHECK(service_path.size());
703 NetworkObserverMap::iterator map_iter =
704 network_observers_.find(service_path);
705 if (map_iter != network_observers_.end()) {
706 map_iter->second->RemoveObserver(observer);
707 if (!map_iter->second->size()) {
708 delete map_iter->second;
709 network_observers_.erase(map_iter++);
710 }
572 } 711 }
573 } 712 }
574 713
575 virtual void RemoveProperyObserver(PropertyObserver* observer) { 714 virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) {
576 DCHECK(observer); 715 DCHECK(observer);
577 PropertyChangeObserverMap::iterator map_iter = 716 NetworkObserverMap::iterator map_iter = network_observers_.begin();
578 property_observers_.begin(); 717 while (map_iter != network_observers_.end()) {
579 while (map_iter != property_observers_.end()) {
580 map_iter->second->RemoveObserver(observer); 718 map_iter->second->RemoveObserver(observer);
581 if (!map_iter->second->size()) { 719 if (!map_iter->second->size()) {
582 delete map_iter->second; 720 delete map_iter->second;
583 property_observers_.erase(map_iter++); 721 network_observers_.erase(map_iter++);
584 } else { 722 } else {
585 ++map_iter; 723 ++map_iter;
586 } 724 }
587 } 725 }
588 } 726 }
589 727
728 virtual void AddCellularDataPlanObserver(CellularDataPlanObserver* observer) {
729 if (!data_plan_observers_.HasObserver(observer))
730 data_plan_observers_.AddObserver(observer);
731 }
732
733 virtual void RemoveCellularDataPlanObserver(
734 CellularDataPlanObserver* observer) {
735 data_plan_observers_.RemoveObserver(observer);
736 }
737
590 virtual EthernetNetwork* ethernet_network() { return ethernet_; } 738 virtual EthernetNetwork* ethernet_network() { return ethernet_; }
591 virtual bool ethernet_connecting() const { 739 virtual bool ethernet_connecting() const {
592 return ethernet_ ? ethernet_->connecting() : false; 740 return ethernet_ ? ethernet_->connecting() : false;
593 } 741 }
594 virtual bool ethernet_connected() const { 742 virtual bool ethernet_connected() const {
595 return ethernet_ ? ethernet_->connected() : false; 743 return ethernet_ ? ethernet_->connected() : false;
596 } 744 }
597 745
598 virtual WifiNetwork* wifi_network() { return wifi_; } 746 virtual WifiNetwork* wifi_network() { return wifi_; }
599 virtual bool wifi_connecting() const { 747 virtual bool wifi_connecting() const {
(...skipping 13 matching lines...) Expand all
613 761
614 bool Connected() const { 762 bool Connected() const {
615 return ethernet_connected() || wifi_connected() || cellular_connected(); 763 return ethernet_connected() || wifi_connected() || cellular_connected();
616 } 764 }
617 765
618 bool Connecting() const { 766 bool Connecting() const {
619 return ethernet_connecting() || wifi_connecting() || cellular_connecting(); 767 return ethernet_connecting() || wifi_connecting() || cellular_connecting();
620 } 768 }
621 769
622 const std::string& IPAddress() const { 770 const std::string& IPAddress() const {
623 // Returns highest priority IP address. 771 // Returns IP address for the active network.
624 if (ethernet_connected()) 772 const Network* active = active_network();
773 if (active != NULL)
774 return active->ip_address();
775 if (ethernet_)
625 return ethernet_->ip_address(); 776 return ethernet_->ip_address();
626 if (wifi_connected()) 777 static std::string null_address("0.0.0.0");
627 return wifi_->ip_address(); 778 return null_address;
628 if (cellular_connected())
629 return cellular_->ip_address();
630 return ethernet_->ip_address();
631 } 779 }
632 780
633 virtual const WifiNetworkVector& wifi_networks() const { 781 virtual const WifiNetworkVector& wifi_networks() const {
634 return wifi_networks_; 782 return wifi_networks_;
635 } 783 }
636 784
637 virtual const WifiNetworkVector& remembered_wifi_networks() const { 785 virtual const WifiNetworkVector& remembered_wifi_networks() const {
638 return remembered_wifi_networks_; 786 return remembered_wifi_networks_;
639 } 787 }
640 788
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 return true; 833 return true;
686 } 834 }
687 835
688 virtual void ConnectToWifiNetwork(const WifiNetwork* network, 836 virtual void ConnectToWifiNetwork(const WifiNetwork* network,
689 const std::string& password, 837 const std::string& password,
690 const std::string& identity, 838 const std::string& identity,
691 const std::string& certpath) { 839 const std::string& certpath) {
692 DCHECK(network); 840 DCHECK(network);
693 if (!EnsureCrosLoaded()) 841 if (!EnsureCrosLoaded())
694 return; 842 return;
843 // TODO(ers) make wifi the highest priority service type
695 if (ConnectToNetworkWithCertInfo(network->service_path().c_str(), 844 if (ConnectToNetworkWithCertInfo(network->service_path().c_str(),
696 password.empty() ? NULL : password.c_str(), 845 password.empty() ? NULL : password.c_str(),
697 identity.empty() ? NULL : identity.c_str(), 846 identity.empty() ? NULL : identity.c_str(),
698 certpath.empty() ? NULL : certpath.c_str())) { 847 certpath.empty() ? NULL : certpath.c_str())) {
699 // Update local cache and notify listeners. 848 // Update local cache and notify listeners.
700 WifiNetwork* wifi = GetWirelessNetworkByPath( 849 WifiNetwork* wifi = GetWirelessNetworkByPath(
701 wifi_networks_, network->service_path()); 850 wifi_networks_, network->service_path());
702 if (wifi) { 851 if (wifi) {
703 wifi->set_passphrase(password); 852 wifi->set_passphrase(password);
704 wifi->set_identity(identity); 853 wifi->set_identity(identity);
705 wifi->set_cert_path(certpath); 854 wifi->set_cert_path(certpath);
706 wifi->set_connecting(true); 855 wifi->set_connecting(true);
707 wifi_ = wifi; 856 wifi_ = wifi;
708 } 857 }
709 NotifyNetworkChanged(); 858 NotifyNetworkManagerChanged();
710 } 859 }
711 } 860 }
712 861
713 virtual void ConnectToWifiNetwork(ConnectionSecurity security, 862 virtual void ConnectToWifiNetwork(ConnectionSecurity security,
714 const std::string& ssid, 863 const std::string& ssid,
715 const std::string& password, 864 const std::string& password,
716 const std::string& identity, 865 const std::string& identity,
717 const std::string& certpath, 866 const std::string& certpath,
718 bool auto_connect) { 867 bool auto_connect) {
719 if (!EnsureCrosLoaded()) 868 if (!EnsureCrosLoaded())
720 return; 869 return;
721 870
722 // First create a service from hidden network. 871 // First create a service from hidden network.
723 ServiceInfo* service = GetWifiService(ssid.c_str(), security); 872 ServiceInfo* service = GetWifiService(ssid.c_str(), security);
724 if (service) { 873 if (service) {
725 // Set auto-connect. 874 // Set auto-connect.
726 SetAutoConnect(service->service_path, auto_connect); 875 SetAutoConnect(service->service_path, auto_connect);
727 // Now connect to that service. 876 // Now connect to that service.
877 // TODO(ers) make wifi the highest priority service type
728 ConnectToNetworkWithCertInfo(service->service_path, 878 ConnectToNetworkWithCertInfo(service->service_path,
729 password.empty() ? NULL : password.c_str(), 879 password.empty() ? NULL : password.c_str(),
730 identity.empty() ? NULL : identity.c_str(), 880 identity.empty() ? NULL : identity.c_str(),
731 certpath.empty() ? NULL : certpath.c_str()); 881 certpath.empty() ? NULL : certpath.c_str());
732 882
733 // Clean up ServiceInfo object. 883 // Clean up ServiceInfo object.
734 FreeServiceInfo(service); 884 FreeServiceInfo(service);
735 } else { 885 } else {
736 LOG(WARNING) << "Cannot find hidden network: " << ssid; 886 LOG(WARNING) << "Cannot find hidden network: " << ssid;
737 // TODO(chocobo): Show error message. 887 // TODO(chocobo): Show error message.
738 } 888 }
739 } 889 }
740 890
741 virtual void ConnectToCellularNetwork(const CellularNetwork* network) { 891 virtual void ConnectToCellularNetwork(const CellularNetwork* network) {
742 DCHECK(network); 892 DCHECK(network);
743 if (!EnsureCrosLoaded()) 893 if (!EnsureCrosLoaded())
744 return; 894 return;
895 // TODO(ers) make cellular the highest priority service type
745 if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) { 896 if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) {
746 // Update local cache and notify listeners. 897 // Update local cache and notify listeners.
747 CellularNetwork* cellular = GetWirelessNetworkByPath( 898 CellularNetwork* cellular = GetWirelessNetworkByPath(
748 cellular_networks_, network->service_path()); 899 cellular_networks_, network->service_path());
749 if (cellular) { 900 if (cellular) {
750 cellular->set_connecting(true); 901 cellular->set_connecting(true);
751 cellular_ = cellular; 902 cellular_ = cellular;
752 } 903 }
753 NotifyNetworkChanged(); 904 NotifyNetworkManagerChanged();
754 } 905 }
755 } 906 }
756 907
757 virtual void RefreshCellularDataPlans(const CellularNetwork* network) { 908 virtual void RefreshCellularDataPlans(const CellularNetwork* network) {
758 DCHECK(network); 909 DCHECK(network);
759 if (!EnsureCrosLoaded() || !network) 910 if (!EnsureCrosLoaded() || !network)
760 return; 911 return;
761 RequestCellularDataPlanUpdate(network->service_path().c_str()); 912 RequestCellularDataPlanUpdate(network->service_path().c_str());
762 } 913 }
763 914
764 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) { 915 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {
765 DCHECK(network); 916 DCHECK(network);
766 if (!EnsureCrosLoaded() || !network) 917 if (!EnsureCrosLoaded() || !network)
767 return; 918 return;
919 // TODO(ers) restore default service type priority ordering?
768 if (DisconnectFromNetwork(network->service_path().c_str())) { 920 if (DisconnectFromNetwork(network->service_path().c_str())) {
769 // Update local cache and notify listeners. 921 // Update local cache and notify listeners.
770 if (network->type() == TYPE_WIFI) { 922 if (network->type() == TYPE_WIFI) {
771 WifiNetwork* wifi = GetWirelessNetworkByPath( 923 WifiNetwork* wifi = GetWirelessNetworkByPath(
772 wifi_networks_, network->service_path()); 924 wifi_networks_, network->service_path());
773 if (wifi) { 925 if (wifi) {
774 wifi->set_connected(false); 926 wifi->set_connected(false);
775 wifi_ = NULL; 927 wifi_ = NULL;
776 } 928 }
777 } else if (network->type() == TYPE_CELLULAR) { 929 } else if (network->type() == TYPE_CELLULAR) {
778 CellularNetwork* cellular = GetWirelessNetworkByPath( 930 CellularNetwork* cellular = GetWirelessNetworkByPath(
779 cellular_networks_, network->service_path()); 931 cellular_networks_, network->service_path());
780 if (cellular) { 932 if (cellular) {
781 cellular->set_connected(false); 933 cellular->set_connected(false);
782 cellular_ = NULL; 934 cellular_ = NULL;
783 } 935 }
784 } 936 }
785 NotifyNetworkChanged(); 937 NotifyNetworkManagerChanged();
786 } 938 }
787 } 939 }
788 940
789 virtual void SaveCellularNetwork(const CellularNetwork* network) { 941 virtual void SaveCellularNetwork(const CellularNetwork* network) {
790 DCHECK(network); 942 DCHECK(network);
791 // Update the cellular network with libcros. 943 // Update the cellular network with libcros.
792 if (!EnsureCrosLoaded() || !network) 944 if (!EnsureCrosLoaded() || !network)
793 return; 945 return;
794 946
795 SetAutoConnect(network->service_path().c_str(), network->auto_connect()); 947 SetAutoConnect(network->service_path().c_str(), network->auto_connect());
(...skipping 21 matching lines...) Expand all
817 for (WifiNetworkVector::iterator iter = 969 for (WifiNetworkVector::iterator iter =
818 remembered_wifi_networks_.begin(); 970 remembered_wifi_networks_.begin();
819 iter != remembered_wifi_networks_.end(); 971 iter != remembered_wifi_networks_.end();
820 ++iter) { 972 ++iter) {
821 if ((*iter)->service_path() == service_path) { 973 if ((*iter)->service_path() == service_path) {
822 delete (*iter); 974 delete (*iter);
823 remembered_wifi_networks_.erase(iter); 975 remembered_wifi_networks_.erase(iter);
824 break; 976 break;
825 } 977 }
826 } 978 }
827 NotifyNetworkChanged(); 979 NotifyNetworkManagerChanged();
828 } 980 }
829 } 981 }
830 982
831 virtual bool ethernet_available() const { 983 virtual bool ethernet_available() const {
832 return available_devices_ & (1 << TYPE_ETHERNET); 984 return available_devices_ & (1 << TYPE_ETHERNET);
833 } 985 }
834 virtual bool wifi_available() const { 986 virtual bool wifi_available() const {
835 return available_devices_ & (1 << TYPE_WIFI); 987 return available_devices_ & (1 << TYPE_WIFI);
836 } 988 }
837 virtual bool cellular_available() const { 989 virtual bool cellular_available() const {
838 return available_devices_ & (1 << TYPE_CELLULAR); 990 return available_devices_ & (1 << TYPE_CELLULAR);
839 } 991 }
840 992
841 virtual bool ethernet_enabled() const { 993 virtual bool ethernet_enabled() const {
842 return enabled_devices_ & (1 << TYPE_ETHERNET); 994 return enabled_devices_ & (1 << TYPE_ETHERNET);
843 } 995 }
844 virtual bool wifi_enabled() const { 996 virtual bool wifi_enabled() const {
845 return enabled_devices_ & (1 << TYPE_WIFI); 997 return enabled_devices_ & (1 << TYPE_WIFI);
846 } 998 }
847 virtual bool cellular_enabled() const { 999 virtual bool cellular_enabled() const {
848 return enabled_devices_ & (1 << TYPE_CELLULAR); 1000 return enabled_devices_ & (1 << TYPE_CELLULAR);
849 } 1001 }
850 1002
851 virtual bool offline_mode() const { return offline_mode_; } 1003 virtual bool offline_mode() const { return offline_mode_; }
852 1004
1005 virtual const Network* active_network() const {
1006 if (ethernet_ && ethernet_->is_active())
1007 return ethernet_;
1008 if (wifi_ && wifi_->is_active())
1009 return wifi_;
1010 if (cellular_ && cellular_->is_active())
1011 return cellular_;
1012 return NULL;
1013 }
1014
853 virtual void EnableEthernetNetworkDevice(bool enable) { 1015 virtual void EnableEthernetNetworkDevice(bool enable) {
854 EnableNetworkDeviceType(TYPE_ETHERNET, enable); 1016 EnableNetworkDeviceType(TYPE_ETHERNET, enable);
855 } 1017 }
856 1018
857 virtual void EnableWifiNetworkDevice(bool enable) { 1019 virtual void EnableWifiNetworkDevice(bool enable) {
858 EnableNetworkDeviceType(TYPE_WIFI, enable); 1020 EnableNetworkDeviceType(TYPE_WIFI, enable);
859 } 1021 }
860 1022
861 virtual void EnableCellularNetworkDevice(bool enable) { 1023 virtual void EnableCellularNetworkDevice(bool enable) {
862 EnableNetworkDeviceType(TYPE_CELLULAR, enable); 1024 EnableNetworkDeviceType(TYPE_CELLULAR, enable);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 output.append("<tr>" + ToHtmlTableRow(remembered_wifi_networks_[i]) + 1110 output.append("<tr>" + ToHtmlTableRow(remembered_wifi_networks_[i]) +
949 "</tr>"); 1111 "</tr>");
950 } 1112 }
951 1113
952 output.append("</table></body></html>"); 1114 output.append("</table></body></html>");
953 return output; 1115 return output;
954 } 1116 }
955 1117
956 private: 1118 private:
957 1119
958 class PropertyObserverList : public ObserverList<PropertyObserver> { 1120 class NetworkObserverList : public ObserverList<NetworkObserver> {
959 public: 1121 public:
960 PropertyObserverList(NetworkLibraryImpl* library, 1122 NetworkObserverList(NetworkLibraryImpl* library,
961 const char* service_path) { 1123 const std::string& service_path) {
962 DCHECK(service_path); 1124 network_monitor_ = MonitorNetworkService(&NetworkStatusChangedHandler,
963 property_change_monitor_ = MonitorNetworkService(&PropertyChangeHandler, 1125 service_path.c_str(),
964 service_path, 1126 library);
965 library);
966 } 1127 }
967 1128
968 virtual ~PropertyObserverList() { 1129 virtual ~NetworkObserverList() {
969 if (property_change_monitor_) 1130 if (network_monitor_)
970 DisconnectPropertyChangeMonitor(property_change_monitor_); 1131 DisconnectPropertyChangeMonitor(network_monitor_);
971 } 1132 }
972 1133
973 private: 1134 private:
974 static void PropertyChangeHandler(void* object, 1135 static void NetworkStatusChangedHandler(void* object,
975 const char* path, 1136 const char* path,
976 const char* key, 1137 const char* key,
977 const Value* value) { 1138 const Value* value) {
978 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object); 1139 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
979 DCHECK(network); 1140 DCHECK(networklib);
980 network->NotifyPropertyChange(path, key, value); 1141 networklib->UpdateNetworkStatus(path, key, value);
981 } 1142 }
982 PropertyChangeMonitor property_change_monitor_; 1143 PropertyChangeMonitor network_monitor_;
983 }; 1144 };
984 1145
985 typedef std::map<std::string, PropertyObserverList*> 1146 typedef std::map<std::string, NetworkObserverList*> NetworkObserverMap;
986 PropertyChangeObserverMap;
987 1147
988 static void NetworkStatusChangedHandler(void* object) { 1148 static void NetworkManagerStatusChangedHandler(void* object,
989 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object); 1149 const char* path,
990 DCHECK(network); 1150 const char* key,
991 network->UpdateNetworkStatus(); 1151 const Value* value) {
1152 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
1153 DCHECK(networklib);
1154 networklib->UpdateNetworkManagerStatus();
992 } 1155 }
993 1156
994 static void DataPlanUpdateHandler(void* object, 1157 static void DataPlanUpdateHandler(void* object,
995 const char* modem_service_path, 1158 const char* modem_service_path,
996 const CellularDataPlanList* dataplan) { 1159 const CellularDataPlanList* dataplan) {
997 NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object); 1160 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
998 DCHECK(network && network->cellular_network()); 1161 DCHECK(networklib && networklib->cellular_network());
999 // Store data plan for currently connected cellular network. 1162 // Store data plan for currently connected cellular network.
1000 if (network->cellular_network()->service_path() 1163 if (networklib->cellular_network()->service_path()
1001 .compare(modem_service_path) == 0) { 1164 .compare(modem_service_path) == 0) {
1002 if (dataplan != NULL) { 1165 if (dataplan != NULL) {
1003 network->UpdateCellularDataPlan(dataplan); 1166 networklib->UpdateCellularDataPlan(dataplan);
1004 } 1167 }
1005 } 1168 }
1006 } 1169 }
1007 1170
1008 static void ParseSystem(SystemInfo* system, 1171 static void ParseSystem(SystemInfo* system,
1009 EthernetNetwork** ethernet, 1172 EthernetNetwork** ethernet,
1010 WifiNetworkVector* wifi_networks, 1173 WifiNetworkVector* wifi_networks,
1011 CellularNetworkVector* cellular_networks, 1174 CellularNetworkVector* cellular_networks,
1012 WifiNetworkVector* remembered_wifi_networks) { 1175 WifiNetworkVector* remembered_wifi_networks) {
1013 DVLOG(1) << "ParseSystem:"; 1176 DVLOG(1) << "ParseSystem:";
1014 DCHECK(!(*ethernet)); 1177 DCHECK(!(*ethernet));
1015 for (int i = 0; i < system->service_size; i++) { 1178 for (int i = 0; i < system->service_size; i++) {
1016 const ServiceInfo* service = system->GetServiceInfo(i); 1179 const ServiceInfo* service = system->GetServiceInfo(i);
1017 DVLOG(1) << " (" << service->type << ") " << service->name 1180 DVLOG(1) << " (" << service->type << ") " << service->name
1018 << " mode=" << service->mode 1181 << " mode=" << service->mode
1019 << " state=" << service->state 1182 << " state=" << service->state
1020 << " sec=" << service->security 1183 << " sec=" << service->security
1021 << " req=" << service->passphrase_required 1184 << " req=" << service->passphrase_required
1022 << " pass=" << service->passphrase 1185 << " pass=" << service->passphrase
1023 << " id=" << service->identity 1186 << " id=" << service->identity
1024 << " certpath=" << service->cert_path 1187 << " certpath=" << service->cert_path
1025 << " str=" << service->strength 1188 << " str=" << service->strength
1026 << " fav=" << service->favorite 1189 << " fav=" << service->favorite
1027 << " auto=" << service->auto_connect 1190 << " auto=" << service->auto_connect
1191 << " is_active=" << service->is_active
1028 << " error=" << service->error; 1192 << " error=" << service->error;
1029 // Once a connected ethernet service is found, disregard other ethernet 1193 // Once a connected ethernet service is found, disregard other ethernet
1030 // services that are also found 1194 // services that are also found
1031 if (service->type == TYPE_ETHERNET) 1195 if (service->type == TYPE_ETHERNET)
1032 (*ethernet) = new EthernetNetwork(service); 1196 (*ethernet) = new EthernetNetwork(service);
1033 else if (service->type == TYPE_WIFI) { 1197 else if (service->type == TYPE_WIFI) {
1034 wifi_networks->push_back(new WifiNetwork(service)); 1198 wifi_networks->push_back(new WifiNetwork(service));
1035 } else if (service->type == TYPE_CELLULAR) { 1199 } else if (service->type == TYPE_CELLULAR) {
1036 cellular_networks->push_back(new CellularNetwork(service)); 1200 cellular_networks->push_back(new CellularNetwork(service));
1037 } 1201 }
(...skipping 19 matching lines...) Expand all
1057 << " certpath=" << service->cert_path 1221 << " certpath=" << service->cert_path
1058 << " auto=" << service->auto_connect; 1222 << " auto=" << service->auto_connect;
1059 if (service->type == TYPE_WIFI) { 1223 if (service->type == TYPE_WIFI) {
1060 remembered_wifi_networks->push_back(new WifiNetwork(service)); 1224 remembered_wifi_networks->push_back(new WifiNetwork(service));
1061 } 1225 }
1062 } 1226 }
1063 } 1227 }
1064 } 1228 }
1065 1229
1066 void Init() { 1230 void Init() {
1067 // First, get the currently available networks. This data is cached 1231 // First, get the currently available networks. This data is cached
1068 // on the connman side, so the call should be quick. 1232 // on the connman side, so the call should be quick.
1069 VLOG(1) << "Getting initial CrOS network info."; 1233 VLOG(1) << "Getting initial CrOS network info.";
1070 UpdateSystemInfo(); 1234 UpdateSystemInfo();
1071
1072 VLOG(1) << "Registering for network status updates.";
1073 // Now, register to receive updates on network status.
1074 network_status_connection_ = MonitorNetwork(&NetworkStatusChangedHandler,
1075 this);
1076 VLOG(1) << "Registering for cellular data plan updates.";
1077 data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler, this);
1078 } 1235 }
1079 1236
1080 void InitTestData() { 1237 void InitTestData() {
1081 ethernet_ = new EthernetNetwork(); 1238 ethernet_ = new EthernetNetwork();
1082 ethernet_->set_connected(true); 1239 ethernet_->set_connected(true);
1083 ethernet_->set_service_path("eth1"); 1240 ethernet_->set_service_path("eth1");
1084 1241
1085 STLDeleteElements(&wifi_networks_); 1242 STLDeleteElements(&wifi_networks_);
1086 wifi_networks_.clear(); 1243 wifi_networks_.clear();
1087 WifiNetwork* wifi1 = new WifiNetwork(); 1244 WifiNetwork* wifi1 = new WifiNetwork();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 int devices = (1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) | 1286 int devices = (1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) |
1130 (1 << TYPE_CELLULAR); 1287 (1 << TYPE_CELLULAR);
1131 available_devices_ = devices; 1288 available_devices_ = devices;
1132 enabled_devices_ = devices; 1289 enabled_devices_ = devices;
1133 connected_devices_ = devices; 1290 connected_devices_ = devices;
1134 offline_mode_ = false; 1291 offline_mode_ = false;
1135 } 1292 }
1136 1293
1137 void UpdateSystemInfo() { 1294 void UpdateSystemInfo() {
1138 if (EnsureCrosLoaded()) { 1295 if (EnsureCrosLoaded()) {
1139 UpdateNetworkStatus(); 1296 UpdateNetworkManagerStatus();
1140 } 1297 }
1141 } 1298 }
1142 1299
1143 WifiNetwork* GetWifiNetworkByName(const std::string& name) { 1300 WifiNetwork* GetWifiNetworkByName(const std::string& name) {
1144 for (size_t i = 0; i < wifi_networks_.size(); ++i) { 1301 for (size_t i = 0; i < wifi_networks_.size(); ++i) {
1145 if (wifi_networks_[i]->name().compare(name) == 0) { 1302 if (wifi_networks_[i]->name().compare(name) == 0) {
1146 return wifi_networks_[i]; 1303 return wifi_networks_[i];
1147 } 1304 }
1148 } 1305 }
1149 return NULL; 1306 return NULL;
(...skipping 28 matching lines...) Expand all
1178 } 1335 }
1179 if (!enable && !(enabled_devices_ & (1 << device))) { 1336 if (!enable && !(enabled_devices_ & (1 << device))) {
1180 LOG(WARNING) << "Trying to disable a device that's already disabled: " 1337 LOG(WARNING) << "Trying to disable a device that's already disabled: "
1181 << device; 1338 << device;
1182 return; 1339 return;
1183 } 1340 }
1184 1341
1185 EnableNetworkDevice(device, enable); 1342 EnableNetworkDevice(device, enable);
1186 } 1343 }
1187 1344
1188 void NotifyNetworkChanged() { 1345 void NotifyNetworkManagerChanged() {
1189 FOR_EACH_OBSERVER(Observer, observers_, NetworkChanged(this)); 1346 FOR_EACH_OBSERVER(NetworkManagerObserver,
1347 network_manager_observers_,
1348 OnNetworkManagerChanged(this));
1349 }
1350
1351 void NotifyNetworkChanged(Network* network) {
1352 DCHECK(network);
1353 NetworkObserverMap::const_iterator iter = network_observers_.find(
1354 network->service_path());
1355 if (iter != network_observers_.end()) {
1356 FOR_EACH_OBSERVER(NetworkObserver,
1357 *(iter->second),
1358 OnNetworkChanged(this, network));
1359 } else {
1360 NOTREACHED() <<
1361 "There weren't supposed to be any property change observers of " <<
1362 network->service_path();
1363 }
1190 } 1364 }
1191 1365
1192 void NotifyCellularDataPlanChanged() { 1366 void NotifyCellularDataPlanChanged() {
1193 FOR_EACH_OBSERVER(Observer, observers_, CellularDataPlanChanged(this)); 1367 FOR_EACH_OBSERVER(CellularDataPlanObserver,
1368 data_plan_observers_,
1369 OnCellularDataPlanChanged(this));
1194 } 1370 }
1195 1371
1196 void NotifyPropertyChange(const char* service_path, 1372 void UpdateNetworkManagerStatus() {
1197 const char* key,
1198 const Value* value) {
1199 DCHECK(service_path);
1200 DCHECK(key);
1201 DCHECK(value);
1202 PropertyChangeObserverMap::const_iterator iter = property_observers_.find(
1203 std::string(service_path));
1204 if (iter != property_observers_.end()) {
1205 FOR_EACH_OBSERVER(PropertyObserver, *(iter->second),
1206 PropertyChanged(service_path, key, value));
1207 } else {
1208 NOTREACHED() <<
1209 "There weren't supposed to be any property change observers of " <<
1210 service_path;
1211 }
1212 }
1213
1214 void ClearNetworks() {
1215 if (ethernet_)
1216 delete ethernet_;
1217 ethernet_ = NULL;
1218 wifi_ = NULL;
1219 cellular_ = NULL;
1220 STLDeleteElements(&wifi_networks_);
1221 wifi_networks_.clear();
1222 STLDeleteElements(&cellular_networks_);
1223 cellular_networks_.clear();
1224 STLDeleteElements(&remembered_wifi_networks_);
1225 remembered_wifi_networks_.clear();
1226 }
1227
1228 void UpdateNetworkStatus() {
1229 // Make sure we run on UI thread. 1373 // Make sure we run on UI thread.
1230 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 1374 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1231 BrowserThread::PostTask( 1375 BrowserThread::PostTask(
1232 BrowserThread::UI, FROM_HERE, 1376 BrowserThread::UI, FROM_HERE,
1233 NewRunnableMethod(this, 1377 NewRunnableMethod(this,
1234 &NetworkLibraryImpl::UpdateNetworkStatus)); 1378 &NetworkLibraryImpl::UpdateNetworkManagerStatus));
1235 return; 1379 return;
1236 } 1380 }
1237 1381
1238 SystemInfo* system = GetSystemInfo(); 1382 SystemInfo* system = GetSystemInfo();
1239 if (!system) 1383 if (!system)
1240 return; 1384 return;
1241 1385
1242 1386
1243 std::string prev_cellular_service_path = cellular_ ? 1387 std::string prev_cellular_service_path = cellular_ ?
1244 cellular_->service_path() : std::string(); 1388 cellular_->service_path() : std::string();
(...skipping 24 matching lines...) Expand all
1269 } 1413 }
1270 break; // There is only one connected or connecting cellular network. 1414 break; // There is only one connected or connecting cellular network.
1271 } 1415 }
1272 } 1416 }
1273 1417
1274 available_devices_ = system->available_technologies; 1418 available_devices_ = system->available_technologies;
1275 enabled_devices_ = system->enabled_technologies; 1419 enabled_devices_ = system->enabled_technologies;
1276 connected_devices_ = system->connected_technologies; 1420 connected_devices_ = system->connected_technologies;
1277 offline_mode_ = system->offline_mode; 1421 offline_mode_ = system->offline_mode;
1278 1422
1279 NotifyNetworkChanged(); 1423 NotifyNetworkManagerChanged();
1280 FreeSystemInfo(system); 1424 FreeSystemInfo(system);
1281 } 1425 }
1282 1426
1427 void UpdateNetworkStatus(const char* path,
1428 const char* key,
1429 const Value* value) {
1430 if (key == NULL || value == NULL)
1431 return;
1432 // Make sure we run on UI thread.
1433 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
1434 BrowserThread::PostTask(
1435 BrowserThread::UI, FROM_HERE,
1436 NewRunnableMethod(this,
1437 &NetworkLibraryImpl::UpdateNetworkStatus,
1438 path, key, value));
1439 return;
1440 }
1441
1442 bool boolval = false;
1443 int intval = 0;
1444 std::string stringval;
1445 Network* network;
1446 if (ethernet_->service_path() == path) {
1447 network = ethernet_;
1448 } else {
1449 CellularNetwork* cellular =
1450 GetWirelessNetworkByPath(cellular_networks_, path);
1451 WifiNetwork* wifi =
1452 GetWirelessNetworkByPath(wifi_networks_, path);
1453 if (cellular == NULL && wifi == NULL)
1454 return;
1455
1456 WirelessNetwork* wireless;
1457 if (wifi != NULL)
1458 wireless = static_cast<WirelessNetwork*>(wifi);
1459 else
1460 wireless = static_cast<WirelessNetwork*>(cellular);
1461
1462 if (strcmp(key, kSignalStrengthProperty) == 0) {
1463 if (value->GetAsInteger(&intval))
1464 wireless->set_strength(intval);
1465 } else if (cellular != NULL) {
1466 if (strcmp(key, kRestrictedPoolProperty) == 0) {
1467 if (value->GetAsBoolean(&boolval))
1468 cellular->set_restricted_pool(boolval);
1469 } else if (strcmp(key, kActivationStateProperty) == 0) {
1470 if (value->GetAsString(&stringval))
1471 cellular->set_activation_state(ParseActivationState(stringval));
1472 } else if (strcmp(key, kPaymentURLProperty) == 0) {
1473 if (value->GetAsString(&stringval))
1474 cellular->set_payment_url(stringval);
1475 } else if (strcmp(key, kNetworkTechnologyProperty) == 0) {
1476 if (value->GetAsString(&stringval))
1477 cellular->set_network_technology(
1478 ParseNetworkTechnology(stringval));
1479 } else if (strcmp(key, kRoamingStateProperty) == 0) {
1480 if (value->GetAsString(&stringval))
1481 cellular->set_roaming_state(ParseRoamingState(stringval));
1482 }
1483 }
1484 network = wireless;
1485 }
1486 if (strcmp(key, kIsActiveProperty) == 0) {
1487 if (value->GetAsBoolean(&boolval))
1488 network->set_active(boolval);
1489 } else if (strcmp(key, kStateProperty) == 0) {
1490 if (value->GetAsString(&stringval))
1491 network->set_state(ParseState(stringval));
1492 }
1493 NotifyNetworkChanged(network);
1494 }
1495
1283 void UpdateCellularDataPlan(const CellularDataPlanList* data_plans) { 1496 void UpdateCellularDataPlan(const CellularDataPlanList* data_plans) {
1284 DCHECK(cellular_); 1497 DCHECK(cellular_);
1285 cellular_->SetDataPlans(data_plans); 1498 cellular_->SetDataPlans(data_plans);
1286 NotifyCellularDataPlanChanged(); 1499 NotifyCellularDataPlanChanged();
1287 } 1500 }
1288 1501
1289 ObserverList<Observer> observers_; 1502 void ClearNetworks() {
1503 if (ethernet_)
1504 delete ethernet_;
1505 ethernet_ = NULL;
1506 wifi_ = NULL;
1507 cellular_ = NULL;
1508 STLDeleteElements(&wifi_networks_);
1509 wifi_networks_.clear();
1510 STLDeleteElements(&cellular_networks_);
1511 cellular_networks_.clear();
1512 STLDeleteElements(&remembered_wifi_networks_);
1513 remembered_wifi_networks_.clear();
1514 }
1290 1515
1291 // Property change observer map 1516 // Network manager observer list
1292 PropertyChangeObserverMap property_observers_; 1517 ObserverList<NetworkManagerObserver> network_manager_observers_;
1293 1518
1294 // The network status connection for monitoring network status changes. 1519 // Cellular data plan observer list
1295 MonitorNetworkConnection network_status_connection_; 1520 ObserverList<CellularDataPlanObserver> data_plan_observers_;
1521
1522 // Network observer map
1523 NetworkObserverMap network_observers_;
1524
1525 // For monitoring network manager status changes.
1526 PropertyChangeMonitor network_manager_monitor_;
1296 1527
1297 // For monitoring data plan changes to the connected cellular network. 1528 // For monitoring data plan changes to the connected cellular network.
1298 DataPlanUpdateMonitor data_plan_monitor_; 1529 DataPlanUpdateMonitor data_plan_monitor_;
1299 1530
1300 // The property change connection for monitoring service property changes.
1301 std::map<std::string, PropertyChangeMonitor> property_change_monitors_;
1302
1303 // The ethernet network. 1531 // The ethernet network.
1304 EthernetNetwork* ethernet_; 1532 EthernetNetwork* ethernet_;
1305 1533
1306 // The list of available wifi networks. 1534 // The list of available wifi networks.
1307 WifiNetworkVector wifi_networks_; 1535 WifiNetworkVector wifi_networks_;
1308 1536
1309 // The current connected (or connecting) wifi network. 1537 // The current connected (or connecting) wifi network.
1310 WifiNetwork* wifi_; 1538 WifiNetwork* wifi_;
1311 1539
1312 // The remembered wifi networks. 1540 // The remembered wifi networks.
(...skipping 21 matching lines...) Expand all
1334 1562
1335 class NetworkLibraryStubImpl : public NetworkLibrary { 1563 class NetworkLibraryStubImpl : public NetworkLibrary {
1336 public: 1564 public:
1337 NetworkLibraryStubImpl() 1565 NetworkLibraryStubImpl()
1338 : ip_address_("1.1.1.1"), 1566 : ip_address_("1.1.1.1"),
1339 ethernet_(new EthernetNetwork()), 1567 ethernet_(new EthernetNetwork()),
1340 wifi_(NULL), 1568 wifi_(NULL),
1341 cellular_(NULL) { 1569 cellular_(NULL) {
1342 } 1570 }
1343 ~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; } 1571 ~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; }
1344 virtual void AddObserver(Observer* observer) {} 1572 virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) {}
1345 virtual void RemoveObserver(Observer* observer) {} 1573 virtual void RemoveNetworkManagerObserver(NetworkManagerObserver* observer) {}
1346 virtual void AddProperyObserver(const char* service_path, 1574 virtual void AddNetworkObserver(const std::string& service_path,
1347 PropertyObserver* observer) {} 1575 NetworkObserver* observer) {}
1348 virtual void RemoveProperyObserver(PropertyObserver* observer) {} 1576 virtual void RemoveNetworkObserver(const std::string& service_path,
1577 NetworkObserver* observer) {}
1578 virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) {}
1579 virtual void AddCellularDataPlanObserver(
1580 CellularDataPlanObserver* observer) {}
1581 virtual void RemoveCellularDataPlanObserver(
1582 CellularDataPlanObserver* observer) {}
1349 virtual EthernetNetwork* ethernet_network() { 1583 virtual EthernetNetwork* ethernet_network() {
1350 return ethernet_; 1584 return ethernet_;
1351 } 1585 }
1352 virtual bool ethernet_connecting() const { return false; } 1586 virtual bool ethernet_connecting() const { return false; }
1353 virtual bool ethernet_connected() const { return true; } 1587 virtual bool ethernet_connected() const { return true; }
1354 virtual WifiNetwork* wifi_network() { 1588 virtual WifiNetwork* wifi_network() {
1355 return wifi_; 1589 return wifi_;
1356 } 1590 }
1357 virtual bool wifi_connecting() const { return false; } 1591 virtual bool wifi_connecting() const { return false; }
1358 virtual bool wifi_connected() const { return false; } 1592 virtual bool wifi_connected() const { return false; }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1403 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {} 1637 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {}
1404 virtual void SaveCellularNetwork(const CellularNetwork* network) {} 1638 virtual void SaveCellularNetwork(const CellularNetwork* network) {}
1405 virtual void SaveWifiNetwork(const WifiNetwork* network) {} 1639 virtual void SaveWifiNetwork(const WifiNetwork* network) {}
1406 virtual void ForgetWifiNetwork(const std::string& service_path) {} 1640 virtual void ForgetWifiNetwork(const std::string& service_path) {}
1407 virtual bool ethernet_available() const { return true; } 1641 virtual bool ethernet_available() const { return true; }
1408 virtual bool wifi_available() const { return false; } 1642 virtual bool wifi_available() const { return false; }
1409 virtual bool cellular_available() const { return false; } 1643 virtual bool cellular_available() const { return false; }
1410 virtual bool ethernet_enabled() const { return true; } 1644 virtual bool ethernet_enabled() const { return true; }
1411 virtual bool wifi_enabled() const { return false; } 1645 virtual bool wifi_enabled() const { return false; }
1412 virtual bool cellular_enabled() const { return false; } 1646 virtual bool cellular_enabled() const { return false; }
1647 virtual const Network* active_network() const { return NULL; }
1413 virtual bool offline_mode() const { return false; } 1648 virtual bool offline_mode() const { return false; }
1414 virtual void EnableEthernetNetworkDevice(bool enable) {} 1649 virtual void EnableEthernetNetworkDevice(bool enable) {}
1415 virtual void EnableWifiNetworkDevice(bool enable) {} 1650 virtual void EnableWifiNetworkDevice(bool enable) {}
1416 virtual void EnableCellularNetworkDevice(bool enable) {} 1651 virtual void EnableCellularNetworkDevice(bool enable) {}
1417 virtual void EnableOfflineMode(bool enable) {} 1652 virtual void EnableOfflineMode(bool enable) {}
1418 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path, 1653 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path,
1419 std::string* hardware_address) { 1654 std::string* hardware_address) {
1420 hardware_address->clear(); 1655 hardware_address->clear();
1421 return NetworkIPConfigVector(); 1656 return NetworkIPConfigVector();
1422 } 1657 }
(...skipping 15 matching lines...) Expand all
1438 return new NetworkLibraryStubImpl(); 1673 return new NetworkLibraryStubImpl();
1439 else 1674 else
1440 return new NetworkLibraryImpl(); 1675 return new NetworkLibraryImpl();
1441 } 1676 }
1442 1677
1443 } // namespace chromeos 1678 } // namespace chromeos
1444 1679
1445 // Allows InvokeLater without adding refcounting. This class is a Singleton and 1680 // Allows InvokeLater without adding refcounting. This class is a Singleton and
1446 // won't be deleted until it's last InvokeLater is run. 1681 // won't be deleted until it's last InvokeLater is run.
1447 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); 1682 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