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

Unified Diff: components/mus/ws/window_tree_unittest.cc

Issue 1677513002: mus Window Server: implement event capture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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: components/mus/ws/window_tree_unittest.cc
diff --git a/components/mus/ws/window_tree_unittest.cc b/components/mus/ws/window_tree_unittest.cc
index 351154dd4098ff78dfd0fde465d021beafc4aaf5..8eea4521d5a231ac4c1a5a58828a10707c275897 100644
--- a/components/mus/ws/window_tree_unittest.cc
+++ b/components/mus/ws/window_tree_unittest.cc
@@ -133,6 +133,7 @@ class TestWindowTreeClient : public mus::mojom::WindowTreeClient {
tracker_.OnEmbeddedAppDisconnected(window);
}
void OnUnembed(Id window_id) override { tracker_.OnUnembed(window_id); }
+ void OnLostCapture(Id window_id) override {}
void OnTopLevelCreated(uint32_t change_id,
mojom::WindowDataPtr data) override {
tracker_.OnTopLevelCreated(change_id, std::move(data));
@@ -323,6 +324,8 @@ class TestDisplayManager : public DisplayManager {
const gfx::Rect& bounds) override {}
void SetViewportSize(const gfx::Size& size) override {}
void SetTitle(const base::string16& title) override {}
+ void SetCapture() override {}
+ void ReleaseCapture() override {}
void SetCursorById(int32_t cursor) override { *cursor_id_storage_ = cursor; }
mojom::Rotation GetRotation() override { return mojom::Rotation::VALUE_0; }
const mojom::ViewportMetrics& GetViewportMetrics() override {
@@ -898,5 +901,50 @@ TEST_F(WindowTreeTest, NewTopLevelWindow) {
EXPECT_FALSE(embed_window->visible());
}
+// Tests that setting capture only works while an input event is being
+// processed, and the only the capture window can release capture.
+TEST_F(WindowTreeTest, ExplicitSetCapture) {
+ TestWindowTreeClient* embed_connection = nullptr;
+ WindowTreeImpl* window_tree_connection = nullptr;
+ ServerWindow* window = nullptr;
+ EXPECT_NO_FATAL_FAILURE(
+ SetupEventTargeting(&embed_connection, &window_tree_connection, &window));
+ const ServerWindow* root_window = *window_tree_connection->roots().begin();
+ window_tree_connection->AddWindow(
+ FirstRootId(window_tree_connection),
+ ClientWindowIdForWindow(window_tree_connection, window));
+ window->SetBounds(gfx::Rect(0, 0, 100, 100));
+ ASSERT_TRUE(window_tree_connection->GetHost(window));
+
+ // Setting capture should fail when there are no active events
+ mojom::WindowTree* mojom_window_tree =
+ static_cast<mojom::WindowTree*>(window_tree_connection);
+ uint32_t change_id = 42;
+ mojom_window_tree->SetCapture(change_id, WindowIdToTransportId(window->id()));
+ WindowTreeHostImpl* host = window_tree_connection->GetHost(window);
+ EXPECT_NE(window, host->GetCaptureWindow());
+
+ // Setting capture after the event is acknowledged should fail
+ DispatchEventAndAckImmediately(CreatePointerDownEvent(10, 10));
+ mojom_window_tree->SetCapture(++change_id,
+ WindowIdToTransportId(window->id()));
+ EXPECT_NE(window, host->GetCaptureWindow());
+
+ // Settings while the event is being process should pass
+ DispatchEventWithoutAck(CreatePointerDownEvent(10, 10));
+ mojom_window_tree->SetCapture(++change_id,
+ WindowIdToTransportId(window->id()));
+ EXPECT_EQ(window, host->GetCaptureWindow());
+ AckPreviousEvent();
+
+ // Only the capture window should be able to release capture
+ mojom_window_tree->ReleaseCapture(++change_id,
+ WindowIdToTransportId(root_window->id()));
+ EXPECT_EQ(window, host->GetCaptureWindow());
+ mojom_window_tree->ReleaseCapture(++change_id,
+ WindowIdToTransportId(window->id()));
+ EXPECT_EQ(nullptr, host->GetCaptureWindow());
+}
+
} // namespace ws
} // namespace mus
« components/mus/ws/window_tree_host_impl.cc ('K') | « components/mus/ws/window_tree_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698