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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 wait_state_->run_loop.Quit(); | 272 wait_state_->run_loop.Quit(); |
273 } | 273 } |
274 } | 274 } |
275 | 275 |
276 // WindowTreeClient: | 276 // WindowTreeClient: |
277 void OnEmbed(ClientSpecificId client_id, | 277 void OnEmbed(ClientSpecificId client_id, |
278 WindowDataPtr root, | 278 WindowDataPtr root, |
279 mojom::WindowTreePtr tree, | 279 mojom::WindowTreePtr tree, |
280 int64_t display_id, | 280 int64_t display_id, |
281 Id focused_window_id, | 281 Id focused_window_id, |
282 bool drawn) override { | 282 bool drawn, |
| 283 const cc::FrameSinkId& frame_sink_id) override { |
283 // TODO(sky): add coverage of |focused_window_id|. | 284 // TODO(sky): add coverage of |focused_window_id|. |
284 ASSERT_TRUE(root); | 285 ASSERT_TRUE(root); |
285 root_window_id_ = root->window_id; | 286 root_window_id_ = root->window_id; |
286 tree_ = std::move(tree); | 287 tree_ = std::move(tree); |
287 client_id_ = client_id; | 288 client_id_ = client_id; |
288 tracker()->OnEmbed(client_id, std::move(root), drawn); | 289 tracker()->OnEmbed(client_id, std::move(root), drawn, frame_sink_id); |
289 if (embed_run_loop_) | 290 if (embed_run_loop_) |
290 embed_run_loop_->Quit(); | 291 embed_run_loop_->Quit(); |
291 } | 292 } |
292 void OnEmbeddedAppDisconnected(Id window_id) override { | 293 void OnEmbeddedAppDisconnected(Id window_id) override { |
293 tracker()->OnEmbeddedAppDisconnected(window_id); | 294 tracker()->OnEmbeddedAppDisconnected(window_id); |
294 } | 295 } |
295 void OnUnembed(Id window_id) override { tracker()->OnUnembed(window_id); } | 296 void OnUnembed(Id window_id) override { tracker()->OnUnembed(window_id); } |
296 void OnCaptureChanged(Id new_capture_window_id, | 297 void OnCaptureChanged(Id new_capture_window_id, |
297 Id old_capture_window_id) override { | 298 Id old_capture_window_id) override { |
298 tracker()->OnCaptureChanged(new_capture_window_id, old_capture_window_id); | 299 tracker()->OnCaptureChanged(new_capture_window_id, old_capture_window_id); |
299 } | 300 } |
300 void OnTopLevelCreated(uint32_t change_id, | 301 void OnTopLevelCreated(uint32_t change_id, |
301 mojom::WindowDataPtr data, | 302 mojom::WindowDataPtr data, |
302 int64_t display_id, | 303 int64_t display_id, |
303 bool drawn) override { | 304 bool drawn, |
304 tracker()->OnTopLevelCreated(change_id, std::move(data), drawn); | 305 const cc::FrameSinkId& frame_sink_id) override { |
| 306 tracker()->OnTopLevelCreated(change_id, std::move(data), drawn, |
| 307 frame_sink_id); |
305 } | 308 } |
306 void OnWindowBoundsChanged( | 309 void OnWindowBoundsChanged( |
307 Id window_id, | 310 Id window_id, |
308 const gfx::Rect& old_bounds, | 311 const gfx::Rect& old_bounds, |
309 const gfx::Rect& new_bounds, | 312 const gfx::Rect& new_bounds, |
310 const base::Optional<cc::LocalSurfaceId>& local_surface_id) override { | 313 const base::Optional<cc::LocalSurfaceId>& local_surface_id) override { |
311 // The bounds of the root may change during startup on Android at random | 314 // The bounds of the root may change during startup on Android at random |
312 // times. As this doesn't matter, and shouldn't impact test exepctations, | 315 // times. As this doesn't matter, and shouldn't impact test exepctations, |
313 // it is ignored. | 316 // it is ignored. |
314 if (window_id == root_window_id_ && !track_root_bounds_changes_) | 317 if (window_id == root_window_id_ && !track_root_bounds_changes_) |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 window_manager_binding_ = | 439 window_manager_binding_ = |
437 base::MakeUnique<mojo::AssociatedBinding<mojom::WindowManager>>( | 440 base::MakeUnique<mojo::AssociatedBinding<mojom::WindowManager>>( |
438 this, std::move(internal)); | 441 this, std::move(internal)); |
439 tree_->GetWindowManagerClient(MakeRequest(&window_manager_client_)); | 442 tree_->GetWindowManagerClient(MakeRequest(&window_manager_client_)); |
440 } | 443 } |
441 | 444 |
442 // mojom::WindowManager: | 445 // mojom::WindowManager: |
443 void OnConnect(uint16_t client_id) override {} | 446 void OnConnect(uint16_t client_id) override {} |
444 void WmNewDisplayAdded(const display::Display& display, | 447 void WmNewDisplayAdded(const display::Display& display, |
445 mojom::WindowDataPtr root_data, | 448 mojom::WindowDataPtr root_data, |
446 bool drawn) override { | 449 bool drawn, |
| 450 const cc::FrameSinkId& frame_sink_id) override { |
447 NOTIMPLEMENTED(); | 451 NOTIMPLEMENTED(); |
448 } | 452 } |
449 void WmDisplayRemoved(int64_t display_id) override { NOTIMPLEMENTED(); } | 453 void WmDisplayRemoved(int64_t display_id) override { NOTIMPLEMENTED(); } |
450 void WmDisplayModified(const display::Display& display) override { | 454 void WmDisplayModified(const display::Display& display) override { |
451 NOTIMPLEMENTED(); | 455 NOTIMPLEMENTED(); |
452 } | 456 } |
453 void WmSetBounds(uint32_t change_id, | 457 void WmSetBounds(uint32_t change_id, |
454 uint32_t window_id, | 458 uint32_t window_id, |
455 const gfx::Rect& bounds) override { | 459 const gfx::Rect& bounds) override { |
456 window_manager_client_->WmResponse(change_id, false); | 460 window_manager_client_->WmResponse(change_id, false); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 return nullptr; | 643 return nullptr; |
640 } | 644 } |
641 std::unique_ptr<TestWindowTreeClient> client = | 645 std::unique_ptr<TestWindowTreeClient> client = |
642 client_factory_->WaitForInstance(); | 646 client_factory_->WaitForInstance(); |
643 if (!client.get()) { | 647 if (!client.get()) { |
644 ADD_FAILURE() << "WaitForInstance failed"; | 648 ADD_FAILURE() << "WaitForInstance failed"; |
645 return nullptr; | 649 return nullptr; |
646 } | 650 } |
647 client->WaitForOnEmbed(); | 651 client->WaitForOnEmbed(); |
648 | 652 |
| 653 // TODO(fsamuel): Currently the FrameSinkId maps directly to the server's |
| 654 // window ID. This is likely bad from a security perspective and should be |
| 655 // fixed. |
649 EXPECT_EQ("OnEmbed", | 656 EXPECT_EQ("OnEmbed", |
650 SingleChangeToDescription(*client->tracker()->changes())); | 657 SingleChangeToDescription(*client->tracker()->changes())); |
651 if (client_id) | 658 if (client_id) |
652 *client_id = (*client->tracker()->changes())[0].client_id; | 659 *client_id = (*client->tracker()->changes())[0].client_id; |
653 return client; | 660 return client; |
654 } | 661 } |
655 | 662 |
656 // WindowServerServiceTestBase: | 663 // WindowServerServiceTestBase: |
657 bool OnConnect(const service_manager::Identity& remote_identity, | 664 bool OnConnect(const service_manager::Identity& remote_identity, |
658 service_manager::InterfaceRegistry* registry) override { | 665 service_manager::InterfaceRegistry* registry) override { |
(...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1722 Id window_1_1 = wt_client1()->NewWindow(1); | 1729 Id window_1_1 = wt_client1()->NewWindow(1); |
1723 ASSERT_TRUE(window_1_1); | 1730 ASSERT_TRUE(window_1_1); |
1724 ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, true)); | 1731 ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, true)); |
1725 Id window_1_2 = wt_client1()->NewWindow(2); | 1732 Id window_1_2 = wt_client1()->NewWindow(2); |
1726 ASSERT_TRUE(window_1_2); | 1733 ASSERT_TRUE(window_1_2); |
1727 ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); | 1734 ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); |
1728 ASSERT_TRUE(wt_client1()->AddWindow(window_1_1, window_1_2)); | 1735 ASSERT_TRUE(wt_client1()->AddWindow(window_1_1, window_1_2)); |
1729 | 1736 |
1730 // Establish the second client at 1,2. | 1737 // Establish the second client at 1,2. |
1731 ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_2)); | 1738 ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_2)); |
1732 EXPECT_EQ("OnEmbed drawn=true", SingleChangeToDescription2(*changes2())); | 1739 EXPECT_EQ( |
| 1740 base::StringPrintf("OnEmbed FrameSinkId(%d, 0) drawn=true", window_1_2), |
| 1741 SingleChangeToDescription2(*changes2())); |
1733 changes2()->clear(); | 1742 changes2()->clear(); |
1734 | 1743 |
1735 // Show 1,2 from client 1. Client 2 should see this. | 1744 // Show 1,2 from client 1. Client 2 should see this. |
1736 ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_2, true)); | 1745 ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_2, true)); |
1737 { | 1746 { |
1738 wt_client2_->WaitForChangeCount(1); | 1747 wt_client2_->WaitForChangeCount(1); |
1739 EXPECT_EQ( | 1748 EXPECT_EQ( |
1740 "VisibilityChanged window=" + IdToString(window_1_2) + " visible=true", | 1749 "VisibilityChanged window=" + IdToString(window_1_2) + " visible=true", |
1741 SingleChangeToDescription(*changes2())); | 1750 SingleChangeToDescription(*changes2())); |
1742 } | 1751 } |
1743 } | 1752 } |
1744 | 1753 |
1745 // Assertions for SetWindowVisibility sending notifications. | 1754 // Assertions for SetWindowVisibility sending notifications. |
1746 TEST_F(WindowTreeClientTest, SetWindowVisibilityNotifications3) { | 1755 TEST_F(WindowTreeClientTest, SetWindowVisibilityNotifications3) { |
1747 // Create 1,1 and 1,2. 1,2 is made a child of 1,1 and 1,1 a child of the root. | 1756 // Create 1,1 and 1,2. 1,2 is made a child of 1,1 and 1,1 a child of the root. |
1748 Id window_1_1 = wt_client1()->NewWindow(1); | 1757 Id window_1_1 = wt_client1()->NewWindow(1); |
1749 ASSERT_TRUE(window_1_1); | 1758 ASSERT_TRUE(window_1_1); |
1750 Id window_1_2 = wt_client1()->NewWindow(2); | 1759 Id window_1_2 = wt_client1()->NewWindow(2); |
1751 ASSERT_TRUE(window_1_2); | 1760 ASSERT_TRUE(window_1_2); |
1752 ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); | 1761 ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); |
1753 ASSERT_TRUE(wt_client1()->AddWindow(window_1_1, window_1_2)); | 1762 ASSERT_TRUE(wt_client1()->AddWindow(window_1_1, window_1_2)); |
1754 | 1763 |
1755 // Establish the second client at 1,2. | 1764 // Establish the second client at 1,2. |
| 1765 // TODO(fsamuel): Currently the FrameSinkId maps directly to the server's |
| 1766 // window ID. This is likely bad from a security perspective and should be |
| 1767 // fixed. |
1756 ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_2)); | 1768 ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_2)); |
1757 EXPECT_EQ("OnEmbed drawn=false", SingleChangeToDescription2(*changes2())); | 1769 EXPECT_EQ( |
| 1770 base::StringPrintf("OnEmbed FrameSinkId(%d, 0) drawn=false", window_1_2), |
| 1771 SingleChangeToDescription2(*changes2())); |
1758 changes2()->clear(); | 1772 changes2()->clear(); |
1759 | 1773 |
1760 // Show 1,1, drawn should be true for 1,2 (as that is all the child sees). | 1774 // Show 1,1, drawn should be true for 1,2 (as that is all the child sees). |
1761 ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, true)); | 1775 ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, true)); |
1762 { | 1776 { |
1763 wt_client2_->WaitForChangeCount(1); | 1777 wt_client2_->WaitForChangeCount(1); |
1764 EXPECT_EQ( | 1778 EXPECT_EQ( |
1765 "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=true", | 1779 "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=true", |
1766 SingleChangeToDescription(*changes2())); | 1780 SingleChangeToDescription(*changes2())); |
1767 } | 1781 } |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2235 | 2249 |
2236 // TODO(sky): make sure coverage of what was | 2250 // TODO(sky): make sure coverage of what was |
2237 // WindowManagerTest.SecondEmbedRoot_InitService and | 2251 // WindowManagerTest.SecondEmbedRoot_InitService and |
2238 // WindowManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window | 2252 // WindowManagerTest.MultipleEmbedRootsBeforeWTHReady gets added to window |
2239 // manager | 2253 // manager |
2240 // tests. | 2254 // tests. |
2241 | 2255 |
2242 } // namespace test | 2256 } // namespace test |
2243 } // namespace ws | 2257 } // namespace ws |
2244 } // namespace ui | 2258 } // namespace ui |
OLD | NEW |