summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-25 14:53:28 +0000
committerdpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-25 14:53:28 +0000
commit83e42b6d1c7947c103e0d743e74ceb004b233a89 (patch)
tree90727bf5d7fa2f2f997a8ab3f7e393e5238f2ba3
parent3c52425b21e996264a0302e45fc75e623a029e12 (diff)
downloadchromium_src-83e42b6d1c7947c103e0d743e74ceb004b233a89.zip
chromium_src-83e42b6d1c7947c103e0d743e74ceb004b233a89.tar.gz
chromium_src-83e42b6d1c7947c103e0d743e74ceb004b233a89.tar.bz2
Always enable roaming for cellular operators that don't work without it
BUG=chrome-os-partner:5370 TEST=build Review URL: http://codereview.chromium.org/7745018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98227 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/cros/mock_network_library.h1
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc52
-rw-r--r--chrome/browser/chromeos/cros/network_library.h8
-rw-r--r--chrome/browser/chromeos/status/network_menu_icon.cc7
-rw-r--r--chrome/browser/chromeos/user_cros_settings_provider.cc17
5 files changed, 70 insertions, 15 deletions
diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h
index 0e76c57..240a2e7 100644
--- a/chrome/browser/chromeos/cros/mock_network_library.h
+++ b/chrome/browser/chromeos/cros/mock_network_library.h
@@ -93,6 +93,7 @@ class MockNetworkLibrary : public NetworkLibrary {
MOCK_METHOD0(RequestCellularScan, void());
MOCK_METHOD1(RequestCellularRegister, void(const std::string&));
MOCK_METHOD1(SetCellularDataRoamingAllowed, void(bool));
+ MOCK_METHOD0(IsCellularAlwaysInRoaming, bool());
MOCK_METHOD0(RequestNetworkScan, void(void));
MOCK_CONST_METHOD1(HasProfileType, bool(NetworkProfileType));
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc
index c4f76d1..fb01a4b 100644
--- a/chrome/browser/chromeos/cros/network_library.cc
+++ b/chrome/browser/chromeos/cros/network_library.cc
@@ -103,6 +103,12 @@ const int kRecentPlanPaymentHours = 6;
// If cellular device doesn't have SIM card, then retries are never used.
const int kDefaultSimUnlockRetriesCount = 999;
+// List of cellular operators names that should have data roaming always enabled
+// to be able to connect to any network.
+const char* kAlwaysInRoamingOperators[] = {
+ "CUBIC"
+};
+
////////////////////////////////////////////////////////////////////////////////
// Misc.
@@ -1374,6 +1380,7 @@ class NetworkLibraryImplBase : public NetworkLibrary {
// virtual RequestCellularScan implemented in derived classes.
// virtual RequestCellularRegister implemented in derived classes.
// virtual SetCellularDataRoamingAllowed implemented in derived classes.
+ // virtual IsCellularAlwaysInRoaming implemented in derived classes.
// virtual RequestNetworkScan implemented in derived classes.
// virtual GetWifiAccessPoints implemented in derived classes.
@@ -2955,6 +2962,7 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase {
virtual void RequestCellularScan() OVERRIDE;
virtual void RequestCellularRegister(const std::string& network_id) OVERRIDE;
virtual void SetCellularDataRoamingAllowed(bool new_value) OVERRIDE;
+ virtual bool IsCellularAlwaysInRoaming() OVERRIDE;
virtual void RequestNetworkScan() OVERRIDE;
virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) OVERRIDE;
@@ -3216,12 +3224,16 @@ void NetworkLibraryImplCros::UpdateNetworkDeviceStatus(const std::string& path,
PropertyIndex index = PROPERTY_INDEX_UNKNOWN;
if (device->UpdateStatus(key, value, &index)) {
if (index == PROPERTY_INDEX_CELLULAR_ALLOW_ROAMING) {
- bool settings_value =
- UserCrosSettingsProvider::cached_data_roaming_enabled();
- if (device->data_roaming_allowed() != settings_value) {
- // Switch back to signed settings value.
- SetCellularDataRoamingAllowed(settings_value);
- return;
+ if (!device->data_roaming_allowed() && IsCellularAlwaysInRoaming()) {
+ SetCellularDataRoamingAllowed(true);
+ } else {
+ bool settings_value =
+ UserCrosSettingsProvider::cached_data_roaming_enabled();
+ if (device->data_roaming_allowed() != settings_value) {
+ // Switch back to signed settings value.
+ SetCellularDataRoamingAllowed(settings_value);
+ return;
+ }
}
}
} else {
@@ -3481,6 +3493,21 @@ void NetworkLibraryImplCros::SetCellularDataRoamingAllowed(bool new_value) {
value.get());
}
+bool NetworkLibraryImplCros::IsCellularAlwaysInRoaming() {
+ const NetworkDevice* cellular = FindCellularDevice();
+ if (!cellular) {
+ NOTREACHED() << "Calling IsCellularAlwaysInRoaming method "
+ "w/o cellular device.";
+ return false;
+ }
+ const std::string& home_provider_name = cellular->home_provider_name();
+ for (size_t i = 0; i < arraysize(kAlwaysInRoamingOperators); i++) {
+ if (home_provider_name == kAlwaysInRoamingOperators[i])
+ return true;
+ }
+ return false;
+}
+
void NetworkLibraryImplCros::RequestNetworkScan() {
if (wifi_enabled()) {
wifi_scanning_ = true; // Cleared when updates are received.
@@ -4256,6 +4283,18 @@ void NetworkLibraryImplCros::ParseNetworkDevice(const std::string& device_path,
CHECK(device) << "Attempted to add NULL device for path: " << device_path;
}
VLOG(1) << "ParseNetworkDevice:" << device->name();
+ if (device && device->type() == TYPE_CELLULAR) {
+ if (!device->data_roaming_allowed() && IsCellularAlwaysInRoaming()) {
+ SetCellularDataRoamingAllowed(true);
+ } else {
+ bool settings_value =
+ UserCrosSettingsProvider::cached_data_roaming_enabled();
+ if (device->data_roaming_allowed() != settings_value) {
+ // Switch back to signed settings value.
+ SetCellularDataRoamingAllowed(settings_value);
+ }
+ }
+ }
NotifyNetworkManagerChanged(false); // Not forced.
AddNetworkDeviceObserver(device_path, network_device_observer_.get());
}
@@ -4305,6 +4344,7 @@ class NetworkLibraryImplStub : public NetworkLibraryImplBase {
virtual void RequestCellularRegister(
const std::string& network_id) OVERRIDE {}
virtual void SetCellularDataRoamingAllowed(bool new_value) OVERRIDE {}
+ virtual bool IsCellularAlwaysInRoaming() OVERRIDE { return false; }
virtual void RequestNetworkScan() OVERRIDE {}
virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) OVERRIDE;
diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h
index d5cd133..b416214 100644
--- a/chrome/browser/chromeos/cros/network_library.h
+++ b/chrome/browser/chromeos/cros/network_library.h
@@ -389,7 +389,6 @@ class NetworkDevice {
const std::string& firmware_revision() const { return firmware_revision_; }
const std::string& hardware_revision() const { return hardware_revision_; }
const unsigned int prl_version() const { return prl_version_; }
- const std::string& home_provider() const { return home_provider_; }
const std::string& home_provider_code() const { return home_provider_code_; }
const std::string& home_provider_country() const {
return home_provider_country_;
@@ -452,9 +451,6 @@ class NetworkDevice {
technology_family_ = technology_family;
}
void set_carrier(const std::string& carrier) { carrier_ = carrier; }
- void set_home_provider(const std::string& home_provider) {
- home_provider_ = home_provider;
- }
void set_home_provider_code(const std::string& home_provider_code) {
home_provider_code_ = home_provider_code;
}
@@ -518,7 +514,6 @@ class NetworkDevice {
// Cellular specific device info.
TechnologyFamily technology_family_;
std::string carrier_;
- std::string home_provider_;
std::string home_provider_code_;
std::string home_provider_country_;
std::string home_provider_id_;
@@ -1509,6 +1504,9 @@ class NetworkLibrary {
// Change data roaming restriction for current cellular device.
virtual void SetCellularDataRoamingAllowed(bool new_value) = 0;
+ // Return true if GSM SIM card can work only with enabled roaming.
+ virtual bool IsCellularAlwaysInRoaming() = 0;
+
// Request a scan for new wifi networks.
virtual void RequestNetworkScan() = 0;
diff --git a/chrome/browser/chromeos/status/network_menu_icon.cc b/chrome/browser/chromeos/status/network_menu_icon.cc
index ea3699b..967754c 100644
--- a/chrome/browser/chromeos/status/network_menu_icon.cc
+++ b/chrome/browser/chromeos/status/network_menu_icon.cc
@@ -291,6 +291,8 @@ class NetworkIcon {
// bottom_right: disconnected / secure / technology / warning
void SetBadges(const Network* network) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ chromeos::NetworkLibrary* cros =
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary();
switch (network->type()) {
case TYPE_ETHERNET: {
@@ -310,8 +312,11 @@ class NetworkIcon {
case TYPE_CELLULAR: {
const CellularNetwork* cellular =
static_cast<const CellularNetwork*>(network);
- if (cellular->roaming_state() == ROAMING_STATE_ROAMING)
+ if (cellular->roaming_state() == ROAMING_STATE_ROAMING &&
+ !cros->IsCellularAlwaysInRoaming()) {
+ // For cellular that always in roaming don't show roaming badge.
top_left_badge_ = rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_ROAMING);
+ }
if (!cellular->connecting())
bottom_right_badge_ = BadgeForNetworkTechnology(cellular);
break;
diff --git a/chrome/browser/chromeos/user_cros_settings_provider.cc b/chrome/browser/chromeos/user_cros_settings_provider.cc
index 41437f2..c50e4298 100644
--- a/chrome/browser/chromeos/user_cros_settings_provider.cc
+++ b/chrome/browser/chromeos/user_cros_settings_provider.cc
@@ -308,6 +308,11 @@ class UserCrosSettingsTrust : public SignedSettingsHelper::Callback {
return;
NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
+ if (cros->IsCellularAlwaysInRoaming()) {
+ // If operator requires roaming always enabled, ignore supplied value
+ // and set data roaming allowed in true always.
+ new_value = true;
+ }
cros->SetCellularDataRoamingAllowed(new_value);
} else if (path == kStatsReportingPref) {
// TODO(pastarmovj): Remove this once we don't need to regenerate the
@@ -328,9 +333,15 @@ class UserCrosSettingsTrust : public SignedSettingsHelper::Callback {
const NetworkDevice* cellular = cros->FindCellularDevice();
if (cellular) {
bool device_value = cellular->data_roaming_allowed();
- bool new_value = (use_value == USE_VALUE_SUPPLIED) ? value : false;
- if (device_value != new_value)
- cros->SetCellularDataRoamingAllowed(new_value);
+ if (!device_value && cros->IsCellularAlwaysInRoaming()) {
+ // If operator requires roaming always enabled, ignore supplied value
+ // and set data roaming allowed in true always.
+ cros->SetCellularDataRoamingAllowed(true);
+ } else {
+ bool new_value = (use_value == USE_VALUE_SUPPLIED) ? value : false;
+ if (device_value != new_value)
+ cros->SetCellularDataRoamingAllowed(new_value);
+ }
}
} else if (path == kStatsReportingPref) {
bool stats_consent = (use_value == USE_VALUE_SUPPLIED) ? value : false;