| Index: chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
|
| diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
|
| index 0fb6111e3110c876b297f6ec8337975c0dd91eb9..05fe260bb2bbe8caf4845b06c6ee7e8a48330a6b 100644
|
| --- a/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
|
| +++ b/chrome/browser/ui/views/extensions/chooser_dialog_view_browsertest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "chrome/browser/ui/views/extensions/chooser_dialog_view.h"
|
|
|
| #include "base/macros.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/chooser_controller/mock_chooser_controller.h"
|
| #include "chrome/browser/extensions/extension_browsertest.h"
|
| #include "chrome/browser/platform_util.h"
|
| @@ -14,8 +15,11 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/views/controls/button/label_button.h"
|
| +#include "ui/views/controls/link.h"
|
| #include "ui/views/controls/styled_label.h"
|
| #include "ui/views/controls/table/table_view.h"
|
| +#include "ui/views/controls/throbber.h"
|
| #include "ui/views/widget/widget.h"
|
| #include "ui/views/window/dialog_client_view.h"
|
|
|
| @@ -41,6 +45,17 @@ class ChooserDialogViewTest : public ExtensionBrowserTest {
|
| platform_util::GetViewForWindow(
|
| browser()->window()->GetNativeWindow()));
|
| modal_dialog->Show();
|
| + throbber_ = chooser_dialog_view_->chooser_content_view_for_test()
|
| + ->throbber_for_test();
|
| + ASSERT_TRUE(throbber_);
|
| + discovery_state_ = chooser_dialog_view_->chooser_content_view_for_test()
|
| + ->discovery_state_for_test();
|
| + ASSERT_TRUE(discovery_state_);
|
| + ok_button_ = chooser_dialog_view_->GetDialogClientView()->ok_button();
|
| + ASSERT_TRUE(ok_button_);
|
| + cancel_button_ =
|
| + chooser_dialog_view_->GetDialogClientView()->cancel_button();
|
| + ASSERT_TRUE(cancel_button_);
|
| styled_label_ = chooser_dialog_view_->chooser_content_view_for_test()
|
| ->styled_label_for_test();
|
| ASSERT_TRUE(styled_label_);
|
| @@ -51,6 +66,10 @@ class ChooserDialogViewTest : public ExtensionBrowserTest {
|
| ChooserDialogView* chooser_dialog_view_;
|
| views::TableView* table_view_;
|
| ui::TableModel* table_model_;
|
| + views::Throbber* throbber_;
|
| + views::Link* discovery_state_;
|
| + views::LabelButton* ok_button_;
|
| + views::LabelButton* cancel_button_;
|
| views::StyledLabel* styled_label_;
|
|
|
| private:
|
| @@ -58,17 +77,139 @@ class ChooserDialogViewTest : public ExtensionBrowserTest {
|
| };
|
|
|
| IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, InitialState) {
|
| - // Since "No devices found." needs to be displayed on the |table_view_|,
|
| - // the number of rows is 1.
|
| - EXPECT_EQ(1, table_view_->RowCount());
|
| + EXPECT_FALSE(throbber_->visible());
|
| + // OK button is disabled since there is no option.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + // Cancel button is always enabled.
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| EXPECT_EQ(
|
| - l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
|
| - table_model_->GetText(0, 0));
|
| - // |table_view_| should be disabled since there is no option shown.
|
| - EXPECT_FALSE(table_view_->enabled());
|
| - // No option selected.
|
| - EXPECT_EQ(0, table_view_->SelectedRowCount());
|
| - EXPECT_EQ(-1, table_view_->FirstSelectedRow());
|
| + l10n_util::GetStringUTF16(IDS_USB_DEVICE_CHOOSER_CONNECT_BUTTON_TEXT),
|
| + ok_button_->GetText());
|
| + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_CANCEL_BUTTON_TEXT),
|
| + cancel_button_->GetText());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, SelectAndDeselectAnOption) {
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
|
| + // OK button is disabled since no option is selected.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 0.
|
| + table_view_->Select(0);
|
| + // OK button is enabled since an option is selected.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Unselect option 0.
|
| + table_view_->Select(-1);
|
| + // OK button is disabled since no option is selected.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 1.
|
| + table_view_->Select(1);
|
| + // OK button is enabled since an option is selected.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Unselect option 1.
|
| + table_view_->Select(-1);
|
| + // OK button is disabled since no option is selected.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
|
| + SelectAnOptionAndThenSelectAnotherOption) {
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 0.
|
| + table_view_->Select(0);
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 1.
|
| + table_view_->Select(1);
|
| + // Both OK and Cancel buttons are still enabled.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 2.
|
| + table_view_->Select(2);
|
| + // Both OK and Cancel buttons are still enabled.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
|
| + SelectAnOptionAndRemoveAnotherOption) {
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 1.
|
| + table_view_->Select(1);
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Remove option 0, the list becomes: b c.
|
| + mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a"));
|
| + // Both OK and Cancel buttons are still enabled.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Remove option 1.
|
| + mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c"));
|
| + // Both OK and Cancel buttons are still enabled.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
|
| + SelectAnOptionAndRemoveTheSelectedOption) {
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 1.
|
| + table_view_->Select(1);
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Remove option 1.
|
| + mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b"));
|
| + // OK button is disabled since the selected option is removed.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest,
|
| + AddAnOptionAndSelectItAndRemoveTheSelectedOption) {
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 0.
|
| + table_view_->Select(0);
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Remove option 0.
|
| + mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("a"));
|
| + // There is no option shown now and the OK button is disabled.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, Accept) {
|
| @@ -90,3 +231,94 @@ IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, ClickStyledLabelLink) {
|
| EXPECT_CALL(*mock_chooser_controller_, OpenHelpCenterUrl()).Times(1);
|
| styled_label_->LinkClicked(nullptr, 0);
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, AdapterOnAndOffAndOn) {
|
| + mock_chooser_controller_->OnAdapterPresenceChanged(
|
| + content::BluetoothChooser::AdapterPresence::POWERED_ON);
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Add options.
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + // Select option 1.
|
| + table_view_->Select(1);
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + mock_chooser_controller_->OnAdapterPresenceChanged(
|
| + content::BluetoothChooser::AdapterPresence::POWERED_OFF);
|
| + // Since the adapter is turned off, the previously selected option
|
| + // becomes invalid, the OK button is disabled.
|
| + EXPECT_EQ(0u, mock_chooser_controller_->NumOptions());
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + mock_chooser_controller_->OnAdapterPresenceChanged(
|
| + content::BluetoothChooser::AdapterPresence::POWERED_ON);
|
| + EXPECT_EQ(0u, mock_chooser_controller_->NumOptions());
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChooserDialogViewTest, DiscoveringAndIdle) {
|
| + // Add options.
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("a"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("b"));
|
| + mock_chooser_controller_->OptionAdded(base::ASCIIToUTF16("c"));
|
| + EXPECT_TRUE(table_view_->visible());
|
| + EXPECT_EQ(3, table_view_->RowCount());
|
| + EXPECT_TRUE(table_view_->enabled());
|
| + // No option selected.
|
| + EXPECT_EQ(0, table_view_->SelectedRowCount());
|
| + EXPECT_EQ(-1, table_view_->FirstSelectedRow());
|
| + // Select option 1.
|
| + table_view_->Select(1);
|
| + EXPECT_EQ(1, table_view_->SelectedRowCount());
|
| + EXPECT_EQ(1, table_view_->FirstSelectedRow());
|
| + EXPECT_FALSE(throbber_->visible());
|
| + // Both OK and Cancel buttons are enabled.
|
| + EXPECT_TRUE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| + // |discovery_state_|'s text is an empty string.
|
| + EXPECT_TRUE(discovery_state_->text().empty());
|
| +
|
| + mock_chooser_controller_->OnDiscoveryStateChanged(
|
| + content::BluetoothChooser::DiscoveryState::DISCOVERING);
|
| + EXPECT_FALSE(table_view_->visible());
|
| + EXPECT_TRUE(throbber_->visible());
|
| + // |discovery_state_| is disabled and shows a label instead of a link.
|
| + EXPECT_FALSE(discovery_state_->enabled());
|
| + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING),
|
| + discovery_state_->text());
|
| + // OK button is disabled since the chooser is refreshing options.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +
|
| + mock_chooser_controller_->OnDiscoveryStateChanged(
|
| + content::BluetoothChooser::DiscoveryState::IDLE);
|
| + EXPECT_TRUE(table_view_->visible());
|
| + // Since "No devices found." needs to be displayed on the |table_view_|,
|
| + // the number of rows is 1.
|
| + EXPECT_EQ(1, table_view_->RowCount());
|
| + EXPECT_EQ(
|
| + l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT),
|
| + table_model_->GetText(0, 0));
|
| + // |table_view_| should be disabled since there is no option shown.
|
| + EXPECT_FALSE(table_view_->enabled());
|
| + // No option selected.
|
| + EXPECT_EQ(0, table_view_->SelectedRowCount());
|
| + EXPECT_EQ(-1, table_view_->FirstSelectedRow());
|
| + EXPECT_FALSE(throbber_->visible());
|
| + // |discovery_state_| is enabled and shows a link.
|
| + EXPECT_TRUE(discovery_state_->enabled());
|
| + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN),
|
| + discovery_state_->text());
|
| + // OK button is disabled since the chooser refreshed options.
|
| + EXPECT_FALSE(ok_button_->enabled());
|
| + EXPECT_TRUE(cancel_button_->enabled());
|
| +}
|
|
|