diff options
author | stevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-15 20:49:58 +0000 |
---|---|---|
committer | stevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-15 20:49:58 +0000 |
commit | d45aa1f5cf91d7f0840f66cfcb1d00ed9ba64c6b (patch) | |
tree | 69f4709b4856a0fd5043a24aa6367ae4d3e5a65c | |
parent | 76b5e7ed4caf688621f6539a0ff4c5b1e4c45b4e (diff) | |
download | chromium_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
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[]; |