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

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

Issue 1639223003: Makes it so each windowtreeclient can use whatever ids it wants (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 4 years, 11 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/window_finder.cc ('k') | components/mus/ws/window_tree_host_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/ws/window_tree_apptest.cc
diff --git a/components/mus/ws/window_tree_apptest.cc b/components/mus/ws/window_tree_apptest.cc
index 340aa41549f7dd71b8cf04f3ae1439fe4fa4546c..c28fb33e7b53c057ab9f43a915efed2ee34d6d79 100644
--- a/components/mus/ws/window_tree_apptest.cc
+++ b/components/mus/ws/window_tree_apptest.cc
@@ -129,7 +129,8 @@ class TestWindowTreeClientImpl : public mojom::WindowTreeClient,
// want.
next_change_id_(10000),
waiting_change_id_(0),
- on_change_completed_result_(false) {
+ on_change_completed_result_(false),
+ track_root_bounds_changes_(false) {
tracker_.set_delegate(this);
}
@@ -139,6 +140,14 @@ class TestWindowTreeClientImpl : public mojom::WindowTreeClient,
mojom::WindowTree* tree() { return tree_.get(); }
TestChangeTracker* tracker() { return &tracker_; }
+ Id root_window_id() const { return root_window_id_; }
+
+ // Sets whether changes to the bounds of the root should be tracked. Normally
+ // they are ignored (as during startup we often times get random size
+ // changes).
+ void set_track_root_bounds_changes(bool value) {
+ track_root_bounds_changes_ = value;
+ }
// Runs a nested MessageLoop until |count| changes (calls to
// WindowTreeClient functions) have been received.
@@ -222,8 +231,6 @@ class TestWindowTreeClientImpl : public mojom::WindowTreeClient,
return WaitForChangeCompleted(change_id) ? id : 0;
}
- void set_root_window(Id root_window_id) { root_window_id_ = root_window_id; }
-
bool SetWindowProperty(Id window_id,
const std::string& name,
const std::vector<uint8_t>* data) {
@@ -272,6 +279,8 @@ class TestWindowTreeClientImpl : public mojom::WindowTreeClient,
Id focused_window_id,
uint32_t access_policy) override {
// TODO(sky): add coverage of |focused_window_id|.
+ ASSERT_TRUE(root);
+ root_window_id_ = root->window_id;
tree_ = std::move(tree);
connection_id_ = connection_id;
tracker()->OnEmbed(connection_id, std::move(root));
@@ -292,7 +301,7 @@ class TestWindowTreeClientImpl : public mojom::WindowTreeClient,
// The bounds of the root may change during startup on Android at random
// times. As this doesn't matter, and shouldn't impact test exepctations,
// it is ignored.
- if (window_id == root_window_id_)
+ if (window_id == root_window_id_ && !track_root_bounds_changes_)
return;
tracker()->OnWindowBoundsChanged(window_id, std::move(old_bounds),
std::move(new_bounds));
@@ -381,6 +390,7 @@ class TestWindowTreeClientImpl : public mojom::WindowTreeClient,
uint32_t next_change_id_;
uint32_t waiting_change_id_;
bool on_change_completed_result_;
+ bool track_root_bounds_changes_;
scoped_ptr<base::RunLoop> change_completed_run_loop_;
DISALLOW_COPY_AND_ASSIGN(TestWindowTreeClientImpl);
@@ -458,7 +468,6 @@ class WindowTreeAppTest : public mojo::test::ApplicationTestBase,
EstablishConnectionViaEmbed(ws1(), root_id, &connection_id_2_);
ASSERT_GT(connection_id_2_, 0);
ASSERT_TRUE(ws_client2_.get() != nullptr);
- ws_client2_->set_root_window(root_window_id_);
}
void EstablishSecondConnection(bool create_initial_window) {
@@ -480,7 +489,6 @@ class WindowTreeAppTest : public mojo::test::ApplicationTestBase,
ASSERT_TRUE(ws_client3_.get() == nullptr);
ws_client3_ = EstablishConnectionViaEmbed(owner, root_id, nullptr);
ASSERT_TRUE(ws_client3_.get() != nullptr);
- ws_client3_->set_root_window(root_window_id_);
}
scoped_ptr<TestWindowTreeClientImpl> WaitForWindowTreeClient() {
@@ -551,7 +559,7 @@ class WindowTreeAppTest : public mojo::test::ApplicationTestBase,
connection_id_1_ = (*changes1())[0].connection_id;
ASSERT_FALSE((*changes1())[0].windows.empty());
root_window_id_ = (*changes1())[0].windows[0].window_id;
- ws_client1_->set_root_window(root_window_id_);
+ ASSERT_EQ(root_window_id_, ws_client1_->root_window_id());
changes1()->clear();
}
@@ -649,8 +657,7 @@ TEST_F(WindowTreeAppTest, WindowsRemovedWhenEmbedding) {
{
std::vector<TestWindow> windows;
GetWindowTree(ws3(), window_2_3, &windows);
- EXPECT_EQ(WindowParentToString(window_2_3, kNullParentId),
- SingleWindowDescription(windows));
+ EXPECT_EQ("no windows", SingleWindowDescription(windows));
}
}
@@ -668,7 +675,8 @@ TEST_F(WindowTreeAppTest, CantAccessChildrenOfEmbeddedWindow) {
Id window_3_3 = ws_client3()->NewWindow(3);
ASSERT_TRUE(window_3_3);
- ASSERT_TRUE(ws_client3()->AddWindow(window_2_2, window_3_3));
+ ASSERT_TRUE(
+ ws_client3()->AddWindow(ws_client3()->root_window_id(), window_3_3));
// Even though 3 is a child of 2 connection 2 can't see 3 as it's from a
// different connection.
@@ -693,10 +701,13 @@ TEST_F(WindowTreeAppTest, CantAccessChildrenOfEmbeddedWindow) {
ASSERT_EQ(3u, windows.size());
EXPECT_EQ(WindowParentToString(window_1_1, kNullParentId),
windows[0].ToString());
- EXPECT_EQ(WindowParentToString(window_2_2, window_1_1),
- windows[1].ToString());
- EXPECT_EQ(WindowParentToString(window_3_3, window_2_2),
- windows[2].ToString());
+ // NOTE: we expect a match of WindowParentToString(window_2_2, window_1_1),
+ // but the ids are in the id space of client2, which is not the same as
+ // the id space of ws1().
+ EXPECT_EQ("window=2,1 parent=1,1", windows[1].ToString());
+ // Same thing here, we really want to test for
+ // WindowParentToString(window_3_3, window_2_2).
+ EXPECT_EQ("window=3,1 parent=2,1", windows[2].ToString());
}
}
@@ -705,24 +716,24 @@ TEST_F(WindowTreeAppTest, CantModifyChildrenOfEmbeddedWindow) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- Id window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
- ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_2));
+ ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_1));
- Id window_2_3 = ws_client2()->NewWindow(3);
- ASSERT_TRUE(window_2_3);
+ Id window_2_2 = ws_client2()->NewWindow(2);
+ ASSERT_TRUE(window_2_2);
// Connection 2 shouldn't be able to add anything to the window anymore.
- ASSERT_FALSE(ws_client2()->AddWindow(window_2_2, window_2_3));
+ ASSERT_FALSE(ws_client2()->AddWindow(window_2_1, window_2_2));
// Create window 3 in connection 3 and add it to window 3.
- Id window_3_3 = ws_client3()->NewWindow(3);
- ASSERT_TRUE(window_3_3);
- ASSERT_TRUE(ws_client3()->AddWindow(window_2_2, window_3_3));
+ Id window_3_1 = ws_client3()->NewWindow(1);
+ ASSERT_TRUE(window_3_1);
+ ASSERT_TRUE(ws_client3()->AddWindow(window_2_1, window_3_1));
// Connection 2 shouldn't be able to remove window 3.
- ASSERT_FALSE(ws_client2()->RemoveWindowFromParent(window_3_3));
+ ASSERT_FALSE(ws_client2()->RemoveWindowFromParent(window_3_1));
}
// Verifies client gets a valid id.
@@ -743,12 +754,14 @@ TEST_F(WindowTreeAppTest, NewWindow) {
// Verifies AddWindow fails when window is already in position.
TEST_F(WindowTreeAppTest, AddWindowWithNoChange) {
+ // Create the embed point now so that the ids line up.
+ ASSERT_TRUE(ws_client1()->NewWindow(1));
Id window_1_2 = ws_client1()->NewWindow(2);
Id window_1_3 = ws_client1()->NewWindow(3);
ASSERT_TRUE(window_1_2);
ASSERT_TRUE(window_1_3);
- ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
// Make 3 a child of 2.
ASSERT_TRUE(ws_client1()->AddWindow(window_1_2, window_1_3));
@@ -759,12 +772,14 @@ TEST_F(WindowTreeAppTest, AddWindowWithNoChange) {
// Verifies AddWindow fails when window is already in position.
TEST_F(WindowTreeAppTest, AddAncestorFails) {
+ // Create the embed point now so that the ids line up.
+ ASSERT_TRUE(ws_client1()->NewWindow(1));
Id window_1_2 = ws_client1()->NewWindow(2);
Id window_1_3 = ws_client1()->NewWindow(3);
ASSERT_TRUE(window_1_2);
ASSERT_TRUE(window_1_3);
- ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
// Make 3 a child of 2.
ASSERT_TRUE(ws_client1()->AddWindow(window_1_2, window_1_3));
@@ -775,13 +790,15 @@ TEST_F(WindowTreeAppTest, AddAncestorFails) {
// Verifies adding to root sends right notifications.
TEST_F(WindowTreeAppTest, AddToRoot) {
+ // Create the embed point now so that the ids line up.
+ Id window_1_1 = ws_client1()->NewWindow(1);
+ ASSERT_TRUE(window_1_1);
Id window_1_21 = ws_client1()->NewWindow(21);
Id window_1_3 = ws_client1()->NewWindow(3);
ASSERT_TRUE(window_1_21);
ASSERT_TRUE(window_1_3);
- Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
changes2()->clear();
// Make 3 a child of 21.
@@ -799,6 +816,8 @@ TEST_F(WindowTreeAppTest, AddToRoot) {
// Verifies HierarchyChanged is correctly sent for various adds/removes.
TEST_F(WindowTreeAppTest, WindowHierarchyChangedWindows) {
+ // Create the embed point now so that the ids line up.
+ Id window_1_1 = ws_client1()->NewWindow(1);
// 1,2->1,11.
Id window_1_2 = ws_client1()->NewWindow(2);
ASSERT_TRUE(window_1_2);
@@ -808,8 +827,7 @@ TEST_F(WindowTreeAppTest, WindowHierarchyChangedWindows) {
ASSERT_TRUE(ws_client1()->SetWindowVisibility(window_1_11, true));
ASSERT_TRUE(ws_client1()->AddWindow(window_1_2, window_1_11));
- Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
ASSERT_TRUE(ws_client1()->SetWindowVisibility(window_1_1, true));
ASSERT_TRUE(ws_client2()->WaitForAllMessages());
@@ -892,8 +910,10 @@ TEST_F(WindowTreeAppTest, WindowHierarchyChangedAddingKnownToUnknown) {
ASSERT_TRUE(ws_client2()->RemoveWindowFromParent(window_2_11));
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_11) +
- " new_parent=null old_parent=" + IdToString(window_1_1),
+ // 2,1 should be IdToString(window_2_11), but window_2_11 is in the id
+ // space of client2, not client1.
+ EXPECT_EQ("HierarchyChanged window=2,1 new_parent=null old_parent=" +
+ IdToString(window_1_1),
SingleChangeToDescription(*changes1()));
}
@@ -905,8 +925,11 @@ TEST_F(WindowTreeAppTest, WindowHierarchyChangedAddingKnownToUnknown) {
EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_2) +
" new_parent=" + IdToString(window_1_1) + " old_parent=null",
SingleChangeToDescription(*changes1()));
- EXPECT_EQ("[" + WindowParentToString(window_2_2, window_1_1) + "],[" +
- WindowParentToString(window_2_21, window_2_2) + "]",
+ // "window=2,3 parent=2,2]" should be,
+ // WindowParentToString(window_2_21, window_2_2), but isn't because of
+ // differing id spaces.
+ EXPECT_EQ("[" + WindowParentToString(window_2_2, window_1_1) +
+ "],[window=2,3 parent=2,2]",
ChangeWindowDescription(*changes1()));
}
}
@@ -936,7 +959,8 @@ TEST_F(WindowTreeAppTest, ReorderWindow) {
ASSERT_TRUE(ws_client2()->AddWindow(window_2_1, window_2_3));
ASSERT_TRUE(ws_client1()->AddWindow(root_window_id(), window_1_4));
ASSERT_TRUE(ws_client1()->AddWindow(root_window_id(), window_1_5));
- ASSERT_TRUE(ws_client1()->AddWindow(root_window_id(), window_2_1));
+ ASSERT_TRUE(
+ ws_client2()->AddWindow(BuildWindowId(connection_id_1(), 1), window_2_1));
{
changes1()->clear();
@@ -986,15 +1010,15 @@ TEST_F(WindowTreeAppTest, ReorderWindow) {
TEST_F(WindowTreeAppTest, DeleteWindow) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- Id window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
// Make 2 a child of 1.
{
changes1()->clear();
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_2) +
+ EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_1) +
" new_parent=" + IdToString(window_1_1) + " old_parent=null",
SingleChangeToDescription(*changes1()));
}
@@ -1003,11 +1027,11 @@ TEST_F(WindowTreeAppTest, DeleteWindow) {
{
changes1()->clear();
changes2()->clear();
- ASSERT_TRUE(ws_client2()->DeleteWindow(window_2_2));
+ ASSERT_TRUE(ws_client2()->DeleteWindow(window_2_1));
EXPECT_TRUE(changes2()->empty());
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_2),
+ EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_1),
SingleChangeToDescription(*changes1()));
}
}
@@ -1023,43 +1047,43 @@ TEST_F(WindowTreeAppTest, DeleteWindowFromAnotherConnectionDisallowed) {
TEST_F(WindowTreeAppTest, ReuseDeletedWindowId) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- Id window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
// Add 2 to 1.
{
changes1()->clear();
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_2) +
+ EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_1) +
" new_parent=" + IdToString(window_1_1) + " old_parent=null",
SingleChangeToDescription(*changes1()));
- EXPECT_EQ("[" + WindowParentToString(window_2_2, window_1_1) + "]",
+ EXPECT_EQ("[" + WindowParentToString(window_2_1, window_1_1) + "]",
ChangeWindowDescription(*changes1()));
}
// Delete 2.
{
changes1()->clear();
- ASSERT_TRUE(ws_client2()->DeleteWindow(window_2_2));
+ ASSERT_TRUE(ws_client2()->DeleteWindow(window_2_1));
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_2),
+ EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_1),
SingleChangeToDescription(*changes1()));
}
// Create 2 again, and add it back to 1. Should get the same notification.
- window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
+ window_2_1 = ws_client2()->NewWindow(2);
+ ASSERT_TRUE(window_2_1);
{
changes1()->clear();
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_2) +
+ EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_1) +
" new_parent=" + IdToString(window_1_1) + " old_parent=null",
SingleChangeToDescription(*changes1()));
- EXPECT_EQ("[" + WindowParentToString(window_2_2, window_1_1) + "]",
+ EXPECT_EQ("[" + WindowParentToString(window_2_1, window_1_1) + "]",
ChangeWindowDescription(*changes1()));
}
}
@@ -1076,12 +1100,12 @@ TEST_F(WindowTreeAppTest, GetWindowTree) {
ASSERT_TRUE(ws_client1()->AddWindow(window_1_1, window_1_11));
// Create two windows in second connection, 2 and 3, both children of 1.
+ Id window_2_1 = ws_client2()->NewWindow(1);
Id window_2_2 = ws_client2()->NewWindow(2);
- Id window_2_3 = ws_client2()->NewWindow(3);
+ ASSERT_TRUE(window_2_1);
ASSERT_TRUE(window_2_2);
- ASSERT_TRUE(window_2_3);
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_3));
// Verifies GetWindowTree() on the root. The root connection sees all.
{
@@ -1094,9 +1118,9 @@ TEST_F(WindowTreeAppTest, GetWindowTree) {
windows[1].ToString());
EXPECT_EQ(WindowParentToString(window_1_11, window_1_1),
windows[2].ToString());
- EXPECT_EQ(WindowParentToString(window_2_2, window_1_1),
+ EXPECT_EQ(WindowParentToString(window_2_1, window_1_1),
windows[3].ToString());
- EXPECT_EQ(WindowParentToString(window_2_3, window_1_1),
+ EXPECT_EQ(WindowParentToString(window_2_2, window_1_1),
windows[4].ToString());
}
@@ -1109,9 +1133,9 @@ TEST_F(WindowTreeAppTest, GetWindowTree) {
ASSERT_EQ(3u, windows.size());
EXPECT_EQ(WindowParentToString(window_1_1, kNullParentId),
windows[0].ToString());
- EXPECT_EQ(WindowParentToString(window_2_2, window_1_1),
+ EXPECT_EQ(WindowParentToString(window_2_1, window_1_1),
windows[1].ToString());
- EXPECT_EQ(WindowParentToString(window_2_3, window_1_1),
+ EXPECT_EQ(WindowParentToString(window_2_2, window_1_1),
windows[2].ToString());
}
@@ -1132,6 +1156,8 @@ TEST_F(WindowTreeAppTest, SetWindowBounds) {
changes2()->clear();
+ ws_client2_->set_track_root_bounds_changes(true);
+
ws1()->SetWindowBounds(10, window_1_1,
mojo::Rect::From(gfx::Rect(0, 0, 100, 100)));
ASSERT_TRUE(ws_client1()->WaitForChangeCompleted(10));
@@ -1442,10 +1468,10 @@ TEST_F(WindowTreeAppTest, SetWindowVisibilityNotifications) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnectionWithRoot(window_1_2));
// Add 2,3 as a child of 1,2.
- Id window_2_3 = ws_client2()->NewWindow(3);
- ASSERT_TRUE(window_2_3);
- ASSERT_TRUE(ws_client2()->SetWindowVisibility(window_2_3, true));
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_2, window_2_3));
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
+ ASSERT_TRUE(ws_client2()->SetWindowVisibility(window_2_1, true));
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_2, window_2_1));
ASSERT_TRUE(ws_client1()->WaitForAllMessages());
changes2()->clear();
@@ -1490,11 +1516,11 @@ TEST_F(WindowTreeAppTest, SetWindowVisibilityNotifications) {
// Change visibility of 2,3, connection 1 should see this.
changes1()->clear();
- ASSERT_TRUE(ws_client2()->SetWindowVisibility(window_2_3, false));
+ ASSERT_TRUE(ws_client2()->SetWindowVisibility(window_2_1, false));
{
ws_client1_->WaitForChangeCount(1);
EXPECT_EQ(
- "VisibilityChanged window=" + IdToString(window_2_3) + " visible=false",
+ "VisibilityChanged window=" + IdToString(window_2_1) + " visible=false",
SingleChangeToDescription(*changes1()));
}
@@ -1571,13 +1597,13 @@ TEST_F(WindowTreeAppTest, OnEmbeddedAppDisconnected) {
// Create connection 2 and 3.
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- Id window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
changes2()->clear();
- ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_2));
+ ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_1));
- // Connection 1 should get a hierarchy change for window_2_2.
+ // Connection 1 should get a hierarchy change for window_2_1.
ws_client1_->WaitForChangeCount(1);
changes1()->clear();
@@ -1585,11 +1611,11 @@ TEST_F(WindowTreeAppTest, OnEmbeddedAppDisconnected) {
// be notified of this.
ws_client3_.reset();
ws_client2_->WaitForChangeCount(1);
- EXPECT_EQ("OnEmbeddedAppDisconnected window=" + IdToString(window_2_2),
+ EXPECT_EQ("OnEmbeddedAppDisconnected window=" + IdToString(window_2_1),
SingleChangeToDescription(*changes2()));
ws_client1_->WaitForChangeCount(1);
- EXPECT_EQ("OnEmbeddedAppDisconnected window=" + IdToString(window_2_2),
+ EXPECT_EQ("OnEmbeddedAppDisconnected window=" + IdToString(window_2_1),
SingleChangeToDescription(*changes1()));
}
@@ -1600,20 +1626,20 @@ TEST_F(WindowTreeAppTest, OnParentOfEmbedDisconnects) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
ASSERT_TRUE(ws_client1()->AddWindow(root_window_id(), window_1_1));
+ Id window_2_1 = ws_client2()->NewWindow(1);
Id window_2_2 = ws_client2()->NewWindow(2);
- Id window_2_3 = ws_client2()->NewWindow(3);
+ ASSERT_TRUE(window_2_1);
ASSERT_TRUE(window_2_2);
- ASSERT_TRUE(window_2_3);
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
- ASSERT_TRUE(ws_client2()->AddWindow(window_2_2, window_2_3));
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
+ ASSERT_TRUE(ws_client2()->AddWindow(window_2_1, window_2_2));
changes2()->clear();
- ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_3));
+ ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_2));
changes3()->clear();
// Close connection 2. Connection 3 should get a delete (for its root).
ws_client2_.reset();
ws_client3_->WaitForChangeCount(1);
- EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_3),
+ EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_2),
SingleChangeToDescription(*changes3()));
}
@@ -1651,14 +1677,14 @@ TEST_F(WindowTreeAppTest, EmbedFailsFromOtherConnection) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- Id window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
- ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_2));
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
+ ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws2(), window_2_1));
Id window_3_3 = ws_client3()->NewWindow(3);
ASSERT_TRUE(window_3_3);
- ASSERT_TRUE(ws_client3()->AddWindow(window_2_2, window_3_3));
+ ASSERT_TRUE(ws_client3()->AddWindow(window_2_1, window_3_3));
// 2 should not be able to embed in window_3_3 as window_3_3 was not created
// by
@@ -1672,14 +1698,14 @@ TEST_F(WindowTreeAppTest, EmbedFromOtherConnection) {
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
Id window_1_1 = BuildWindowId(connection_id_1(), 1);
- Id window_2_2 = ws_client2()->NewWindow(2);
- ASSERT_TRUE(window_2_2);
- ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_2));
+ Id window_2_1 = ws_client2()->NewWindow(1);
+ ASSERT_TRUE(window_2_1);
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_1, window_2_1));
changes2()->clear();
- // Establish a third connection in window_2_2.
- ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws1(), window_2_2));
+ // Establish a third connection in window_2_1.
+ ASSERT_NO_FATAL_FAILURE(EstablishThirdConnection(ws1(), window_2_1));
ASSERT_TRUE(ws_client2()->WaitForAllMessages());
EXPECT_EQ(std::string(), SingleChangeToDescription(*changes2()));
@@ -1711,7 +1737,6 @@ TEST_F(WindowTreeAppTest, CantEmbedFromConnectionRoot) {
ws_client3_ = EstablishConnectionViaEmbedWithPolicyBitmask(
ws1(), window_1_2, mojom::WindowTree::kAccessPolicyEmbedRoot, nullptr);
ASSERT_TRUE(ws_client3_.get() != nullptr);
- ws_client3_->set_root_window(root_window_id());
// window_1_2 is ws3's root, so even though v3 is an embed root it should not
// be able to Embed into itself.
@@ -1765,6 +1790,50 @@ TEST_F(WindowTreeAppTest, TransientWindowTracksTransientParentLifetime) {
ChangesToDescription1(*changes1())[1]);
}
+TEST_F(WindowTreeAppTest, Ids) {
+ const Id window_1_100 = ws_client1()->NewWindow(100);
+ ASSERT_TRUE(window_1_100);
+ ASSERT_TRUE(ws_client1()->AddWindow(root_window_id(), window_1_100));
+
+ // Establish the second connection at 1,100.
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnectionWithRoot(window_1_100));
+
+ // 1,100 is the id in the ws_client1's id space. The new client should see
+ // 2,1 (the server id).
+ const Id window_1_100_in_ws2 = BuildWindowId(connection_id_1(), 1);
+ EXPECT_EQ(window_1_100_in_ws2, ws_client2()->root_window_id());
+
+ // The first window created in the second connection gets a server id of 2,1
+ // regardless of the id the client uses.
+ const Id window_2_101 = ws_client2()->NewWindow(101);
+ ASSERT_TRUE(ws_client2()->AddWindow(window_1_100_in_ws2, window_2_101));
+ const Id window_2_101_in_ws1 = BuildWindowId(connection_id_2(), 1);
+ ws_client1()->WaitForChangeCount(1);
+ EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_101_in_ws1) +
+ " new_parent=" + IdToString(window_1_100) + " old_parent=null",
+ SingleChangeToDescription(*changes1()));
+ changes1()->clear();
+
+ // Change the bounds of window_2_101 and make sure server gets it.
+ ws2()->SetWindowBounds(11, window_2_101,
+ mojo::Rect::From(gfx::Rect(1, 2, 3, 4)));
+ ASSERT_TRUE(ws_client2()->WaitForChangeCompleted(11));
+ ws_client1()->WaitForChangeCount(1);
+ EXPECT_EQ("BoundsChanged window=" + IdToString(window_2_101_in_ws1) +
+ " old_bounds=0,0 0x0 new_bounds=1,2 3x4",
+ SingleChangeToDescription(*changes1()));
+ changes2()->clear();
+
+ // Remove 2_101 from wm, client1 should see the change.
+ ws1()->RemoveWindowFromParent(12, window_2_101_in_ws1);
+ ASSERT_TRUE(ws_client1()->WaitForChangeCompleted(12));
+ ws_client2()->WaitForChangeCount(1);
+ EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_101) +
+ " new_parent=null old_parent=" +
+ IdToString(window_1_100_in_ws2),
+ SingleChangeToDescription(*changes2()));
+}
+
// TODO(sky): need to better track changes to initial connection. For example,
// that SetBounsdWindows/AddWindow and the like don't result in messages to the
// originating connection.
« no previous file with comments | « components/mus/ws/window_finder.cc ('k') | components/mus/ws/window_tree_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698