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

Unified Diff: chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc

Issue 399143004: Open the WrenchMenu on mouseover when dragging a browser action (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Win/Test Fix Created 6 years, 5 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
« no previous file with comments | « chrome/browser/ui/views/toolbar/toolbar_view.cc ('k') | chrome/browser/ui/views/toolbar/wrench_menu.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc b/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5e0a5b89877491549e0e9072bc1d95fd7d58d0a9
--- /dev/null
+++ b/chrome/browser/ui/views/toolbar/toolbar_view_interactive_uitest.cc
@@ -0,0 +1,157 @@
+// Copyright 2014 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 "base/run_loop.h"
+#include "chrome/browser/extensions/extension_browsertest.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/frame/test_with_browser_view.h"
+#include "chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.h"
+#include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
+#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
+#include "chrome/browser/ui/views/toolbar/wrench_toolbar_button.h"
+#include "chrome/test/base/interactive_test_utils.h"
+#include "extensions/common/feature_switch.h"
+
+// Borrowed from chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc,
+// since these are also disabled on Linux for drag and drop.
+// TODO(erg): Fix DND tests on linux_aura. crbug.com/163931
+#if defined(OS_LINUX) && defined(USE_AURA)
+#define MAYBE(x) DISABLED_##x
+#else
+#define MAYBE(x) x
+#endif
+
+class ToolbarViewInteractiveUITest : public ExtensionBrowserTest {
+ public:
+ ToolbarViewInteractiveUITest();
+ virtual ~ToolbarViewInteractiveUITest();
+
+ protected:
+ ToolbarView* toolbar_view() { return toolbar_view_; }
+ BrowserActionsContainer* browser_actions() { return browser_actions_; }
+
+ // Performs a drag-and-drop operation by moving the mouse to |start|, clicking
+ // the left button, moving the mouse to |end|, and releasing the left button.
+ // TestWhileInDragOperation() is called after the mouse has moved to |end|,
+ // but before the click is released.
+ void DoDragAndDrop(const gfx::Point& start, const gfx::Point& end);
+
+ // A function to perform testing actions while in the drag operation from
+ // DoDragAndDrop.
+ void TestWhileInDragOperation();
+
+ private:
+ // Finishes the drag-and-drop operation started in DoDragAndDrop().
+ void FinishDragAndDrop(const base::Closure& quit_closure);
+
+ // InProcessBrowserTest:
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
+ virtual void SetUpOnMainThread() OVERRIDE;
+
+ ToolbarView* toolbar_view_;
+
+ BrowserActionsContainer* browser_actions_;
+
+ // The drag-and-drop background thread.
+ scoped_ptr<base::Thread> dnd_thread_;
+
+ // Override the extensions-action-redesign switch.
+ scoped_ptr<extensions::FeatureSwitch::ScopedOverride> feature_override_;
+};
+
+ToolbarViewInteractiveUITest::ToolbarViewInteractiveUITest()
+ : toolbar_view_(NULL),
+ browser_actions_(NULL) {
+}
+
+ToolbarViewInteractiveUITest::~ToolbarViewInteractiveUITest() {
+}
+
+void ToolbarViewInteractiveUITest::DoDragAndDrop(const gfx::Point& start,
+ const gfx::Point& end) {
+ // Much of this function is modeled after methods in ViewEventTestBase (in
+ // particular, the |dnd_thread_|, but it's easier to move that here than try
+ // to make ViewEventTestBase play nice with a BrowserView (for the toolbar).
+ // TODO(devlin): In a perfect world, this would be factored better.
+
+ // Send the mouse to |start|, and click.
+ ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(start));
+ ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
+ ui_controls::LEFT, ui_controls::DOWN));
+
+ scoped_refptr<content::MessageLoopRunner> runner =
+ new content::MessageLoopRunner();
+
+ ui_controls::SendMouseMoveNotifyWhenDone(
+ end.x() + 10,
+ end.y(),
+ base::Bind(&ToolbarViewInteractiveUITest::FinishDragAndDrop,
+ base::Unretained(this),
+ runner->QuitClosure()));
+
+ // Also post a move task to the drag and drop thread.
+ if (!dnd_thread_.get()) {
+ dnd_thread_.reset(new base::Thread("mouse_move_thread"));
+ dnd_thread_->Start();
+ }
+
+ dnd_thread_->message_loop()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(&ui_controls::SendMouseMove),
+ end.x(),
+ end.y()),
+ base::TimeDelta::FromMilliseconds(200));
+ runner->Run();
+}
+
+void ToolbarViewInteractiveUITest::TestWhileInDragOperation() {
+ EXPECT_TRUE(toolbar_view()->IsWrenchMenuShowing());
+}
+
+void ToolbarViewInteractiveUITest::FinishDragAndDrop(
+ const base::Closure& quit_closure) {
+ dnd_thread_.reset();
+ TestWhileInDragOperation();
+ ui_controls::SendMouseEvents(ui_controls::LEFT, ui_controls::UP);
+ ui_controls::RunClosureAfterAllPendingUIEvents(
+ quit_closure);
+}
+
+void ToolbarViewInteractiveUITest::SetUpCommandLine(
+ base::CommandLine* command_line) {
+ ExtensionBrowserTest::SetUpCommandLine(command_line);
+ // We do this before the rest of the setup because it can affect how the views
+ // are constructed.
+ feature_override_.reset(new extensions::FeatureSwitch::ScopedOverride(
+ extensions::FeatureSwitch::extension_action_redesign(), true));
+}
+
+void ToolbarViewInteractiveUITest::SetUpOnMainThread() {
+ ExtensionBrowserTest::SetUpOnMainThread();
+
+ toolbar_view_ = BrowserView::GetBrowserViewForBrowser(browser())->toolbar();
+ browser_actions_ = toolbar_view_->browser_actions();
+}
+
+IN_PROC_BROWSER_TEST_F(ToolbarViewInteractiveUITest,
+ MAYBE(TestWrenchMenuOpensOnDrag)) {
+ WrenchToolbarButton::g_open_wrench_immediately_for_testing = true;
+
+ // Load an extension that has a browser action.
+ ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("api_test")
+ .AppendASCII("browser_action")
+ .AppendASCII("basics")));
+ ASSERT_EQ(1u, browser_actions()->VisibleBrowserActions());
+
+ BrowserActionView* view = browser_actions()->GetBrowserActionViewAt(0);
+ ASSERT_TRUE(view);
+
+ gfx::Point browser_action_view_loc = test::GetCenterInScreenCoordinates(view);
+ gfx::Point wrench_button_loc =
+ test::GetCenterInScreenCoordinates(toolbar_view()->app_menu());
+
+ // Perform a drag and drop from the browser action view to the wrench button,
+ // which should open the wrench menu.
+ DoDragAndDrop(browser_action_view_loc, wrench_button_loc);
+}
« no previous file with comments | « chrome/browser/ui/views/toolbar/toolbar_view.cc ('k') | chrome/browser/ui/views/toolbar/wrench_menu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698