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

Unified Diff: ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc

Issue 222203006: Prevents double-clicks on a tab close button from aslo maximizing the browser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address bug in toplevel_window_event_handler Created 6 years, 8 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: ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc b/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
index d0c0a8631c7c6dc6fa50dd90671a5881725ce74a..ed7b485e5c06d88ff0e6188c25fc561ba2979504 100644
--- a/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
+++ b/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
@@ -8,9 +8,12 @@
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/aura/client/aura_constants.cc"
+#include "ui/aura/test/event_generator.h"
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/aura/window_tree_host.h"
+#include "ui/base/hit_test.h"
#include "ui/base/x/x11_util.h"
#include "ui/events/platform/platform_event_dispatcher.h"
#include "ui/events/platform/platform_event_source.h"
@@ -21,6 +24,34 @@
#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
+namespace {
+
+// Class which allows for the designation of non-client component targets of
+// hit tests.
+class TestDesktopNativeWidgetAura : public views::DesktopNativeWidgetAura {
+ public:
+ explicit TestDesktopNativeWidgetAura(
+ views::internal::NativeWidgetDelegate* delegate)
+ : views::DesktopNativeWidgetAura(delegate) {}
+ virtual ~TestDesktopNativeWidgetAura() {}
+
+ void set_window_component(int window_component) {
+ window_component_ = window_component;
+ }
+
+ // DesktopNativeWidgetAura:
+ virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
+ return window_component_;
+ }
+
+ private:
+ int window_component_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestDesktopNativeWidgetAura);
+};
+
+} // namespace
+
namespace views {
const int64 kFirstDisplay = 5321829;
@@ -125,12 +156,18 @@ class DesktopScreenX11Test : public views::ViewsTestBase,
removed_display_.clear();
}
- Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds) {
+ Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds,
+ bool use_test_native_widget) {
Widget* toplevel = new Widget;
Widget::InitParams toplevel_params =
CreateParams(Widget::InitParams::TYPE_WINDOW);
- toplevel_params.native_widget =
- new views::DesktopNativeWidgetAura(toplevel);
+ if (use_test_native_widget) {
+ toplevel_params.native_widget =
+ new TestDesktopNativeWidgetAura(toplevel);
+ } else {
+ toplevel_params.native_widget =
+ new views::DesktopNativeWidgetAura(toplevel);
+ }
toplevel_params.bounds = bounds;
toplevel_params.remove_standard_frame = true;
toplevel->Init(toplevel_params);
@@ -275,10 +312,12 @@ TEST_F(DesktopScreenX11Test, GetPrimaryDisplay) {
}
TEST_F(DesktopScreenX11Test, GetWindowAtScreenPoint) {
- Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(110, 110, 10, 10));
- Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(150, 150, 10, 10));
+ Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(110, 110, 10, 10),
+ false);
+ Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(150, 150, 10, 10),
+ false);
Widget* window_three =
- BuildTopLevelDesktopWidget(gfx::Rect(115, 115, 20, 20));
+ BuildTopLevelDesktopWidget(gfx::Rect(115, 115, 20, 20), false);
window_three->Show();
window_two->Show();
@@ -317,8 +356,10 @@ TEST_F(DesktopScreenX11Test, GetDisplayNearestWindow) {
gfx::Rect(640, 0, 1024, 768)));
screen()->ProcessDisplayChange(displays);
- Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(10, 10, 10, 10));
- Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(650, 50, 10, 10));
+ Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(10, 10, 10, 10),
+ false);
+ Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(650, 50, 10, 10),
+ false);
EXPECT_EQ(
kFirstDisplay,
@@ -331,4 +372,87 @@ TEST_F(DesktopScreenX11Test, GetDisplayNearestWindow) {
window_two->CloseNow();
}
+// Tests that the window is maximized in response to a double click event.
+TEST_F(DesktopScreenX11Test, DoubleClickHeaderMaximizes) {
+ Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
+ widget->Show();
+ TestDesktopNativeWidgetAura* native_widget =
+ static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
+ native_widget->set_window_component(HTCAPTION);
+
+ aura::Window* window = widget->GetNativeWindow();
+ window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+ // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
+ DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
sadrul 2014/04/10 20:49:59 You shouldn't need the static_cast<>
jonross 2014/04/11 16:46:41 Done.
+ DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
+ GetAcceleratedWidget()));
+
+ aura::test::EventGenerator generator(window);
+ generator.ClickLeftButton();
+ generator.DoubleClickLeftButton();
+ RunPendingMessages();
+ EXPECT_TRUE(rwh->IsMaximized());
+
+ widget->CloseNow();
+}
+
+// Tests that the window does not maximize in response to a double click event,
+// if the first click was to a different target component than that of the
+// second click.
+TEST_F(DesktopScreenX11Test, DoubleClickTwoDifferentTargetsDoesntMaximizes) {
+ Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
+ widget->Show();
+ TestDesktopNativeWidgetAura* native_widget =
+ static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
+
+ aura::Window* window = widget->GetNativeWindow();
+ window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+ // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
+ DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
sadrul 2014/04/10 20:49:59 ditto
jonross 2014/04/11 16:46:41 Done.
+ DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
+ GetAcceleratedWidget()));
+
+ aura::test::EventGenerator generator(window);
+ native_widget->set_window_component(HTCLIENT);
sadrul 2014/04/10 20:49:59 Would a test with both components being non-CLIENT
jonross 2014/04/11 16:46:41 The behaviour being tested for should not depend o
+ generator.ClickLeftButton();
+ native_widget->set_window_component(HTCAPTION);
+ generator.DoubleClickLeftButton();
+ RunPendingMessages();
+ EXPECT_FALSE(rwh->IsMaximized());
+
+ widget->CloseNow();
+}
+
+// Tests that the window does not maximize in response to a double click event,
+// if the double click was interrupted by a right click.
+TEST_F(DesktopScreenX11Test, RightClickDuringDoubleClickDoesntMaximize) {
+ Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
+ widget->Show();
+ TestDesktopNativeWidgetAura* native_widget =
+ static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
+
+ aura::Window* window = widget->GetNativeWindow();
+ window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+ // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
+ DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
+ DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
+ GetAcceleratedWidget()));
+
+ aura::test::EventGenerator generator(window);
+ native_widget->set_window_component(HTCLIENT);
+ generator.ClickLeftButton();
+ native_widget->set_window_component(HTCAPTION);
+ generator.PressRightButton();
+ generator.ReleaseRightButton();
+ EXPECT_FALSE(rwh->IsMaximized());
+ generator.DoubleClickLeftButton();
+ RunPendingMessages();
+ EXPECT_FALSE(rwh->IsMaximized());
+
+ widget->CloseNow();
+}
+
} // namespace views

Powered by Google App Engine
This is Rietveld 408576698