| OLD | NEW |
| 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" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 static const char* kNetworkTechnologyHspa = "HSPA"; | 77 static const char* kNetworkTechnologyHspa = "HSPA"; |
| 78 static const char* kNetworkTechnologyHspaPlus = "HSPA+"; | 78 static const char* kNetworkTechnologyHspaPlus = "HSPA+"; |
| 79 static const char* kNetworkTechnologyLte = "LTE"; | 79 static const char* kNetworkTechnologyLte = "LTE"; |
| 80 static const char* kNetworkTechnologyLteAdvanced = "LTE Advanced"; | 80 static const char* kNetworkTechnologyLteAdvanced = "LTE Advanced"; |
| 81 | 81 |
| 82 // Connman roaming state options | 82 // Connman roaming state options |
| 83 static const char* kRoamingStateHome = "home"; | 83 static const char* kRoamingStateHome = "home"; |
| 84 static const char* kRoamingStateRoaming = "roaming"; | 84 static const char* kRoamingStateRoaming = "roaming"; |
| 85 static const char* kRoamingStateUnknown = "unknown"; | 85 static const char* kRoamingStateUnknown = "unknown"; |
| 86 | 86 |
| 87 // How long we should remember that cellular plan payment was received. |
| 88 const int kRecentPlanPaymentHours = 6; |
| 89 |
| 87 static ConnectionState ParseState(const std::string& state) { | 90 static ConnectionState ParseState(const std::string& state) { |
| 88 if (state == kStateIdle) | 91 if (state == kStateIdle) |
| 89 return STATE_IDLE; | 92 return STATE_IDLE; |
| 90 if (state == kStateCarrier) | 93 if (state == kStateCarrier) |
| 91 return STATE_CARRIER; | 94 return STATE_CARRIER; |
| 92 if (state == kStateAssociation) | 95 if (state == kStateAssociation) |
| 93 return STATE_ASSOCIATION; | 96 return STATE_ASSOCIATION; |
| 94 if (state == kStateConfiguration) | 97 if (state == kStateConfiguration) |
| 95 return STATE_CONFIGURATION; | 98 return STATE_CONFIGURATION; |
| 96 if (state == kStateReady) | 99 if (state == kStateReady) |
| (...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1128 } | 1131 } |
| 1129 } | 1132 } |
| 1130 | 1133 |
| 1131 virtual void RefreshCellularDataPlans(const CellularNetwork* network) { | 1134 virtual void RefreshCellularDataPlans(const CellularNetwork* network) { |
| 1132 DCHECK(network); | 1135 DCHECK(network); |
| 1133 if (!EnsureCrosLoaded() || !network) | 1136 if (!EnsureCrosLoaded() || !network) |
| 1134 return; | 1137 return; |
| 1135 RequestCellularDataPlanUpdate(network->service_path().c_str()); | 1138 RequestCellularDataPlanUpdate(network->service_path().c_str()); |
| 1136 } | 1139 } |
| 1137 | 1140 |
| 1141 // Records information that cellular play payment had happened. |
| 1142 virtual void SignalCellularPlanPayment() { |
| 1143 DCHECK(!HasRecentCellularPlanPayment()); |
| 1144 cellular_plan_payment_time_ = base::Time::Now(); |
| 1145 } |
| 1146 |
| 1147 // Returns true if cellular plan payment had been recorded recently. |
| 1148 virtual bool HasRecentCellularPlanPayment() { |
| 1149 return (base::Time::Now() - |
| 1150 cellular_plan_payment_time_).InHours() < kRecentPlanPaymentHours; |
| 1151 } |
| 1152 |
| 1138 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) { | 1153 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) { |
| 1139 DCHECK(network); | 1154 DCHECK(network); |
| 1140 if (!EnsureCrosLoaded() || !network) | 1155 if (!EnsureCrosLoaded() || !network) |
| 1141 return; | 1156 return; |
| 1142 // TODO(ers) restore default service type priority ordering? | 1157 // TODO(ers) restore default service type priority ordering? |
| 1143 if (DisconnectFromNetwork(network->service_path().c_str())) { | 1158 if (DisconnectFromNetwork(network->service_path().c_str())) { |
| 1144 // Update local cache and notify listeners. | 1159 // Update local cache and notify listeners. |
| 1145 if (network->type() == TYPE_WIFI) { | 1160 if (network->type() == TYPE_WIFI) { |
| 1146 WifiNetwork* wifi = GetWirelessNetworkByPath( | 1161 WifiNetwork* wifi = GetWirelessNetworkByPath( |
| 1147 wifi_networks_, network->service_path()); | 1162 wifi_networks_, network->service_path()); |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 | 1629 |
| 1615 wifi_ = wifi2; | 1630 wifi_ = wifi2; |
| 1616 | 1631 |
| 1617 STLDeleteElements(&cellular_networks_); | 1632 STLDeleteElements(&cellular_networks_); |
| 1618 cellular_networks_.clear(); | 1633 cellular_networks_.clear(); |
| 1619 | 1634 |
| 1620 CellularNetwork* cellular1 = new CellularNetwork(); | 1635 CellularNetwork* cellular1 = new CellularNetwork(); |
| 1621 cellular1->set_service_path("fc1"); | 1636 cellular1->set_service_path("fc1"); |
| 1622 cellular1->set_name("Fake Cellular 1"); | 1637 cellular1->set_name("Fake Cellular 1"); |
| 1623 cellular1->set_strength(70); | 1638 cellular1->set_strength(70); |
| 1624 cellular1->set_connected(true); | 1639 cellular1->set_connected(false); |
| 1625 cellular1->set_activation_state(ACTIVATION_STATE_ACTIVATED); | 1640 cellular1->set_activation_state(ACTIVATION_STATE_ACTIVATED); |
| 1626 cellular1->set_payment_url(std::string("http://www.google.com")); | 1641 cellular1->set_payment_url(std::string("http://www.google.com")); |
| 1627 cellular1->set_network_technology(NETWORK_TECHNOLOGY_EVDO); | 1642 cellular1->set_network_technology(NETWORK_TECHNOLOGY_EVDO); |
| 1628 | 1643 |
| 1629 CellularDataPlan* base_plan = new CellularDataPlan(); | 1644 CellularDataPlan* base_plan = new CellularDataPlan(); |
| 1630 base_plan->plan_name = "Base plan"; | 1645 base_plan->plan_name = "Base plan"; |
| 1631 base_plan->plan_type = CELLULAR_DATA_PLAN_METERED_BASE; | 1646 base_plan->plan_type = CELLULAR_DATA_PLAN_METERED_BASE; |
| 1632 base_plan->plan_data_bytes = 100ll * 1024 * 1024; | 1647 base_plan->plan_data_bytes = 100ll * 1024 * 1024; |
| 1633 base_plan->data_bytes_used = 75ll * 1024 * 1024; | 1648 base_plan->data_bytes_used = 75ll * 1024 * 1024; |
| 1634 cellular1->data_plans_.push_back(base_plan); | 1649 cellular1->data_plans_.push_back(base_plan); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1761 BrowserThread::UI, FROM_HERE, | 1776 BrowserThread::UI, FROM_HERE, |
| 1762 NewRunnableMethod(this, | 1777 NewRunnableMethod(this, |
| 1763 &NetworkLibraryImpl::UpdateNetworkStatus, | 1778 &NetworkLibraryImpl::UpdateNetworkStatus, |
| 1764 path, key, value)); | 1779 path, key, value)); |
| 1765 return; | 1780 return; |
| 1766 } | 1781 } |
| 1767 | 1782 |
| 1768 bool boolval = false; | 1783 bool boolval = false; |
| 1769 int intval = 0; | 1784 int intval = 0; |
| 1770 std::string stringval; | 1785 std::string stringval; |
| 1771 Network* network; | 1786 Network* network = NULL; |
| 1772 if (ethernet_->service_path() == path) { | 1787 if (ethernet_->service_path() == path) { |
| 1773 network = ethernet_; | 1788 network = ethernet_; |
| 1774 } else { | 1789 } else { |
| 1775 CellularNetwork* cellular = | 1790 CellularNetwork* cellular = |
| 1776 GetWirelessNetworkByPath(cellular_networks_, path); | 1791 GetWirelessNetworkByPath(cellular_networks_, path); |
| 1777 WifiNetwork* wifi = | 1792 WifiNetwork* wifi = |
| 1778 GetWirelessNetworkByPath(wifi_networks_, path); | 1793 GetWirelessNetworkByPath(wifi_networks_, path); |
| 1779 if (cellular == NULL && wifi == NULL) | 1794 if (cellular == NULL && wifi == NULL) |
| 1780 return; | 1795 return; |
| 1781 | 1796 |
| 1782 WirelessNetwork* wireless; | 1797 WirelessNetwork* wireless = NULL; |
| 1783 if (wifi != NULL) | 1798 if (wifi != NULL) |
| 1784 wireless = static_cast<WirelessNetwork*>(wifi); | 1799 wireless = static_cast<WirelessNetwork*>(wifi); |
| 1785 else | 1800 else |
| 1786 wireless = static_cast<WirelessNetwork*>(cellular); | 1801 wireless = static_cast<WirelessNetwork*>(cellular); |
| 1787 | 1802 |
| 1788 if (strcmp(key, kSignalStrengthProperty) == 0) { | 1803 if (strcmp(key, kSignalStrengthProperty) == 0) { |
| 1789 if (value->GetAsInteger(&intval)) | 1804 if (value->GetAsInteger(&intval)) |
| 1790 wireless->set_strength(intval); | 1805 wireless->set_strength(intval); |
| 1791 } else if (cellular != NULL) { | 1806 } else if (cellular != NULL) { |
| 1792 if (strcmp(key, kConnectivityStateProperty) == 0) { | 1807 if (strcmp(key, kConnectivityStateProperty) == 0) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1815 } else if (strcmp(key, kIsActiveProperty) == 0) { | 1830 } else if (strcmp(key, kIsActiveProperty) == 0) { |
| 1816 if (value->GetAsBoolean(&boolval)) | 1831 if (value->GetAsBoolean(&boolval)) |
| 1817 network->set_active(boolval); | 1832 network->set_active(boolval); |
| 1818 } else if (strcmp(key, kStateProperty) == 0) { | 1833 } else if (strcmp(key, kStateProperty) == 0) { |
| 1819 if (value->GetAsString(&stringval)) { | 1834 if (value->GetAsString(&stringval)) { |
| 1820 network->set_state(ParseState(stringval)); | 1835 network->set_state(ParseState(stringval)); |
| 1821 // State changed, so refresh IP address. | 1836 // State changed, so refresh IP address. |
| 1822 network->InitIPAddress(); | 1837 network->InitIPAddress(); |
| 1823 } | 1838 } |
| 1824 } | 1839 } |
| 1825 NotifyNetworkChanged(network); | 1840 if (network) |
| 1841 NotifyNetworkChanged(network); |
| 1826 } | 1842 } |
| 1827 | 1843 |
| 1828 void UpdateCellularDataPlan(const CellularDataPlanList* data_plans) { | 1844 void UpdateCellularDataPlan(const CellularDataPlanList* data_plans) { |
| 1829 DCHECK(cellular_); | 1845 DCHECK(cellular_); |
| 1830 cellular_->SetDataPlans(data_plans); | 1846 cellular_->SetDataPlans(data_plans); |
| 1831 NotifyCellularDataPlanChanged(); | 1847 NotifyCellularDataPlanChanged(); |
| 1832 } | 1848 } |
| 1833 | 1849 |
| 1834 void ClearNetworks() { | 1850 void ClearNetworks() { |
| 1835 if (ethernet_) | 1851 if (ethernet_) |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1889 | 1905 |
| 1890 // True if we are currently scanning for wifi networks. | 1906 // True if we are currently scanning for wifi networks. |
| 1891 bool wifi_scanning_; | 1907 bool wifi_scanning_; |
| 1892 | 1908 |
| 1893 // Currently not implemented. TODO: implement or eliminate. | 1909 // Currently not implemented. TODO: implement or eliminate. |
| 1894 bool offline_mode_; | 1910 bool offline_mode_; |
| 1895 | 1911 |
| 1896 // Delayed task to retrieve the network information. | 1912 // Delayed task to retrieve the network information. |
| 1897 CancelableTask* update_task_; | 1913 CancelableTask* update_task_; |
| 1898 | 1914 |
| 1915 // Cellular plan payment time. |
| 1916 base::Time cellular_plan_payment_time_; |
| 1917 |
| 1899 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImpl); | 1918 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImpl); |
| 1900 }; | 1919 }; |
| 1901 | 1920 |
| 1902 class NetworkLibraryStubImpl : public NetworkLibrary { | 1921 class NetworkLibraryStubImpl : public NetworkLibrary { |
| 1903 public: | 1922 public: |
| 1904 NetworkLibraryStubImpl() | 1923 NetworkLibraryStubImpl() |
| 1905 : ip_address_("1.1.1.1"), | 1924 : ip_address_("1.1.1.1"), |
| 1906 ethernet_(new EthernetNetwork()), | 1925 ethernet_(new EthernetNetwork()), |
| 1907 wifi_(NULL), | 1926 wifi_(NULL), |
| 1908 cellular_(NULL) { | 1927 cellular_(NULL) { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1972 const std::string& password, | 1991 const std::string& password, |
| 1973 const std::string& identity, | 1992 const std::string& identity, |
| 1974 const std::string& certpath, | 1993 const std::string& certpath, |
| 1975 bool auto_connect) { | 1994 bool auto_connect) { |
| 1976 return true; | 1995 return true; |
| 1977 } | 1996 } |
| 1978 virtual bool ConnectToCellularNetwork(const CellularNetwork* network) { | 1997 virtual bool ConnectToCellularNetwork(const CellularNetwork* network) { |
| 1979 return true; | 1998 return true; |
| 1980 } | 1999 } |
| 1981 virtual void RefreshCellularDataPlans(const CellularNetwork* network) {} | 2000 virtual void RefreshCellularDataPlans(const CellularNetwork* network) {} |
| 2001 virtual void SignalCellularPlanPayment() {} |
| 2002 virtual bool HasRecentCellularPlanPayment() { return false; } |
| 1982 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {} | 2003 virtual void DisconnectFromWirelessNetwork(const WirelessNetwork* network) {} |
| 1983 virtual void SaveCellularNetwork(const CellularNetwork* network) {} | 2004 virtual void SaveCellularNetwork(const CellularNetwork* network) {} |
| 1984 virtual void SaveWifiNetwork(const WifiNetwork* network) {} | 2005 virtual void SaveWifiNetwork(const WifiNetwork* network) {} |
| 1985 virtual void ForgetWifiNetwork(const std::string& service_path) {} | 2006 virtual void ForgetWifiNetwork(const std::string& service_path) {} |
| 1986 virtual bool ethernet_available() const { return true; } | 2007 virtual bool ethernet_available() const { return true; } |
| 1987 virtual bool wifi_available() const { return false; } | 2008 virtual bool wifi_available() const { return false; } |
| 1988 virtual bool cellular_available() const { return false; } | 2009 virtual bool cellular_available() const { return false; } |
| 1989 virtual bool ethernet_enabled() const { return true; } | 2010 virtual bool ethernet_enabled() const { return true; } |
| 1990 virtual bool wifi_enabled() const { return false; } | 2011 virtual bool wifi_enabled() const { return false; } |
| 1991 virtual bool cellular_enabled() const { return false; } | 2012 virtual bool cellular_enabled() const { return false; } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2018 return new NetworkLibraryStubImpl(); | 2039 return new NetworkLibraryStubImpl(); |
| 2019 else | 2040 else |
| 2020 return new NetworkLibraryImpl(); | 2041 return new NetworkLibraryImpl(); |
| 2021 } | 2042 } |
| 2022 | 2043 |
| 2023 } // namespace chromeos | 2044 } // namespace chromeos |
| 2024 | 2045 |
| 2025 // Allows InvokeLater without adding refcounting. This class is a Singleton and | 2046 // Allows InvokeLater without adding refcounting. This class is a Singleton and |
| 2026 // won't be deleted until it's last InvokeLater is run. | 2047 // won't be deleted until it's last InvokeLater is run. |
| 2027 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); | 2048 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); |
| OLD | NEW |