172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 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 "chrome/test/ui/ui_test.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/test/test_timeouts.h" 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/window_proxy.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BookmarksUITest : public UITest { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarksUITest() { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dom_automation_enabled_ = true; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool WaitForBookmarksUI(TabProxy* tab) { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WaitUntilJavaScriptCondition(tab, L"", 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"domAutomationController.send(" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L" location.protocol == 'chrome-extension:' && " 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L" document.readyState == 'complete')", 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::huge_test_timeout_ms()); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> GetBookmarksUITab() { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(browser.get()); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!browser.get()) 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab = browser->GetActiveTab(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(tab.get()); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!tab.get()) 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool success = tab->NavigateToURL(GURL(chrome::kChromeUIBookmarksURL)); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(success); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!success) 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch success = WaitForBookmarksUI(tab); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(success); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!success) 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return tab; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AssertIsBookmarksPage(TabProxy* tab) { 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // tab->GetCurrentURL is not up to date. 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring out; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab->ExecuteAndExtractString(L"", 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"domAutomationController.send(location.protocol)", &out)); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(L"chrome-extension:", out); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab->ExecuteAndExtractString(L"", 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"domAutomationController.send(location.pathname)", &out)); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(L"/main.html", out); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// http://code.google.com/p/chromium/issues/detail?id=39532 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarksUITest, FLAKY_ShouldRedirectToExtension) { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count = -1; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Navigate to chrome 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab = browser->GetActiveTab(); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab.get()); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab->NavigateToURL(GURL(chrome::kChromeUIBookmarksURL))); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // At this point the URL is chrome://bookmarks. We need to wait for the 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // redirect to happen. 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(WaitForBookmarksUI(tab)); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AssertIsBookmarksPage(tab); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarksUITest, CommandOpensBookmarksTab) { 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count = -1; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Bring up the bookmarks manager tab. 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, tab_count); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab = browser->GetActiveTab(); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab.get()); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(WaitForBookmarksUI(tab)); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AssertIsBookmarksPage(tab); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarksUITest, CommandAgainGoesBackToBookmarksTab) { 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count = -1; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Bring up the bookmarks manager tab. 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); 11472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(browser->WaitForTabToBecomeActive( 11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1, TestTimeouts::action_max_timeout_ms())); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, tab_count); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab = browser->GetActiveTab(); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab.get()); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(WaitForBookmarksUI(tab)); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AssertIsBookmarksPage(tab); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Switch to first tab and run command again. 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->ActivateTab(0)); 12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(browser->WaitForTabToBecomeActive( 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 0, TestTimeouts::action_max_timeout_ms())); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensure the bookmarks ui tab is active. 13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(browser->WaitForTabToBecomeActive( 13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1, TestTimeouts::action_max_timeout_ms())); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, tab_count); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarksUITest, TwoCommandsOneTab) { 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser.get()); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count = -1; 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser->GetTabCount(&tab_count)); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, tab_count); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BookmarksUITest, BookmarksLoaded) { 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab = GetBookmarksUITab(); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab.get()); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 155