1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/test/test_timeouts.h" 6#include "chrome/browser/ui/browser.h" 7#include "chrome/browser/ui/chrome_pages.h" 8#include "chrome/browser/ui/tabs/tab_strip_model.h" 9#include "chrome/common/url_constants.h" 10#include "chrome/test/base/in_process_browser_test.h" 11#include "chrome/test/base/ui_test_utils.h" 12#include "content/public/browser/notification_service.h" 13#include "content/public/browser/web_contents.h" 14#include "content/public/test/browser_test_utils.h" 15#include "content/public/test/test_navigation_observer.h" 16 17class BookmarksTest : public InProcessBrowserTest { 18 public: 19 BookmarksTest() {} 20 21 void OpenBookmarksManager() { 22 content::TestNavigationObserver navigation_observer( 23 browser()->tab_strip_model()->GetActiveWebContents(), 2); 24 navigation_observer.StartWatchingNewWebContents(); 25 26 // Bring up the bookmarks manager tab. 27 chrome::ShowBookmarkManager(browser()); 28 navigation_observer.Wait(); 29 } 30 31 void AssertIsBookmarksPage(content::WebContents* tab) { 32 GURL url; 33 std::string out; 34 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 35 tab, 36 "domAutomationController.send(location.protocol)", 37 &out)); 38 ASSERT_EQ("chrome-extension:", out); 39 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 40 tab, 41 "domAutomationController.send(location.pathname)", 42 &out)); 43 ASSERT_EQ("/main.html", out); 44 } 45}; 46 47IN_PROC_BROWSER_TEST_F(BookmarksTest, ShouldRedirectToExtension) { 48 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIBookmarksURL)); 49 AssertIsBookmarksPage(browser()->tab_strip_model()->GetActiveWebContents()); 50} 51 52IN_PROC_BROWSER_TEST_F(BookmarksTest, CommandOpensBookmarksTab) { 53 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 54 55 // Bring up the bookmarks manager tab. 56 OpenBookmarksManager(); 57 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 58 AssertIsBookmarksPage(browser()->tab_strip_model()->GetActiveWebContents()); 59} 60 61// TODO(linux_aura): http://crbug.com/163931 62#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 63#define MAYBE_CommandAgainGoesBackToBookmarksTab \ 64 DISABLED_CommandAgainGoesBackToBookmarksTab 65// Flaky on Mac: http://crbug.com/87200 66#elif defined(OS_MACOSX) 67#define MAYBE_CommandAgainGoesBackToBookmarksTab \ 68 DISABLED_CommandAgainGoesBackToBookmarksTab 69#else 70#define MAYBE_CommandAgainGoesBackToBookmarksTab \ 71 CommandAgainGoesBackToBookmarksTab 72#endif 73 74IN_PROC_BROWSER_TEST_F(BookmarksTest, 75 MAYBE_CommandAgainGoesBackToBookmarksTab) { 76 ui_test_utils::NavigateToURL( 77 browser(), 78 ui_test_utils::GetTestUrl(base::FilePath(), 79 base::FilePath().AppendASCII("simple.html"))); 80 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 81 82 // Bring up the bookmarks manager tab. 83 OpenBookmarksManager(); 84 ASSERT_EQ(2, browser()->tab_strip_model()->count()); 85 86 AssertIsBookmarksPage(browser()->tab_strip_model()->GetActiveWebContents()); 87 88 // Switch to first tab and run command again. 89 browser()->tab_strip_model()->ActivateTabAt(0, true); 90 chrome::ShowBookmarkManager(browser()); 91 92 // Ensure the bookmarks ui tab is active. 93 ASSERT_EQ(1, browser()->tab_strip_model()->active_index()); 94 ASSERT_EQ(2, browser()->tab_strip_model()->count()); 95} 96 97IN_PROC_BROWSER_TEST_F(BookmarksTest, TwoCommandsOneTab) { 98 content::TestNavigationObserver navigation_observer( 99 browser()->tab_strip_model()->GetActiveWebContents()); 100 chrome::ShowBookmarkManager(browser()); 101 chrome::ShowBookmarkManager(browser()); 102 navigation_observer.Wait(); 103 104 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 105} 106 107IN_PROC_BROWSER_TEST_F(BookmarksTest, BookmarksLoaded) { 108 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIBookmarksURL)); 109 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 110 AssertIsBookmarksPage(browser()->tab_strip_model()->GetActiveWebContents()); 111} 112