Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3857)

Unified Diff: chrome/browser/ui/browser_browsertest.cc

Issue 11249004: Tests for dispositions of various modified clicks on a normal link. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tweak comments Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/test/data/click_modifier/href.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_browsertest.cc
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 025551c480f32264f9acb28053736eb272fd0f40..e7c89ff239de8487b225286aa2d287f16d25822d 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -60,6 +60,7 @@
#include "content/public/common/renderer_preferences.h"
#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "net/base/mock_host_resolver.h"
@@ -1713,12 +1714,20 @@ class ClickModifierTest : public InProcessBrowserTest {
}
// Returns a url that opens a new window or tab when clicked, via javascript.
- GURL GetTestURL() {
+ GURL GetWindowOpenURL() {
return ui_test_utils::GetTestUrl(
FilePath(kTestDir),
FilePath(FILE_PATH_LITERAL("window_open.html")));
}
+ // Returns a url that follows a simple link when clicked, unless affected by
+ // modifiers.
+ GURL GetHrefURL() {
+ return ui_test_utils::GetTestUrl(
+ FilePath(kTestDir),
+ FilePath(FILE_PATH_LITERAL("href.html")));
+ }
+
string16 getFirstPageTitle() {
return ASCIIToUTF16(kFirstPageTitle);
}
@@ -1728,42 +1737,59 @@ class ClickModifierTest : public InProcessBrowserTest {
}
// Loads our test page and simulates a single click using the supplied button
- // and modifiers. The test page will call window.open, creating either a new
- // tab or a new window. In the case of a tab, it will verify whether the
- // tab's in the foreground or background.
+ // and modifiers. The click will cause either a navigation or the creation of
+ // a new window or foreground or background tab. We verify that the expected
+ // disposition occurs.
void RunTest(Browser* browser,
+ const GURL& url,
int modifiers,
WebKit::WebMouseEvent::Button button,
- bool expect_new_window,
- bool expect_foreground) {
- GURL url(GetTestURL());
+ WindowOpenDisposition disposition) {
ui_test_utils::NavigateToURL(browser, url);
EXPECT_EQ(1u, browser::GetBrowserCount(browser->profile()));
EXPECT_EQ(1, browser->tab_count());
content::WebContents* web_contents = chrome::GetActiveWebContents(browser);
EXPECT_EQ(url, web_contents->GetURL());
+ if (disposition == CURRENT_TAB) {
+ NavigationController* controller =
+ chrome::GetActiveWebContents(browser) ?
+ &chrome::GetActiveWebContents(browser)->GetController() : NULL;
+ content::TestNavigationObserver same_tab_observer(
+ content::Source<NavigationController>(controller),
+ NULL,
+ 1);
+ SimulateMouseClick(web_contents, modifiers, button);
+ base::RunLoop run_loop;
+ same_tab_observer.WaitForObservation(
+ base::Bind(&content::RunThisRunLoop, base::Unretained(&run_loop)),
+ content::GetQuitTaskForRunLoop(&run_loop));
+ EXPECT_EQ(1u, browser::GetBrowserCount(browser->profile()));
+ EXPECT_EQ(1, browser->tab_count());
+ EXPECT_EQ(getSecondPageTitle(), web_contents->GetTitle());
+ return;
+ }
+
content::WindowedNotificationObserver observer(
chrome::NOTIFICATION_TAB_ADDED,
content::NotificationService::AllSources());
SimulateMouseClick(web_contents, modifiers, button);
observer.Wait();
- unsigned expected_browser_count = expect_new_window ? 2 : 1;
- EXPECT_EQ(expected_browser_count,
- browser::GetBrowserCount(browser->profile()));
-
- // If we didn't pop up a new window, we need to make sure the right tab's in
- // front.
- if (!expect_new_window) {
- EXPECT_EQ(2, browser->tab_count());
- web_contents = chrome::GetActiveWebContents(browser);
- WaitForLoadStop(web_contents);
- if (expect_foreground) {
- EXPECT_EQ(getSecondPageTitle(), web_contents->GetTitle());
- } else {
- EXPECT_EQ(getFirstPageTitle(), web_contents->GetTitle());
- }
+ if (disposition == NEW_WINDOW) {
+ EXPECT_EQ(2u, browser::GetBrowserCount(browser->profile()));
+ return;
+ }
+
+ EXPECT_EQ(1u, browser::GetBrowserCount(browser->profile()));
+ EXPECT_EQ(2, browser->tab_count());
+ web_contents = chrome::GetActiveWebContents(browser);
+ WaitForLoadStop(web_contents);
+ if (disposition == NEW_FOREGROUND_TAB) {
+ EXPECT_EQ(getSecondPageTitle(), web_contents->GetTitle());
+ } else {
+ ASSERT_EQ(NEW_BACKGROUND_TAB, disposition);
+ EXPECT_EQ(getFirstPageTitle(), web_contents->GetTitle());
}
}
@@ -1771,45 +1797,107 @@ class ClickModifierTest : public InProcessBrowserTest {
DISALLOW_COPY_AND_ASSIGN(ClickModifierTest);
};
-IN_PROC_BROWSER_TEST_F(ClickModifierTest, BasicClickTest) {
+// Tests for clicking on elements with handlers that run window.open.
+
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenBasicClickTest) {
int modifiers = 0;
WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
- bool expect_new_window = false;
- bool expect_foreground = true;
- RunTest(browser(), modifiers, button, expect_new_window, expect_foreground);
+ WindowOpenDisposition disposition = NEW_FOREGROUND_TAB;
+ RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition);
}
-// TODO(ericu): Alt-click behavior is platform-dependent and not well defined.
-// Should we add tests so we know if it changes?
+// TODO(ericu): Alt-click behavior on window.open is platform-dependent and not
+// well defined. Should we add tests so we know if it changes?
// Shift-clicks open in a new window.
// TODO(ericu): Disabled until https://bugs.webkit.org/show_bug.cgi?id=99202
// lands, fixing http://crbug.com/31631.
-IN_PROC_BROWSER_TEST_F(ClickModifierTest, DISABLED_ShiftClickTest) {
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, DISABLED_WindowOpenShiftClickTest) {
+ int modifiers = WebKit::WebInputEvent::ShiftKey;
+ WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
+ WindowOpenDisposition disposition = NEW_WINDOW;
+ RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition);
+}
+
+// Control-clicks open in a background tab.
+// On OSX meta [the command key] takes the place of control.
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenControlClickTest) {
+#if defined(OS_MACOSX)
+ int modifiers = WebKit::WebInputEvent::MetaKey;
+#else
+ int modifiers = WebKit::WebInputEvent::ControlKey;
+#endif
+ WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
+ WindowOpenDisposition disposition = NEW_BACKGROUND_TAB;
+ RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition);
+}
+
+// Control-shift-clicks open in a foreground tab.
+// On OSX meta [the command key] takes the place of control.
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenControlShiftClickTest) {
+#if defined(OS_MACOSX)
+ int modifiers = WebKit::WebInputEvent::MetaKey;
+#else
+ int modifiers = WebKit::WebInputEvent::ControlKey;
+#endif
+ modifiers |= WebKit::WebInputEvent::ShiftKey;
+ WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
+ WindowOpenDisposition disposition = NEW_FOREGROUND_TAB;
+ RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition);
+}
+
+// Middle-clicks open in a background tab.
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenMiddleClickTest) {
+ int modifiers = 0;
+ WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle;
+ WindowOpenDisposition disposition = NEW_BACKGROUND_TAB;
+ RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition);
+}
+
+// Shift-middle-clicks open in a foreground tab.
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, WindowOpenShiftMiddleClickTest) {
+ int modifiers = WebKit::WebInputEvent::ShiftKey;
+ WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle;
+ WindowOpenDisposition disposition = NEW_FOREGROUND_TAB;
+ RunTest(browser(), GetWindowOpenURL(), modifiers, button, disposition);
+}
+
+// Tests for clicking on normal links.
+
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefBasicClickTest) {
+ int modifiers = 0;
+ WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
+ WindowOpenDisposition disposition = CURRENT_TAB;
+ RunTest(browser(), GetHrefURL(), modifiers, button, disposition);
+}
+
+// TODO(ericu): Alt-click behavior on links is platform-dependent and not well
+// defined. Should we add tests so we know if it changes?
+
+// Shift-clicks open in a new window.
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefShiftClickTest) {
int modifiers = WebKit::WebInputEvent::ShiftKey;
WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
- bool expect_new_window = true;
- bool expect_foreground = true;
- RunTest(browser(), modifiers, button, expect_new_window, expect_foreground);
+ WindowOpenDisposition disposition = NEW_WINDOW;
+ RunTest(browser(), GetHrefURL(), modifiers, button, disposition);
}
// Control-clicks open in a background tab.
// On OSX meta [the command key] takes the place of control.
-IN_PROC_BROWSER_TEST_F(ClickModifierTest, ControlClickTest) {
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefControlClickTest) {
#if defined(OS_MACOSX)
int modifiers = WebKit::WebInputEvent::MetaKey;
#else
int modifiers = WebKit::WebInputEvent::ControlKey;
#endif
WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
- bool expect_new_window = false;
- bool expect_foreground = false;
- RunTest(browser(), modifiers, button, expect_new_window, expect_foreground);
+ WindowOpenDisposition disposition = NEW_BACKGROUND_TAB;
+ RunTest(browser(), GetHrefURL(), modifiers, button, disposition);
}
// Control-shift-clicks open in a foreground tab.
// On OSX meta [the command key] takes the place of control.
-IN_PROC_BROWSER_TEST_F(ClickModifierTest, ControlShiftClickTest) {
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefControlShiftClickTest) {
#if defined(OS_MACOSX)
int modifiers = WebKit::WebInputEvent::MetaKey;
#else
@@ -1817,25 +1905,22 @@ IN_PROC_BROWSER_TEST_F(ClickModifierTest, ControlShiftClickTest) {
#endif
modifiers |= WebKit::WebInputEvent::ShiftKey;
WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonLeft;
- bool expect_new_window = false;
- bool expect_foreground = true;
- RunTest(browser(), modifiers, button, expect_new_window, expect_foreground);
+ WindowOpenDisposition disposition = NEW_FOREGROUND_TAB;
+ RunTest(browser(), GetHrefURL(), modifiers, button, disposition);
}
// Middle-clicks open in a background tab.
-IN_PROC_BROWSER_TEST_F(ClickModifierTest, MiddleClickTest) {
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefMiddleClickTest) {
int modifiers = 0;
WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle;
- bool expect_new_window = false;
- bool expect_foreground = false;
- RunTest(browser(), modifiers, button, expect_new_window, expect_foreground);
+ WindowOpenDisposition disposition = NEW_BACKGROUND_TAB;
+ RunTest(browser(), GetHrefURL(), modifiers, button, disposition);
}
// Shift-middle-clicks open in a foreground tab.
-IN_PROC_BROWSER_TEST_F(ClickModifierTest, ShiftMiddleClickTest) {
+IN_PROC_BROWSER_TEST_F(ClickModifierTest, HrefShiftMiddleClickTest) {
int modifiers = WebKit::WebInputEvent::ShiftKey;
WebKit::WebMouseEvent::Button button = WebKit::WebMouseEvent::ButtonMiddle;
- bool expect_new_window = false;
- bool expect_foreground = true;
- RunTest(browser(), modifiers, button, expect_new_window, expect_foreground);
+ WindowOpenDisposition disposition = NEW_FOREGROUND_TAB;
+ RunTest(browser(), GetHrefURL(), modifiers, button, disposition);
}
« no previous file with comments | « no previous file | chrome/test/data/click_modifier/href.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698