| Index: chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
|
| diff --git a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
|
| index 2f3b2e319c12cdddf350d8de468a20e2f394d016..001c1e470c8673d68d5206495cfc63eda6c9664d 100644
|
| --- a/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
|
| +++ b/chrome/browser/ui/views/passwords/password_dialog_view_browsertest.cc
|
| @@ -41,6 +41,39 @@ class TestURLFetcherCallback {
|
| MOCK_METHOD1(OnRequestDone, void(const GURL&));
|
| };
|
|
|
| +// A Widget observer class used to observe bubbles closing.
|
| +class BubbleCloseObserver : public views::WidgetObserver {
|
| + public:
|
| + explicit BubbleCloseObserver(views::DialogDelegateView* bubble);
|
| + ~BubbleCloseObserver() override;
|
| +
|
| + bool widget_closed() const { return !widget_; }
|
| +
|
| + private:
|
| + // WidgetObserver:
|
| + void OnWidgetClosing(views::Widget* widget) override;
|
| +
|
| + views::Widget* widget_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BubbleCloseObserver);
|
| +};
|
| +
|
| +BubbleCloseObserver::BubbleCloseObserver(views::DialogDelegateView* bubble)
|
| + : widget_(bubble->GetWidget()) {
|
| + widget_->AddObserver(this);
|
| +}
|
| +
|
| +BubbleCloseObserver::~BubbleCloseObserver() {
|
| + if (widget_)
|
| + widget_->RemoveObserver(this);
|
| +}
|
| +
|
| +void BubbleCloseObserver::OnWidgetClosing(views::Widget* widget) {
|
| + DCHECK_EQ(widget_, widget);
|
| + widget_->RemoveObserver(this);
|
| + widget_ = nullptr;
|
| +}
|
| +
|
| // ManagePasswordsUIController subclass to capture the dialog instance
|
| class TestManagePasswordsUIController : public ManagePasswordsUIController {
|
| public:
|
| @@ -257,6 +290,27 @@ IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest,
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest,
|
| + PopupAccountChooserWithSingleCredentialClickSignIn) {
|
| + GURL origin("https://example.com");
|
| + ScopedVector<autofill::PasswordForm> local_credentials;
|
| + autofill::PasswordForm form;
|
| + form.origin = origin;
|
| + form.display_name = base::ASCIIToUTF16("Peter");
|
| + form.username_value = base::ASCIIToUTF16("peter@pan.test");
|
| + local_credentials.push_back(new autofill::PasswordForm(form));
|
| +
|
| + SetupChooseCredentials(std::move(local_credentials),
|
| + ScopedVector<autofill::PasswordForm>(), origin);
|
| +
|
| + EXPECT_TRUE(controller()->current_account_chooser());
|
| + views::DialogDelegateView* dialog = controller()->current_account_chooser();
|
| + BubbleCloseObserver bubble_observer(dialog);
|
| + EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form)));
|
| + dialog->Accept();
|
| + EXPECT_TRUE(bubble_observer.widget_closed());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest,
|
| PopupAccountChooserWithSingleCredentialReturnNonEmpty) {
|
| GURL origin("https://example.com");
|
| ScopedVector<autofill::PasswordForm> local_credentials;
|
| @@ -358,9 +412,11 @@ IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAutoSigninPrompt) {
|
| EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState());
|
| AutoSigninFirstRunDialogView* dialog =
|
| controller()->current_autosignin_prompt();
|
| + BubbleCloseObserver bubble_observer(dialog);
|
| ui::Accelerator esc(ui::VKEY_ESCAPE, 0);
|
| EXPECT_CALL(*controller(), OnDialogClosed());
|
| EXPECT_TRUE(dialog->GetWidget()->client_view()->AcceleratorPressed(esc));
|
| + EXPECT_TRUE(bubble_observer.widget_closed());
|
| content::RunAllPendingInMessageLoop();
|
| testing::Mock::VerifyAndClearExpectations(controller());
|
| EXPECT_TRUE(
|
|
|