Index: ash/common/wm/window_cycle_controller.cc |
diff --git a/ash/common/wm/window_cycle_controller.cc b/ash/common/wm/window_cycle_controller.cc |
deleted file mode 100644 |
index 686290e54064664a3af0ddb3f256598b5223de62..0000000000000000000000000000000000000000 |
--- a/ash/common/wm/window_cycle_controller.cc |
+++ /dev/null |
@@ -1,126 +0,0 @@ |
-// Copyright 2014 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_cycle_controller.h" |
- |
-#include "ash/common/metrics/task_switch_source.h" |
-#include "ash/common/session/session_state_delegate.h" |
-#include "ash/common/wm/mru_window_tracker.h" |
-#include "ash/common/wm/window_cycle_event_filter.h" |
-#include "ash/common/wm/window_cycle_list.h" |
-#include "ash/common/wm/window_state.h" |
-#include "ash/common/wm_shell.h" |
-#include "ash/common/wm_window.h" |
-#include "ash/public/cpp/shell_window_ids.h" |
-#include "base/metrics/histogram_macros.h" |
- |
-namespace ash { |
- |
-namespace { |
- |
-// Returns the most recently active window from the |window_list| or nullptr |
-// if the list is empty. |
-WmWindow* GetActiveWindow(const MruWindowTracker::WindowList& window_list) { |
- return window_list.empty() ? nullptr : window_list[0]; |
-} |
- |
-} // namespace |
- |
-////////////////////////////////////////////////////////////////////////////// |
-// WindowCycleController, public: |
- |
-WindowCycleController::WindowCycleController() {} |
- |
-WindowCycleController::~WindowCycleController() {} |
- |
-// static |
-bool WindowCycleController::CanCycle() { |
- // Prevent window cycling if the screen is locked or a modal dialog is open. |
- WmShell* wm_shell = WmShell::Get(); |
- return !wm_shell->GetSessionStateDelegate()->IsScreenLocked() && |
- !wm_shell->IsSystemModalWindowOpen() && !wm_shell->IsPinned(); |
-} |
- |
-void WindowCycleController::HandleCycleWindow(Direction direction) { |
- if (!CanCycle()) |
- return; |
- |
- if (!IsCycling()) |
- StartCycling(); |
- |
- Step(direction); |
-} |
- |
-void WindowCycleController::StartCycling() { |
- MruWindowTracker::WindowList window_list = |
- WmShell::Get()->mru_window_tracker()->BuildMruWindowList(); |
- // Exclude windows: |
- // - non user positionable windows, such as extension popups. |
- // - windows being dragged |
- // - the AppList window, which will hide as soon as cycling starts |
- // anyway. It doesn't make sense to count it as a "switchable" window, yet |
- // a lot of code relies on the MRU list returning the app window. If we |
- // don't manually remove it, the window cycling UI won't crash or misbehave, |
- // but there will be a flicker as the target window changes. Also exclude |
- // unselectable windows such as extension popups. |
- auto window_is_ineligible = [](WmWindow* window) { |
- wm::WindowState* state = window->GetWindowState(); |
- return !state->IsUserPositionable() || state->is_dragged() || |
- window->GetRootWindow() |
- ->GetChildByShellWindowId(kShellWindowId_AppListContainer) |
- ->Contains(window); |
- }; |
- window_list.erase(std::remove_if(window_list.begin(), window_list.end(), |
- window_is_ineligible), |
- window_list.end()); |
- |
- active_window_before_window_cycle_ = GetActiveWindow(window_list); |
- |
- window_cycle_list_.reset(new WindowCycleList(window_list)); |
- event_filter_ = WmShell::Get()->CreateWindowCycleEventFilter(); |
- cycle_start_time_ = base::Time::Now(); |
- WmShell::Get()->RecordUserMetricsAction(UMA_WINDOW_CYCLE); |
- UMA_HISTOGRAM_COUNTS_100("Ash.WindowCycleController.Items", |
- window_list.size()); |
-} |
- |
-void WindowCycleController::CompleteCycling() { |
- window_cycle_list_->set_user_did_accept(true); |
- StopCycling(); |
-} |
- |
-void WindowCycleController::CancelCycling() { |
- StopCycling(); |
-} |
- |
-////////////////////////////////////////////////////////////////////////////// |
-// WindowCycleController, private: |
- |
-void WindowCycleController::Step(Direction direction) { |
- DCHECK(window_cycle_list_.get()); |
- window_cycle_list_->Step(direction); |
-} |
- |
-void WindowCycleController::StopCycling() { |
- UMA_HISTOGRAM_COUNTS_100("Ash.WindowCycleController.SelectionDepth", |
- window_cycle_list_->current_index() + 1); |
- window_cycle_list_.reset(); |
- |
- WmWindow* active_window_after_window_cycle = GetActiveWindow( |
- WmShell::Get()->mru_window_tracker()->BuildMruWindowList()); |
- |
- // Remove our key event filter. |
- event_filter_.reset(); |
- UMA_HISTOGRAM_MEDIUM_TIMES("Ash.WindowCycleController.CycleTime", |
- base::Time::Now() - cycle_start_time_); |
- |
- if (active_window_after_window_cycle != nullptr && |
- active_window_before_window_cycle_ != active_window_after_window_cycle) { |
- WmShell::Get()->RecordTaskSwitchMetric( |
- TaskSwitchSource::WINDOW_CYCLE_CONTROLLER); |
- } |
- active_window_before_window_cycle_ = nullptr; |
-} |
- |
-} // namespace ash |