| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "mojo/public/cpp/application/application_delegate.h" | 8 #include "mojo/public/cpp/application/application_delegate.h" |
| 9 #include "mojo/public/cpp/application/application_impl.h" | 9 #include "mojo/public/cpp/application/application_impl.h" |
| 10 #include "mojo/public/cpp/application/application_test_base.h" | 10 #include "mojo/public/cpp/application/application_test_base.h" |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 // different connection). Create a view to ensure we got a response from | 634 // different connection). Create a view to ensure we got a response from |
| 635 // the server. | 635 // the server. |
| 636 ASSERT_TRUE(CreateView(vm2(), BuildViewId(2, 100))); | 636 ASSERT_TRUE(CreateView(vm2(), BuildViewId(2, 100))); |
| 637 EXPECT_TRUE(changes2()->empty()); | 637 EXPECT_TRUE(changes2()->empty()); |
| 638 } | 638 } |
| 639 | 639 |
| 640 // Verifies HierarchyChanged is correctly sent for various adds/removes. | 640 // Verifies HierarchyChanged is correctly sent for various adds/removes. |
| 641 TEST_F(ViewManagerServiceAppTest, ViewHierarchyChangedViews) { | 641 TEST_F(ViewManagerServiceAppTest, ViewHierarchyChangedViews) { |
| 642 // 1,2->1,11. | 642 // 1,2->1,11. |
| 643 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 2))); | 643 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 2))); |
| 644 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 2), true)); |
| 644 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 11))); | 645 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 11))); |
| 646 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 11), true)); |
| 645 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 2), BuildViewId(1, 11))); | 647 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 2), BuildViewId(1, 11))); |
| 646 | 648 |
| 647 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); | 649 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); |
| 650 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 1), true)); |
| 651 |
| 652 ASSERT_TRUE(WaitForAllMessages(vm2())); |
| 653 changes2()->clear(); |
| 648 | 654 |
| 649 // 1,1->1,2->1,11 | 655 // 1,1->1,2->1,11 |
| 650 { | 656 { |
| 651 // Client 2 should not get anything (1,2 is from another connection). | 657 // Client 2 should not get anything (1,2 is from another connection). |
| 652 changes2()->clear(); | |
| 653 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 1), BuildViewId(1, 2))); | 658 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 1), BuildViewId(1, 2))); |
| 654 ASSERT_TRUE(CreateView(vm2(), BuildViewId(2, 100))); | 659 ASSERT_TRUE(WaitForAllMessages(vm2())); |
| 655 EXPECT_TRUE(changes2()->empty()); | 660 EXPECT_TRUE(changes2()->empty()); |
| 656 } | 661 } |
| 657 | 662 |
| 658 // 0,1->1,1->1,2->1,11. | 663 // 0,1->1,1->1,2->1,11. |
| 659 { | 664 { |
| 660 // Client 2 is now connected to the root, so it should have gotten a drawn | 665 // Client 2 is now connected to the root, so it should have gotten a drawn |
| 661 // notification. | 666 // notification. |
| 662 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); | 667 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); |
| 663 vm_client2_->WaitForChangeCount(1u); | 668 vm_client2_->WaitForChangeCount(1u); |
| 664 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=true", | 669 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=true", |
| 665 SingleChangeToDescription(*changes2())); | 670 SingleChangeToDescription(*changes2())); |
| 666 } | 671 } |
| 667 | 672 |
| 668 // 1,1->1,2->1,11. | 673 // 1,1->1,2->1,11. |
| 669 { | 674 { |
| 670 // Client 2 is no longer connected to the root, should get drawn state | 675 // Client 2 is no longer connected to the root, should get drawn state |
| 671 // changed. | 676 // changed. |
| 672 changes2()->clear(); | 677 changes2()->clear(); |
| 673 ASSERT_TRUE(RemoveViewFromParent(vm1(), BuildViewId(1, 1))); | 678 ASSERT_TRUE(RemoveViewFromParent(vm1(), BuildViewId(1, 1))); |
| 674 vm_client2_->WaitForChangeCount(1); | 679 vm_client2_->WaitForChangeCount(1); |
| 675 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=false", | 680 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=false", |
| 676 SingleChangeToDescription(*changes2())); | 681 SingleChangeToDescription(*changes2())); |
| 677 } | 682 } |
| 678 | 683 |
| 679 // 1,1->1,2->1,11->1,111. | 684 // 1,1->1,2->1,11->1,111. |
| 680 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 111))); | 685 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 111))); |
| 686 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 111), true)); |
| 681 { | 687 { |
| 682 changes2()->clear(); | 688 changes2()->clear(); |
| 683 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 11), BuildViewId(1, 111))); | 689 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 11), BuildViewId(1, 111))); |
| 684 ASSERT_TRUE(CreateView(vm2(), BuildViewId(2, 103))); | 690 ASSERT_TRUE(WaitForAllMessages(vm2())); |
| 685 EXPECT_TRUE(changes2()->empty()); | 691 EXPECT_TRUE(changes2()->empty()); |
| 686 } | 692 } |
| 687 | 693 |
| 688 // 0,1->1,1->1,2->1,11->1,111 | 694 // 0,1->1,1->1,2->1,11->1,111 |
| 689 { | 695 { |
| 690 changes2()->clear(); | 696 changes2()->clear(); |
| 691 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); | 697 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); |
| 692 vm_client2_->WaitForChangeCount(1); | 698 vm_client2_->WaitForChangeCount(1); |
| 693 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=true", | 699 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=true", |
| 694 SingleChangeToDescription(*changes2())); | 700 SingleChangeToDescription(*changes2())); |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1114 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1))); | 1120 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1))); |
| 1115 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 2))); | 1121 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 2))); |
| 1116 | 1122 |
| 1117 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); | 1123 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); |
| 1118 { | 1124 { |
| 1119 std::vector<TestView> views; | 1125 std::vector<TestView> views; |
| 1120 GetViewTree(vm1(), BuildViewId(0, 1), &views); | 1126 GetViewTree(vm1(), BuildViewId(0, 1), &views); |
| 1121 ASSERT_EQ(2u, views.size()); | 1127 ASSERT_EQ(2u, views.size()); |
| 1122 EXPECT_EQ("view=0,1 parent=null visible=true drawn=true", | 1128 EXPECT_EQ("view=0,1 parent=null visible=true drawn=true", |
| 1123 views[0].ToString2()); | 1129 views[0].ToString2()); |
| 1130 EXPECT_EQ("view=1,1 parent=0,1 visible=false drawn=false", |
| 1131 views[1].ToString2()); |
| 1132 } |
| 1133 |
| 1134 // Show all the views. |
| 1135 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 1), true)); |
| 1136 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 2), true)); |
| 1137 { |
| 1138 std::vector<TestView> views; |
| 1139 GetViewTree(vm1(), BuildViewId(0, 1), &views); |
| 1140 ASSERT_EQ(2u, views.size()); |
| 1141 EXPECT_EQ("view=0,1 parent=null visible=true drawn=true", |
| 1142 views[0].ToString2()); |
| 1124 EXPECT_EQ("view=1,1 parent=0,1 visible=true drawn=true", | 1143 EXPECT_EQ("view=1,1 parent=0,1 visible=true drawn=true", |
| 1125 views[1].ToString2()); | 1144 views[1].ToString2()); |
| 1126 } | 1145 } |
| 1127 | 1146 |
| 1128 // Hide 1. | 1147 // Hide 1. |
| 1129 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 1), false)); | 1148 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 1), false)); |
| 1130 { | 1149 { |
| 1131 std::vector<TestView> views; | 1150 std::vector<TestView> views; |
| 1132 GetViewTree(vm1(), BuildViewId(1, 1), &views); | 1151 GetViewTree(vm1(), BuildViewId(1, 1), &views); |
| 1133 ASSERT_EQ(1u, views.size()); | 1152 ASSERT_EQ(1u, views.size()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1157 views[0].ToString2()); | 1176 views[0].ToString2()); |
| 1158 EXPECT_EQ("view=1,2 parent=1,1 visible=true drawn=true", | 1177 EXPECT_EQ("view=1,2 parent=1,1 visible=true drawn=true", |
| 1159 views[1].ToString2()); | 1178 views[1].ToString2()); |
| 1160 } | 1179 } |
| 1161 } | 1180 } |
| 1162 | 1181 |
| 1163 // Assertions for SetViewVisibility sending notifications. | 1182 // Assertions for SetViewVisibility sending notifications. |
| 1164 TEST_F(ViewManagerServiceAppTest, SetViewVisibilityNotifications) { | 1183 TEST_F(ViewManagerServiceAppTest, SetViewVisibilityNotifications) { |
| 1165 // Create 1,1 and 1,2. 1,2 is made a child of 1,1 and 1,1 a child of the root. | 1184 // Create 1,1 and 1,2. 1,2 is made a child of 1,1 and 1,1 a child of the root. |
| 1166 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1))); | 1185 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1))); |
| 1186 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 1), true)); |
| 1167 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 2))); | 1187 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 2))); |
| 1188 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 2), true)); |
| 1168 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); | 1189 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); |
| 1169 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 1), BuildViewId(1, 2))); | 1190 ASSERT_TRUE(AddView(vm1(), BuildViewId(1, 1), BuildViewId(1, 2))); |
| 1170 | 1191 |
| 1171 // Establish the second connection at 1,2. | 1192 // Establish the second connection at 1,2. |
| 1172 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnectionWithRoot(BuildViewId(1, 2))); | 1193 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnectionWithRoot(BuildViewId(1, 2))); |
| 1173 | 1194 |
| 1174 // Add 2,3 as a child of 1,2. | 1195 // Add 2,3 as a child of 1,2. |
| 1175 ASSERT_TRUE(CreateView(vm2(), BuildViewId(2, 3))); | 1196 ASSERT_TRUE(CreateView(vm2(), BuildViewId(2, 3))); |
| 1176 changes1()->clear(); | 1197 ASSERT_TRUE(SetViewVisibility(vm2(), BuildViewId(2, 3), true)); |
| 1177 ASSERT_TRUE(AddView(vm2(), BuildViewId(1, 2), BuildViewId(2, 3))); | 1198 ASSERT_TRUE(AddView(vm2(), BuildViewId(1, 2), BuildViewId(2, 3))); |
| 1178 vm_client1_.WaitForChangeCount(1); | 1199 WaitForAllMessages(vm1()); |
| 1179 | 1200 |
| 1180 changes2()->clear(); | 1201 changes2()->clear(); |
| 1181 // Hide 1,2 from connection 1. Connection 2 should see this. | 1202 // Hide 1,2 from connection 1. Connection 2 should see this. |
| 1182 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 2), false)); | 1203 ASSERT_TRUE(SetViewVisibility(vm1(), BuildViewId(1, 2), false)); |
| 1183 { | 1204 { |
| 1184 vm_client2_->WaitForChangeCount(1); | 1205 vm_client2_->WaitForChangeCount(1); |
| 1185 EXPECT_EQ("VisibilityChanged view=1,2 visible=false", | 1206 EXPECT_EQ("VisibilityChanged view=1,2 visible=false", |
| 1186 SingleChangeToDescription(*changes2())); | 1207 SingleChangeToDescription(*changes2())); |
| 1187 } | 1208 } |
| 1188 | 1209 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1))); | 1267 ASSERT_TRUE(CreateView(vm1(), BuildViewId(1, 1))); |
| 1247 | 1268 |
| 1248 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); | 1269 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); |
| 1249 changes2()->clear(); | 1270 changes2()->clear(); |
| 1250 | 1271 |
| 1251 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); | 1272 ASSERT_TRUE(AddView(vm1(), BuildViewId(0, 1), BuildViewId(1, 1))); |
| 1252 { | 1273 { |
| 1253 std::vector<TestView> views; | 1274 std::vector<TestView> views; |
| 1254 GetViewTree(vm1(), BuildViewId(0, 1), &views); | 1275 GetViewTree(vm1(), BuildViewId(0, 1), &views); |
| 1255 ASSERT_EQ(2u, views.size()); | 1276 ASSERT_EQ(2u, views.size()); |
| 1256 EXPECT_EQ("view=0,1 parent=null visible=true drawn=true", | 1277 EXPECT_EQ(BuildViewId(0, 1), views[0].view_id); |
| 1257 views[0].ToString2()); | 1278 EXPECT_EQ(BuildViewId(1, 1), views[1].view_id); |
| 1258 EXPECT_EQ("view=1,1 parent=0,1 visible=true drawn=true", | |
| 1259 views[1].ToString2()); | |
| 1260 | |
| 1261 ASSERT_EQ(0u, views[1].properties.size()); | 1279 ASSERT_EQ(0u, views[1].properties.size()); |
| 1262 | |
| 1263 vm_client2_->WaitForChangeCount(1); | |
| 1264 EXPECT_EQ("DrawnStateChanged view=1,1 drawn=true", | |
| 1265 SingleChangeToDescription(*changes2())); | |
| 1266 } | 1280 } |
| 1267 | 1281 |
| 1268 // Set properties on 1. | 1282 // Set properties on 1. |
| 1269 changes2()->clear(); | 1283 changes2()->clear(); |
| 1270 std::vector<uint8_t> one(1, '1'); | 1284 std::vector<uint8_t> one(1, '1'); |
| 1271 ASSERT_TRUE(SetViewProperty(vm1(), BuildViewId(1, 1), "one", &one)); | 1285 ASSERT_TRUE(SetViewProperty(vm1(), BuildViewId(1, 1), "one", &one)); |
| 1272 { | 1286 { |
| 1273 vm_client2_->WaitForChangeCount(1); | 1287 vm_client2_->WaitForChangeCount(1); |
| 1274 EXPECT_EQ("PropertyChanged view=1,1 key=one value=1", | 1288 EXPECT_EQ("PropertyChanged view=1,1 key=one value=1", |
| 1275 SingleChangeToDescription(*changes2())); | 1289 SingleChangeToDescription(*changes2())); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1382 // that SetBounsdViews/AddView and the like don't result in messages to the | 1396 // that SetBounsdViews/AddView and the like don't result in messages to the |
| 1383 // originating connection. | 1397 // originating connection. |
| 1384 | 1398 |
| 1385 // TODO(sky): make sure coverage of what was | 1399 // TODO(sky): make sure coverage of what was |
| 1386 // ViewManagerTest.SecondEmbedRoot_InitService and | 1400 // ViewManagerTest.SecondEmbedRoot_InitService and |
| 1387 // ViewManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window manager | 1401 // ViewManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window manager |
| 1388 // tests. | 1402 // tests. |
| 1389 | 1403 |
| 1390 } // namespace service | 1404 } // namespace service |
| 1391 } // namespace mojo | 1405 } // namespace mojo |
| OLD | NEW |