Home | History | Annotate | Download | only in browser
      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/files/file_path.h"
      6 #include "base/strings/utf_string_conversions.h"
      7 #include "chrome/browser/ui/browser.h"
      8 #include "chrome/browser/ui/browser_window.h"
      9 #include "chrome/browser/ui/tabs/tab_strip_model.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/web_contents.h"
     13 #include "content/public/test/browser_test_utils.h"
     14 #include "ui/base/test/ui_controls.h"
     15 
     16 namespace {
     17 
     18 class MouseLeaveTest : public InProcessBrowserTest {
     19  public:
     20   MouseLeaveTest() {}
     21 
     22   void MouseLeaveTestCommon() {
     23     GURL test_url = ui_test_utils::GetTestUrl(
     24         base::FilePath(), base::FilePath(FILE_PATH_LITERAL("mouseleave.html")));
     25 
     26     content::WebContents* tab =
     27         browser()->tab_strip_model()->GetActiveWebContents();
     28     gfx::Rect tab_view_bounds = tab->GetContainerBounds();
     29 
     30     gfx::Point in_content_point(
     31         tab_view_bounds.x() + tab_view_bounds.width() / 2,
     32         tab_view_bounds.y() + 10);
     33     gfx::Point above_content_point(
     34         tab_view_bounds.x() + tab_view_bounds.width() / 2,
     35         tab_view_bounds.y() - 2);
     36 
     37     // Start by moving the point just above the content.
     38     ui_controls::SendMouseMove(above_content_point.x(),
     39                                above_content_point.y());
     40 
     41     // Navigate to the test html page.
     42     base::string16 load_expected_title(base::ASCIIToUTF16("onload"));
     43     content::TitleWatcher load_title_watcher(tab, load_expected_title);
     44     ui_test_utils::NavigateToURL(browser(), test_url);
     45     // Wait for the onload() handler to complete so we can do the
     46     // next part of the test.
     47     EXPECT_EQ(load_expected_title, load_title_watcher.WaitAndGetTitle());
     48 
     49     // Move the cursor to the top-center of the content, which will trigger
     50     // a javascript onMouseOver event.
     51     ui_controls::SendMouseMove(in_content_point.x(), in_content_point.y());
     52 
     53     // Wait on the correct intermediate title.
     54     base::string16 entered_expected_title(base::ASCIIToUTF16("entered"));
     55     content::TitleWatcher entered_title_watcher(tab, entered_expected_title);
     56     EXPECT_EQ(entered_expected_title, entered_title_watcher.WaitAndGetTitle());
     57 
     58     // Move the cursor above the content again, which should trigger
     59     // a javascript onMouseOut event.
     60     ui_controls::SendMouseMove(above_content_point.x(),
     61                                above_content_point.y());
     62 
     63     // Wait on the correct final value of the cookie.
     64     base::string16 left_expected_title(base::ASCIIToUTF16("left"));
     65     content::TitleWatcher left_title_watcher(tab, left_expected_title);
     66     EXPECT_EQ(left_expected_title, left_title_watcher.WaitAndGetTitle());
     67   }
     68 
     69   DISALLOW_COPY_AND_ASSIGN(MouseLeaveTest);
     70 };
     71 
     72 #if defined(OS_MACOSX)
     73 // Missing automation provider support: http://crbug.com/45892
     74 #define MAYBE_TestOnMouseOut DISABLED_TestOnMouseOut
     75 #elif defined(OS_LINUX)
     76 // http://crbug.com/133361
     77 #define MAYBE_TestOnMouseOut DISABLED_TestOnMouseOut
     78 #else
     79 #define MAYBE_TestOnMouseOut TestOnMouseOut
     80 #endif
     81 
     82 IN_PROC_BROWSER_TEST_F(MouseLeaveTest, MAYBE_TestOnMouseOut) {
     83   MouseLeaveTestCommon();
     84 }
     85 
     86 #if defined(OS_WIN)
     87 // For MAC: Missing automation provider support: http://crbug.com/45892
     88 // For linux : http://crbug.com/133361. interactive mouse tests are flaky.
     89 IN_PROC_BROWSER_TEST_F(MouseLeaveTest, MouseDownOnBrowserCaption) {
     90   gfx::Rect browser_bounds = browser()->window()->GetBounds();
     91   ui_controls::SendMouseMove(browser_bounds.x() + 200,
     92                              browser_bounds.y() + 10);
     93   ui_controls::SendMouseClick(ui_controls::LEFT);
     94 
     95   MouseLeaveTestCommon();
     96 }
     97 #endif
     98 
     99 }  // namespace
    100