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 |