| Index: ash/wm/overview/window_grid.cc | 
| diff --git a/ash/wm/overview/window_grid.cc b/ash/wm/overview/window_grid.cc | 
| index e8d26c28e25ab9dd2af355199c39cf92a19344c7..acb22d7899cc0c6ac511007558b9d7f53bb49b55 100644 | 
| --- a/ash/wm/overview/window_grid.cc | 
| +++ b/ash/wm/overview/window_grid.cc | 
| @@ -257,14 +257,16 @@ bool IsMinimizedStateType(wm::WindowStateType type) { | 
|  | 
| WindowGrid::WindowGrid(aura::Window* root_window, | 
| const std::vector<aura::Window*>& windows, | 
| -                       WindowSelector* window_selector) | 
| +                       WindowSelector* window_selector, | 
| +                       const gfx::Rect& bounds_in_screen) | 
| : root_window_(root_window), | 
| window_selector_(window_selector), | 
| window_observer_(this), | 
| window_state_observer_(this), | 
| selected_index_(0), | 
| num_columns_(0), | 
| -      prepared_for_overview_(false) { | 
| +      prepared_for_overview_(false), | 
| +      bounds_(bounds_in_screen) { | 
| aura::Window::Windows windows_in_root; | 
| for (auto* window : windows) { | 
| if (window->GetRootWindow() == root_window) | 
| @@ -275,7 +277,7 @@ WindowGrid::WindowGrid(aura::Window* root_window, | 
| window_observer_.Add(window); | 
| window_state_observer_.Add(wm::GetWindowState(window)); | 
| window_list_.push_back( | 
| -        base::MakeUnique<WindowSelectorItem>(window, window_selector_)); | 
| +        base::MakeUnique<WindowSelectorItem>(window, window_selector_, this)); | 
| } | 
| } | 
|  | 
| @@ -326,9 +328,8 @@ void WindowGrid::PositionWindows(bool animate) { | 
| aura::Window* widget_window = shield_widget_->GetNativeWindow(); | 
| const gfx::Rect bounds = widget_window->parent()->bounds(); | 
| widget_window->SetBounds(bounds); | 
| -  gfx::Rect total_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 
| -      root_window_->GetChildById(kShellWindowId_DefaultContainer)); | 
| -  ::wm::ConvertRectToScreen(root_window_, &total_bounds); | 
| + | 
| +  gfx::Rect total_bounds = bounds_; | 
| // Windows occupy vertically centered area with additional vertical insets. | 
| int horizontal_inset = | 
| gfx::ToFlooredInt(std::min(kOverviewInsetRatio * total_bounds.width(), | 
| @@ -518,6 +519,20 @@ bool WindowGrid::Contains(const aura::Window* window) const { | 
| return false; | 
| } | 
|  | 
| +void WindowGrid::RemoveItem(WindowSelectorItem* selector_item) { | 
| +  auto iter = | 
| +      std::find_if(window_list_.begin(), window_list_.end(), | 
| +                   [selector_item](std::unique_ptr<WindowSelectorItem>& item) { | 
| +                     return (item.get() == selector_item); | 
| +                   }); | 
| +  if (iter != window_list_.end()) { | 
| +    window_observer_.Remove(selector_item->GetWindow()); | 
| +    window_state_observer_.Remove( | 
| +        wm::GetWindowState(selector_item->GetWindow())); | 
| +    window_list_.erase(iter); | 
| +  } | 
| +} | 
| + | 
| void WindowGrid::FilterItems(const base::string16& pattern) { | 
| base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(pattern); | 
| for (const auto& window : window_list_) { | 
| @@ -544,6 +559,11 @@ void WindowGrid::WindowClosing(WindowSelectorItem* window) { | 
| selection_widget_->SetOpacity(0.f); | 
| } | 
|  | 
| +void WindowGrid::SetBoundsAndUpdatePositions(const gfx::Rect& bounds) { | 
| +  bounds_ = bounds; | 
| +  PositionWindows(true /* animate */); | 
| +} | 
| + | 
| void WindowGrid::OnWindowDestroying(aura::Window* window) { | 
| window_observer_.Remove(window); | 
| window_state_observer_.Remove(wm::GetWindowState(window)); | 
|  |