Avi Drissman | 4a8573c | 2022-09-09 19:35:54 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Henrique Ferreiro | f3fbcea2 | 2021-02-05 23:12:19 | [diff] [blame] | 5 | #include "ash/constants/ash_switches.h" |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 6 | #include "base/command_line.h" |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 7 | #include "build/chromeos_buildflags.h" |
Henrique Ferreiro | e7040606 | 2021-03-05 11:54:24 | [diff] [blame] | 8 | #include "chrome/browser/ash/login/chrome_restart_request.h" |
Yeunjoo Choi | 15ab1ac | 2021-02-04 17:15:07 | [diff] [blame] | 9 | #include "chrome/browser/ash/profiles/profile_helper.h" |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 10 | #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" |
Scott Violet | 1e207c4 | 2019-05-06 19:58:07 | [diff] [blame] | 11 | #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_helper.h" |
| 12 | #include "chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.h" |
Sean Kau | 3af57e2 | 2021-10-18 19:33:14 | [diff] [blame] | 13 | #include "chrome/browser/ui/ash/window_pin_util.h" |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 14 | #include "chrome/browser/ui/browser.h" |
[email protected] | 0665ebe | 2013-02-13 09:53:19 | [diff] [blame] | 15 | #include "chrome/browser/ui/browser_finder.h" |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 16 | #include "chrome/browser/ui/browser_navigator.h" |
Aran Gilman | d217b5b | 2019-04-11 17:45:43 | [diff] [blame] | 17 | #include "chrome/browser/ui/browser_navigator_browsertest.h" |
Ivan Sandrk | c8e238b6 | 2019-03-18 15:00:02 | [diff] [blame] | 18 | #include "chrome/browser/ui/browser_window.h" |
[email protected] | ee49695 | 2013-01-10 23:17:33 | [diff] [blame] | 19 | #include "chrome/browser/ui/tabs/tab_strip_model.h" |
[email protected] | 78e2edc | 2012-07-01 23:32:28 | [diff] [blame] | 20 | #include "chrome/common/chrome_switches.h" |
Ivan Sandrk | c8e238b6 | 2019-03-18 15:00:02 | [diff] [blame] | 21 | #include "chrome/common/webui_url_constants.h" |
Steven Bennetts | c406dd2 | 2017-07-28 00:32:36 | [diff] [blame] | 22 | #include "chrome/test/base/ui_test_utils.h" |
Alexander Alekseev | 3f09a8f | 2018-05-03 02:52:10 | [diff] [blame] | 23 | #include "components/account_id/account_id.h" |
[email protected] | 4ca1530 | 2012-01-03 05:53:20 | [diff] [blame] | 24 | #include "content/public/browser/web_contents.h" |
Peter Kasting | 919ce65 | 2020-05-07 10:22:36 | [diff] [blame] | 25 | #include "content/public/test/browser_test.h" |
Ivan Sandrk | c8e238b6 | 2019-03-18 15:00:02 | [diff] [blame] | 26 | #include "ui/aura/window.h" |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 27 | |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 28 | #if BUILDFLAG(IS_CHROMEOS_LACROS) |
| 29 | #include "chromeos/crosapi/mojom/crosapi.mojom.h" |
| 30 | #include "chromeos/crosapi/mojom/test_controller.mojom-test-utils.h" |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 31 | #include "chromeos/lacros/lacros_test_helper.h" |
Eriko Kurimoto | 72e9e37 | 2022-04-20 17:00:29 | [diff] [blame] | 32 | #include "chromeos/startup/browser_init_params.h" |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 33 | #endif |
| 34 | |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 35 | namespace { |
| 36 | |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 37 | using BrowserNavigatorTestChromeOS = BrowserNavigatorTest; |
| 38 | |
| 39 | #if BUILDFLAG(IS_CHROMEOS_ASH) |
| 40 | |
[email protected] | ddddfda | 2011-07-14 23:19:39 | [diff] [blame] | 41 | GURL GetGoogleURL() { |
| 42 | return GURL("http://www.google.com/"); |
| 43 | } |
| 44 | |
Roman Aleksandrov | abee5ea2 | 2020-05-19 20:23:07 | [diff] [blame] | 45 | // Verifies that new browser is not opened for Signin profile. |
| 46 | IN_PROC_BROWSER_TEST_F(BrowserNavigatorTestChromeOS, RestrictSigninProfile) { |
| 47 | EXPECT_EQ(chrome::GetTotalBrowserCount(), 1u); |
| 48 | |
Ramin Halavati | c04ae90 | 2021-01-11 12:52:41 | [diff] [blame] | 49 | EXPECT_EQ(Browser::CreationStatus::kErrorProfileUnsuitable, |
| 50 | Browser::GetCreationStatusForProfile( |
Yeunjoo Choi | 36f21d54 | 2022-01-13 03:12:33 | [diff] [blame] | 51 | ash::ProfileHelper::GetSigninProfile())); |
Roman Aleksandrov | abee5ea2 | 2020-05-19 20:23:07 | [diff] [blame] | 52 | } |
| 53 | |
Ivan Sandrk | c8e238b6 | 2019-03-18 15:00:02 | [diff] [blame] | 54 | // Verify that page navigation is blocked in locked fullscreen mode. |
| 55 | IN_PROC_BROWSER_TEST_F(BrowserNavigatorTestChromeOS, |
| 56 | NavigationBlockedInLockedFullscreen) { |
| 57 | // Set locked fullscreen state. |
| 58 | aura::Window* window = browser()->window()->GetNativeWindow(); |
Sean Kau | 3af57e2 | 2021-10-18 19:33:14 | [diff] [blame] | 59 | PinWindow(window, /*trusted=*/true); |
Ivan Sandrk | c8e238b6 | 2019-03-18 15:00:02 | [diff] [blame] | 60 | |
| 61 | // Navigate to a page. |
| 62 | auto url = GURL(chrome::kChromeUIVersionURL); |
| 63 | NavigateParams params(MakeNavigateParams(browser())); |
| 64 | params.disposition = WindowOpenDisposition::NEW_WINDOW; |
| 65 | params.url = url; |
| 66 | params.window_action = NavigateParams::SHOW_WINDOW; |
| 67 | Navigate(¶ms); |
| 68 | |
| 69 | // The page should not be opened, and the browser should still sit at the |
| 70 | // default about:blank page. |
| 71 | EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
| 72 | EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 73 | EXPECT_EQ(GURL(url::kAboutBlankURL), |
| 74 | browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 75 | |
| 76 | // As a sanity check unset the locked fullscreen state and make sure that the |
| 77 | // navigation happens (the following EXPECTs fail if the next line isn't |
| 78 | // executed). |
Sean Kau | 3af57e2 | 2021-10-18 19:33:14 | [diff] [blame] | 79 | UnpinWindow(window); |
Ivan Sandrk | c8e238b6 | 2019-03-18 15:00:02 | [diff] [blame] | 80 | |
| 81 | Navigate(¶ms); |
| 82 | |
| 83 | // The original browser should still be at the same page, but the newly |
| 84 | // opened browser should sit on the chrome:version page. |
| 85 | EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); |
| 86 | EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 87 | EXPECT_EQ(GURL(url::kAboutBlankURL), |
| 88 | browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 89 | EXPECT_EQ(1, params.browser->tab_strip_model()->count()); |
| 90 | EXPECT_EQ( |
| 91 | GURL(chrome::kChromeUIVersionURL), |
| 92 | params.browser->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 93 | } |
| 94 | |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 95 | // Subclass that tests navigation while in the Guest session. |
Aran Gilman | d217b5b | 2019-04-11 17:45:43 | [diff] [blame] | 96 | class BrowserGuestSessionNavigatorTest : public BrowserNavigatorTest { |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 97 | protected: |
dcheng | 465662e | 2015-01-21 14:19:21 | [diff] [blame] | 98 | void SetUpCommandLine(base::CommandLine* command_line) override { |
avi | 556c0502 | 2014-12-22 23:31:43 | [diff] [blame] | 99 | base::CommandLine command_line_copy = *command_line; |
Henrique Ferreiro | 93dd33b | 2022-01-18 16:06:45 | [diff] [blame] | 100 | command_line_copy.AppendSwitchASCII(ash::switches::kLoginProfile, "user"); |
| 101 | command_line_copy.AppendSwitch(ash::switches::kGuestSession); |
Henrique Ferreiro | b403be3 | 2021-09-22 07:15:36 | [diff] [blame] | 102 | ash::GetOffTheRecordCommandLine(GetGoogleURL(), command_line_copy, |
| 103 | command_line); |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 104 | } |
| 105 | }; |
| 106 | |
| 107 | // This test verifies that the settings page is opened in the incognito window |
| 108 | // in Guest Session (as well as all other windows in Guest session). |
| 109 | IN_PROC_BROWSER_TEST_F(BrowserGuestSessionNavigatorTest, |
| 110 | Disposition_Settings_UseIncognitoWindow) { |
| 111 | Browser* incognito_browser = CreateIncognitoBrowser(); |
| 112 | |
[email protected] | 0665ebe | 2013-02-13 09:53:19 | [diff] [blame] | 113 | EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); |
[email protected] | ee49695 | 2013-01-10 23:17:33 | [diff] [blame] | 114 | EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 115 | EXPECT_EQ(1, incognito_browser->tab_strip_model()->count()); |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 116 | |
| 117 | // Navigate to the settings page. |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 118 | NavigateParams params(MakeNavigateParams(incognito_browser)); |
nick | 3b04f32 | 2016-08-31 19:29:19 | [diff] [blame] | 119 | params.disposition = WindowOpenDisposition::SINGLETON_TAB; |
Dan Beam | 141c4893 | 2019-08-22 02:29:39 | [diff] [blame] | 120 | params.url = GURL("chrome://settings"); |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 121 | params.window_action = NavigateParams::SHOW_WINDOW; |
| 122 | params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
| 123 | Navigate(¶ms); |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 124 | |
| 125 | // Settings page should be opened in incognito window. |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 126 | EXPECT_NE(browser(), params.browser); |
| 127 | EXPECT_EQ(incognito_browser, params.browser); |
[email protected] | ee49695 | 2013-01-10 23:17:33 | [diff] [blame] | 128 | EXPECT_EQ(2, incognito_browser->tab_strip_model()->count()); |
Aran Gilman | d217b5b | 2019-04-11 17:45:43 | [diff] [blame] | 129 | EXPECT_EQ( |
Dan Beam | 141c4893 | 2019-08-22 02:29:39 | [diff] [blame] | 130 | GURL("chrome://settings"), |
Aran Gilman | d217b5b | 2019-04-11 17:45:43 | [diff] [blame] | 131 | incognito_browser->tab_strip_model()->GetActiveWebContents()->GetURL()); |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 132 | } |
| 133 | |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 134 | // Test that in multi user environments a newly created browser gets created |
| 135 | // on the same desktop as the browser is shown on. |
| 136 | IN_PROC_BROWSER_TEST_F(BrowserGuestSessionNavigatorTest, |
Ahmed Fakhry | 6a3fddd4 | 2017-09-13 02:09:12 | [diff] [blame] | 137 | Browser_Gets_Created_On_Visiting_Desktop) { |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 138 | // Test 1: Test that a browser created from a visiting browser will be on the |
| 139 | // same visiting desktop. |
| 140 | { |
alemate | cdf46dd | 2015-11-12 03:15:16 | [diff] [blame] | 141 | const AccountId desktop_account_id( |
| 142 | AccountId::FromUserEmail("[email protected]")); |
Scott Violet | 7f44d5f0 | 2019-05-06 17:43:39 | [diff] [blame] | 143 | TestMultiUserWindowManager* window_manager = |
| 144 | TestMultiUserWindowManager::Create(browser(), desktop_account_id); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 145 | |
| 146 | EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
| 147 | |
| 148 | // Navigate to the settings page. |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 149 | NavigateParams params(MakeNavigateParams(browser())); |
nick | 3b04f32 | 2016-08-31 19:29:19 | [diff] [blame] | 150 | params.disposition = WindowOpenDisposition::NEW_POPUP; |
Dan Beam | 141c4893 | 2019-08-22 02:29:39 | [diff] [blame] | 151 | params.url = GURL("chrome://settings"); |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 152 | params.window_action = NavigateParams::SHOW_WINDOW; |
| 153 | params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 154 | params.browser = browser(); |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 155 | Navigate(¶ms); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 156 | |
| 157 | EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); |
| 158 | |
Scott Violet | 7f44d5f0 | 2019-05-06 17:43:39 | [diff] [blame] | 159 | aura::Window* created_window = window_manager->created_window(); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 160 | ASSERT_TRUE(created_window); |
alemate | cdf46dd | 2015-11-12 03:15:16 | [diff] [blame] | 161 | EXPECT_TRUE( |
Scott Violet | 7f44d5f0 | 2019-05-06 17:43:39 | [diff] [blame] | 162 | MultiUserWindowManagerHelper::GetInstance()->IsWindowOnDesktopOfUser( |
| 163 | created_window, desktop_account_id)); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 164 | } |
| 165 | // Test 2: Test that a window which is not visiting does not cause an owner |
| 166 | // assignment of a newly created browser. |
| 167 | { |
alemate | cdf46dd | 2015-11-12 03:15:16 | [diff] [blame] | 168 | const AccountId browser_owner = |
| 169 | multi_user_util::GetAccountIdFromProfile(browser()->profile()); |
Scott Violet | 7f44d5f0 | 2019-05-06 17:43:39 | [diff] [blame] | 170 | TestMultiUserWindowManager* window_manager = |
| 171 | TestMultiUserWindowManager::Create(browser(), browser_owner); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 172 | |
| 173 | // Navigate to the settings page. |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 174 | NavigateParams params(MakeNavigateParams(browser())); |
nick | 3b04f32 | 2016-08-31 19:29:19 | [diff] [blame] | 175 | params.disposition = WindowOpenDisposition::NEW_POPUP; |
Dan Beam | 141c4893 | 2019-08-22 02:29:39 | [diff] [blame] | 176 | params.url = GURL("chrome://settings"); |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 177 | params.window_action = NavigateParams::SHOW_WINDOW; |
| 178 | params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 179 | params.browser = browser(); |
cm.sanchi | 2522bc9 | 2017-12-04 08:04:13 | [diff] [blame] | 180 | Navigate(¶ms); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 181 | |
| 182 | EXPECT_EQ(3u, chrome::GetTotalBrowserCount()); |
| 183 | |
| 184 | // The ShowWindowForUser should not have been called since the window is |
| 185 | // already on the correct desktop. |
Scott Violet | 7f44d5f0 | 2019-05-06 17:43:39 | [diff] [blame] | 186 | ASSERT_FALSE(window_manager->created_window()); |
[email protected] | ad4c2d3 | 2013-12-06 12:59:26 | [diff] [blame] | 187 | } |
| 188 | } |
| 189 | |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 190 | #endif // BUILDFLAG(IS_CHROMEOS_ASH) |
| 191 | |
| 192 | #if BUILDFLAG(IS_CHROMEOS_LACROS) |
| 193 | // Verifies that the navigation is trying to open the os:// scheme page in |
| 194 | // Ash, will fail and then open it as chrome:// in Lacros to show a 404 error. |
| 195 | IN_PROC_BROWSER_TEST_F(BrowserNavigatorTestChromeOS, OsSchemeRedirectFail) { |
| 196 | EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
| 197 | EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 198 | |
| 199 | // Navigate to an unknown page with an os:// scheme. |
| 200 | NavigateParams params(MakeNavigateParams(browser())); |
| 201 | params.disposition = WindowOpenDisposition::SINGLETON_TAB; |
| 202 | params.url = GURL("os://foobar"); |
| 203 | params.window_action = NavigateParams::SHOW_WINDOW; |
| 204 | params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
| 205 | Navigate(¶ms); |
| 206 | |
Stefan Kuhne | c2dd8566 | 2022-07-29 12:36:35 | [diff] [blame] | 207 | // A new blocked page should be shown in the browser. |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 208 | EXPECT_EQ(browser(), params.browser); |
| 209 | EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
Stefan Kuhne | c2dd8566 | 2022-07-29 12:36:35 | [diff] [blame] | 210 | EXPECT_EQ(GURL(content::kBlockedURL), |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 211 | browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 212 | } |
| 213 | |
| 214 | // Verifies that the navigation of an os:// scheme page is opening an app on |
| 215 | // the ash side and does not produce a navigation on the Lacros side. |
| 216 | IN_PROC_BROWSER_TEST_F(BrowserNavigatorTestChromeOS, OsSchemeRedirectSucceed) { |
| 217 | if (chromeos::LacrosService::Get()->GetInterfaceVersion( |
| 218 | crosapi::mojom::TestController::Uuid_) < |
| 219 | static_cast<int>(crosapi::mojom::TestController::MethodMinVersions:: |
| 220 | kGetOpenAshBrowserWindowsMinVersion)) { |
| 221 | LOG(WARNING) << "Unsupported ash version."; |
| 222 | return; |
| 223 | } |
| 224 | |
| 225 | crosapi::mojom::TestControllerAsyncWaiter waiter( |
| 226 | chromeos::LacrosService::Get() |
| 227 | ->GetRemote<crosapi::mojom::TestController>() |
| 228 | .get()); |
| 229 | |
| 230 | // Ash shouldn't have a browser window open by now. |
| 231 | uint32_t number = 1; |
| 232 | waiter.GetOpenAshBrowserWindows(&number); |
| 233 | EXPECT_EQ(0u, number); |
| 234 | |
| 235 | // First we make sure that the GURL we are interested in is in our allow list. |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 236 | auto init_params = crosapi::mojom::BrowserInitParams::New(); |
| 237 | init_params->accepted_internal_ash_urls = |
| 238 | std::vector<GURL>{GURL(chrome::kOsUIFlagsURL)}; |
Eriko Kurimoto | 72e9e37 | 2022-04-20 17:00:29 | [diff] [blame] | 239 | chromeos::BrowserInitParams::SetInitParamsForTests(std::move(init_params)); |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 240 | |
| 241 | EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
| 242 | EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 243 | GURL url_before_navigation = |
| 244 | browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); |
| 245 | |
| 246 | // Navigate to a known Ash page. |
| 247 | NavigateParams params(MakeNavigateParams(browser())); |
| 248 | params.disposition = WindowOpenDisposition::SINGLETON_TAB; |
| 249 | params.url = GURL(chrome::kOsUIFlagsURL); |
| 250 | params.window_action = NavigateParams::SHOW_WINDOW; |
| 251 | params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE; |
Stefan Kuhne | bb55ab8 | 2021-11-30 18:06:52 | [diff] [blame] | 252 | params.transition = ui::PageTransitionFromInt( |
| 253 | ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); |
Stefan Kuhne | ad358c4b | 2021-11-23 03:14:12 | [diff] [blame] | 254 | Navigate(¶ms); |
| 255 | |
| 256 | // No change should have happened on the Lacros side. |
| 257 | EXPECT_EQ(browser(), params.browser); |
| 258 | EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 259 | EXPECT_EQ(url_before_navigation, |
| 260 | browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); |
| 261 | |
| 262 | // Clean up the window we have created. |
| 263 | |
| 264 | // Wait until we have the app running. |
| 265 | while (0 == number) { |
| 266 | usleep(25000); |
| 267 | waiter.GetOpenAshBrowserWindows(&number); |
| 268 | } |
| 269 | |
| 270 | // Close it. |
| 271 | bool success = false; |
| 272 | waiter.CloseAllBrowserWindows(&success); |
| 273 | EXPECT_TRUE(success); |
| 274 | |
| 275 | // Wait until all are gone. |
| 276 | while (0 != number) { |
| 277 | usleep(25000); |
| 278 | waiter.GetOpenAshBrowserWindows(&number); |
| 279 | } |
| 280 | } |
| 281 | |
| 282 | #endif |
| 283 | |
[email protected] | bd817c2 | 2011-02-09 08:16:46 | [diff] [blame] | 284 | } // namespace |