| Index: ash/common/wm/window_positioning_utils.cc
 | 
| diff --git a/ash/common/wm/window_positioning_utils.cc b/ash/common/wm/window_positioning_utils.cc
 | 
| deleted file mode 100644
 | 
| index babed2f4456c1c9a052f946f5299ca5d6441a038..0000000000000000000000000000000000000000
 | 
| --- a/ash/common/wm/window_positioning_utils.cc
 | 
| +++ /dev/null
 | 
| @@ -1,201 +0,0 @@
 | 
| -// Copyright 2016 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "ash/common/wm/window_positioning_utils.h"
 | 
| -
 | 
| -#include <algorithm>
 | 
| -
 | 
| -#include "ash/common/wm/system_modal_container_layout_manager.h"
 | 
| -#include "ash/common/wm/window_state.h"
 | 
| -#include "ash/common/wm/wm_event.h"
 | 
| -#include "ash/common/wm/wm_screen_util.h"
 | 
| -#include "ash/common/wm_shell.h"
 | 
| -#include "ash/common/wm_window.h"
 | 
| -#include "ash/root_window_controller.h"
 | 
| -#include "ash/shell.h"
 | 
| -#include "ui/aura/window_tracker.h"
 | 
| -#include "ui/display/display.h"
 | 
| -#include "ui/display/types/display_constants.h"
 | 
| -#include "ui/gfx/geometry/rect.h"
 | 
| -#include "ui/gfx/geometry/size.h"
 | 
| -
 | 
