window_sizer_ash_uitest.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file. 4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ash/launcher/launcher.h" 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ash/launcher/launcher_view.h" 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ash/shell.h" 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ash/test/launcher_test_api.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/message_loop/message_loop.h" 11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/aura/root_window.h" 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/aura/test/event_generator.h" 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/base/test/ui_controls.h" 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/views/controls/menu/menu_controller.h" 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/views/view.h" 21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/views/view_model.h" 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace { 24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class WindowSizerTest : public InProcessBrowserTest { 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WindowSizerTest() {} 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~WindowSizerTest() {} 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) InProcessBrowserTest::SetUpCommandLine(command_line); 32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Make screens sufficiently wide to host 2 browsers side by side. 33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) command_line->AppendSwitchASCII("ash-host-window-bounds", 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "600x600,601+0-600x600"); 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WindowSizerTest); 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void CloseBrowser(Browser* browser) { 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser->window()->Close(); 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)gfx::Rect GetChromeIconBoundsForRootWindow(aura::RootWindow* root_window) { 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ash::Launcher* launcher = ash::Launcher::ForWindow(root_window); 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const ash::internal::LauncherView* launcher_view = 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ash::test::LauncherTestAPI(launcher).launcher_view(); 50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const views::ViewModel* view_model = launcher_view->view_model_for_test(); 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(2, view_model->view_size()); 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return view_model->view_at(1)->GetBoundsInScreen(); 54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void OpenBrowserUsingShelfOnRootWindow(aura::RootWindow* root_window) { 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) aura::test::EventGenerator generator(root_window); 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gfx::Point center = 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetChromeIconBoundsForRootWindow(root_window).CenterPoint(); 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gfx::Display display = 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ash::Shell::GetScreen()->GetDisplayNearestWindow(root_window); 62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const gfx::Point& origin = display.bounds().origin(); 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) center.Offset(- origin.x(), - origin.y()); 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) generator.MoveMouseTo(center); 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) generator.ClickLeftButton(); 66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(OS_WIN) 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MAYBE_OpenBrowserUsingShelfOnOtherDisplay DISABLED_OpenBrowserUsingShelfOnOtherDisplay 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MAYBE_OpenBrowserUsingContextMenuOnOtherDisplay DISABLED_OpenBrowserUsingContextMenuOnOtherDisplay 73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#else 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MAYBE_OpenBrowserUsingShelfOnOtherDisplay OpenBrowserUsingShelfOnOtherDisplay 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define MAYBE_OpenBrowserUsingContextMenuOnOtherDisplay OpenBrowserUsingContextMenuOnOtherDisplay 76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WindowSizerTest, 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MAYBE_OpenBrowserUsingShelfOnOtherDisplay) { 80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Don't shutdown when closing the last browser window. 81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::StartKeepAlive(); 82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ash::Shell::RootWindowList root_windows = ash::Shell::GetAllRootWindows(); 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserList* browser_list = 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, browser_list->size()); 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Close the browser window so that clicking icon will create a new window. 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CloseBrowser(browser_list->get(0)); 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(0u, browser_list->size()); 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(root_windows[0], ash::Shell::GetTargetRootWindow()); 93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) OpenBrowserUsingShelfOnRootWindow(root_windows[1]); 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // A new browser must be created on 2nd display. 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, browser_list->size()); 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(root_windows[1], 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser_list->get(0)->window()->GetNativeWindow()->GetRootWindow()); 100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(root_windows[1], ash::Shell::GetTargetRootWindow()); 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Close the browser window so that clicking icon will create a new window. 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CloseBrowser(browser_list->get(0)); 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(0u, browser_list->size()); 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) OpenBrowserUsingShelfOnRootWindow(root_windows[0]); 107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // A new browser must be created on 1st display. 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, browser_list->size()); 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(root_windows[0], 111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser_list->get(0)->window()->GetNativeWindow()->GetRootWindow()); 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(root_windows[0], ash::Shell::GetTargetRootWindow()); 113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Balanced with the chrome::StartKeepAlive above. 115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::EndKeepAlive(); 116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace { 119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class WindowSizerContextMenuTest : public WindowSizerTest { 121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WindowSizerContextMenuTest() {} 123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~WindowSizerContextMenuTest() {} 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void Step1(gfx::Point release_point) { 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_controls::RIGHT, ui_controls::DOWN, 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&WindowSizerContextMenuTest::Step2, release_point)); 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void Step2(gfx::Point release_point) { 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) release_point.x(), release_point.y(), 134a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&WindowSizerContextMenuTest::Step3)); 135a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 136a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 137a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void Step3() { 138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 139a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_controls::RIGHT, ui_controls::UP, 140a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&WindowSizerContextMenuTest::QuitLoop)); 141a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 142a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 143a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) static void QuitLoop() { 144a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::MessageLoop::current()->PostTask( 145a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) FROM_HERE, 146a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::MessageLoop::QuitWhenIdleClosure()); 147a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 149a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 150a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WindowSizerContextMenuTest); 151a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void OpenBrowserUsingContextMenuOnRootWindow(aura::RootWindow* root_window) { 154a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gfx::Point chrome_icon = 155a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetChromeIconBoundsForRootWindow(root_window).CenterPoint(); 156a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gfx::Point release_point = chrome_icon; 157a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) release_point.Offset(50, -120); 158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome_icon.x(), chrome_icon.y(), 160a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Bind(&WindowSizerContextMenuTest::Step1, release_point)); 161a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::MessageLoop::current()->Run(); 162a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 163a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 164a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 165a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 166a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WindowSizerContextMenuTest, 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MAYBE_OpenBrowserUsingContextMenuOnOtherDisplay) { 168a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Don't shutdown when closing the last browser window. 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::StartKeepAlive(); 170a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) views::MenuController::TurnOffMenuSelectionHoldForTest(); 172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ash::Shell::RootWindowList root_windows = ash::Shell::GetAllRootWindows(); 174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserList* browser_list = 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, browser_list->size()); 179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(root_windows[0], ash::Shell::GetTargetRootWindow()); 180a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CloseBrowser(browser_list->get(0)); 181a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 182a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) OpenBrowserUsingContextMenuOnRootWindow(root_windows[1]); 183a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // A new browser must be created on 2nd display. 185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(1u, browser_list->size()); 186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(root_windows[1], 187a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser_list->get(0)->window()->GetNativeWindow()->GetRootWindow()); 188d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(root_windows[1], ash::Shell::GetTargetRootWindow()); 189a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 190a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) OpenBrowserUsingContextMenuOnRootWindow(root_windows[0]); 191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 192a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Next new browser must be created on 1st display. 193a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(2u, browser_list->size()); 194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EXPECT_EQ(root_windows[0], 195a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser_list->get(1)->window()->GetNativeWindow()->GetRootWindow()); 196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(root_windows[0], ash::Shell::GetTargetRootWindow()); 197a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Balanced with the chrome::StartKeepAlive above. 199a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::EndKeepAlive(); 200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 201