diff options
author | dpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-25 14:53:28 +0000 |
---|---|---|
committer | dpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-25 14:53:28 +0000 |
commit | 83e42b6d1c7947c103e0d743e74ceb004b233a89 (patch) | |
tree | 90727bf5d7fa2f2f997a8ab3f7e393e5238f2ba3 | |
parent | 3c52425b21e996264a0302e45fc75e623a029e12 (diff) | |
download | chromium_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
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; |