blob: c227ac2337c4ad063274ffea5acb8a102d234e05 [file] [log] [blame]
// Copyright (c) 2012 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 <algorithm>
#include <vector>
#include "base/logging.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "chrome/browser/chromeos/memory/oom_priority_manager.h"
#include "chrome/common/url_constants.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace chromeos {
typedef testing::Test OomPriorityManagerTest;
namespace {
enum TestIndicies {
kSelected,
kPinned,
kApp,
kPlayingAudio,
kRecent,
kOld,
kReallyOld,
kOldButPinned,
kReloadableUI,
};
} // namespace
// Tests the sorting comparator so that we know it's producing the
// desired order.
TEST_F(OomPriorityManagerTest, Comparator) {
chromeos::OomPriorityManager::TabStatsList test_list;
const base::TimeTicks now = base::TimeTicks::Now();
// Add kSelected last to verify we are sorting the array.
{
OomPriorityManager::TabStats stats;
stats.is_pinned = true;
stats.renderer_handle = kPinned;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.is_app = true;
stats.renderer_handle = kApp;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.is_playing_audio = true;
stats.renderer_handle = kPlayingAudio;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.last_selected = now - base::TimeDelta::FromSeconds(10);
stats.renderer_handle = kRecent;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.last_selected = now - base::TimeDelta::FromMinutes(15);
stats.renderer_handle = kOld;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.last_selected = now - base::TimeDelta::FromDays(365);
stats.renderer_handle = kReallyOld;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.is_pinned = true;
stats.last_selected = now - base::TimeDelta::FromDays(365);
stats.renderer_handle = kOldButPinned;
test_list.push_back(stats);
}
{
OomPriorityManager::TabStats stats;
stats.is_reloadable_ui = true;
stats.renderer_handle = kReloadableUI;
test_list.push_back(stats);
}
// This entry sorts to the front, so by adding it last we verify that
// we are actually sorting the array.
{
OomPriorityManager::TabStats stats;
stats.is_selected = true;
stats.renderer_handle = kSelected;
test_list.push_back(stats);
}
std::sort(test_list.begin(),
test_list.end(),
OomPriorityManager::CompareTabStats);
int index = 0;
EXPECT_EQ(kSelected, test_list[index++].renderer_handle);
EXPECT_EQ(kPinned, test_list[index++].renderer_handle);
EXPECT_EQ(kOldButPinned, test_list[index++].renderer_handle);
EXPECT_EQ(kApp, test_list[index++].renderer_handle);
EXPECT_EQ(kPlayingAudio, test_list[index++].renderer_handle);
EXPECT_EQ(kRecent, test_list[index++].renderer_handle);
EXPECT_EQ(kOld, test_list[index++].renderer_handle);
EXPECT_EQ(kReallyOld, test_list[index++].renderer_handle);
EXPECT_EQ(kReloadableUI, test_list[index++].renderer_handle);
}
TEST_F(OomPriorityManagerTest, IsReloadableUI) {
EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
GURL(chrome::kChromeUIDownloadsURL)));
EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
GURL(chrome::kChromeUIHistoryURL)));
EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
GURL(chrome::kChromeUINewTabURL)));
EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
GURL(chrome::kChromeUISettingsURL)));
// Debugging URLs are not included.
EXPECT_FALSE(OomPriorityManager::IsReloadableUI(
GURL(chrome::kChromeUIDiscardsURL)));
EXPECT_FALSE(OomPriorityManager::IsReloadableUI(
GURL(chrome::kChromeUINetInternalsURL)));
// Prefix matches are included.
EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
GURL("chrome://settings/fakeSetting")));
}
} // namespace chromeos