| Index: chrome/browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc
|
| diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc
|
| index 1579d11594006ac20772438262888c2444e7c8bc..8c6868c3beb31685870929b8f5b8e1d9595970c1 100644
|
| --- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc
|
| +++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view_interactive_uitest.cc
|
| @@ -16,6 +16,7 @@
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/passwords/manage_passwords_test.h"
|
| #include "chrome/browser/ui/passwords/passwords_model_delegate.h"
|
| +#include "chrome/browser/ui/tab_dialogs.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
|
| @@ -26,7 +27,8 @@
|
| #include "content/public/common/content_features.h"
|
| #include "net/url_request/test_url_fetcher_factory.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| -#include "ui/views/test/widget_test.h"
|
| +#include "ui/base/ui_base_switches.h"
|
| +#include "ui/base/ui_features.h"
|
|
|
| using testing::Eq;
|
| using testing::Field;
|
| @@ -63,9 +65,24 @@ bool IsBubbleShowing() {
|
|
|
| namespace metrics_util = password_manager::metrics_util;
|
|
|
| -using ManagePasswordsBubbleViewTest = ManagePasswordsTest;
|
| +class ManagePasswordsBubbleViewTest : public ManagePasswordsTest {
|
| + public:
|
| + ManagePasswordsBubbleViewTest() {}
|
| + ~ManagePasswordsBubbleViewTest() override {}
|
| +
|
| + // content::BrowserTestBase:
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {
|
| +#if defined(OS_MACOSX)
|
| + command_line->AppendSwitch(switches::kExtendMdToSecondaryUi);
|
| +#endif
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleViewTest);
|
| +};
|
|
|
| IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, BasicOpenAndClose) {
|
| + ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
|
| EXPECT_FALSE(IsBubbleShowing());
|
| SetupPendingPassword();
|
| EXPECT_TRUE(IsBubbleShowing());
|
| @@ -75,11 +92,15 @@ IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, BasicOpenAndClose) {
|
| EXPECT_FALSE(bubble->GetFocusManager()->GetFocusedView());
|
| ManagePasswordsBubbleView::CloseCurrentBubble();
|
| EXPECT_FALSE(IsBubbleShowing());
|
| + // Drain message pump to ensure the bubble view is cleared so that it can be
|
| + // created again (it is checked on Mac to prevent re-opening the bubble when
|
| + // clicking the location bar button repeatedly).
|
| + content::RunAllPendingInMessageLoop();
|
|
|
| // And, just for grins, ensure that we can re-open the bubble.
|
| - ManagePasswordsBubbleView::ShowBubble(
|
| - browser()->tab_strip_model()->GetActiveWebContents(),
|
| - ManagePasswordsBubbleView::USER_GESTURE);
|
| + TabDialogs::FromWebContents(
|
| + browser()->tab_strip_model()->GetActiveWebContents())
|
| + ->ShowManagePasswordsBubble(true /* user_action */);
|
| EXPECT_TRUE(IsBubbleShowing());
|
| bubble = ManagePasswordsBubbleView::manage_password_bubble();
|
| EXPECT_TRUE(bubble->initially_focused_view());
|
| @@ -92,6 +113,7 @@ IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, BasicOpenAndClose) {
|
| // Same as 'BasicOpenAndClose', but use the command rather than the static
|
| // method directly.
|
| IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, CommandControlsBubble) {
|
| + ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
|
| // The command only works if the icon is visible, so get into management mode.
|
| SetupManagingPasswords();
|
| EXPECT_FALSE(IsBubbleShowing());
|
| @@ -104,6 +126,10 @@ IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, CommandControlsBubble) {
|
| bubble->GetFocusManager()->GetFocusedView());
|
| ManagePasswordsBubbleView::CloseCurrentBubble();
|
| EXPECT_FALSE(IsBubbleShowing());
|
| + // Drain message pump to ensure the bubble view is cleared so that it can be
|
| + // created again (it is checked on Mac to prevent re-opening the bubble when
|
| + // clicking the location bar button repeatedly).
|
| + content::RunAllPendingInMessageLoop();
|
|
|
| // And, just for grins, ensure that we can re-open the bubble.
|
| ExecuteManagePasswordsCommand();
|
| @@ -166,6 +192,11 @@ IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest,
|
| SetupPendingPassword();
|
| EXPECT_TRUE(IsBubbleShowing());
|
| ManagePasswordsBubbleView::CloseCurrentBubble();
|
| + // Drain message pump to ensure the bubble view is cleared so that it can be
|
| + // created again (it is checked on Mac to prevent re-opening the bubble when
|
| + // clicking the location bar button repeatedly).
|
| + content::RunAllPendingInMessageLoop();
|
| +
|
| // This opening should be measured as manual.
|
| ExecuteManagePasswordsCommand();
|
| EXPECT_TRUE(IsBubbleShowing());
|
| @@ -317,24 +348,24 @@ IN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, AutoSigninNoFocus) {
|
| // Open another window with focus.
|
| Browser* focused_window = CreateBrowser(browser()->profile());
|
| ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(focused_window));
|
| - content::RunAllPendingInMessageLoop();
|
|
|
| - gfx::NativeWindow window = browser()->window()->GetNativeWindow();
|
| - views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
|
| - ASSERT_NE(nullptr, widget);
|
| -
|
| - views::test::WidgetActivationWaiter inactive_waiter(widget, false);
|
| - inactive_waiter.Wait();
|
| ManagePasswordsBubbleView::set_auto_signin_toast_timeout(0);
|
| SetupAutoSignin(std::move(local_credentials));
|
| - content::RunAllPendingInMessageLoop();
|
| EXPECT_TRUE(IsBubbleShowing());
|
|
|
| // Bring the first window back. The toast closes by timeout.
|
| focused_window->window()->Close();
|
| browser()->window()->Activate();
|
| content::RunAllPendingInMessageLoop();
|
| - views::test::WidgetActivationWaiter active_waiter(widget, true);
|
| - active_waiter.Wait();
|
| + ui_test_utils::BrowserActivationWaiter waiter(browser());
|
| + waiter.WaitForActivation();
|
| +
|
| +// Sign-in dialogs opened for inactive browser windows do not auto-close on
|
| +// MacOS. This matches existing Cocoa bubble behavior.
|
| +// TODO(varkha): Remove the limitation as part of http://crbug/671916 .
|
| +#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
|
| EXPECT_FALSE(IsBubbleShowing());
|
| +#else
|
| + EXPECT_TRUE(IsBubbleShowing());
|
| +#endif
|
| }
|
|
|