1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/command_line.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/view_ids.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/window_proxy.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/net_util.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/events/event.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_LINUX) 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test doesn't make sense on chromeos as chromeos doesn't allow dragging 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// tabs out. 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_Tab2OutOfTabStrip DISABLED_Tab2OutOfTabStrip 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Flaky, http://crbug.com/62311. 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_Tab2OutOfTabStrip FLAKY_Tab2OutOfTabStrip 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_LINUX) 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Disabled on Toolkit views bot. See http://crbug.com/42614 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_Tab1Tab3Escape DISABLED_Tab1Tab3Escape 31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#elif defined(OS_WIN) 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Disabled on Windows. See http://crbug.com/57687 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define MAYBE_Tab1Tab3Escape DISABLED_Tab1Tab3Escape 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define MAYBE_Tab1Tab3Escape Tab1Tab3Escape 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// These tests fail on Linux because we haven't implemented all of tab dragging 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// (it's not needed on chromeos). See http://crbug.com/10941 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_LINUX) 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define MAYBE_Tab1Tab2 DISABLED_Tab1Tab2 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define MAYBE_Tab1Tab3 DISABLED_Tab1Tab3 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Flaky, http://crbug.com/62311. 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_Tab1Tab2 FLAKY_Tab1Tab2 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_Tab1Tab3 FLAKY_Tab1Tab3 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabDraggingTest : public UITest { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabDraggingTest() { 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch show_window_ = true; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Automated UI test to open three tabs in a new window, and drag Tab_1 into 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the position of Tab_2. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TabDraggingTest, MAYBE_Tab1Tab2) { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WindowProxy> window(browser->GetWindow()); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window.get()); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get initial tab count. 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int initial_tab_count = 0; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&initial_tab_count)); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(1 == initial_tab_count); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get Tab_1 which comes with the browser window. 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab1(browser->GetTab(0)); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_url; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_url)); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_2. 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_url("about:"); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab2_url)); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab2(browser->GetTab(1)); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_3. 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab3_url("about:plugins"); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab3_url)); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab3(browser->GetTab(2)); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3.get()); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure 3 tabs are open. 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(browser->WaitForTabCountToBecome(initial_tab_count + 2)); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get bounds for the tabs. 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds1; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_0, &bounds1, false)); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.x()); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.width()); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.height()); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds2; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_1, &bounds2, false)); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.width()); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.height()); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds1.x(), bounds2.x()); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds2.y(), bounds1.y()); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds3; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_2, &bounds3, false)); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.width()); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.height()); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds2.x(), bounds3.x()); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds3.y(), bounds2.y()); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get url Bar bounds. 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect urlbar_bounds; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_LOCATION_BAR, &urlbar_bounds, 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.x()); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.y()); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.width()); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.height()); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch /* 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TEST: Move Tab_1 to the position of Tab_2 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ ____________ ____________ 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / \ / \ / \ 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | Tab_2 | Tab_3 | 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- ---- ---- ---- ---- ---- ---- 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch x---- ----> 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / X \ 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point start(bounds1.x() + bounds1.width() / 2, 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bounds1.y() + bounds1.height() / 2); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point end(start.x() + 2 * bounds1.width() / 3, start.y()); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->SimulateDrag(start, end, 13772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_LEFT_BUTTON_DOWN, 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now check for expected results. 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab1 = browser->GetTab(0); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_new_url; 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_new_url)); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab2 = browser->GetTab(1); 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_new_url; 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2->GetCurrentURL(&tab2_new_url)); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab1_url.spec(), tab2_new_url.spec()); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab2_url.spec(), tab1_new_url.spec()); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Drag Tab_1 into the position of Tab_3. 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TabDraggingTest, MAYBE_Tab1Tab3) { 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WindowProxy> window(browser->GetWindow()); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window.get()); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get initial tab count. 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int initial_tab_count = 0; 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&initial_tab_count)); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(1 == initial_tab_count); 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get Tab_1 which comes with the browser window. 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab1(browser->GetTab(0)); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_url; 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_url)); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_2. 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_url("about:"); 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab2_url)); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab2(browser->GetTab(1)); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_3. 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab3_url("about:plugins"); 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab3_url)); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab3(browser->GetTab(2)); 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3.get()); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure 3 tabs are open. 1863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(browser->WaitForTabCountToBecome(initial_tab_count + 2)); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get bounds for the tabs. 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds1; 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_0, &bounds1, false)); 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.x()); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.width()); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.height()); 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds2; 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_1, &bounds2, false)); 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.width()); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.height()); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds1.x(), bounds2.x()); 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds2.y(), bounds1.y()); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds3; 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_2, &bounds3, false)); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.width()); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.height()); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds2.x(), bounds3.x()); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds3.y(), bounds2.y()); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get url Bar bounds. 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect urlbar_bounds; 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_LOCATION_BAR, &urlbar_bounds, 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.x()); 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.y()); 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.width()); 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.height()); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch /* 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TEST: Move Tab_1 to the middle position of Tab_3 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ ____________ ____________ 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / \ / \ / \ 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | Tab_2 | Tab_3 | 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- ---- ---- ---- ---- ---- ---- 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch x---- ---- ---- ---- ---- ----> 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / X \ 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point start(bounds1.x() + bounds1.width() / 2, 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bounds1.y() + bounds1.height() / 2); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point end(start.x() + bounds1.width() / 2 + bounds2.width() + 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bounds3.width() / 2, 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch start.y()); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->SimulateDrag(start, end, 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_LEFT_BUTTON_DOWN, 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now check for expected results. 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab1 = browser->GetTab(0); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_new_url; 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_new_url)); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab2 = browser->GetTab(1); 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_new_url; 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2->GetCurrentURL(&tab2_new_url)); 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab3 = browser->GetTab(2); 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3.get()); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab3_new_url; 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3->GetCurrentURL(&tab3_new_url)); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab1_new_url.spec(), tab2_url.spec()); 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab2_new_url.spec(), tab3_url.spec()); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab3_new_url.spec(), tab1_url.spec()); 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Drag Tab_1 into the position of Tab_3, and press ESCAPE before releasing the 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// left mouse button. 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TabDraggingTest, MAYBE_Tab1Tab3Escape) { 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WindowProxy> window(browser->GetWindow()); 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window.get()); 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get initial tab count. 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int initial_tab_count = 0; 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&initial_tab_count)); 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(1 == initial_tab_count); 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get Tab_1 which comes with the browser window. 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab1(browser->GetTab(0)); 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_url; 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_url)); 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_2. 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_url("about:blank"); 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab2_url)); 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab2(browser->GetTab(1)); 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_3. 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab3_url("about:plugins"); 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab3_url)); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab3(browser->GetTab(2)); 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3.get()); 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure 3 tabs are open. 2933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(browser->WaitForTabCountToBecome(initial_tab_count + 2)); 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get bounds for the tabs. 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds1; 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_0, &bounds1, false)); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.x()); 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.width()); 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.height()); 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds2; 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_1, &bounds2, false)); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.width()); 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.height()); 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds1.x(), bounds2.x()); 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds2.y(), bounds1.y()); 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds3; 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_2, &bounds3, false)); 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.width()); 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.height()); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds2.x(), bounds3.x()); 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds3.y(), bounds2.y()); 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get url Bar bounds. 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect urlbar_bounds; 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_LOCATION_BAR, &urlbar_bounds, 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.x()); 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.y()); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.width()); 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.height()); 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch /* 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TEST: Move Tab_1 to the middle position of Tab_3 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ ____________ ____________ 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / \ / \ / \ 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | Tab_2 | Tab_3 | 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- ---- ---- ---- ---- ---- ---- 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch x---- ---- ---- ---- ---- ----> + ESCAPE 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / X \ 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point start(bounds1.x() + bounds1.width() / 2, 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bounds1.y() + bounds1.height() / 2); 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point end(start.x() + bounds1.width() / 2 + bounds2.width() + 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bounds3.width() / 2, 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch start.y()); 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate drag with 'true' as the last parameter. This will interrupt 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // in-flight with Escape. 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->SimulateDrag(start, end, 34772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_LEFT_BUTTON_DOWN, 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch true)); 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now check for expected results. 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab1 = browser->GetTab(0); 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_new_url; 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_new_url)); 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab2 = browser->GetTab(1); 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_new_url; 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2->GetCurrentURL(&tab2_new_url)); 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab3 = browser->GetTab(2); 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3.get()); 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab3_new_url; 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3->GetCurrentURL(&tab3_new_url)); 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The tabs should be in their original positions. 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab1_new_url.spec(), tab1_url.spec()); 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab2_new_url.spec(), tab2_url.spec()); 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab3_new_url.spec(), tab3_url.spec()); 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Drag Tab_2 out of the Tab strip. A new window should open with this tab. 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TabDraggingTest, MAYBE_Tab2OutOfTabStrip) { 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WindowProxy> window(browser->GetWindow()); 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window.get()); 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get initial tab count. 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int initial_tab_count = 0; 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&initial_tab_count)); 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(1 == initial_tab_count); 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get Tab_1 which comes with the browser window. 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab1(browser->GetTab(0)); 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_url; 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_url)); 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_2. 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_url("about:version"); 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab2_url)); 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab2(browser->GetTab(1)); 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add Tab_3. 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab3_url("about:plugins"); 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->AppendTab(tab3_url)); 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab3(browser->GetTab(2)); 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab3.get()); 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure 3 tabs are opened. 4033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(browser->WaitForTabCountToBecome(initial_tab_count + 2)); 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure all the tab URL specs are different. 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1_url != tab2_url); 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1_url != tab3_url); 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2_url != tab3_url); 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get bounds for the tabs. 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds1; 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_0, &bounds1, false)); 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.x()); 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.width()); 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds1.height()); 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds2; 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_1, &bounds2, false)); 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.width()); 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds2.height()); 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds1.x(), bounds2.x()); 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds2.y(), bounds1.y()); 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect bounds3; 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_2, &bounds3, false)); 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.width()); 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, bounds3.height()); 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(bounds2.x(), bounds3.x()); 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(bounds3.y(), bounds2.y()); 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get url Bar bounds. 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect urlbar_bounds; 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window->GetViewBounds(VIEW_ID_LOCATION_BAR, &urlbar_bounds, 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.x()); 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.y()); 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.width()); 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(0, urlbar_bounds.height()); 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch /* 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TEST: Move Tab_2 down, out of the tab strip. 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch This should result in the following: 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1- Tab_3 shift left in place of Tab_2 in Window 1 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2- Tab_1 to remain in its place 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3- Tab_2 openes in a new window 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ ____________ ____________ 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / \ / \ / \ 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_1 | Tab_2 | Tab_3 | 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- ---- ---- ---- ---- ---- ---- 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch x 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | (Drag this below, out of tab strip) 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch V 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ____________ 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch / X \ 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch | Tab_2 | (New Window) 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ---- ---- ---- ---- ---- ---- ---- 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch */ 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point start(bounds2.x() + bounds2.width() / 2, 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bounds2.y() + bounds2.height() / 2); 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point end(start.x(), 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch start.y() + 3 * urlbar_bounds.height()); 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate tab drag. 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->SimulateDrag(start, end, 46872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EF_LEFT_BUTTON_DOWN, 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false)); 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now, first make sure that the old window has only two tabs remaining. 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int new_tab_count = 0; 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&new_tab_count)); 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, new_tab_count); 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get the two tabs - they are called Tab_1 and Tab_2 in the old window. 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab1 = browser->GetTab(0); 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1.get()); 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_new_url; 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1->GetCurrentURL(&tab1_new_url)); 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab2 = browser->GetTab(1); 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2.get()); 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab2_new_url; 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab2->GetCurrentURL(&tab2_new_url)); 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now check for proper shifting of tabs; i.e., Tab_3 in window 1 should 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // shift left to the position of Tab_2; Tab_1 should stay where it was. 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab1_new_url.spec(), tab1_url.spec()); 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab2_new_url.spec(), tab3_url.spec()); 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now check to make sure a new window has opened. 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser2(automation()->GetBrowserWindow(1)); 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser2.get()); 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<WindowProxy> window2(browser2->GetWindow()); 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(window2.get()); 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure that the new window has only one tab. 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count_window_2 = 0; 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser2->GetTabCount(&tab_count_window_2)); 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count_window_2); 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get Tab_1_2 which should be Tab_1 in Window 2. 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab1_2(browser2->GetTab(0)); 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1_2.get()); 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL tab1_2_url; 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab1_2->GetCurrentURL(&tab1_2_url)); 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Tab_1_2 of Window 2 should essentially be Tab_2 of Window 1. 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(tab1_2_url.spec(), tab2_url.spec()); 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(tab1_2_url.spec(), tab1_url.spec()); 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(tab1_2_url.spec(), tab3_url.spec()); 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 514