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

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

Issue 1775133003: Moves EventDispatcher from Display to WindowManagerState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: todo Created 4 years, 9 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 | « components/mus/ws/display_manager_delegate.h ('k') | components/mus/ws/event_dispatcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/ws/display_unittest.cc
diff --git a/components/mus/ws/display_unittest.cc b/components/mus/ws/display_unittest.cc
index 128d3a97e44e00445030408a79009d1ebba32925..c9f06a19497fbab7299c67f1669c4cf552e0b774 100644
--- a/components/mus/ws/display_unittest.cc
+++ b/components/mus/ws/display_unittest.cc
@@ -24,6 +24,7 @@
#include "components/mus/ws/window_tree.h"
#include "components/mus/ws/window_tree_binding.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event.h"
#include "ui/gfx/geometry/rect.h"
namespace mus {
@@ -153,6 +154,93 @@ TEST_F(DisplayTest, Destruction) {
EXPECT_TRUE(connection_manager_delegate_.got_on_no_more_displays());
}
+TEST_F(DisplayTest, EventStateResetOnUserSwitch) {
+ connection_manager_delegate_.set_num_displays_to_create(1);
+
+ const UserId kTestId1 = "20";
+ const UserId kTestId2 = "201";
+ WindowManagerFactoryRegistryTestApi(
+ connection_manager_->window_manager_factory_registry())
+ .AddService(kTestId1, &test_window_manager_factory_);
+ WindowManagerFactoryRegistryTestApi(
+ connection_manager_->window_manager_factory_registry())
+ .AddService(kTestId2, &test_window_manager_factory_);
+
+ connection_manager_->user_id_tracker()->SetActiveUserId(kTestId1);
+
+ DisplayManager* display_manager = connection_manager_->display_manager();
+ ASSERT_EQ(1u, display_manager->displays().size());
+ Display* display = *display_manager->displays().begin();
+ WindowManagerState* active_wms = display->GetActiveWindowManagerState();
+ ASSERT_TRUE(active_wms);
+ EXPECT_EQ(kTestId1, active_wms->user_id());
+
+ static_cast<PlatformDisplayDelegate*>(display)->OnEvent(ui::PointerEvent(
+ ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(20, 25),
+ gfx::Point(20, 25), base::TimeDelta(),
+ ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON)));
+
+ EXPECT_TRUE(EventDispatcherTestApi(active_wms->event_dispatcher())
+ .AreAnyPointersDown());
+ EXPECT_EQ(gfx::Point(20, 25),
+ active_wms->event_dispatcher()->mouse_pointer_last_location());
+
+ // Switch the user. Should trigger resetting state in old event dispatcher
+ // and update state in new event dispatcher.
+ connection_manager_->user_id_tracker()->SetActiveUserId(kTestId2);
+ EXPECT_NE(active_wms, display->GetActiveWindowManagerState());
+ EXPECT_FALSE(EventDispatcherTestApi(active_wms->event_dispatcher())
+ .AreAnyPointersDown());
+ active_wms = display->GetActiveWindowManagerState();
+ EXPECT_EQ(kTestId2, active_wms->user_id());
+ EXPECT_EQ(gfx::Point(20, 25),
+ active_wms->event_dispatcher()->mouse_pointer_last_location());
+ EXPECT_FALSE(EventDispatcherTestApi(active_wms->event_dispatcher())
+ .AreAnyPointersDown());
+}
+
+// Verifies capture fails when wm is inactive and succeeds when wm is active.
+TEST_F(DisplayTest, SetCaptureFromWindowManager) {
+ connection_manager_delegate_.set_num_displays_to_create(1);
+ const UserId kTestId1 = "20";
+ const UserId kTestId2 = "201";
+ WindowManagerFactoryRegistryTestApi(
+ connection_manager_->window_manager_factory_registry())
+ .AddService(kTestId1, &test_window_manager_factory_);
+ WindowManagerFactoryRegistryTestApi(
+ connection_manager_->window_manager_factory_registry())
+ .AddService(kTestId2, &test_window_manager_factory_);
+ connection_manager_->user_id_tracker()->SetActiveUserId(kTestId1);
+ DisplayManager* display_manager = connection_manager_->display_manager();
+ ASSERT_EQ(1u, display_manager->displays().size());
+ Display* display = *display_manager->displays().begin();
+ WindowManagerState* wms_for_id2 =
+ display->GetWindowManagerStateForUser(kTestId2);
+ ASSERT_TRUE(wms_for_id2);
+ EXPECT_FALSE(wms_for_id2->IsActive());
+ ClientWindowId root_client_id;
+
+ // Create a child of the root that we can set capture on.
+ WindowTree* tree = wms_for_id2->tree();
+ const ServerWindow* root = *tree->roots().begin();
+ ASSERT_TRUE(tree->IsWindowKnown(root, &root_client_id));
+ ClientWindowId child_window_id(
+ WindowIdToTransportId(WindowId(tree->id(), 101)));
+ ASSERT_TRUE(tree->NewWindow(child_window_id, ServerWindow::Properties()));
+ ASSERT_TRUE(tree->SetWindowVisibility(child_window_id, true));
+ ASSERT_TRUE(tree->AddWindow(root_client_id, child_window_id));
+
+ WindowTreeTestApi(tree).EnableCapture();
+
+ // SetCapture() should fail for user id2 as it is inactive.
+ EXPECT_FALSE(tree->SetCapture(child_window_id));
+
+ // Make the second user active and verify capture works.
+ connection_manager_->user_id_tracker()->SetActiveUserId(kTestId2);
+ EXPECT_TRUE(wms_for_id2->IsActive());
+ EXPECT_TRUE(tree->SetCapture(child_window_id));
+}
+
} // namespace test
} // namespace ws
} // namespace mus
« no previous file with comments | « components/mus/ws/display_manager_delegate.h ('k') | components/mus/ws/event_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698