1 // Copyright (c) 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 "chrome/browser/ui/browser_iterator.h"
7 #include "chrome/browser/ui/browser.h"
8 #include "chrome/browser/ui/browser_list.h"
9 #include "chrome/browser/ui/host_desktop.h"
10 #include "chrome/test/base/browser_with_test_window_test.h"
12 typedef BrowserWithTestWindowTest BrowserIteratorTest
;
16 // BrowserWithTestWindowTest's default window is on the native desktop by
17 // default. Force it to be on the Ash desktop to be able to test the iterator
18 // in a situation with no browsers on the native desktop.
19 class BrowserIteratorTestWithInitialWindowInAsh
20 : public BrowserWithTestWindowTest
{
22 BrowserIteratorTestWithInitialWindowInAsh() {
23 SetHostDesktopType(chrome::HOST_DESKTOP_TYPE_ASH
);
27 // Helper function to iterate and count all the browsers.
28 size_t CountAllBrowsers() {
30 for (chrome::BrowserIterator iterator
; !iterator
.done(); iterator
.Next())
37 TEST_F(BrowserIteratorTest
, BrowsersOnMultipleDesktops
) {
38 Browser::CreateParams
native_params(profile(),
39 chrome::HOST_DESKTOP_TYPE_NATIVE
);
40 Browser::CreateParams
ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH
);
41 // Note, browser 1 is on the native desktop.
42 scoped_ptr
<Browser
> browser2(
43 chrome::CreateBrowserWithTestWindowForParams(&native_params
));
44 scoped_ptr
<Browser
> browser3(
45 chrome::CreateBrowserWithTestWindowForParams(&native_params
));
46 scoped_ptr
<Browser
> browser4(
47 chrome::CreateBrowserWithTestWindowForParams(&ash_params
));
48 scoped_ptr
<Browser
> browser5(
49 chrome::CreateBrowserWithTestWindowForParams(&ash_params
));
52 BrowserList
* native_list
=
53 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE
);
54 #if defined(OS_CHROMEOS)
55 // On Chrome OS, the native list and the ash list are the same.
56 EXPECT_EQ(5U, native_list
->size());
58 BrowserList
* ash_list
=
59 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH
);
60 EXPECT_EQ(3U, native_list
->size());
61 EXPECT_EQ(2U, ash_list
->size());
64 // Make sure the iterator finds all 5 browsers regardless of which desktop
66 EXPECT_EQ(5U, CountAllBrowsers());
69 TEST_F(BrowserIteratorTest
, NoBrowsersOnAshDesktop
) {
70 Browser::CreateParams
native_params(profile(),
71 chrome::HOST_DESKTOP_TYPE_NATIVE
);
72 // Note, browser 1 is on the native desktop.
73 scoped_ptr
<Browser
> browser2(
74 chrome::CreateBrowserWithTestWindowForParams(&native_params
));
75 scoped_ptr
<Browser
> browser3(
76 chrome::CreateBrowserWithTestWindowForParams(&native_params
));
79 BrowserList
* native_list
=
80 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE
);
81 EXPECT_EQ(3U, native_list
->size());
82 #if !defined(OS_CHROMEOS)
83 // On non-Chrome OS platforms the Ash list is independent from the native
84 // list, double-check that it's empty.
85 BrowserList
* ash_list
=
86 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH
);
87 EXPECT_EQ(0U, ash_list
->size());
90 // Make sure the iterator finds all 3 browsers on the native desktop and
91 // doesn't trip over the empty Ash desktop list.
92 EXPECT_EQ(3U, CountAllBrowsers());
95 TEST_F(BrowserIteratorTestWithInitialWindowInAsh
, NoBrowsersOnNativeDesktop
) {
96 Browser::CreateParams
ash_params(profile(), chrome::HOST_DESKTOP_TYPE_ASH
);
97 // Note, browser 1 is on the ash desktop.
98 scoped_ptr
<Browser
> browser2(
99 chrome::CreateBrowserWithTestWindowForParams(&ash_params
));
100 scoped_ptr
<Browser
> browser3(
101 chrome::CreateBrowserWithTestWindowForParams(&ash_params
));
103 BrowserList
* ash_list
=
104 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH
);
105 EXPECT_EQ(3U, ash_list
->size());
106 #if !defined(OS_CHROMEOS)
107 // On non-Chrome OS platforms the native list is independent from the Ash
108 // list; double-check that it's empty.
109 BrowserList
* native_list
=
110 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_NATIVE
);
111 EXPECT_EQ(0U, native_list
->size());
114 // Make sure the iterator finds all 3 browsers on the ash desktop and
115 // doesn't trip over the empty native desktop list.
116 EXPECT_EQ(3U, CountAllBrowsers());
119 // Verify that the iterator still behaves if there are no browsers at all.
120 TEST(BrowserIteratorTestWithNoTestWindow
, NoBrowser
) {
121 EXPECT_EQ(0U, CountAllBrowsers());