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 17 class 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 47 IN_PROC_BROWSER_TEST_F(BookmarksTest, ShouldRedirectToExtension) { 48 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIBookmarksURL)); 49 AssertIsBookmarksPage(browser()->tab_strip_model()->GetActiveWebContents()); 50 } 51 52 IN_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 74 IN_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 97 IN_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 107 IN_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