summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-15 20:49:58 +0000
committerstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-15 20:49:58 +0000
commitd45aa1f5cf91d7f0840f66cfcb1d00ed9ba64c6b (patch)
tree69f4709b4856a0fd5043a24aa6367ae4d3e5a65c
parent76b5e7ed4caf688621f6539a0ff4c5b1e4c45b4e (diff)
downloadchromium_src-d45aa1f5cf91d7f0840f66cfcb1d00ed9ba64c6b.zip
chromium_src-d45aa1f5cf91d7f0840f66cfcb1d00ed9ba64c6b.tar.gz
chromium_src-d45aa1f5cf91d7f0840f66cfcb1d00ed9ba64c6b.tar.bz2
Add cellular_initialized state and UI
The goal is to provide connecting icon and text while the cellular network is initializing. Cellular initializing is defined as: Cellular technology is enabled, but no powered device present. BUG=169979 For ash_strings.gyp: TBR=sky@chromium.org Review URL: https://codereview.chromium.org/11878034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176966 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/ash_strings.grd3
-rw-r--r--ash/system/chromeos/network/network_list_detailed_view_base.cc70
-rw-r--r--ash/system/chromeos/network/network_list_detailed_view_base.h5
-rw-r--r--ash/system/tray/system_tray_delegate.h5
-rw-r--r--ash/system/tray/test_system_tray_delegate.cc4
-rw-r--r--ash/system/tray/test_system_tray_delegate.h1
-rw-r--r--chrome/browser/chromeos/cros/cros_mock.cc3
-rw-r--r--chrome/browser/chromeos/cros/mock_network_library.h4
-rw-r--r--chrome/browser/chromeos/cros/native_network_parser.cc8
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc1
-rw-r--r--chrome/browser/chromeos/cros/network_library.h9
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_base.cc6
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_base.h7
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_cros.cc15
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_cros.h1
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_stub.cc244
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_stub.h4
-rw-r--r--chrome/browser/chromeos/status/network_menu_icon.cc42
-rw-r--r--chrome/browser/chromeos/system/ash_system_tray_delegate.cc4
-rw-r--r--chrome/chrome_tests_unit.gypi1
-rw-r--r--chrome/common/chrome_switches.cc3
-rw-r--r--chrome/common/chrome_switches.h1
22 files changed, 274 insertions, 167 deletions
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index e46f84b..ce4e08e 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -317,6 +317,9 @@ Press Ctrl+Alt+Z to disable.
<message name="IDS_ASH_STATUS_TRAY_WIFI_SCANNING_MESSAGE" desc="Scanning for wifi networks">
Searching for Wi-Fi networks...
</message>
+ <message name="IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR" desc="Message for the status area when initializing the cellular device.">
+ Initializing cellular modem...
+ </message>
<message name="IDS_ASH_STATUS_TRAY_UPDATE" desc="The label used in the tray popup to notify that the user should restart to get system updates.">
Restart to update
</message>
diff --git a/ash/system/chromeos/network/network_list_detailed_view_base.cc b/ash/system/chromeos/network/network_list_detailed_view_base.cc
index 7d50b5b..f457ce5 100644
--- a/ash/system/chromeos/network/network_list_detailed_view_base.cc
+++ b/ash/system/chromeos/network/network_list_detailed_view_base.cc
@@ -91,7 +91,8 @@ NetworkListDetailedViewBase::NetworkListDetailedViewBase(
info_icon_(NULL),
settings_(NULL),
proxy_settings_(NULL),
- scanning_view_(NULL),
+ status_view_(NULL),
+ no_networks_view_(NULL),
info_bubble_(NULL) {
}
@@ -200,7 +201,7 @@ void NetworkListDetailedViewBase::UpdateAvailableNetworkList() {
GetAvailableNetworkList(&network_list_);
}
-void NetworkListDetailedViewBase::RefreshNetworkScrollWithUpdatedNetworkList() {
+void NetworkListDetailedViewBase::RefreshNetworkList() {
network_map_.clear();
std::set<std::string> new_service_paths;
@@ -209,29 +210,37 @@ void NetworkListDetailedViewBase::RefreshNetworkScrollWithUpdatedNetworkList() {
if (service_path_map_.empty()) {
scroll_content()->RemoveAllChildViews(true);
- scanning_view_ = NULL;
+ status_view_ = NULL;
+ no_networks_view_ = NULL;
}
+ SystemTrayDelegate* delegate = Shell::GetInstance()->system_tray_delegate();
+
// Insert child views. Order is:
// * Highlit networks (connected and connecting)
- // * "Scanning..."
+ // * "Initializing cellular modem..." or "Searching for Wi-Fi networks..."
// * Un-highlit networks (not connected). Usually empty while scanning.
-
- bool wifi_scanning =
- Shell::GetInstance()->system_tray_delegate()->GetWifiScanning();
- if (wifi_scanning && scanning_view_ == NULL) {
- scanning_view_ = new views::Label(
- ui::ResourceBundle::GetSharedInstance().
- GetLocalizedString(IDS_ASH_STATUS_TRAY_WIFI_SCANNING_MESSAGE));
- scanning_view_->set_border(views::Border::CreateEmptyBorder(20, 0, 10, 0));
- scanning_view_->SetFont(
- scanning_view_->font().DeriveFont(0, gfx::Font::ITALIC));
+ // * "Wi-Fi is turned off" if wifi disabled and no networks
+
+ int status_message_id = 0;
+ if (delegate->GetCellularInitializing())
+ status_message_id = IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR;
+ else if (delegate->GetWifiScanning())
+ status_message_id = IDS_ASH_STATUS_TRAY_WIFI_SCANNING_MESSAGE;
+ if (status_message_id && status_view_ == NULL) {
+ status_view_ = new views::Label(
+ ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
+ status_message_id));
+ status_view_->set_border(views::Border::CreateEmptyBorder(20, 20, 10, 0));
+ status_view_->SetFont(
+ status_view_->font().DeriveFont(0, gfx::Font::ITALIC));
+ status_view_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
// Initially insert "scanning" first.
- scroll_content()->AddChildViewAt(scanning_view_, 0);
+ scroll_content()->AddChildViewAt(status_view_, 0);
needs_relayout = true;
- } else if (!wifi_scanning && scanning_view_ != NULL) {
- scroll_content()->RemoveChildView(scanning_view_);
- scanning_view_ = NULL;
+ } else if (!status_message_id && status_view_ != NULL) {
+ scroll_content()->RemoveChildView(status_view_);
+ status_view_ = NULL;
needs_relayout = true;
}
@@ -239,7 +248,7 @@ void NetworkListDetailedViewBase::RefreshNetworkScrollWithUpdatedNetworkList() {
for (size_t i = 0; i < network_list_.size(); ++i) {
const bool highlight =
network_list_[i].connected || network_list_[i].connecting;
- if (scanning_view_ && child_index_offset == 0 && !highlight)
+ if (status_view_ && child_index_offset == 0 && !highlight)
child_index_offset = 1;
// |child_index| determines the position of the view, which is the same
// as the list index for highlit views, and offset by one for any
@@ -300,6 +309,24 @@ void NetworkListDetailedViewBase::RefreshNetworkScrollWithUpdatedNetworkList() {
service_path_map_.erase(*remove_it);
}
+ if (network_list_.empty() && no_networks_view_ == NULL) {
+ int message_id = delegate->GetWifiEnabled() ?
+ IDS_ASH_STATUS_TRAY_NETWORK_WIFI_ENABLED :
+ IDS_ASH_STATUS_TRAY_NETWORK_WIFI_DISABLED;
+ no_networks_view_ = new views::Label(
+ ui::ResourceBundle::GetSharedInstance().GetLocalizedString(
+ message_id));
+ no_networks_view_->set_border(
+ views::Border::CreateEmptyBorder(20, 20, 10, 0));
+ no_networks_view_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ scroll_content()->AddChildViewAt(no_networks_view_, 0);
+ needs_relayout = true;
+ } else if (no_networks_view_) {
+ scroll_content()->RemoveChildView(no_networks_view_);
+ no_networks_view_ = NULL;
+ needs_relayout = true;
+ }
+
if (needs_relayout) {
scroll_content()->SizeToPreferredSize();
static_cast<views::View*>(scroller())->Layout();
@@ -315,10 +342,7 @@ void NetworkListDetailedViewBase::ClearNetworkScrollWithEmptyNetworkList() {
}
void NetworkListDetailedViewBase::RefreshNetworkScrollWithUpdatedNetworkData() {
- if (network_list_.size() > 0 )
- RefreshNetworkScrollWithUpdatedNetworkList();
- else
- RefreshNetworkScrollWithEmptyNetworkList();
+ RefreshNetworkList();
}
bool NetworkListDetailedViewBase::IsNetworkListEmpty() const {
diff --git a/ash/system/chromeos/network/network_list_detailed_view_base.h b/ash/system/chromeos/network/network_list_detailed_view_base.h
index 4a04cc9..ee9ec9d 100644
--- a/ash/system/chromeos/network/network_list_detailed_view_base.h
+++ b/ash/system/chromeos/network/network_list_detailed_view_base.h
@@ -73,7 +73,7 @@ class NetworkListDetailedViewBase : public NetworkDetailedView,
void UpdateAvailableNetworkList();
void AppendHeaderEntry(int header_string_id);
void AppendNetworkExtra();
- void RefreshNetworkScrollWithUpdatedNetworkList();
+ void RefreshNetworkList();
// Adds a settings entry when logged in, and an entry for changing proxy
// settings otherwise.
void CreateSettingsEntry();
@@ -90,7 +90,8 @@ class NetworkListDetailedViewBase : public NetworkDetailedView,
TrayPopupHeaderButton* info_icon_;
TrayPopupLabelButton* settings_;
TrayPopupLabelButton* proxy_settings_;
- views::Label* scanning_view_;
+ views::Label* status_view_;
+ views::Label* no_networks_view_;
views::BubbleDelegateView* info_bubble_;
DISALLOW_COPY_AND_ASSIGN(NetworkListDetailedViewBase);
diff --git a/ash/system/tray/system_tray_delegate.h b/ash/system/tray/system_tray_delegate.h
index 5960484..5f80a99 100644
--- a/ash/system/tray/system_tray_delegate.h
+++ b/ash/system/tray/system_tray_delegate.h
@@ -298,9 +298,12 @@ class SystemTrayDelegate {
std::string* topup_url,
std::string* setup_url) = 0;
- // Returns whether or not the network manager is scanning for wifi networks.
+ // Returns whether the network manager is scanning for wifi networks.
virtual bool GetWifiScanning() = 0;
+ // Returns whether the network manager is initializing the cellular modem.
+ virtual bool GetCellularInitializing() = 0;
+
// Opens the cellular network specific URL.
virtual void ShowCellularURL(const std::string& url) = 0;
diff --git a/ash/system/tray/test_system_tray_delegate.cc b/ash/system/tray/test_system_tray_delegate.cc
index 4a5015a..48aaa96 100644
--- a/ash/system/tray/test_system_tray_delegate.cc
+++ b/ash/system/tray/test_system_tray_delegate.cc
@@ -301,6 +301,10 @@ bool TestSystemTrayDelegate::GetWifiScanning() {
return false;
}
+bool TestSystemTrayDelegate::GetCellularInitializing() {
+ return false;
+}
+
void TestSystemTrayDelegate::ShowCellularURL(const std::string& url) {
}
diff --git a/ash/system/tray/test_system_tray_delegate.h b/ash/system/tray/test_system_tray_delegate.h
index 47d182c..23648ee 100644
--- a/ash/system/tray/test_system_tray_delegate.h
+++ b/ash/system/tray/test_system_tray_delegate.h
@@ -93,6 +93,7 @@ class TestSystemTrayDelegate : public SystemTrayDelegate {
std::string* topup_url,
std::string* setup_url) OVERRIDE;
virtual bool GetWifiScanning() OVERRIDE;
+ virtual bool GetCellularInitializing() OVERRIDE;
virtual void ShowCellularURL(const std::string& url) OVERRIDE;
virtual void ChangeProxySettings() OVERRIDE;
virtual VolumeControlDelegate* GetVolumeControlDelegate() const OVERRIDE;
diff --git a/chrome/browser/chromeos/cros/cros_mock.cc b/chrome/browser/chromeos/cros/cros_mock.cc
index 5790391..34077e8 100644
--- a/chrome/browser/chromeos/cros/cros_mock.cc
+++ b/chrome/browser/chromeos/cros/cros_mock.cc
@@ -167,6 +167,9 @@ void CrosMock::SetNetworkLibraryStatusAreaExpectations() {
EXPECT_CALL(*mock_network_library_, wifi_scanning())
.Times(AnyNumber())
.WillRepeatedly((Return(false)));
+ EXPECT_CALL(*mock_network_library_, cellular_initializing())
+ .Times(AnyNumber())
+ .WillRepeatedly((Return(false)));
// Set specific expectations for interesting functions:
diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h
index 4d91fc3..453b592 100644
--- a/chrome/browser/chromeos/cros/mock_network_library.h
+++ b/chrome/browser/chromeos/cros/mock_network_library.h
@@ -159,13 +159,13 @@ class MockNetworkLibrary : public NetworkLibrary {
MOCK_CONST_METHOD0(wimax_busy, bool(void));
MOCK_CONST_METHOD0(mobile_busy, bool(void));
- MOCK_CONST_METHOD0(wifi_scanning, bool(void));
-
MOCK_CONST_METHOD0(active_network, const Network*(void));
MOCK_CONST_METHOD0(active_nonvirtual_network, const Network*(void));
MOCK_CONST_METHOD0(connected_network, const Network*(void));
MOCK_CONST_METHOD0(connecting_network, const Network*(void));
+ MOCK_CONST_METHOD0(wifi_scanning, bool(void));
+ MOCK_CONST_METHOD0(cellular_initializing, bool(void));
MOCK_CONST_METHOD0(offline_mode, bool(void));
MOCK_METHOD1(EnableEthernetNetworkDevice, void(bool));
diff --git a/chrome/browser/chromeos/cros/native_network_parser.cc b/chrome/browser/chromeos/cros/native_network_parser.cc
index d86eaf7..fec94e5 100644
--- a/chrome/browser/chromeos/cros/native_network_parser.cc
+++ b/chrome/browser/chromeos/cros/native_network_parser.cc
@@ -462,9 +462,13 @@ bool NativeNetworkDeviceParser::ParseValue(
device->set_sim_present(sim_present);
return true;
}
- case PROPERTY_INDEX_POWERED:
- // we don't care about the value, just the fact that it changed
+ case PROPERTY_INDEX_POWERED: {
+ bool powered;
+ if (!value.GetAsBoolean(&powered))
+ return false;
+ device->set_powered(powered);
return true;
+ }
case PROPERTY_INDEX_PRL_VERSION: {
int prl_version;
if (!value.GetAsInteger(&prl_version))
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc
index 30cd45e..d34a743 100644
--- a/chrome/browser/chromeos/cros/network_library.cc
+++ b/chrome/browser/chromeos/cros/network_library.cc
@@ -185,6 +185,7 @@ NetworkDevice::NetworkDevice(const std::string& device_path)
sim_retries_left_(kDefaultSimUnlockRetriesCount),
sim_pin_required_(SIM_PIN_REQUIRE_UNKNOWN),
sim_present_(false),
+ powered_(false),
prl_version_(0),
data_roaming_allowed_(false),
support_network_scan_(false),
diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h
index bac4976..fe07b3c 100644
--- a/chrome/browser/chromeos/cros/network_library.h
+++ b/chrome/browser/chromeos/cros/network_library.h
@@ -114,8 +114,9 @@ class NetworkDevice {
return technology_family() == TECHNOLOGY_FAMILY_GSM &&
!is_sim_locked() && !sim_present_;
}
- const int sim_retries_left() const { return sim_retries_left_; }
+ int sim_retries_left() const { return sim_retries_left_; }
SimPinRequire sim_pin_required() const { return sim_pin_required_; }
+ bool powered() const { return powered_; }
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_; }
@@ -224,6 +225,9 @@ class NetworkDevice {
void set_sim_present(bool sim_present) {
sim_present_ = sim_present;
}
+ void set_powered(bool powered) {
+ powered_ = powered;
+ }
void set_firmware_revision(const std::string& firmware_revision) {
firmware_revision_ = firmware_revision;
}
@@ -278,6 +282,7 @@ class NetworkDevice {
int sim_retries_left_;
SimPinRequire sim_pin_required_;
bool sim_present_;
+ bool powered_;
std::string firmware_revision_;
std::string hardware_revision_;
int prl_version_;
@@ -1453,7 +1458,7 @@ class NetworkLibrary {
virtual bool mobile_busy() const = 0;
virtual bool wifi_scanning() const = 0;
-
+ virtual bool cellular_initializing() const = 0;
virtual bool offline_mode() const = 0;
// Returns list of technologies for which captive portal checking is enabled.
diff --git a/chrome/browser/chromeos/cros/network_library_impl_base.cc b/chrome/browser/chromeos/cros/network_library_impl_base.cc
index 87058dd..f99a542 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_base.cc
+++ b/chrome/browser/chromeos/cros/network_library_impl_base.cc
@@ -64,8 +64,8 @@ NetworkLibraryImplBase::NetworkLibraryImplBase()
available_devices_(0),
enabled_devices_(0),
busy_devices_(0),
- connected_devices_(0),
wifi_scanning_(false),
+ cellular_initialized_(false),
offline_mode_(false),
is_locked_(false),
sim_operation_(SIM_OPERATION_NONE),
@@ -453,6 +453,10 @@ bool NetworkLibraryImplBase::wifi_scanning() const {
return wifi_scanning_;
}
+bool NetworkLibraryImplBase::cellular_initializing() const {
+ return cellular_enabled() && !cellular_initialized_;
+}
+
bool NetworkLibraryImplBase::offline_mode() const { return offline_mode_; }
std::string NetworkLibraryImplBase::GetCheckPortalList() const {
diff --git a/chrome/browser/chromeos/cros/network_library_impl_base.h b/chrome/browser/chromeos/cros/network_library_impl_base.h
index 7853bcd..3576438 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_base.h
+++ b/chrome/browser/chromeos/cros/network_library_impl_base.h
@@ -146,6 +146,7 @@ class NetworkLibraryImplBase : public NetworkLibrary {
virtual bool cellular_busy() const OVERRIDE;
virtual bool mobile_busy() const OVERRIDE;
virtual bool wifi_scanning() const OVERRIDE;
+ virtual bool cellular_initializing() const OVERRIDE;
virtual bool offline_mode() const OVERRIDE;
virtual std::string GetCheckPortalList() const OVERRIDE;
// virtual SetCheckPortalList implemented in derived classes.
@@ -444,12 +445,12 @@ class NetworkLibraryImplBase : public NetworkLibrary {
// Busy means device is switching from enable/disable state.
int busy_devices_;
- // The current connected network devices. Bitwise flag of ConnectionTypes.
- int connected_devices_;
-
// True if we are currently scanning for wifi networks.
bool wifi_scanning_;
+ // True if a cellular device has been powered.
+ bool cellular_initialized_;
+
// Currently not implemented. TODO(stevenjb): implement or eliminate.
bool offline_mode_;
diff --git a/chrome/browser/chromeos/cros/network_library_impl_cros.cc b/chrome/browser/chromeos/cros/network_library_impl_cros.cc
index 177393c..f23cd15 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_cros.cc
+++ b/chrome/browser/chromeos/cros/network_library_impl_cros.cc
@@ -169,6 +169,9 @@ void NetworkLibraryImplCros::UpdateNetworkDeviceStatus(
bool NetworkLibraryImplCros::UpdateCellularDeviceStatus(NetworkDevice* device,
PropertyIndex index) {
+ if (!cellular_initialized_ && device->powered())
+ cellular_initialized_ = true;
+
if (index == PROPERTY_INDEX_CELLULAR_ALLOW_ROAMING) {
if (IsCellularAlwaysInRoaming()) {
if (!device->data_roaming_allowed())
@@ -661,13 +664,6 @@ bool NetworkLibraryImplCros::NetworkManagerStatusChanged(
UpdateEnabledTechnologies(vlist);
break;
}
- case PROPERTY_INDEX_CONNECTED_TECHNOLOGIES: {
- const ListValue* vlist = NULL;
- if (!value->GetAsList(&vlist))
- return false;
- UpdateConnectedTechnologies(vlist);
- break;
- }
case PROPERTY_INDEX_DEFAULT_TECHNOLOGY:
// Currently we ignore DefaultTechnology.
break;
@@ -805,11 +801,6 @@ void NetworkLibraryImplCros::UpdateEnabledTechnologies(
}
}
-void NetworkLibraryImplCros::UpdateConnectedTechnologies(
- const ListValue* technologies) {
- UpdateTechnologies(technologies, &connected_devices_);
-}
-
////////////////////////////////////////////////////////////////////////////
// Update all network lists, and request associated service updates.
diff --git a/chrome/browser/chromeos/cros/network_library_impl_cros.h b/chrome/browser/chromeos/cros/network_library_impl_cros.h
index 39e92ab..d284ad9 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_cros.h
+++ b/chrome/browser/chromeos/cros/network_library_impl_cros.h
@@ -161,7 +161,6 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase {
void UpdateTechnologies(const base::ListValue* technologies, int* bitfieldp);
void UpdateAvailableTechnologies(const base::ListValue* technologies);
void UpdateEnabledTechnologies(const base::ListValue* technologies);
- void UpdateConnectedTechnologies(const base::ListValue* technologies);
// Update network lists.
void UpdateNetworkServiceList(const base::ListValue* services);
diff --git a/chrome/browser/chromeos/cros/network_library_impl_stub.cc b/chrome/browser/chromeos/cros/network_library_impl_stub.cc
index 97fb500..7408651 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_stub.cc
+++ b/chrome/browser/chromeos/cros/network_library_impl_stub.cc
@@ -21,6 +21,11 @@ bool IsEthernetEnabled() {
switches::kDisableStubEthernet);
}
+bool IsInteractive() {
+ return CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableStubInteractive);
+}
+
} // namespace
namespace chromeos {
@@ -31,8 +36,8 @@ NetworkLibraryImplStub::NetworkLibraryImplStub()
pin_(""),
pin_required_(false),
pin_entered_(false),
- connect_delay_ms_(0),
- network_priority_order_(0) {
+ network_priority_order_(0),
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_pointer_factory_(this)) {
// Emulate default setting of the CheckPortalList when OOBE is done.
if (IsEthernetEnabled())
check_portal_list_ = "ethernet,wifi,cellular";
@@ -50,48 +55,44 @@ NetworkLibraryImplStub::~NetworkLibraryImplStub() {
void NetworkLibraryImplStub::Init() {
is_locked_ = false;
- // Devices
+ // Enable only Cellular initially
int devices = (1 << TYPE_WIFI) | (1 << TYPE_CELLULAR) | (1 << TYPE_WIMAX);
if (IsEthernetEnabled())
devices |= 1 << TYPE_ETHERNET;
available_devices_ = devices;
- enabled_devices_ = devices;
- connected_devices_ = devices;
+ enabled_devices_ = (1 << TYPE_CELLULAR);
+ cellular_initialized_ = false;
- base::ListValue supported_carriers;
- supported_carriers.Append(new StringValue("Generic CDMA Carrier 1"));
- supported_carriers.Append(new StringValue("Generic UMTS"));
- supported_carriers.Append(new StringValue("Generic CDMA Carrier 2"));
- supported_carriers.Append(new StringValue("Generic CDMA Carrier 3"));
+ if (IsInteractive()) {
+ const int kWifiInitDelaySeconds = 5;
+ const int kCellularInitDelaySeconds = 10;
+ BrowserThread::PostDelayedTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&NetworkLibraryImplStub::CompleteWifiInit,
+ weak_pointer_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(kWifiInitDelaySeconds));
+ BrowserThread::PostDelayedTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&NetworkLibraryImplStub::CompleteCellularInit,
+ weak_pointer_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(kCellularInitDelaySeconds));
+ } else {
+ CompleteWifiInit();
+ CompleteCellularInit();
+ }
+}
- NetworkDevice* cellular = new NetworkDevice("cellular");
- cellular->type_ = TYPE_CELLULAR;
- cellular->set_technology_family(TECHNOLOGY_FAMILY_CDMA);
- cellular->set_carrier("Generic CDMA Carrier 2");
- cellular->imsi_ = "123456789012345";
- cellular->set_supported_carriers(supported_carriers);
- device_map_["cellular"] = cellular;
+bool NetworkLibraryImplStub::IsCros() const {
+ return false;
+}
- CellularApn apn;
- apn.apn = "apn";
- apn.network_id = "network_id";
- apn.username = "username";
- apn.password = "password";
- apn.name = "name";
- apn.localized_name = "localized_name";
- apn.language = "language";
+////////////////////////////////////////////////////////////////////////////
+// NetworkLibraryImplStub private methods.
- CellularApnList apn_list;
- apn_list.push_back(apn);
+void NetworkLibraryImplStub::CompleteWifiInit() {
+ VLOG(1) << "CompleteWifiInit()";
- NetworkDevice* cellular_gsm = new NetworkDevice("cellular_gsm");
- cellular_gsm->type_ = TYPE_CELLULAR;
- cellular_gsm->set_technology_family(TECHNOLOGY_FAMILY_GSM);
- cellular_gsm->imsi_ = "123456789012345";
- cellular_gsm->set_sim_pin_required(SIM_PIN_REQUIRED);
- cellular_gsm->set_provider_apn_list(apn_list);
- cellular_gsm->set_supported_carriers(supported_carriers);
- device_map_["cellular_gsm"] = cellular_gsm;
+ enabled_devices_ = available_devices_;
// Profiles
AddProfile("default", PROFILE_SHARED);
@@ -189,63 +190,6 @@ void NetworkLibraryImplStub::Init() {
wifi7->set_ui_data(wifi7_ui_data);
AddStubNetwork(wifi7, PROFILE_USER);
- CellularNetwork* cellular1 = new CellularNetwork("cellular1");
- cellular1->set_name("Fake Cellular 1");
- cellular1->set_device_path(cellular->device_path());
- cellular1->set_strength(100);
- cellular1->set_connected();
- cellular1->set_activation_state(ACTIVATION_STATE_ACTIVATED);
- cellular1->set_payment_url(std::string("http://www.google.com"));
- cellular1->set_usage_url(std::string("http://www.google.com"));
- cellular1->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
- AddStubNetwork(cellular1, PROFILE_NONE);
-
- CellularNetwork* cellular2 = new CellularNetwork("/cellular2");
- cellular2->set_name("Fake Cellular 2");
- cellular2->set_device_path(cellular->device_path());
- cellular2->set_strength(50);
- cellular2->set_activation_state(ACTIVATION_STATE_NOT_ACTIVATED);
- cellular2->set_network_technology(NETWORK_TECHNOLOGY_UMTS);
- cellular2->set_roaming_state(ROAMING_STATE_ROAMING);
- cellular2->set_payment_url(std::string("http://www.google.com"));
- cellular2->set_usage_url(std::string("http://www.google.com"));
- AddStubNetwork(cellular2, PROFILE_NONE);
-
- CellularNetwork* cellular3 = new CellularNetwork("cellular3");
- cellular3->set_name("Fake Cellular 3 (policy-managed)");
- cellular3->set_device_path(cellular->device_path());
- cellular3->set_activation_state(ACTIVATION_STATE_ACTIVATED);
- cellular3->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
- NetworkUIData cellular3_ui_data;
- cellular3_ui_data.set_onc_source(onc::ONC_SOURCE_USER_POLICY);
- cellular3->set_ui_data(cellular3_ui_data);
- AddStubNetwork(cellular3, PROFILE_NONE);
-
- CellularNetwork* cellular4 = new CellularNetwork("cellular4");
- cellular4->set_name("Fake Cellular 4 (policy-managed)");
- cellular4->set_device_path(cellular_gsm->device_path());
- cellular4->set_activation_state(ACTIVATION_STATE_ACTIVATED);
- cellular4->set_network_technology(NETWORK_TECHNOLOGY_GSM);
- NetworkUIData cellular4_ui_data;
- cellular4_ui_data.set_onc_source(onc::ONC_SOURCE_USER_POLICY);
- cellular4->set_ui_data(cellular4_ui_data);
- AddStubNetwork(cellular4, PROFILE_NONE);
-
- WimaxNetwork* wimax1 = new WimaxNetwork("wimax1");
- wimax1->set_name("Fake WiMAX Protected");
- wimax1->set_strength(75);
- wimax1->set_connectable(true);
- wimax1->set_eap_identity("WiMAX User 1");
- wimax1->set_passphrase_required(true);
- AddStubNetwork(wimax1, PROFILE_NONE);
-
- WimaxNetwork* wimax2 = new WimaxNetwork("wimax2");
- wimax2->set_name("Fake WiMAX Open");
- wimax2->set_strength(50);
- wimax2->set_connected();
- wimax2->set_passphrase_required(false);
- AddStubNetwork(wimax2, PROFILE_NONE);
-
VirtualNetwork* vpn1 = new VirtualNetwork("vpn1");
vpn1->set_name("Fake VPN1");
vpn1->set_server_hostname("vpn1server.fake.com");
@@ -319,12 +263,103 @@ void NetworkLibraryImplStub::Init() {
// LoadOncNetworks(test_blob, "", onc::ONC_SOURCE_USER_IMPORT, NULL);
}
-bool NetworkLibraryImplStub::IsCros() const {
- return false;
-}
+void NetworkLibraryImplStub::CompleteCellularInit() {
+ VLOG(1) << "CompleteCellularInit()";
-////////////////////////////////////////////////////////////////////////////
-// NetworkLibraryImplStub private methods.
+ cellular_initialized_ = true;
+
+ base::ListValue supported_carriers;
+ supported_carriers.Append(new StringValue("Generic CDMA Carrier 1"));
+ supported_carriers.Append(new StringValue("Generic UMTS"));
+ supported_carriers.Append(new StringValue("Generic CDMA Carrier 2"));
+ supported_carriers.Append(new StringValue("Generic CDMA Carrier 3"));
+
+ NetworkDevice* cellular = new NetworkDevice("cellular");
+ cellular->type_ = TYPE_CELLULAR;
+ cellular->set_technology_family(TECHNOLOGY_FAMILY_CDMA);
+ cellular->set_carrier("Generic CDMA Carrier 2");
+ cellular->imsi_ = "123456789012345";
+ cellular->set_supported_carriers(supported_carriers);
+ device_map_["cellular"] = cellular;
+
+ CellularApn apn;
+ apn.apn = "apn";
+ apn.network_id = "network_id";
+ apn.username = "username";
+ apn.password = "password";
+ apn.name = "name";
+ apn.localized_name = "localized_name";
+ apn.language = "language";
+
+ CellularApnList apn_list;
+ apn_list.push_back(apn);
+
+ NetworkDevice* cellular_gsm = new NetworkDevice("cellular_gsm");
+ cellular_gsm->type_ = TYPE_CELLULAR;
+ cellular_gsm->set_technology_family(TECHNOLOGY_FAMILY_GSM);
+ cellular_gsm->imsi_ = "123456789012345";
+ cellular_gsm->set_sim_pin_required(SIM_PIN_REQUIRED);
+ cellular_gsm->set_provider_apn_list(apn_list);
+ cellular_gsm->set_supported_carriers(supported_carriers);
+ device_map_["cellular_gsm"] = cellular_gsm;
+
+ CellularNetwork* cellular1 = new CellularNetwork("cellular1");
+ cellular1->set_name("Fake Cellular 1");
+ cellular1->set_device_path(cellular->device_path());
+ cellular1->set_strength(100);
+ cellular1->set_connected();
+ cellular1->set_activation_state(ACTIVATION_STATE_ACTIVATED);
+ cellular1->set_payment_url(std::string("http://www.google.com"));
+ cellular1->set_usage_url(std::string("http://www.google.com"));
+ cellular1->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
+ AddStubNetwork(cellular1, PROFILE_NONE);
+
+ CellularNetwork* cellular2 = new CellularNetwork("/cellular2");
+ cellular2->set_name("Fake Cellular 2");
+ cellular2->set_device_path(cellular->device_path());
+ cellular2->set_strength(50);
+ cellular2->set_activation_state(ACTIVATION_STATE_NOT_ACTIVATED);
+ cellular2->set_network_technology(NETWORK_TECHNOLOGY_UMTS);
+ cellular2->set_roaming_state(ROAMING_STATE_ROAMING);
+ cellular2->set_payment_url(std::string("http://www.google.com"));
+ cellular2->set_usage_url(std::string("http://www.google.com"));
+ AddStubNetwork(cellular2, PROFILE_NONE);
+
+ CellularNetwork* cellular3 = new CellularNetwork("cellular3");
+ cellular3->set_name("Fake Cellular 3 (policy-managed)");
+ cellular3->set_device_path(cellular->device_path());
+ cellular3->set_activation_state(ACTIVATION_STATE_ACTIVATED);
+ cellular3->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
+ NetworkUIData cellular3_ui_data;
+ cellular3_ui_data.set_onc_source(onc::ONC_SOURCE_USER_POLICY);
+ cellular3->set_ui_data(cellular3_ui_data);
+ AddStubNetwork(cellular3, PROFILE_NONE);
+
+ CellularNetwork* cellular4 = new CellularNetwork("cellular4");
+ cellular4->set_name("Fake Cellular 4 (policy-managed)");
+ cellular4->set_device_path(cellular_gsm->device_path());
+ cellular4->set_activation_state(ACTIVATION_STATE_ACTIVATED);
+ cellular4->set_network_technology(NETWORK_TECHNOLOGY_GSM);
+ NetworkUIData cellular4_ui_data;
+ cellular4_ui_data.set_onc_source(onc::ONC_SOURCE_USER_POLICY);
+ cellular4->set_ui_data(cellular4_ui_data);
+ AddStubNetwork(cellular4, PROFILE_NONE);
+
+ WimaxNetwork* wimax1 = new WimaxNetwork("wimax1");
+ wimax1->set_name("Fake WiMAX Protected");
+ wimax1->set_strength(75);
+ wimax1->set_connectable(true);
+ wimax1->set_eap_identity("WiMAX User 1");
+ wimax1->set_passphrase_required(true);
+ AddStubNetwork(wimax1, PROFILE_NONE);
+
+ WimaxNetwork* wimax2 = new WimaxNetwork("wimax2");
+ wimax2->set_name("Fake WiMAX Open");
+ wimax2->set_strength(50);
+ wimax2->set_connected();
+ wimax2->set_passphrase_required(false);
+ AddStubNetwork(wimax2, PROFILE_NONE);
+}
void NetworkLibraryImplStub::AddStubNetwork(
Network* network, NetworkProfileType profile_type) {
@@ -492,14 +527,13 @@ void NetworkLibraryImplStub::CallConnectToNetwork(Network* network) {
SetActiveNetwork(network->type(), network->service_path());
// If a delay has been set (i.e. we are interactive), delay the call to
// ConnectToNetwork (but signal observers since we changed connecting state).
- if (connect_delay_ms_) {
- // This class is a Singleton and won't be deleted until this callbacks has
- // run.
+ if (IsInteractive()) {
+ const int kConnectDelayMs = 4 * 1000;
BrowserThread::PostDelayedTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&NetworkLibraryImplStub::ConnectToNetwork,
- base::Unretained(this), network),
- base::TimeDelta::FromMilliseconds(connect_delay_ms_));
+ weak_pointer_factory_.GetWeakPtr(), network),
+ base::TimeDelta::FromMilliseconds(kConnectDelayMs));
SignalNetworkManagerObservers();
NotifyNetworkChanged(network);
} else {
@@ -652,13 +686,11 @@ bool NetworkLibraryImplStub::IsCellularAlwaysInRoaming() {
void NetworkLibraryImplStub::RequestNetworkScan() {
// This is triggered by user interaction, so set a network connect delay.
const int kScanDelayMs = 2 * 1000;
- const int kConnectDelayMs = 4 * 1000;
wifi_scanning_ = true;
- connect_delay_ms_ = kConnectDelayMs;
BrowserThread::PostDelayedTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&NetworkLibraryImplStub::ScanCompleted,
- base::Unretained(this)),
+ weak_pointer_factory_.GetWeakPtr()),
base::TimeDelta::FromMilliseconds(kScanDelayMs));
}
@@ -740,7 +772,7 @@ void NetworkLibraryImplStub::RequestNetworkServiceProperties(
BrowserThread::UI,
FROM_HERE,
base::Bind(&NetworkLibraryImplStub::SendNetworkServiceProperties,
- base::Unretained(this),
+ weak_pointer_factory_.GetWeakPtr(),
service_path, callback),
base::TimeDelta::FromMilliseconds(100));
}
diff --git a/chrome/browser/chromeos/cros/network_library_impl_stub.h b/chrome/browser/chromeos/cros/network_library_impl_stub.h
index 379db34..f5fa6a8 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_stub.h
+++ b/chrome/browser/chromeos/cros/network_library_impl_stub.h
@@ -97,6 +97,8 @@ class NetworkLibraryImplStub : public NetworkLibraryImplBase {
const std::map<std::string, base::DictionaryValue*>& GetConfigurations();
private:
+ void CompleteWifiInit();
+ void CompleteCellularInit();
void AddStubNetwork(Network* network, NetworkProfileType profile_type);
void AddStubRememberedNetwork(Network* network);
void ConnectToNetwork(Network* network);
@@ -111,12 +113,12 @@ class NetworkLibraryImplStub : public NetworkLibraryImplBase {
std::string pin_;
bool pin_required_;
bool pin_entered_;
- int64 connect_delay_ms_;
int network_priority_order_;
WifiNetworkVector disabled_wifi_networks_;
CellularNetworkVector disabled_cellular_networks_;
WimaxNetworkVector disabled_wimax_networks_;
std::map<std::string, base::DictionaryValue*> service_configurations_;
+ base::WeakPtrFactory<NetworkLibraryImplStub> weak_pointer_factory_;
DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImplStub);
};
diff --git a/chrome/browser/chromeos/status/network_menu_icon.cc b/chrome/browser/chromeos/status/network_menu_icon.cc
index 404493f..e27fffb 100644
--- a/chrome/browser/chromeos/status/network_menu_icon.cc
+++ b/chrome/browser/chromeos/status/network_menu_icon.cc
@@ -13,6 +13,7 @@
#include "chrome/browser/chromeos/accessibility/accessibility_util.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "grit/ash_resources.h"
+#include "grit/ash_strings.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
@@ -679,10 +680,29 @@ void NetworkMenuIcon::SetConnectingIconAndText() {
ImageType image_type;
gfx::ImageSkia** images;
- icon_->set_type(connecting_network_->type());
- icon_->set_state(connecting_network_->state());
+ ConnectionType type;
+ ConnectionState state;
+ if (connecting_network_) {
+ type = connecting_network_->type();
+ state = connecting_network_->state();
+ if (mode_ == MENU_MODE) {
+ text_ = l10n_util::GetStringFUTF16(
+ IDS_STATUSBAR_NETWORK_CONNECTING_TOOLTIP,
+ UTF8ToUTF16(connecting_network_->name()));
+ } else {
+ text_ = UTF8ToUTF16(connecting_network_->name());
+ }
+ } else {
+ // When called with no connecting network, cellular is initializing.
+ type = TYPE_CELLULAR;
+ state = STATE_ASSOCIATION;
+ text_ = l10n_util::GetStringUTF16(
+ IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR);
+ }
+ icon_->set_type(type);
+ icon_->set_state(state);
- if (connecting_network_->type() == TYPE_WIFI) {
+ if (type == TYPE_WIFI) {
image_count = kNumArcsImages - 1;
image_type = ARCS;
images = resource_color_theme_ == COLOR_DARK ? kArcsImagesAnimatingDark :
@@ -704,14 +724,8 @@ void NetworkMenuIcon::SetConnectingIconAndText() {
new gfx::ImageSkia(NetworkMenuIcon::GenerateConnectingImage(source));
}
icon_->set_icon(*images[index]);
- icon_->SetBadges(connecting_network_);
- if (mode_ == MENU_MODE) {
- text_ = l10n_util::GetStringFUTF16(
- IDS_STATUSBAR_NETWORK_CONNECTING_TOOLTIP,
- UTF8ToUTF16(connecting_network_->name()));
- } else {
- text_ = UTF8ToUTF16(connecting_network_->name());
- }
+ if (connecting_network_)
+ icon_->SetBadges(connecting_network_);
}
// Sets up the icon and badges for GenerateBitmap().
@@ -742,6 +756,12 @@ void NetworkMenuIcon::SetIconAndText() {
return;
}
+ // If no connected network, check if we are initializing Cellular.
+ if (cros->cellular_initializing()) {
+ SetConnectingIconAndText();
+ return;
+ }
+
// Not connecting, so stop animation.
animation_connecting_.Stop();
diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
index 45afb7e..93a69c9 100644
--- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
+++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
@@ -849,6 +849,10 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
return CrosLibrary::Get()->GetNetworkLibrary()->wifi_scanning();
}
+ virtual bool GetCellularInitializing() OVERRIDE {
+ return CrosLibrary::Get()->GetNetworkLibrary()->cellular_initializing();
+ }
+
virtual void ShowCellularURL(const std::string& url) OVERRIDE {
chrome::ShowSingletonTab(GetAppropriateBrowser(), GURL(url));
}
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 056af3c..0155bd6 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -1756,6 +1756,7 @@
'dependencies': [
'../ash/ash.gyp:ash_resources',
'../ash/ash.gyp:ash_test_support',
+ '../ash/ash_strings.gyp:ash_strings',
],
# We eventually want to compile both in Win Aura builds, see
# http://crbug.com/155545.
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 05346a2..9bc5ccf 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -1428,6 +1428,9 @@ const char kDisableOobeAnimation[] = "disable-oobe-animation";
// Disables fake ethernet network on the login screen.
const char kDisableStubEthernet[] = "disable-stub-ethernet";
+// Enable "interactive" mode for stub implemenations (e.g. NetworkLibrary)
+const char kEnableStubInteractive[] = "enable-stub-interactive";
+
// Enables component extension that initializes background pages of
// certain hosted applications.
const char kEnableBackgroundLoader[] = "enable-background-loader";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 7a73bb1..65eb094 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -392,6 +392,7 @@ extern const char kDisableNewOobe[];
extern const char kDisableNewPasswordChangedDialog[];
extern const char kDisableOobeAnimation[];
extern const char kDisableStubEthernet[];
+extern const char kEnableStubInteractive[];
extern const char kEnableBackgroundLoader[];
extern const char kEnableCarrierSwitching[];
extern const char kEnableChromeCaptivePortalDetector[];