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

Unified Diff: ash/extended_desktop_unittest.cc

Issue 380343002: aura: Make sure redirected events have the correct location. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix-clang-build 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 | « no previous file | ui/aura/window_event_dispatcher_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/extended_desktop_unittest.cc
diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc
index eb8591d01a57f57da03fc685497694c844c750c7..c1ce9306d8b96f427eb98036ef429b2c8224aa22 100644
--- a/ash/extended_desktop_unittest.cc
+++ b/ash/extended_desktop_unittest.cc
@@ -117,6 +117,29 @@ class EventLocationRecordingEventHandler : public ui::EventHandler {
DISALLOW_COPY_AND_ASSIGN(EventLocationRecordingEventHandler);
};
+class EventLocationHandler : public ui::EventHandler {
+ public:
+ EventLocationHandler() {}
+ virtual ~EventLocationHandler() {}
+
+ const gfx::Point& press_location() const { return press_location_; }
+ const gfx::Point& release_location() const { return release_location_; }
+
+ private:
+ // ui::EventHandler:
+ virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE {
+ if (event->type() == ui::ET_MOUSE_PRESSED)
+ press_location_ = event->location();
+ else if (event->type() == ui::ET_MOUSE_RELEASED)
+ release_location_ = event->location();
+ }
+
+ gfx::Point press_location_;
+ gfx::Point release_location_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventLocationHandler);
+};
+
} // namespace
class ExtendedDesktopTest : public test::AshTestBase {
@@ -415,6 +438,115 @@ TEST_F(ExtendedDesktopTest, Capture) {
EXPECT_EQ("0 0", r1_d2.GetMouseButtonCountsAndReset());
}
+TEST_F(ExtendedDesktopTest, CaptureEventLocation) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("1000x600,600x400");
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+
+ aura::test::EventCountDelegate r1_d1;
+ aura::test::EventCountDelegate r1_d2;
+ aura::test::EventCountDelegate r2_d1;
+
+ scoped_ptr<aura::Window> r1_w1(aura::test::CreateTestWindowWithDelegate(
+ &r1_d1, 0, gfx::Rect(10, 10, 100, 100), root_windows[0]));
+ scoped_ptr<aura::Window> r1_w2(aura::test::CreateTestWindowWithDelegate(
+ &r1_d2, 0, gfx::Rect(10, 100, 100, 100), root_windows[0]));
+ scoped_ptr<aura::Window> r2_w1(aura::test::CreateTestWindowWithDelegate(
+ &r2_d1, 0, gfx::Rect(10, 10, 100, 100), root_windows[1]));
+
+ r1_w1->SetCapture();
+
+ aura::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseToCenterOf(r2_w1.get());
+ EXPECT_EQ(gfx::Point(1060, 60).ToString(),
+ generator.current_location().ToString());
+
+ EventLocationHandler location_handler;
+ r1_w1->AddPreTargetHandler(&location_handler);
+ generator.ClickLeftButton();
+ r1_w1->RemovePreTargetHandler(&location_handler);
+ EXPECT_EQ(gfx::Point(1050, 50).ToString(),
+ location_handler.press_location().ToString());
+ EXPECT_EQ(gfx::Point(1050, 50).ToString(),
+ location_handler.release_location().ToString());
+}
+
+TEST_F(ExtendedDesktopTest, CaptureEventLocationHighDPI) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("1000x600*2,600x400");
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+
+ aura::test::EventCountDelegate r1_d1;
+ aura::test::EventCountDelegate r1_d2;
+ aura::test::EventCountDelegate r2_d1;
+
+ scoped_ptr<aura::Window> r1_w1(aura::test::CreateTestWindowWithDelegate(
+ &r1_d1, 0, gfx::Rect(10, 10, 100, 100), root_windows[0]));
+ scoped_ptr<aura::Window> r1_w2(aura::test::CreateTestWindowWithDelegate(
+ &r1_d2, 0, gfx::Rect(10, 100, 100, 100), root_windows[0]));
+ scoped_ptr<aura::Window> r2_w1(aura::test::CreateTestWindowWithDelegate(
+ &r2_d1, 0, gfx::Rect(10, 10, 100, 100), root_windows[1]));
+
+ r1_w1->SetCapture();
+
+ aura::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseToCenterOf(r2_w1.get());
+ EXPECT_EQ(gfx::Point(560, 60).ToString(),
+ generator.current_location().ToString());
+
+ EventLocationHandler location_handler;
+ r1_w1->AddPreTargetHandler(&location_handler);
+ generator.ClickLeftButton();
+ r1_w1->RemovePreTargetHandler(&location_handler);
+ EXPECT_EQ(gfx::Point(550, 50).ToString(),
+ location_handler.press_location().ToString());
+ EXPECT_EQ(gfx::Point(550, 50).ToString(),
+ location_handler.release_location().ToString());
+}
+
+TEST_F(ExtendedDesktopTest, CaptureEventLocationHighDPI_2) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("1000x600,600x400*2");
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+
+ aura::test::EventCountDelegate r1_d1;
+ aura::test::EventCountDelegate r1_d2;
+ aura::test::EventCountDelegate r2_d1;
+
+ scoped_ptr<aura::Window> r1_w1(aura::test::CreateTestWindowWithDelegate(
+ &r1_d1, 0, gfx::Rect(10, 10, 100, 100), root_windows[0]));
+ scoped_ptr<aura::Window> r1_w2(aura::test::CreateTestWindowWithDelegate(
+ &r1_d2, 0, gfx::Rect(10, 100, 100, 100), root_windows[0]));
+ scoped_ptr<aura::Window> r2_w1(aura::test::CreateTestWindowWithDelegate(
+ &r2_d1, 0, gfx::Rect(10, 10, 100, 100), root_windows[1]));
+
+ r1_w1->SetCapture();
+
+ aura::test::EventGenerator& generator = GetEventGenerator();
+ generator.MoveMouseToCenterOf(r2_w1.get());
+ EXPECT_EQ(gfx::Point(1060, 60).ToString(),
+ generator.current_location().ToString());
+
+ EventLocationHandler location_handler;
+ r1_w1->AddPreTargetHandler(&location_handler);
+ generator.ClickLeftButton();
+ r1_w1->RemovePreTargetHandler(&location_handler);
+ // Event-generator dispatches the event in the primary root-window's coord
+ // space. Since the location is (1060, 60), it goes to the secondary
+ // root-window as (30, 30) since the secondary root-window has a device scale
+ // factor of 2.
+ EXPECT_EQ(gfx::Point(1020, 20).ToString(),
+ location_handler.press_location().ToString());
+ EXPECT_EQ(gfx::Point(1020, 20).ToString(),
+ location_handler.release_location().ToString());
+}
+
TEST_F(ExtendedDesktopTest, MoveWindow) {
if (!SupportsMultipleDisplays())
return;
« no previous file with comments | « no previous file | ui/aura/window_event_dispatcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698