| // 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 |