| 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 "ui/aura/mus/window_tree_client.h" | 5 #include "ui/aura/mus/window_tree_client.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 WindowMus* window, | 462 WindowMus* window, |
| 463 const ui::mojom::WindowData& window_data) { | 463 const ui::mojom::WindowData& window_data) { |
| 464 for (auto& pair : window_data.properties) | 464 for (auto& pair : window_data.properties) |
| 465 window->SetPropertyFromServer(pair.first, &pair.second); | 465 window->SetPropertyFromServer(pair.first, &pair.second); |
| 466 } | 466 } |
| 467 | 467 |
| 468 std::unique_ptr<WindowTreeHostMus> WindowTreeClient::CreateWindowTreeHost( | 468 std::unique_ptr<WindowTreeHostMus> WindowTreeClient::CreateWindowTreeHost( |
| 469 WindowMusType window_mus_type, | 469 WindowMusType window_mus_type, |
| 470 const ui::mojom::WindowData& window_data, | 470 const ui::mojom::WindowData& window_data, |
| 471 int64_t display_id, | 471 int64_t display_id, |
| 472 const cc::FrameSinkId& frame_sink_id, | |
| 473 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 472 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 474 std::unique_ptr<WindowPortMus> window_port = | 473 std::unique_ptr<WindowPortMus> window_port = |
| 475 CreateWindowPortMus(window_data, window_mus_type); | 474 CreateWindowPortMus(window_data, window_mus_type); |
| 476 roots_.insert(window_port.get()); | 475 roots_.insert(window_port.get()); |
| 477 WindowTreeHostMusInitParams init_params; | 476 WindowTreeHostMusInitParams init_params; |
| 478 init_params.window_port = std::move(window_port); | 477 init_params.window_port = std::move(window_port); |
| 479 init_params.window_tree_client = this; | 478 init_params.window_tree_client = this; |
| 480 init_params.display_id = display_id; | 479 init_params.display_id = display_id; |
| 481 init_params.frame_sink_id = frame_sink_id; | |
| 482 std::unique_ptr<WindowTreeHostMus> window_tree_host = | 480 std::unique_ptr<WindowTreeHostMus> window_tree_host = |
| 483 base::MakeUnique<WindowTreeHostMus>(std::move(init_params)); | 481 base::MakeUnique<WindowTreeHostMus>(std::move(init_params)); |
| 484 window_tree_host->InitHost(); | 482 window_tree_host->InitHost(); |
| 485 SetLocalPropertiesFromServerProperties( | 483 SetLocalPropertiesFromServerProperties( |
| 486 WindowMus::Get(window_tree_host->window()), window_data); | 484 WindowMus::Get(window_tree_host->window()), window_data); |
| 487 if (window_data.visible) { | 485 if (window_data.visible) { |
| 488 SetWindowVisibleFromServer(WindowMus::Get(window_tree_host->window()), | 486 SetWindowVisibleFromServer(WindowMus::Get(window_tree_host->window()), |
| 489 true); | 487 true); |
| 490 } | 488 } |
| 491 WindowMus* window = WindowMus::Get(window_tree_host->window()); | 489 WindowMus* window = WindowMus::Get(window_tree_host->window()); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 return true; | 562 return true; |
| 565 } | 563 } |
| 566 | 564 |
| 567 void WindowTreeClient::OnEmbedImpl( | 565 void WindowTreeClient::OnEmbedImpl( |
| 568 ui::mojom::WindowTree* window_tree, | 566 ui::mojom::WindowTree* window_tree, |
| 569 ClientSpecificId client_id, | 567 ClientSpecificId client_id, |
| 570 ui::mojom::WindowDataPtr root_data, | 568 ui::mojom::WindowDataPtr root_data, |
| 571 int64_t display_id, | 569 int64_t display_id, |
| 572 Id focused_window_id, | 570 Id focused_window_id, |
| 573 bool drawn, | 571 bool drawn, |
| 574 const cc::FrameSinkId& frame_sink_id, | |
| 575 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 572 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 576 // WARNING: this is only called if WindowTreeClient was created as the | 573 // WARNING: this is only called if WindowTreeClient was created as the |
| 577 // result of an embedding. | 574 // result of an embedding. |
| 578 client_id_ = client_id; | 575 client_id_ = client_id; |
| 579 WindowTreeConnectionEstablished(window_tree); | 576 WindowTreeConnectionEstablished(window_tree); |
| 580 | 577 |
| 581 DCHECK(roots_.empty()); | 578 DCHECK(roots_.empty()); |
| 582 std::unique_ptr<WindowTreeHostMus> window_tree_host = | 579 std::unique_ptr<WindowTreeHostMus> window_tree_host = CreateWindowTreeHost( |
| 583 CreateWindowTreeHost(WindowMusType::EMBED, *root_data, display_id, | 580 WindowMusType::EMBED, *root_data, display_id, local_surface_id); |
| 584 frame_sink_id, local_surface_id); | |
| 585 | 581 |
| 586 focus_synchronizer_->SetFocusFromServer( | 582 focus_synchronizer_->SetFocusFromServer( |
| 587 GetWindowByServerId(focused_window_id)); | 583 GetWindowByServerId(focused_window_id)); |
| 588 | 584 |
| 589 delegate_->OnEmbed(std::move(window_tree_host)); | 585 delegate_->OnEmbed(std::move(window_tree_host)); |
| 590 } | 586 } |
| 591 | 587 |
| 592 void WindowTreeClient::OnSetDisplayRootDone( | 588 void WindowTreeClient::OnSetDisplayRootDone(bool success) { |
| 593 Id window_id, | |
| 594 const base::Optional<cc::FrameSinkId>& frame_sink_id) { | |
| 595 // The only way SetDisplayRoot() should fail is if we've done something wrong. | 589 // The only way SetDisplayRoot() should fail is if we've done something wrong. |
| 596 CHECK(frame_sink_id); | 590 CHECK(success); |
| 597 | |
| 598 WindowMus* window = GetWindowByServerId(window_id); | |
| 599 if (!window) | |
| 600 return; // Display was already deleted. | |
| 601 | |
| 602 window->SetFrameSinkIdFromServer(*frame_sink_id); | |
| 603 } | 591 } |
| 604 | 592 |
| 605 WindowTreeHostMus* WindowTreeClient::WmNewDisplayAddedImpl( | 593 WindowTreeHostMus* WindowTreeClient::WmNewDisplayAddedImpl( |
| 606 const display::Display& display, | 594 const display::Display& display, |
| 607 ui::mojom::WindowDataPtr root_data, | 595 ui::mojom::WindowDataPtr root_data, |
| 608 bool parent_drawn, | 596 bool parent_drawn, |
| 609 const cc::FrameSinkId& frame_sink_id, | |
| 610 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 597 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 611 DCHECK(window_manager_delegate_); | 598 DCHECK(window_manager_delegate_); |
| 612 | 599 |
| 613 got_initial_displays_ = true; | 600 got_initial_displays_ = true; |
| 614 | 601 |
| 615 window_manager_delegate_->OnWmWillCreateDisplay(display); | 602 window_manager_delegate_->OnWmWillCreateDisplay(display); |
| 616 | 603 |
| 617 std::unique_ptr<WindowTreeHostMus> window_tree_host = CreateWindowTreeHost( | 604 std::unique_ptr<WindowTreeHostMus> window_tree_host = |
| 618 WindowMusType::DISPLAY_AUTOMATICALLY_CREATED, *root_data, display.id(), | 605 CreateWindowTreeHost(WindowMusType::DISPLAY_AUTOMATICALLY_CREATED, |
| 619 frame_sink_id, local_surface_id); | 606 *root_data, display.id(), local_surface_id); |
| 620 | 607 |
| 621 WindowTreeHostMus* window_tree_host_ptr = window_tree_host.get(); | 608 WindowTreeHostMus* window_tree_host_ptr = window_tree_host.get(); |
| 622 window_manager_delegate_->OnWmNewDisplay(std::move(window_tree_host), | 609 window_manager_delegate_->OnWmNewDisplay(std::move(window_tree_host), |
| 623 display); | 610 display); |
| 624 return window_tree_host_ptr; | 611 return window_tree_host_ptr; |
| 625 } | 612 } |
| 626 | 613 |
| 627 std::unique_ptr<EventResultCallback> | 614 std::unique_ptr<EventResultCallback> |
| 628 WindowTreeClient::CreateEventResultCallback(int32_t event_id) { | 615 WindowTreeClient::CreateEventResultCallback(int32_t event_id) { |
| 629 return base::MakeUnique<EventResultCallback>( | 616 return base::MakeUnique<EventResultCallback>( |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 ScheduleInFlightBoundsChange( | 728 ScheduleInFlightBoundsChange( |
| 742 window, gfx::Rect(), | 729 window, gfx::Rect(), |
| 743 gfx::Rect( | 730 gfx::Rect( |
| 744 display_init_params->viewport_metrics.bounds_in_pixels.size())); | 731 display_init_params->viewport_metrics.bounds_in_pixels.size())); |
| 745 | 732 |
| 746 if (window_manager_client_) { | 733 if (window_manager_client_) { |
| 747 window_manager_client_->SetDisplayRoot( | 734 window_manager_client_->SetDisplayRoot( |
| 748 display, display_init_params->viewport_metrics.Clone(), | 735 display, display_init_params->viewport_metrics.Clone(), |
| 749 display_init_params->is_primary_display, window->server_id(), | 736 display_init_params->is_primary_display, window->server_id(), |
| 750 base::Bind(&WindowTreeClient::OnSetDisplayRootDone, | 737 base::Bind(&WindowTreeClient::OnSetDisplayRootDone, |
| 751 base::Unretained(this), window->server_id())); | 738 base::Unretained(this))); |
| 752 } | 739 } |
| 753 } | 740 } |
| 754 } | 741 } |
| 755 | 742 |
| 756 void WindowTreeClient::OnWindowMusDestroyed(WindowMus* window, Origin origin) { | 743 void WindowTreeClient::OnWindowMusDestroyed(WindowMus* window, Origin origin) { |
| 757 if (focus_synchronizer_->focused_window() == window) | 744 if (focus_synchronizer_->focused_window() == window) |
| 758 focus_synchronizer_->OnFocusedWindowDestroyed(); | 745 focus_synchronizer_->OnFocusedWindowDestroyed(); |
| 759 | 746 |
| 760 // TODO: decide how to deal with windows not owned by this client. | 747 // TODO: decide how to deal with windows not owned by this client. |
| 761 if (origin == Origin::CLIENT && | 748 if (origin == Origin::CLIENT && |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 977 tree_->SetEventTargetingPolicy(window->server_id(), policy); | 964 tree_->SetEventTargetingPolicy(window->server_id(), policy); |
| 978 } | 965 } |
| 979 | 966 |
| 980 void WindowTreeClient::OnEmbed( | 967 void WindowTreeClient::OnEmbed( |
| 981 ClientSpecificId client_id, | 968 ClientSpecificId client_id, |
| 982 ui::mojom::WindowDataPtr root_data, | 969 ui::mojom::WindowDataPtr root_data, |
| 983 ui::mojom::WindowTreePtr tree, | 970 ui::mojom::WindowTreePtr tree, |
| 984 int64_t display_id, | 971 int64_t display_id, |
| 985 Id focused_window_id, | 972 Id focused_window_id, |
| 986 bool drawn, | 973 bool drawn, |
| 987 const cc::FrameSinkId& frame_sink_id, | |
| 988 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 974 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 989 DCHECK(!tree_ptr_); | 975 DCHECK(!tree_ptr_); |
| 990 tree_ptr_ = std::move(tree); | 976 tree_ptr_ = std::move(tree); |
| 991 | 977 |
| 992 is_from_embed_ = true; | 978 is_from_embed_ = true; |
| 993 | 979 |
| 994 if (window_manager_delegate_) { | 980 if (window_manager_delegate_) { |
| 995 tree_ptr_->GetWindowManagerClient( | 981 tree_ptr_->GetWindowManagerClient( |
| 996 MakeRequest(&window_manager_internal_client_)); | 982 MakeRequest(&window_manager_internal_client_)); |
| 997 window_manager_client_ = window_manager_internal_client_.get(); | 983 window_manager_client_ = window_manager_internal_client_.get(); |
| 998 } | 984 } |
| 999 | 985 |
| 1000 OnEmbedImpl(tree_ptr_.get(), client_id, std::move(root_data), display_id, | 986 OnEmbedImpl(tree_ptr_.get(), client_id, std::move(root_data), display_id, |
| 1001 focused_window_id, drawn, frame_sink_id, local_surface_id); | 987 focused_window_id, drawn, local_surface_id); |
| 1002 } | 988 } |
| 1003 | 989 |
| 1004 void WindowTreeClient::OnEmbeddedAppDisconnected(Id window_id) { | 990 void WindowTreeClient::OnEmbeddedAppDisconnected(Id window_id) { |
| 1005 WindowMus* window = GetWindowByServerId(window_id); | 991 WindowMus* window = GetWindowByServerId(window_id); |
| 1006 if (window) | 992 if (window) |
| 1007 window->NotifyEmbeddedAppDisconnected(); | 993 window->NotifyEmbeddedAppDisconnected(); |
| 1008 } | 994 } |
| 1009 | 995 |
| 1010 void WindowTreeClient::OnUnembed(Id window_id) { | 996 void WindowTreeClient::OnUnembed(Id window_id) { |
| 1011 WindowMus* window = GetWindowByServerId(window_id); | 997 WindowMus* window = GetWindowByServerId(window_id); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1039 return; | 1025 return; |
| 1040 | 1026 |
| 1041 window->SetFrameSinkIdFromServer(frame_sink_id); | 1027 window->SetFrameSinkIdFromServer(frame_sink_id); |
| 1042 } | 1028 } |
| 1043 | 1029 |
| 1044 void WindowTreeClient::OnTopLevelCreated( | 1030 void WindowTreeClient::OnTopLevelCreated( |
| 1045 uint32_t change_id, | 1031 uint32_t change_id, |
| 1046 ui::mojom::WindowDataPtr data, | 1032 ui::mojom::WindowDataPtr data, |
| 1047 int64_t display_id, | 1033 int64_t display_id, |
| 1048 bool drawn, | 1034 bool drawn, |
| 1049 const cc::FrameSinkId& frame_sink_id, | |
| 1050 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 1035 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 1051 // The server ack'd the top level window we created and supplied the state | 1036 // The server ack'd the top level window we created and supplied the state |
| 1052 // of the window at the time the server created it. For properties we do not | 1037 // of the window at the time the server created it. For properties we do not |
| 1053 // have changes in flight for we can update them immediately. For properties | 1038 // have changes in flight for we can update them immediately. For properties |
| 1054 // with changes in flight we set the revert value from the server. | 1039 // with changes in flight we set the revert value from the server. |
| 1055 | 1040 |
| 1056 if (!in_flight_map_.count(change_id)) { | 1041 if (!in_flight_map_.count(change_id)) { |
| 1057 // The window may have been destroyed locally before the server could finish | 1042 // The window may have been destroyed locally before the server could finish |
| 1058 // creating the window, and before the server received the notification that | 1043 // creating the window, and before the server received the notification that |
| 1059 // the window has been destroyed. | 1044 // the window has been destroyed. |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1105 GetOldestInFlightChangeMatching(property_change); | 1090 GetOldestInFlightChangeMatching(property_change); |
| 1106 if (current_change) { | 1091 if (current_change) { |
| 1107 current_change->SetRevertValueFrom(property_change); | 1092 current_change->SetRevertValueFrom(property_change); |
| 1108 } else { | 1093 } else { |
| 1109 window->SetPropertyFromServer(pair.first, &pair.second); | 1094 window->SetPropertyFromServer(pair.first, &pair.second); |
| 1110 } | 1095 } |
| 1111 } | 1096 } |
| 1112 | 1097 |
| 1113 // Top level windows should not have a parent. | 1098 // Top level windows should not have a parent. |
| 1114 DCHECK_EQ(0u, data->parent_id); | 1099 DCHECK_EQ(0u, data->parent_id); |
| 1115 | |
| 1116 window->SetFrameSinkIdFromServer(frame_sink_id); | |
| 1117 } | 1100 } |
| 1118 | 1101 |
| 1119 void WindowTreeClient::OnWindowBoundsChanged( | 1102 void WindowTreeClient::OnWindowBoundsChanged( |
| 1120 Id window_id, | 1103 Id window_id, |
| 1121 const gfx::Rect& old_bounds, | 1104 const gfx::Rect& old_bounds, |
| 1122 const gfx::Rect& new_bounds, | 1105 const gfx::Rect& new_bounds, |
| 1123 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 1106 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 1124 WindowMus* window = GetWindowByServerId(window_id); | 1107 WindowMus* window = GetWindowByServerId(window_id); |
| 1125 if (!window) | 1108 if (!window) |
| 1126 return; | 1109 return; |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 client_id_ = client_id; | 1488 client_id_ = client_id; |
| 1506 got_initial_displays_ = true; | 1489 got_initial_displays_ = true; |
| 1507 if (window_manager_delegate_) | 1490 if (window_manager_delegate_) |
| 1508 window_manager_delegate_->OnWmConnected(); | 1491 window_manager_delegate_->OnWmConnected(); |
| 1509 } | 1492 } |
| 1510 | 1493 |
| 1511 void WindowTreeClient::WmNewDisplayAdded( | 1494 void WindowTreeClient::WmNewDisplayAdded( |
| 1512 const display::Display& display, | 1495 const display::Display& display, |
| 1513 ui::mojom::WindowDataPtr root_data, | 1496 ui::mojom::WindowDataPtr root_data, |
| 1514 bool parent_drawn, | 1497 bool parent_drawn, |
| 1515 const cc::FrameSinkId& frame_sink_id, | |
| 1516 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { | 1498 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { |
| 1517 WmNewDisplayAddedImpl(display, std::move(root_data), parent_drawn, | 1499 WmNewDisplayAddedImpl(display, std::move(root_data), parent_drawn, |
| 1518 frame_sink_id, local_surface_id); | 1500 local_surface_id); |
| 1519 } | 1501 } |
| 1520 | 1502 |
| 1521 void WindowTreeClient::WmDisplayRemoved(int64_t display_id) { | 1503 void WindowTreeClient::WmDisplayRemoved(int64_t display_id) { |
| 1522 DCHECK(window_manager_delegate_); | 1504 DCHECK(window_manager_delegate_); |
| 1523 for (WindowMus* root : roots_) { | 1505 for (WindowMus* root : roots_) { |
| 1524 DCHECK(root->GetWindow()->GetHost()); | 1506 DCHECK(root->GetWindow()->GetHost()); |
| 1525 WindowTreeHostMus* window_tree_host = | 1507 WindowTreeHostMus* window_tree_host = |
| 1526 static_cast<WindowTreeHostMus*>(root->GetWindow()->GetHost()); | 1508 static_cast<WindowTreeHostMus*>(root->GetWindow()->GetHost()); |
| 1527 if (window_tree_host->display_id() == display_id) { | 1509 if (window_tree_host->display_id() == display_id) { |
| 1528 window_manager_delegate_->OnWmDisplayRemoved(window_tree_host); | 1510 window_manager_delegate_->OnWmDisplayRemoved(window_tree_host); |
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2097 } | 2079 } |
| 2098 | 2080 |
| 2099 void WindowTreeClient::OnCompositingLockStateChanged( | 2081 void WindowTreeClient::OnCompositingLockStateChanged( |
| 2100 ui::Compositor* compositor) {} | 2082 ui::Compositor* compositor) {} |
| 2101 | 2083 |
| 2102 void WindowTreeClient::OnCompositingShuttingDown(ui::Compositor* compositor) { | 2084 void WindowTreeClient::OnCompositingShuttingDown(ui::Compositor* compositor) { |
| 2103 compositor->RemoveObserver(this); | 2085 compositor->RemoveObserver(this); |
| 2104 } | 2086 } |
| 2105 | 2087 |
| 2106 } // namespace aura | 2088 } // namespace aura |
| OLD | NEW |