123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- // Copyright 2022 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ash/system/network/network_detailed_network_view_impl.h"
- #include <memory>
- #include "ash/constants/ash_features.h"
- #include "ash/system/network/network_detailed_network_view.h"
- #include "ash/system/network/network_detailed_view.h"
- #include "ash/system/network/network_list_mobile_header_view.h"
- #include "ash/system/network/network_list_network_item_view.h"
- #include "ash/system/network/network_list_wifi_header_view.h"
- #include "ash/system/network/network_utils.h"
- #include "ash/system/tray/detailed_view_delegate.h"
- #include "ash/test/ash_test_base.h"
- #include "base/test/metrics/histogram_tester.h"
- #include "base/test/scoped_feature_list.h"
- #include "chromeos/services/network_config/public/cpp/cros_network_config_test_helper.h"
- #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
- #include "third_party/cros_system_api/dbus/shill/dbus-constants.h"
- #include "ui/base/l10n/l10n_util.h"
- #include "ui/events/event_utils.h"
- #include "ui/views/view.h"
- #include "ui/views/widget/widget.h"
- namespace ash {
- namespace {
- using chromeos::network_config::CrosNetworkConfigTestHelper;
- using chromeos::network_config::mojom::ConnectionStateType;
- using chromeos::network_config::mojom::NetworkStatePropertiesPtr;
- using chromeos::network_config::mojom::NetworkType;
- const char kStubCellularDevicePath[] = "/device/stub_cellular_device";
- const char kStubCellularDeviceName[] = "stub_cellular_device";
- class FakeNetworkDetailedNetworkViewDelegate
- : public NetworkDetailedNetworkView::Delegate {
- public:
- FakeNetworkDetailedNetworkViewDelegate() = default;
- ~FakeNetworkDetailedNetworkViewDelegate() override = default;
- bool last_mobile_toggle_state() { return last_mobile_toggle_state_; }
- size_t on_mobile_toggle_clicked_count() {
- return on_mobile_toggle_clicked_count_;
- }
- bool last_wifi_toggle_state() { return last_wifi_toggle_state_; }
- size_t on_wifi_toggle_clicked_count() {
- return on_wifi_toggle_clicked_count_;
- }
- size_t network_list_item_selected_count() const {
- return network_list_item_selected_count_;
- }
- private:
- // NetworkDetailedView::Delegate:
- void OnNetworkListItemSelected(
- const NetworkStatePropertiesPtr& network) override {
- network_list_item_selected_count_++;
- last_network_list_item_selected_ = mojo::Clone(network);
- };
- // NetworkDetailedNetworkView::Delegate:
- void OnWifiToggleClicked(bool new_state) override {
- on_wifi_toggle_clicked_count_++;
- last_wifi_toggle_state_ = new_state;
- };
- void OnMobileToggleClicked(bool new_state) override {
- on_mobile_toggle_clicked_count_++;
- last_mobile_toggle_state_ = new_state;
- };
- const NetworkStatePropertiesPtr& last_network_list_item_selected() const {
- return last_network_list_item_selected_;
- }
- bool last_mobile_toggle_state_ = false;
- size_t on_mobile_toggle_clicked_count_ = 0;
- bool last_wifi_toggle_state_ = false;
- size_t on_wifi_toggle_clicked_count_ = 0;
- size_t network_list_item_selected_count_ = 0;
- NetworkStatePropertiesPtr last_network_list_item_selected_;
- };
- } // namespace
- class NetworkDetailedNetworkViewTest : public AshTestBase {
- public:
- void SetUp() override {
- AshTestBase::SetUp();
- feature_list_.InitAndEnableFeature(features::kQuickSettingsNetworkRevamp);
- network_state_helper()->ClearDevices();
- network_state_helper()->manager_test()->AddTechnology(shill::kTypeCellular,
- /*enabled=*/true);
- network_state_helper()->device_test()->AddDevice(
- kStubCellularDevicePath, shill::kTypeCellular, kStubCellularDeviceName);
- // Wait for network state and device change events to be handled.
- base::RunLoop().RunUntilIdle();
- histogram_tester_.ExpectBucketCount(
- "ChromeOS.SystemTray.Network.SectionShown",
- DetailedViewSection::kDetailedSection, 0);
- detailed_view_delegate_ =
- std::make_unique<DetailedViewDelegate>(/*tray_controller=*/nullptr);
- std::unique_ptr<NetworkDetailedNetworkViewImpl>
- network_detailed_network_view =
- std::make_unique<NetworkDetailedNetworkViewImpl>(
- detailed_view_delegate_.get(),
- &fake_network_detailed_network_delagte_);
- histogram_tester_.ExpectBucketCount(
- "ChromeOS.SystemTray.Network.SectionShown",
- DetailedViewSection::kDetailedSection, 1);
- widget_ = CreateFramelessTestWidget();
- widget_->SetFullscreen(true);
- network_detailed_network_view_ =
- widget_->SetContentsView(std::move(network_detailed_network_view));
- }
- void TearDown() override {
- widget_.reset();
- AshTestBase::TearDown();
- }
- NetworkListNetworkItemView* AddNetworkListItem() {
- return network_detailed_network_view()->AddNetworkListItem();
- }
- void NotifyNetworkListChanged() {
- network_detailed_network_view()->NotifyNetworkListChanged();
- }
- NetworkListWifiHeaderView* AddWifiSectionHeader() {
- return network_detailed_network_view()->AddWifiSectionHeader();
- }
- NetworkListMobileHeaderView* AddMobileSectionHeader() {
- return network_detailed_network_view()->AddMobileSectionHeader();
- }
- FakeNetworkDetailedNetworkViewDelegate* delegate() {
- return &fake_network_detailed_network_delagte_;
- }
- void SimulateMobileToggleClicked(bool new_state) {
- network_detailed_network_view()->OnMobileToggleClicked(new_state);
- }
- void SimulateWifiToggleClicked(bool new_state) {
- network_detailed_network_view()->OnWifiToggleClicked(new_state);
- }
- private:
- NetworkDetailedNetworkViewImpl* network_detailed_network_view() {
- return network_detailed_network_view_;
- }
- NetworkStateTestHelper* network_state_helper() {
- return &network_config_helper_.network_state_helper();
- }
- base::test::ScopedFeatureList feature_list_;
- std::unique_ptr<views::Widget> widget_;
- CrosNetworkConfigTestHelper network_config_helper_;
- FakeNetworkDetailedNetworkViewDelegate fake_network_detailed_network_delagte_;
- std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
- NetworkDetailedNetworkViewImpl* network_detailed_network_view_;
- base::HistogramTester histogram_tester_;
- };
- TEST_F(NetworkDetailedNetworkViewTest, ViewsAreCreated) {
- NetworkListNetworkItemView* network_list_item = AddNetworkListItem();
- ASSERT_NE(nullptr, network_list_item);
- EXPECT_STREQ("NetworkListNetworkItemView", network_list_item->GetClassName());
- NetworkListWifiHeaderView* wifi_section = AddWifiSectionHeader();
- ASSERT_NE(nullptr, wifi_section);
- EXPECT_STREQ("NetworkListWifiHeaderView", wifi_section->GetClassName());
- NetworkListMobileHeaderView* mobile_section = AddMobileSectionHeader();
- ASSERT_NE(nullptr, mobile_section);
- EXPECT_STREQ("NetworkListMobileHeaderView", mobile_section->GetClassName());
- }
- TEST_F(NetworkDetailedNetworkViewTest, ToggleInteractions) {
- EXPECT_EQ(0u, delegate()->on_mobile_toggle_clicked_count());
- EXPECT_FALSE(delegate()->last_mobile_toggle_state());
- SimulateMobileToggleClicked(/*new_state=*/true);
- EXPECT_EQ(1u, delegate()->on_mobile_toggle_clicked_count());
- EXPECT_TRUE(delegate()->last_mobile_toggle_state());
- EXPECT_EQ(0u, delegate()->on_wifi_toggle_clicked_count());
- EXPECT_FALSE(delegate()->last_wifi_toggle_state());
- SimulateWifiToggleClicked(/*new_state=*/true);
- EXPECT_EQ(1u, delegate()->on_wifi_toggle_clicked_count());
- EXPECT_TRUE(delegate()->last_wifi_toggle_state());
- }
- TEST_F(NetworkDetailedNetworkViewTest, ListItemClicked) {
- EXPECT_EQ(0u, delegate()->network_list_item_selected_count());
- NetworkListNetworkItemView* network_list_item = AddNetworkListItem();
- ASSERT_NE(nullptr, network_list_item);
- NotifyNetworkListChanged();
- LeftClickOn(network_list_item);
- EXPECT_EQ(1u, delegate()->network_list_item_selected_count());
- GetSessionControllerClient()->SetSessionState(
- session_manager::SessionState::LOCKED);
- LeftClickOn(network_list_item);
- EXPECT_EQ(1u, delegate()->network_list_item_selected_count());
- }
- } // namespace ash
|