| -namespace ash {
 | 
| -namespace wm {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -// Returns the default width of a snapped window.
 | 
| -int GetDefaultSnappedWindowWidth(WmWindow* window) {
 | 
| -  const float kSnappedWidthWorkspaceRatio = 0.5f;
 | 
| -
 | 
| -  int work_area_width = GetDisplayWorkAreaBoundsInParent(window).width();
 | 
| -  int min_width = window->GetMinimumSize().width();
 | 
| -  int ideal_width =
 | 
| -      static_cast<int>(work_area_width * kSnappedWidthWorkspaceRatio);
 | 
| -  return std::min(work_area_width, std::max(ideal_width, min_width));
 | 
| -}
 | 
| -
 | 
| -// Return true if the window or one of its ancestor returns true from
 | 
| -// IsLockedToRoot().
 | 
| -bool IsWindowOrAncestorLockedToRoot(const WmWindow* window) {
 | 
| -  return window && (window->IsLockedToRoot() ||
 | 
| -                    IsWindowOrAncestorLockedToRoot(window->GetParent()));
 | 
| -}
 | 
| -
 | 
| -// Move all transient children to |dst_root|, including the ones in
 | 
| -// the child windows and transient children of the transient children.
 | 
| -void MoveAllTransientChildrenToNewRoot(const display::Display& display,
 | 
| -                                       WmWindow* window) {
 | 
| -  WmWindow* dst_root =
 | 
| -      Shell::GetRootWindowControllerWithDisplayId(display.id())->GetWindow();
 | 
| -  for (WmWindow* transient_child : window->GetTransientChildren()) {
 | 
| -    const int container_id = transient_child->GetParent()->GetShellWindowId();
 | 
| -    DCHECK_GE(container_id, 0);
 | 
| -    WmWindow* container = dst_root->GetChildByShellWindowId(container_id);
 | 
| -    const gfx::Rect transient_child_bounds_in_screen =
 | 
| -        transient_child->GetBoundsInScreen();
 | 
| -    container->AddChild(transient_child);
 | 
| -    transient_child->SetBoundsInScreen(transient_child_bounds_in_screen,
 | 
| -                                       display);
 | 
| -
 | 
| -    // Transient children may have transient children.
 | 
| -    MoveAllTransientChildrenToNewRoot(display, transient_child);
 | 
| -  }
 | 
| -  // Move transient children of the child windows if any.
 | 
| -  for (WmWindow* child : window->GetChildren())
 | 
| -    MoveAllTransientChildrenToNewRoot(display, child);
 | 
| -}
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -void AdjustBoundsSmallerThan(const gfx::Size& max_size, gfx::Rect* bounds) {
 | 
| -  bounds->set_width(std::min(bounds->width(), max_size.width()));
 | 
| -  bounds->set_height(std::min(bounds->height(), max_size.height()));
 | 
| -}
 | 
| -
 | 
| -void AdjustBoundsToEnsureWindowVisibility(const gfx::Rect& visible_area,
 | 
| -                                          int min_width,
 | 
| -                                          int min_height,
 | 
| -                                          gfx::Rect* bounds) {
 | 
| -  AdjustBoundsSmallerThan(visible_area.size(), bounds);
 | 
| -
 | 
| -  min_width = std::min(min_width, visible_area.width());
 | 
| -  min_height = std::min(min_height, visible_area.height());
 | 
| -
 | 
| -  if (bounds->right() < visible_area.x() + min_width) {
 | 
| -    bounds->set_x(visible_area.x() + std::min(bounds->width(), min_width) -
 | 
| -                  bounds->width());
 | 
| -  } else if (bounds->x() > visible_area.right() - min_width) {
 | 
| -    bounds->set_x(visible_area.right() - std::min(bounds->width(), min_width));
 | 
| -  }
 | 
| -  if (bounds->bottom() < visible_area.y() + min_height) {
 | 
| -    bounds->set_y(visible_area.y() + std::min(bounds->height(), min_height) -
 | 
| -                  bounds->height());
 | 
| -  } else if (bounds->y() > visible_area.bottom() - min_height) {
 | 
| -    bounds->set_y(visible_area.bottom() -
 | 
| -                  std::min(bounds->height(), min_height));
 | 
| -  }
 | 
| -  if (bounds->y() < visible_area.y())
 | 
| -    bounds->set_y(visible_area.y());
 | 
| -}
 | 
| -
 | 
| -void AdjustBoundsToEnsureMinimumWindowVisibility(const gfx::Rect& visible_area,
 | 
| -                                                 gfx::Rect* bounds) {
 | 
| -  AdjustBoundsToEnsureWindowVisibility(visible_area, kMinimumOnScreenArea,
 | 
| -                                       kMinimumOnScreenArea, bounds);
 | 
| -}
 | 
| -
 | 
| -gfx::Rect GetDefaultLeftSnappedWindowBoundsInParent(WmWindow* window) {
 | 
| -  gfx::Rect work_area_in_parent(GetDisplayWorkAreaBoundsInParent(window));
 | 
| -  return gfx::Rect(work_area_in_parent.x(), work_area_in_parent.y(),
 | 
| -                   GetDefaultSnappedWindowWidth(window),
 | 
| -                   work_area_in_parent.height());
 | 
| -}
 | 
| -
 | 
| -gfx::Rect GetDefaultRightSnappedWindowBoundsInParent(WmWindow* window) {
 | 
| -  gfx::Rect work_area_in_parent(GetDisplayWorkAreaBoundsInParent(window));
 | 
| -  int width = GetDefaultSnappedWindowWidth(window);
 | 
| -  return gfx::Rect(work_area_in_parent.right() - width, work_area_in_parent.y(),
 | 
| -                   width, work_area_in_parent.height());
 | 
| -}
 | 
| -
 | 
| -void CenterWindow(WmWindow* window) {
 | 
| -  WMEvent event(WM_EVENT_CENTER);
 | 
| -  window->GetWindowState()->OnWMEvent(&event);
 | 
| -}
 | 
| -
 | 
| -void SetBoundsInScreen(WmWindow* window,
 | 
| -                       const gfx::Rect& bounds_in_screen,
 | 
| -                       const display::Display& display) {
 | 
| -  DCHECK_NE(display::kInvalidDisplayId, display.id());
 | 
| -  // Don't move a window to other root window if:
 | 
| -  // a) the window is a transient window. It moves when its
 | 
| -  //    transient parent moves.
 | 
| -  // b) if the window or its ancestor has IsLockedToRoot(). It's intentionally
 | 
| -  //    kept in the same root window even if the bounds is outside of the
 | 
| -  //    display.
 | 
| -  if (!window->GetTransientParent() &&
 | 
| -      !IsWindowOrAncestorLockedToRoot(window)) {
 | 
| -    RootWindowController* dst_root_window_controller =
 | 
| -        Shell::GetRootWindowControllerWithDisplayId(display.id());
 | 
| -    DCHECK(dst_root_window_controller);
 | 
| -    WmWindow* dst_root = dst_root_window_controller->GetWindow();
 | 
| -    DCHECK(dst_root);
 | 
| -    WmWindow* dst_container = nullptr;
 | 
| -    if (dst_root != window->GetRootWindow()) {
 | 
| -      int container_id = window->GetParent()->GetShellWindowId();
 | 
| -      // All containers that uses screen coordinates must have valid window ids.
 | 
| -      DCHECK_GE(container_id, 0);
 | 
| -      // Don't move modal background.
 | 
| -      if (!SystemModalContainerLayoutManager::IsModalBackground(window))
 | 
| -        dst_container = dst_root->GetChildByShellWindowId(container_id);
 | 
| -    }
 | 
| -
 | 
| -    if (dst_container && window->GetParent() != dst_container) {
 | 
| -      WmWindow* focused = WmShell::Get()->GetFocusedWindow();
 | 
| -      WmWindow* active = WmShell::Get()->GetActiveWindow();
 | 
| -
 | 
| -      aura::WindowTracker tracker;
 | 
| -      if (focused)
 | 
| -        tracker.Add(focused->aura_window());
 | 
| -      if (active && focused != active)
 | 
| -        tracker.Add(active->aura_window());
 | 
| -
 | 
| -      gfx::Point origin = bounds_in_screen.origin();
 | 
| -      const gfx::Point display_origin = display.bounds().origin();
 | 
| -      origin.Offset(-display_origin.x(), -display_origin.y());
 | 
| -      gfx::Rect new_bounds = gfx::Rect(origin, bounds_in_screen.size());
 | 
| -
 | 
| -      // Set new bounds now so that the container's layout manager can adjust
 | 
| -      // the bounds if necessary.
 | 
| -      window->SetBounds(new_bounds);
 | 
| -
 | 
| -      dst_container->AddChild(window);
 | 
| -
 | 
| -      MoveAllTransientChildrenToNewRoot(display, window);
 | 
| -
 | 
| -      // Restore focused/active window.
 | 
| -      if (focused && tracker.Contains(focused->aura_window())) {
 | 
| -        focused->SetFocused();
 | 
| -        WmShell::Get()->set_root_window_for_new_windows(
 | 
| -            focused->GetRootWindow());
 | 
| -      } else if (active && tracker.Contains(active->aura_window())) {
 | 
| -        active->Activate();
 | 
| -      }
 | 
| -      // TODO(oshima): We should not have to update the bounds again
 | 
| -      // below in theory, but we currently do need as there is a code
 | 
| -      // that assumes that the bounds will never be overridden by the
 | 
| -      // layout mananger. We should have more explicit control how
 | 
| -      // constraints are applied by the layout manager.
 | 
| -    }
 | 
| -  }
 | 
| -  gfx::Point origin(bounds_in_screen.origin());
 | 
| -  const gfx::Point display_origin =
 | 
| -      window->GetDisplayNearestWindow().bounds().origin();
 | 
| -  origin.Offset(-display_origin.x(), -display_origin.y());
 | 
| -  window->SetBounds(gfx::Rect(origin, bounds_in_screen.size()));
 | 
| -}
 | 
| -
 | 
| -}  // namespace wm
 | 
| -}  // namespace ash
 | 
| 
 |