| Index: services/ui/ws/window_tree.cc
 | 
| diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc
 | 
| index f51b6ecbf80318f7f24e4524da7ad98e2e604b80..e4ad6630a5854f92e9733b038600869c49ff494d 100644
 | 
| --- a/services/ui/ws/window_tree.cc
 | 
| +++ b/services/ui/ws/window_tree.cc
 | 
| @@ -585,10 +585,6 @@ void WindowTree::ProcessWindowHierarchyChanged(const ServerWindow* window,
 | 
|                                                 const ServerWindow* old_parent,
 | 
|                                                 bool originated_change) {
 | 
|    const bool knows_new = new_parent && IsWindowKnown(new_parent);
 | 
| -  if (originated_change && !IsWindowKnown(window) && knows_new) {
 | 
| -    std::vector<const ServerWindow*> unused;
 | 
| -    GetUnknownWindowsFrom(window, &unused);
 | 
| -  }
 | 
|    if (originated_change || (window_server_->current_operation_type() ==
 | 
|                              OperationType::DELETE_WINDOW) ||
 | 
|        (window_server_->current_operation_type() == OperationType::EMBED) ||
 | 
| @@ -899,9 +895,16 @@ bool WindowTree::DeleteWindowImpl(WindowTree* source, ServerWindow* window) {
 | 
|  void WindowTree::GetUnknownWindowsFrom(
 | 
|      const ServerWindow* window,
 | 
|      std::vector<const ServerWindow*>* windows) {
 | 
| -  if (IsWindowKnown(window) || !access_policy_->CanGetWindowTree(window))
 | 
| +  if (!access_policy_->CanGetWindowTree(window))
 | 
|      return;
 | 
| +
 | 
| +  // This function is called in the context of a hierarchy change when the
 | 
| +  // parent wasn't known. We need to tell the client about the window so that
 | 
| +  // it can set the parent correctly.
 | 
|    windows->push_back(window);
 | 
| +  if (IsWindowKnown(window))
 | 
| +    return;
 | 
| +
 | 
|    // There are two cases where this gets hit:
 | 
|    // . During init, in which case using the window id as the client id is
 | 
|    //   fine.
 | 
| 
 |