Chromium Code Reviews| Index: chrome/browser/mouseleave_browsertest.cc |
| diff --git a/chrome/browser/mouseleave_browsertest.cc b/chrome/browser/mouseleave_browsertest.cc |
| index 416b081f112b51b7f0acaec195cefb78fef5393a..2ca4916c754936c2abb9d9dc9245b1daf69a860c 100644 |
| --- a/chrome/browser/mouseleave_browsertest.cc |
| +++ b/chrome/browser/mouseleave_browsertest.cc |
| @@ -4,13 +4,24 @@ |
| #include "base/files/file_path.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "chrome/app/chrome_command_ids.h" |
| +#include "chrome/browser/chrome_notification_types.h" |
| +#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" |
| +#include "chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.h" |
| #include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/browser_commands.h" |
| +#include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| +#include "components/app_modal/app_modal_dialog.h" |
| +#include "content/public/browser/render_frame_host.h" |
| +#include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/test/browser_test_utils.h" |
| +#include "content/public/test/test_navigation_observer.h" |
| +#include "content/public/test/test_utils.h" |
| #include "ui/base/test/ui_controls.h" |
| namespace { |
| @@ -19,24 +30,20 @@ class MouseLeaveTest : public InProcessBrowserTest { |
| public: |
| MouseLeaveTest() {} |
| - void MouseLeaveTestCommon() { |
| + void LoadTestPageAndWaitForMouseOver(content::WebContents* tab) { |
| + gfx::Rect tab_view_bounds = tab->GetContainerBounds(); |
| GURL test_url = ui_test_utils::GetTestUrl( |
| base::FilePath(), base::FilePath(FILE_PATH_LITERAL("mouseleave.html"))); |
| - content::WebContents* tab = |
| - browser()->tab_strip_model()->GetActiveWebContents(); |
| - gfx::Rect tab_view_bounds = tab->GetContainerBounds(); |
| - |
| - gfx::Point in_content_point( |
| - tab_view_bounds.x() + tab_view_bounds.width() / 2, |
| - tab_view_bounds.y() + 10); |
| - gfx::Point above_content_point( |
| - tab_view_bounds.x() + tab_view_bounds.width() / 2, |
| - tab_view_bounds.y() - 2); |
| + gfx::Point in_content = |
| + gfx::Point(tab_view_bounds.x() + tab_view_bounds.width() / 2, |
| + tab_view_bounds.y() + 10); |
| + above_content_ = |
| + gfx::Point(tab_view_bounds.x() + tab_view_bounds.width() / 2, |
| + tab_view_bounds.y() - 2); |
| // Start by moving the point just above the content. |
| - ui_controls::SendMouseMove(above_content_point.x(), |
| - above_content_point.y()); |
| + ui_controls::SendMouseMove(above_content_.x(), above_content_.y()); |
| // Navigate to the test html page. |
| base::string16 load_expected_title(base::ASCIIToUTF16("onload")); |
| @@ -46,19 +53,25 @@ class MouseLeaveTest : public InProcessBrowserTest { |
| // next part of the test. |
| EXPECT_EQ(load_expected_title, load_title_watcher.WaitAndGetTitle()); |
| - // Move the cursor to the top-center of the content, which will trigger |
| + // Move the cursor to the top-center of the content which will trigger |
| // a javascript onMouseOver event. |
| - ui_controls::SendMouseMove(in_content_point.x(), in_content_point.y()); |
| + ui_controls::SendMouseMove(in_content.x(), in_content.y()); |
| // Wait on the correct intermediate title. |
| base::string16 entered_expected_title(base::ASCIIToUTF16("entered")); |
| content::TitleWatcher entered_title_watcher(tab, entered_expected_title); |
| EXPECT_EQ(entered_expected_title, entered_title_watcher.WaitAndGetTitle()); |
| + } |
| + |
| + void MouseLeaveTestCommon() { |
| + content::WebContents* tab = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| + |
| + LoadTestPageAndWaitForMouseOver(tab); |
| // Move the cursor above the content again, which should trigger |
| // a javascript onMouseOut event. |
| - ui_controls::SendMouseMove(above_content_point.x(), |
| - above_content_point.y()); |
| + ui_controls::SendMouseMove(above_content_.x(), above_content_.y()); |
| // Wait on the correct final value of the cookie. |
| base::string16 left_expected_title(base::ASCIIToUTF16("left")); |
| @@ -66,6 +79,8 @@ class MouseLeaveTest : public InProcessBrowserTest { |
| EXPECT_EQ(left_expected_title, left_title_watcher.WaitAndGetTitle()); |
| } |
| + gfx::Point above_content_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(MouseLeaveTest); |
| }; |
| @@ -95,4 +110,104 @@ IN_PROC_BROWSER_TEST_F(MouseLeaveTest, MouseDownOnBrowserCaption) { |
| } |
| #endif |
| +#if defined(OS_WIN) |
| +// This test is for preventing a regression that the mouseleave is triggered |
| +// on Window when opening the new window. |
|
pkotwicz
2015/02/13 20:52:13
How about: "Test that a mouse leave event is trigg
Miyoung Shin
2015/02/14 15:32:01
Done. Thank you for correcting it.
|
| +#define MAYBE_NewWindow NewWindow |
| +#else |
| +// Others except OS_WIN do not send the mouseleave when opening the new window |
| +// TODO: Make test pass on the other OSes |
| +// See http://crbug.com/458492 |
| +#define MAYBE_NewWindow DISABLED_NewWindow |
| +#endif |
| + |
|
pkotwicz
2015/02/13 20:52:13
I suspect that a mouse leave is sent only when the
Miyoung Shin
2015/02/14 15:32:01
The mouse leave is sent when the mouse position is
pkotwicz
2015/02/17 19:59:29
It sounds like this test will pass / fail based on
Miyoung Shin
2015/02/18 12:10:33
Yes, right.
|
| +IN_PROC_BROWSER_TEST_F(MouseLeaveTest, MAYBE_NewWindow) { |
| + content::WebContents* tab = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| + |
| + LoadTestPageAndWaitForMouseOver(tab); |
| + |
| + // Create an new window. |
| + ui_test_utils::BrowserAddedObserver browser_added_observer; |
| + chrome::NewWindow(browser()); |
| + browser_added_observer.WaitForSingleNewBrowser(); |
| + |
| + ASSERT_EQ(2u, chrome::GetTotalBrowserCount()); |
| + |
| + content::RunAllPendingInMessageLoop(); |
| + |
| + tab->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16("done()")); |
| + const base::string16 success_title = base::ASCIIToUTF16("with mouseleave"); |
| + const base::string16 failure_title = base::ASCIIToUTF16("without mouseleave"); |
| + content::TitleWatcher done_title_watcher(tab, success_title); |
| + done_title_watcher.AlsoWaitForTitle(failure_title); |
| + |
| + EXPECT_EQ(success_title, done_title_watcher.WaitAndGetTitle()); |
| +} |
| + |
| +#if defined(OS_WIN) || defined(OS_MACOSX) |
| +// Test that a mouseleave is not triggered when showing the context menu. |
| +// TODO: Make test pass on OS_WIN and OS_MACOSX |
| +// OS_WIN: http://crbug.com/450138 |
| +// OS_MACOSX: Missing automation provider support: http://crbug.com/45892. |
| +#define MAYBE_ContextMenu DISABLED_ContextMenu |
| +#else |
| +#define MAYBE_ContextMenu ContextMenu |
| +#endif |
| + |
| +IN_PROC_BROWSER_TEST_F(MouseLeaveTest, MAYBE_ContextMenu) { |
| + content::WebContents* tab = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| + |
| + LoadTestPageAndWaitForMouseOver(tab); |
| + |
| + SaveLinkAsContextMenuObserver menu_observer( |
| + content::NotificationService::AllSources()); |
| + ui_controls::SendMouseClick(ui_controls::RIGHT); |
| + // Wait until opening context menu and closing one. |
| + menu_observer.WaitForMenuOpenAndClose(); |
| + |
| + content::RunAllPendingInMessageLoop(); |
| + |
| + tab->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16("done()")); |
| + const base::string16 success_title = base::ASCIIToUTF16("without mouseleave"); |
| + const base::string16 failure_title = base::ASCIIToUTF16("with mouseleave"); |
| + content::TitleWatcher done_title_watcher(tab, success_title); |
| + done_title_watcher.AlsoWaitForTitle(failure_title); |
| + |
| + EXPECT_EQ(success_title, done_title_watcher.WaitAndGetTitle()); |
| +} |
| + |
| +#if defined(OS_WIN) || defined(OS_MACOSX) |
| +// Test that a mouseleave is not triggered when showing a modal dialog. |
| +// Sample regression: crbug.com/394672 |
| +// TODO: Make test pass on OS_WIN and OS_MACOSX |
| +// OS_WIN: http://crbug.com/450138 |
| +// OS_MACOSX: Missing automation provider support: http://crbug.com/45892. |
| +#define MAYBE_ModalDialog DISABLED_ModalDialog |
| +#else |
| +#define MAYBE_ModalDialog ModalDialog |
| +#endif |
| + |
| +IN_PROC_BROWSER_TEST_F(MouseLeaveTest, MAYBE_ModalDialog) { |
| + content::WebContents* tab = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| + |
| + LoadTestPageAndWaitForMouseOver(tab); |
| + |
| + tab->GetMainFrame()->ExecuteJavaScript(base::UTF8ToUTF16("alert()")); |
| + // Cancel the dialog. |
| + app_modal::AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
| + alert->CloseModalDialog(); |
| + |
| + content::RunAllPendingInMessageLoop(); |
| + |
| + tab->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16("done()")); |
| + const base::string16 success_title = base::ASCIIToUTF16("without mouseleave"); |
| + const base::string16 failure_title = base::ASCIIToUTF16("with mouseleave"); |
| + content::TitleWatcher done_title_watcher(tab, success_title); |
| + done_title_watcher.AlsoWaitForTitle(failure_title); |
| + EXPECT_EQ(success_title, done_title_watcher.WaitAndGetTitle()); |
| +} |
| + |
| } // namespace |