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