Roll src/third_party/WebKit c8d1660:ae3684d (svn 197337:197343)
[chromium-blink-merge.git] / ash / wm / mru_window_tracker_unittest.cc
blob4aff5999d25880ecd42c87705edf482df405df91
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ash/shell.h"
6 #include "ash/shell_window_ids.h"
7 #include "ash/test/ash_test_base.h"
8 #include "ash/test/test_shelf_delegate.h"
9 #include "ash/wm/mru_window_tracker.h"
10 #include "ash/wm/window_state.h"
11 #include "ash/wm/window_util.h"
12 #include "base/compiler_specific.h"
13 #include "ui/aura/test/test_window_delegate.h"
14 #include "ui/aura/window.h"
15 #include "ui/base/hit_test.h"
16 #include "ui/views/widget/widget.h"
18 namespace ash {
20 class MruWindowTrackerTest : public test::AshTestBase {
21 public:
22 MruWindowTrackerTest() {}
23 ~MruWindowTrackerTest() override {}
25 aura::Window* CreateWindow() {
26 return CreateTestWindowInShellWithBounds(gfx::Rect(0, 0, 400, 400));
29 ash::MruWindowTracker* mru_window_tracker() {
30 return Shell::GetInstance()->mru_window_tracker();
33 private:
34 DISALLOW_COPY_AND_ASSIGN(MruWindowTrackerTest);
37 // Basic test that the activation order is tracked.
38 TEST_F(MruWindowTrackerTest, Basic) {
39 scoped_ptr<aura::Window> w1(CreateWindow());
40 scoped_ptr<aura::Window> w2(CreateWindow());
41 scoped_ptr<aura::Window> w3(CreateWindow());
42 wm::ActivateWindow(w3.get());
43 wm::ActivateWindow(w2.get());
44 wm::ActivateWindow(w1.get());
46 MruWindowTracker::WindowList window_list =
47 mru_window_tracker()->BuildMruWindowList();
48 EXPECT_EQ(w1.get(), window_list[0]);
49 EXPECT_EQ(w2.get(), window_list[1]);
50 EXPECT_EQ(w3.get(), window_list[2]);
53 // Test that minimized windows are considered least recently used (but kept in
54 // correct relative order).
55 TEST_F(MruWindowTrackerTest, MinimizedWindowsAreLru) {
56 scoped_ptr<aura::Window> w1(CreateWindow());
57 scoped_ptr<aura::Window> w2(CreateWindow());
58 scoped_ptr<aura::Window> w3(CreateWindow());
59 scoped_ptr<aura::Window> w4(CreateWindow());
60 scoped_ptr<aura::Window> w5(CreateWindow());
61 scoped_ptr<aura::Window> w6(CreateWindow());
62 wm::ActivateWindow(w6.get());
63 wm::ActivateWindow(w5.get());
64 wm::ActivateWindow(w4.get());
65 wm::ActivateWindow(w3.get());
66 wm::ActivateWindow(w2.get());
67 wm::ActivateWindow(w1.get());
69 wm::GetWindowState(w1.get())->Minimize();
70 wm::GetWindowState(w4.get())->Minimize();
71 wm::GetWindowState(w5.get())->Minimize();
73 // Expect the relative order of minimized windows to remain the same, but all
74 // minimized windows to be at the end of the list.
75 MruWindowTracker::WindowList window_list =
76 mru_window_tracker()->BuildMruWindowList();
77 EXPECT_EQ(w2.get(), window_list[0]);
78 EXPECT_EQ(w3.get(), window_list[1]);
79 EXPECT_EQ(w6.get(), window_list[2]);
80 EXPECT_EQ(w1.get(), window_list[3]);
81 EXPECT_EQ(w4.get(), window_list[4]);
82 EXPECT_EQ(w5.get(), window_list[5]);
85 // Tests that windows being dragged are only in the WindowList once.
86 TEST_F(MruWindowTrackerTest, DraggedWindowsInListOnlyOnce) {
87 scoped_ptr<aura::Window> w1(CreateWindow());
88 wm::ActivateWindow(w1.get());
90 // Start dragging the window.
91 wm::GetWindowState(w1.get())->CreateDragDetails(
92 w1.get(), gfx::Point(), HTRIGHT, aura::client::WINDOW_MOVE_SOURCE_TOUCH);
94 // During a drag the window is reparented by the Docked container.
95 aura::Window* drag_container = Shell::GetContainer(
96 Shell::GetTargetRootWindow(), kShellWindowId_DockedContainer);
97 drag_container->AddChild(w1.get());
98 EXPECT_TRUE(wm::GetWindowState(w1.get())->is_dragged());
100 // The dragged window should only be in the list once.
101 MruWindowTracker::WindowList window_list =
102 mru_window_tracker()->BuildWindowListIgnoreModal();
103 EXPECT_EQ(1, std::count(window_list.begin(), window_list.end(), w1.get()));
106 } // namespace ash