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

Unified Diff: services/ui/ws/display.cc

Issue 2346253004: Makes display roots be destroyed by client (Closed)
Patch Set: cleanup Created 4 years, 3 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 | « services/ui/ws/display.h ('k') | services/ui/ws/display_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/ws/display.cc
diff --git a/services/ui/ws/display.cc b/services/ui/ws/display.cc
index 8a27a90000c6f03588569b0d178514e647c054c6..5fd7b961834fbaee0743044fe1c7e6a1d3b72259 100644
--- a/services/ui/ws/display.cc
+++ b/services/ui/ws/display.cc
@@ -56,9 +56,12 @@ Display::~Display() {
for (ServerWindow* window : windows_needing_frame_destruction_)
window->RemoveObserver(this);
- // If there is a |binding_| then the tree was created specifically for this
- // display (which corresponds to a WindowTreeHost).
- if (binding_ && !window_manager_display_root_map_.empty()) {
+ if (!binding_) {
+ for (auto& pair : window_manager_display_root_map_)
+ pair.second->window_manager_state()->OnDisplayDestroying(this);
+ } else if (!window_manager_display_root_map_.empty()) {
+ // If there is a |binding_| then the tree was created specifically for this
+ // display (which corresponds to a WindowTreeHost).
window_server_->DestroyTree(window_manager_display_root_map_.begin()
->second->window_manager_state()
->window_tree());
@@ -148,7 +151,7 @@ WindowManagerDisplayRoot* Display::GetWindowManagerDisplayRootWithRoot(
const ServerWindow* window) {
for (auto& pair : window_manager_display_root_map_) {
if (pair.second->root() == window)
- return pair.second.get();
+ return pair.second;
}
return nullptr;
}
@@ -157,7 +160,7 @@ const WindowManagerDisplayRoot* Display::GetWindowManagerDisplayRootForUser(
const UserId& user_id) const {
auto iter = window_manager_display_root_map_.find(user_id);
return iter == window_manager_display_root_map_.end() ? nullptr
- : iter->second.get();
+ : iter->second;
}
const WindowManagerDisplayRoot* Display::GetActiveWindowManagerDisplayRoot()
@@ -244,9 +247,11 @@ void Display::InitWindowManagerDisplayRootsIfNecessary() {
// For this case we never create additional displays roots, so any
// id works.
window_manager_display_root_map_[shell::mojom::kRootUserID] =
- std::move(display_root_ptr);
+ display_root_ptr.get();
WindowTree* window_tree = binding_->CreateWindowTree(display_root->root());
display_root->window_manager_state_ = window_tree->window_manager_state();
+ window_tree->window_manager_state()->AddWindowManagerDisplayRoot(
+ std::move(display_root_ptr));
} else {
CreateWindowManagerDisplayRootsFromFactories();
}
@@ -267,15 +272,17 @@ void Display::CreateWindowManagerDisplayRootFromFactory(
std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr(
new WindowManagerDisplayRoot(this));
WindowManagerDisplayRoot* display_root = display_root_ptr.get();
- window_manager_display_root_map_[factory->user_id()] =
- std::move(display_root_ptr);
- display_root->window_manager_state_ =
+ window_manager_display_root_map_[factory->user_id()] = display_root_ptr.get();
+ WindowManagerState* window_manager_state =
factory->window_tree()->window_manager_state();
+ display_root->window_manager_state_ = window_manager_state;
const bool is_active =
factory->user_id() == window_server_->user_id_tracker()->active_id();
display_root->root()->SetVisible(is_active);
- display_root->window_manager_state()->window_tree()->AddRootForWindowManager(
+ window_manager_state->window_tree()->AddRootForWindowManager(
display_root->root());
+ window_manager_state->AddWindowManagerDisplayRoot(
+ std::move(display_root_ptr));
}
ServerWindow* Display::GetRootWindow() {
« no previous file with comments | « services/ui/ws/display.h ('k') | services/ui/ws/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698