15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/win/windows_version.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab_drag_controller.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab_strip.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/base/test/ui_controls.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::WebContents;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using test::GetCenterInScreenCoordinates;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using test::GetTabStripForBrowser;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using test::IDString;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using test::ResetIDs;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using test::SetID;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The tests in this file exercise detaching the dragged tab into a standalone
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// window (not a Browser). They are not applicable to aura as aura forces real
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// window dragging.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates a browser with two tabs, drags the second to the first.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DragInSameWindow) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStripModel* model = browser()->tab_strip_model();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_1_center(GetCenterInScreenCoordinates(tab_strip->tab_at(1)));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_1_center));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::UP));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1 0", IDString(model));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(TabDragController::IsActive());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(tab_strip->IsDragSessionActive());
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates two browsers, drags from first into second.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test often crashes on Vista <http://crbug.com/156787>
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_DragToSeparateWindow DISABLED_DragToSeparateWindow
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_DragToSeparateWindow DragToSeparateWindow
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, MAYBE_DragToSeparateWindow) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab to browser().
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create another browser.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* browser2 = CreateAnotherWindowBrowserAndRelayout();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip2 = GetTabStripForBrowser(browser2);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move to the first tab and drag it enough so that it detaches, but not
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enough that it attaches to browser2.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  gfx::Point(tab_0_center.x(),
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             tab_0_center.y() + tab_strip->height() + 20)));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Drag into the second browser.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point target_point(tab_strip2->width() -1, tab_strip2->height() / 2);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::View::ConvertPointToScreen(tab_strip2, &target_point);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_controls::SendMouseMove(target_point.x(), target_point.y()));
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Release the mouse, ending the drag session.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::UP));
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip2->IsDragSessionActive());
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip->IsDragSessionActive());
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("100 0", IDString(browser2->tab_strip_model()));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1", IDString(browser()->tab_strip_model()));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Drags from browser to separate window and releases mouse.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DetachToOwnWindow) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move to the first tab and drag it enough so that it detaches.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_controls::SendMouseMove(
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab_0_center.x(), tab_0_center.y() + tab_strip->height() + 20));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::UP));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should no longer be dragging.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip->IsDragSessionActive());
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // There should now be another browser.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, native_browser_list->size());
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Browser* new_browser = native_browser_list->get(1);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(new_browser->window()->IsActive());
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip2 = GetTabStripForBrowser(new_browser);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip2->IsDragSessionActive());
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("0", IDString(new_browser->tab_strip_model()));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1", IDString(browser()->tab_strip_model()));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Deletes a tab being dragged before the user moved enough to start a drag.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DeleteBeforeStartedDragging) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab.
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Click on the first tab, but don't move it.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should be dragging.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delete the tab being dragged.
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delete browser()->tab_strip_model()->GetWebContentsAt(0);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should have canceled dragging.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip->IsDragSessionActive());
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1", IDString(browser()->tab_strip_model()));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Deletes a tab being dragged while still attached.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DeleteTabWhileAttached) {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Click on the first tab and move it enough so that it starts dragging but is
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // still attached.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  gfx::Point(tab_0_center.x() + 20, tab_0_center.y())));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should be dragging.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delete the tab being dragged.
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delete browser()->tab_strip_model()->GetWebContentsAt(0);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should have canceled dragging.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip->IsDragSessionActive());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1", IDString(browser()->tab_strip_model()));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Deletes a tab being dragged after dragging a tab so that a new window is
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// created.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DeleteTabWhileDetached) {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab.
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move to the first tab and drag it enough so that it detaches.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* to_delete = browser()->tab_strip_model()->GetWebContentsAt(0);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  gfx::Point(tab_0_center.x(),
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             tab_0_center.y() + tab_strip->height() + 20)));
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete to_delete;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should not be dragging.
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip->IsDragSessionActive());
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1", IDString(browser()->tab_strip_model()));
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Detaches a tab and while detached deletes a tab from the source and releases
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the mouse.
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DeleteSourceDetached) {
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move to the first tab and drag it enough so that it detaches.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContents* to_delete = browser()->tab_strip_model()->GetWebContentsAt(1);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  gfx::Point(tab_0_center.x(),
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             tab_0_center.y() + tab_strip->height() + 20)));
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete to_delete;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should still be dragging.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Release the mouse.
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::UP));
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Releasing the mouse should destroy the existing browser and create a new
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // one.
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1u, native_browser_list->size());
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Browser* new_browser = native_browser_list->get(0);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(new_browser, browser());
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(GetTabStripForBrowser(new_browser)->IsDragSessionActive());
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("0", IDString(new_browser->tab_strip_model()));
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates two browsers, selects all tabs in first and drags into second.
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest, DragAllToSeparateWindow) {
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab to browser().
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create another browser.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* browser2 = CreateAnotherWindowBrowserAndRelayout();
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip2 = GetTabStripForBrowser(browser2);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->tab_strip_model()->AddTabAtToSelection(0);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->tab_strip_model()->AddTabAtToSelection(1);
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move to the first tab and drag it enough so that it detaches, but not
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enough that it attaches to browser2.
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  gfx::Point(tab_0_center.x(),
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             tab_0_center.y() + tab_strip->height() + 20)));
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip2->IsDragSessionActive());
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, native_browser_list->size());
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Drag to tab_strip2.
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point target_point(tab_strip2->width() - 1,
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          tab_strip2->height() / 2);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::View::ConvertPointToScreen(tab_strip2, &target_point);
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_controls::SendMouseMove(target_point.x(), target_point.y()));
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should now be attached to tab_strip2.
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Release the mouse, stopping the drag session.
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::UP));
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(TabDragController::IsActive());
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("100 0 1", IDString(browser2->tab_strip_model()));
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates two browsers, selects all tabs in first, drags into second, then hits
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// escape.
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabDragControllerTest,
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       DragAllToSeparateWindowAndCancel) {
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip = GetTabStripForBrowser(browser());
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add another tab to browser().
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddTabAndResetBrowser(browser());
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create another browser.
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* browser2 = CreateAnotherWindowBrowserAndRelayout();
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tab_strip2 = GetTabStripForBrowser(browser2);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->tab_strip_model()->AddTabAtToSelection(0);
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->tab_strip_model()->AddTabAtToSelection(1);
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move to the first tab and drag it enough so that it detaches, but not
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enough that it attaches to browser2.
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point tab_0_center(
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetCenterInScreenCoordinates(tab_strip->tab_at(0)));
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(tab_0_center));
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  ui_controls::LEFT, ui_controls::DOWN));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  gfx::Point(tab_0_center.x(),
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             tab_0_center.y() + tab_strip->height() + 20)));
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(tab_strip2->IsDragSessionActive());
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, native_browser_list->size());
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Drag to tab_strip2.
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point target_point(tab_strip2->width() - 1,
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          tab_strip2->height() / 2);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::View::ConvertPointToScreen(tab_strip2, &target_point);
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_controls::SendMouseMove(target_point.x(), target_point.y()));
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tab_strip->IsDragSessionActive());
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(TabDragController::IsActive());
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2u, native_browser_list->size());
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cancel the drag.
351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(msw): Fix this on "XP Tests (1)"; see http://crbug.com/227444
352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (base::win::GetVersion() == base::win::VERSION_XP) {
353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Try SendKeyPressToWindowSync [esc]; maybe this works???";
354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync(
355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser2->window()->GetNativeWindow(), ui::VKEY_ESCAPE,
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        false, false, false, false));
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 1 drag active (expect 0): "
358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << tab_strip->IsDragSessionActive();
359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 2 drag active (expect 0): "
360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << tab_strip2->IsDragSessionActive();
361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab drag controller active (expect 0): "
362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << TabDragController::IsActive();
363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Native browser list size (expect 2): "
364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << native_browser_list->size();
365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 1 model string (expect '0 1'): "
366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << IDString(browser()->tab_strip_model());
367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 2 model string (expect '100'): "
368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << IDString(browser2->tab_strip_model());
369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Try SendKeyPressSync [esc]; is this needed???";
371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser2, ui::VKEY_ESCAPE, false, false, false, false));
373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 1 drag active (expect 0): "
374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << tab_strip->IsDragSessionActive();
375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 2 drag active (expect 0): "
376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << tab_strip2->IsDragSessionActive();
377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab drag controller active (expect 0): "
378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << TabDragController::IsActive();
379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Native browser list size (expect 2): "
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << native_browser_list->size();
381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 1 model string (expect '0 1'): "
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << IDString(browser()->tab_strip_model());
383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LOG(INFO) << "Tab strip 2 model string (expect '100'): "
384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              << IDString(browser2->tab_strip_model());
385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else {
386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser2, ui::VKEY_ESCAPE, false, false, false, false));
388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_FALSE(tab_strip->IsDragSessionActive());
389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_FALSE(tab_strip2->IsDragSessionActive());
390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_FALSE(TabDragController::IsActive());
391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_EQ(2u, native_browser_list->size());
392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ("0 1", IDString(browser()->tab_strip_model()));
393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ("100", IDString(browser2->tab_strip_model()));
394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
396