blob: 107a661019c8d49bc5f588c331956ca65f549aec [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 "chrome/browser/memory/tab_manager.h"
#include <algorithm>
#include <vector>
#include "base/logging.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "chrome/browser/memory/tab_manager_delegate_chromeos.h"
#include "chrome/browser/memory/tab_stats.h"
#include "chrome/common/url_constants.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace memory {
typedef testing::Test TabManagerDelegateTest;
TEST_F(TabManagerDelegateTest, GetProcessHandles) {
TabStats stats;
std::vector<TabManagerDelegate::ProcessInfo> process_id_pairs;
// Empty stats list gives empty |process_id_pairs| list.
TabStatsList empty_list;
process_id_pairs =
TabManagerDelegate::GetChildProcessInfos(empty_list);
EXPECT_EQ(0u, process_id_pairs.size());
// Two tabs in two different processes generates two
// |child_process_host_id| out.
TabStatsList two_list;
stats.child_process_host_id = 100;
stats.renderer_handle = 101;
two_list.push_back(stats);
stats.child_process_host_id = 200;
stats.renderer_handle = 201;
two_list.push_back(stats);
process_id_pairs = TabManagerDelegate::GetChildProcessInfos(two_list);
EXPECT_EQ(2u, process_id_pairs.size());
EXPECT_EQ(100, process_id_pairs[0].first);
EXPECT_EQ(101, process_id_pairs[0].second);
EXPECT_EQ(200, process_id_pairs[1].first);
EXPECT_EQ(201, process_id_pairs[1].second);
// Zero handles are removed.
TabStatsList zero_handle_list;
stats.child_process_host_id = 100;
stats.renderer_handle = 0;
zero_handle_list.push_back(stats);
process_id_pairs =
TabManagerDelegate::GetChildProcessInfos(zero_handle_list);
EXPECT_EQ(0u, process_id_pairs.size());
// Two tabs in the same process generates one handle out. When a duplicate
// occurs the later instance is dropped.
TabStatsList same_process_list;
stats.child_process_host_id = 100;
stats.renderer_handle = 101;
same_process_list.push_back(stats);
stats.child_process_host_id = 200;
stats.renderer_handle = 201;
same_process_list.push_back(stats);
stats.child_process_host_id = 300;
stats.renderer_handle = 101; // Duplicate.
same_process_list.push_back(stats);
process_id_pairs =
TabManagerDelegate::GetChildProcessInfos(same_process_list);
EXPECT_EQ(2u, process_id_pairs.size());
EXPECT_EQ(100, process_id_pairs[0].first);
EXPECT_EQ(101, process_id_pairs[0].second);
EXPECT_EQ(200, process_id_pairs[1].first);
EXPECT_EQ(201, process_id_pairs[1].second);
}
} // namespace memory