Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / memory / oom_priority_manager_unittest.cc
1 // Copyright (c) 2012 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.
4
5 #include <algorithm>
6 #include <vector>
7
8 #include "base/logging.h"
9 #include "base/strings/string16.h"
10 #include "base/time/time.h"
11 #include "chrome/browser/chromeos/memory/oom_priority_manager.h"
12 #include "chrome/common/url_constants.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "url/gurl.h"
15
16 namespace chromeos {
17
18 typedef testing::Test OomPriorityManagerTest;
19
20 namespace {
21 enum TestIndicies {
22   kSelected,
23   kPinned,
24   kApp,
25   kPlayingAudio,
26   kRecent,
27   kOld,
28   kReallyOld,
29   kOldButPinned,
30   kReloadableUI,
31 };
32 }  // namespace
33
34 // Tests the sorting comparator so that we know it's producing the
35 // desired order.
36 TEST_F(OomPriorityManagerTest, Comparator) {
37   chromeos::OomPriorityManager::TabStatsList test_list;
38   const base::TimeTicks now = base::TimeTicks::Now();
39
40   // Add kSelected last to verify we are sorting the array.
41
42   {
43     OomPriorityManager::TabStats stats;
44     stats.is_pinned = true;
45     stats.renderer_handle = kPinned;
46     test_list.push_back(stats);
47   }
48
49   {
50     OomPriorityManager::TabStats stats;
51     stats.is_app = true;
52     stats.renderer_handle = kApp;
53     test_list.push_back(stats);
54   }
55
56   {
57     OomPriorityManager::TabStats stats;
58     stats.is_playing_audio = true;
59     stats.renderer_handle = kPlayingAudio;
60     test_list.push_back(stats);
61   }
62
63   {
64     OomPriorityManager::TabStats stats;
65     stats.last_active = now - base::TimeDelta::FromSeconds(10);
66     stats.renderer_handle = kRecent;
67     test_list.push_back(stats);
68   }
69
70   {
71     OomPriorityManager::TabStats stats;
72     stats.last_active = now - base::TimeDelta::FromMinutes(15);
73     stats.renderer_handle = kOld;
74     test_list.push_back(stats);
75   }
76
77   {
78     OomPriorityManager::TabStats stats;
79     stats.last_active = now - base::TimeDelta::FromDays(365);
80     stats.renderer_handle = kReallyOld;
81     test_list.push_back(stats);
82   }
83
84   {
85     OomPriorityManager::TabStats stats;
86     stats.is_pinned = true;
87     stats.last_active = now - base::TimeDelta::FromDays(365);
88     stats.renderer_handle = kOldButPinned;
89     test_list.push_back(stats);
90   }
91
92   {
93     OomPriorityManager::TabStats stats;
94     stats.is_reloadable_ui = true;
95     stats.renderer_handle = kReloadableUI;
96     test_list.push_back(stats);
97   }
98
99   // This entry sorts to the front, so by adding it last we verify that
100   // we are actually sorting the array.
101   {
102     OomPriorityManager::TabStats stats;
103     stats.is_selected = true;
104     stats.renderer_handle = kSelected;
105     test_list.push_back(stats);
106   }
107
108   std::sort(test_list.begin(),
109             test_list.end(),
110             OomPriorityManager::CompareTabStats);
111
112   int index = 0;
113   EXPECT_EQ(kSelected, test_list[index++].renderer_handle);
114   EXPECT_EQ(kPinned, test_list[index++].renderer_handle);
115   EXPECT_EQ(kOldButPinned, test_list[index++].renderer_handle);
116   EXPECT_EQ(kApp, test_list[index++].renderer_handle);
117   EXPECT_EQ(kPlayingAudio, test_list[index++].renderer_handle);
118   EXPECT_EQ(kRecent, test_list[index++].renderer_handle);
119   EXPECT_EQ(kOld, test_list[index++].renderer_handle);
120   EXPECT_EQ(kReallyOld, test_list[index++].renderer_handle);
121   EXPECT_EQ(kReloadableUI, test_list[index++].renderer_handle);
122 }
123
124 TEST_F(OomPriorityManagerTest, IsReloadableUI) {
125   EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
126       GURL(chrome::kChromeUIDownloadsURL)));
127   EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
128       GURL(chrome::kChromeUIHistoryURL)));
129   EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
130       GURL(chrome::kChromeUINewTabURL)));
131   EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
132       GURL(chrome::kChromeUISettingsURL)));
133
134   // Debugging URLs are not included.
135   EXPECT_FALSE(OomPriorityManager::IsReloadableUI(
136       GURL(chrome::kChromeUIDiscardsURL)));
137   EXPECT_FALSE(OomPriorityManager::IsReloadableUI(
138       GURL(chrome::kChromeUINetInternalsURL)));
139
140   // Prefix matches are included.
141   EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
142       GURL("chrome://settings/fakeSetting")));
143 }
144
145 TEST_F(OomPriorityManagerTest, GetProcessHandles) {
146   OomPriorityManager::TabStats stats;
147   std::vector<base::ProcessHandle> handles;
148
149   // Empty stats list gives empty handles list.
150   OomPriorityManager::TabStatsList empty_list;
151   handles = OomPriorityManager::GetProcessHandles(empty_list);
152   EXPECT_EQ(0u, handles.size());
153
154   // Two tabs in two different processes generates two handles out.
155   OomPriorityManager::TabStatsList two_list;
156   stats.renderer_handle = 100;
157   two_list.push_back(stats);
158   stats.renderer_handle = 101;
159   two_list.push_back(stats);
160   handles = OomPriorityManager::GetProcessHandles(two_list);
161   EXPECT_EQ(2u, handles.size());
162   EXPECT_EQ(100, handles[0]);
163   EXPECT_EQ(101, handles[1]);
164
165   // Zero handles are removed.
166   OomPriorityManager::TabStatsList zero_handle_list;
167   stats.renderer_handle = 0;
168   zero_handle_list.push_back(stats);
169   handles = OomPriorityManager::GetProcessHandles(zero_handle_list);
170   EXPECT_EQ(0u, handles.size());
171
172   // Two tabs in the same process generates one handle out. When a duplicate
173   // occurs the later instance is dropped.
174   OomPriorityManager::TabStatsList same_process_list;
175   stats.renderer_handle = 100;
176   same_process_list.push_back(stats);
177   stats.renderer_handle = 101;
178   same_process_list.push_back(stats);
179   stats.renderer_handle = 100;  // Duplicate.
180   same_process_list.push_back(stats);
181   handles = OomPriorityManager::GetProcessHandles(same_process_list);
182   EXPECT_EQ(2u, handles.size());
183   EXPECT_EQ(100, handles[0]);
184   EXPECT_EQ(101, handles[1]);
185 }
186
187 }  // namespace chromeos