Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4122)

Unified Diff: chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc

Issue 869873008: [Extensions Toolbar] Move some popup logic to be platform-agnostic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Avi's Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
diff --git a/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc b/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
index a99e8605d74190d573b409fabf8b96b27e5dc4dd..04de2ffd0c66fda5131b864d6cf826a795a19e5c 100644
--- a/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
+++ b/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/ui/toolbar/browser_actions_bar_browsertest.h"
+#include "base/run_loop.h"
#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/browser_action_test_util.h"
#include "chrome/browser/extensions/extension_action.h"
@@ -13,11 +14,16 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_toolbar_model.h"
#include "chrome/browser/sessions/session_tab_helper.h"
+#include "chrome/browser/ui/extensions/extension_action_view_controller.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
#include "components/crx_file/id_util.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/test/test_utils.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/notification_types.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/value_builder.h"
@@ -329,3 +335,73 @@ IN_PROC_BROWSER_TEST_F(BrowserActionsBarRedesignBrowserTest,
toolbar_model()->SetVisibleIconCount(4);
EXPECT_FALSE(browser_actions_bar()->OverflowedActionButtonWantsToRun());
}
+
+IN_PROC_BROWSER_TEST_F(BrowserActionsBarBrowserTest, BrowserActionPopupTest) {
+ // Load up two extensions that have browser action popups.
+ base::FilePath data_dir =
+ test_data_dir_.AppendASCII("api_test").AppendASCII("browser_action");
+ const extensions::Extension* first_extension =
+ LoadExtension(data_dir.AppendASCII("open_popup"));
+ ASSERT_TRUE(first_extension);
+ const extensions::Extension* second_extension =
+ LoadExtension(data_dir.AppendASCII("remove_popup"));
+ ASSERT_TRUE(second_extension);
+
+ // Verify state: two actions, in the order of [first, second].
+ EXPECT_EQ(2, browser_actions_bar()->VisibleBrowserActions());
+ EXPECT_EQ(first_extension->id(), browser_actions_bar()->GetExtensionId(0));
+ EXPECT_EQ(second_extension->id(), browser_actions_bar()->GetExtensionId(1));
+
+ // Do a little piping to get at the underlying ExtensionActionViewControllers.
+ ToolbarActionsBar* toolbar_actions_bar =
+ browser_actions_bar()->GetToolbarActionsBar();
+ const std::vector<ToolbarActionViewController*>& toolbar_actions =
+ toolbar_actions_bar->toolbar_actions();
+ ASSERT_EQ(2u, toolbar_actions.size());
+ EXPECT_EQ(first_extension->id(), toolbar_actions[0]->GetId());
+ EXPECT_EQ(second_extension->id(), toolbar_actions[1]->GetId());
+ ExtensionActionViewController* first_controller =
+ static_cast<ExtensionActionViewController*>(toolbar_actions[0]);
+ ExtensionActionViewController* second_controller =
+ static_cast<ExtensionActionViewController*>(toolbar_actions[1]);
+
+ // Neither should yet be showing a popup.
+ EXPECT_FALSE(browser_actions_bar()->HasPopup());
+ EXPECT_FALSE(first_controller->is_showing_popup());
+ EXPECT_FALSE(second_controller->is_showing_popup());
+
+ // Click on the first extension's browser action. This should open a popup.
+ browser_actions_bar()->Press(0);
+ EXPECT_TRUE(browser_actions_bar()->HasPopup());
+ EXPECT_TRUE(first_controller->is_showing_popup());
+ EXPECT_FALSE(second_controller->is_showing_popup());
+
+ {
+ content::WindowedNotificationObserver observer(
+ extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
+ content::NotificationService::AllSources());
+ // Clicking on the second extension's browser action should open the
+ // second's popup. Since we only allow one extension popup at a time, this
+ // should also close the first popup.
+ browser_actions_bar()->Press(1);
+ // Closing an extension popup isn't always synchronous; wait for a
+ // notification.
+ observer.Wait();
+ EXPECT_TRUE(browser_actions_bar()->HasPopup());
+ EXPECT_FALSE(first_controller->is_showing_popup());
+ EXPECT_TRUE(second_controller->is_showing_popup());
+ }
+
+ {
+ // Clicking on the second extension's browser action a second time should
+ // result in closing the popup.
+ content::WindowedNotificationObserver observer(
+ extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
+ content::NotificationService::AllSources());
+ browser_actions_bar()->Press(1);
+ observer.Wait();
+ EXPECT_FALSE(browser_actions_bar()->HasPopup());
+ EXPECT_FALSE(first_controller->is_showing_popup());
+ EXPECT_FALSE(second_controller->is_showing_popup());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698