| Index: chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
|
| diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
|
| index 85648dbc0840a3903ffe0e6e9941a4c15d96a6e0..30cad19f7af2a352427745e5285d78cdab8581d1 100644
|
| --- a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
|
| +++ b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
|
| @@ -180,9 +180,7 @@ Browser* TabDragControllerTest::CreateAnotherWindowBrowserAndRelayout() {
|
|
|
| // Resize the two windows so they're right next to each other.
|
| gfx::Rect work_area =
|
| - gfx::Screen::GetScreen()
|
| - ->GetDisplayNearestWindow(browser()->window()->GetNativeWindow())
|
| - .work_area();
|
| + gfx::Screen::GetScreen()->GetPrimaryDisplay().work_area();
|
| gfx::Size half_size =
|
| gfx::Size(work_area.width() / 3 - 10, work_area.height() / 2 - 10);
|
| browser()->window()->SetBounds(gfx::Rect(work_area.origin(), half_size));
|
| @@ -242,7 +240,7 @@ class ScreenEventGeneratorDelegate
|
|
|
| #endif
|
|
|
| -#if !defined(OS_CHROMEOS)
|
| +#if !defined(OS_CHROMEOS) && defined(USE_AURA)
|
|
|
| // Following classes verify a crash scenario. Specifically on Windows when focus
|
| // changes it can trigger capture being lost. This was causing a crash in tab
|
| @@ -801,9 +799,7 @@ IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest,
|
| MAYBE_DetachFromFullsizeWindow) {
|
| // Resize the browser window so that it is as big as the work area.
|
| gfx::Rect work_area =
|
| - gfx::Screen::GetScreen()
|
| - ->GetDisplayNearestWindow(browser()->window()->GetNativeWindow())
|
| - .work_area();
|
| + gfx::Screen::GetScreen()->GetPrimaryDisplay().work_area();
|
| browser()->window()->SetBounds(work_area);
|
| const gfx::Rect initial_bounds(browser()->window()->GetBounds());
|
| // Add another tab.
|
| @@ -1162,6 +1158,7 @@ IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, MAYBE_DragAll) {
|
| TabStrip* tab_strip = GetTabStripForBrowser(browser());
|
| browser()->tab_strip_model()->AddTabAtToSelection(0);
|
| browser()->tab_strip_model()->AddTabAtToSelection(1);
|
| + const gfx::Rect initial_bounds = browser()->window()->GetBounds();
|
|
|
| // Move to the first tab and drag it enough so that it would normally
|
| // detach.
|
| @@ -1185,7 +1182,74 @@ IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest, MAYBE_DragAll) {
|
|
|
| // Remaining browser window should not be maximized
|
| EXPECT_FALSE(browser()->window()->IsMaximized());
|
| +
|
| + const gfx::Rect final_bounds = browser()->window()->GetBounds();
|
| + EXPECT_EQ(initial_bounds.size(), final_bounds.size());
|
| + EXPECT_EQ(initial_bounds.origin().x(), final_bounds.origin().x());
|
| + EXPECT_EQ(initial_bounds.origin().y() + GetDetachY(tab_strip),
|
| + final_bounds.origin().y());
|
| +}
|
| +
|
| +#if defined(OS_MACOSX)
|
| +// Makes sure we can drag the window using WindowServer by dragging on a tab.
|
| +//
|
| +// All other tests move the windows without relying on the WindowServer, because
|
| +// BridgedNativeWidget::RunMoveLoop() immediately offsets the window on first
|
| +// mouse drag. If we generate more mouse move events after that, it's presumed
|
| +// that the WindowServer will move the window. In order for that to work we need
|
| +// to generate global CGEvents instead of app-specific NSEvents, that's what
|
| +// ui_test_utils::DragAndDrop() is for.
|
| +//
|
| +// If the WindowServer fails to move the window, the final window bounds won't
|
| +// match the expected ones.
|
| +IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest,
|
| + DragsWindowUsingCocoaMoveLoop) {
|
| + // Add another tab.
|
| + AddTabAndResetBrowser(browser());
|
| +
|
| + TabStrip* tab_strip = GetTabStripForBrowser(browser());
|
| + browser()->tab_strip_model()->AddTabAtToSelection(0);
|
| + browser()->tab_strip_model()->AddTabAtToSelection(1);
|
| + const gfx::Rect initial_bounds = browser()->window()->GetBounds();
|
| +
|
| + // Move to the first tab and drag it enough so that it would normally
|
| + // detach.
|
| + gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
|
| +
|
| + // If we don't make the interactive_ui_tests the active application, we won't
|
| + // be able to monitor NSMouseMoved events and ui_test_utils::DragAndDrop()
|
| + // will deadlock.
|
| + EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
|
| +
|
| + // We need to move the window using multiple intermediate events in order
|
| + // to verify that CocoaWindowMoveLoop is working correctly.
|
| + const int steps = 10;
|
| + ui_test_utils::DragAndDrop(
|
| + tab_0_center,
|
| + gfx::Point(tab_0_center.x(), tab_0_center.y() + GetDetachY(tab_strip)),
|
| + steps);
|
| +
|
| + // Should not be dragging.
|
| + EXPECT_FALSE(tab_strip->IsDragSessionActive());
|
| + EXPECT_FALSE(TabDragController::IsActive());
|
| +
|
| + // And there should only be one window.
|
| + EXPECT_EQ(1u, browser_list->size());
|
| +
|
| + EXPECT_EQ("0 1", IDString(browser()->tab_strip_model()));
|
| +
|
| + EXPECT_FALSE(GetIsDragged(browser()));
|
| +
|
| + // Remaining browser window should not be maximized
|
| + EXPECT_FALSE(browser()->window()->IsMaximized());
|
| +
|
| + const gfx::Rect final_bounds = browser()->window()->GetBounds();
|
| + EXPECT_EQ(initial_bounds.size(), final_bounds.size());
|
| + EXPECT_EQ(initial_bounds.origin().x(), final_bounds.origin().x());
|
| + EXPECT_EQ(initial_bounds.origin().y() + GetDetachY(tab_strip),
|
| + final_bounds.origin().y());
|
| }
|
| +#endif // OS_MACOSX
|
|
|
| namespace {
|
|
|
| @@ -1415,6 +1479,8 @@ IN_PROC_BROWSER_TEST_P(DetachToBrowserTabDragControllerTest,
|
| TabStrip* tab_strip2 = GetTabStripForBrowser(browser2);
|
| const gfx::Rect initial_bounds(browser2->window()->GetBounds());
|
|
|
| + EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
|
| +
|
| // Move to the first tab and drag it enough so that it detaches, but not
|
| // enough that it attaches to browser2.
|
| gfx::Point tab_0_center(
|
|
|