| Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp | 
| diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp | 
| index 52919cde63df29b9511eaaace6438c70b60dfb31..a702e1b2e3415d8976a7160130e4c0f8b48ec19b 100644 | 
| --- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp | 
| +++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp | 
| @@ -11649,8 +11649,6 @@ TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) { | 
| mouse_move_over_scrollbar.SetFrameScale(1); | 
| document->GetFrame()->GetEventHandler().HandleMouseMoveEvent( | 
| mouse_move_over_scrollbar, Vector<WebMouseEvent>()); | 
| -  HitTestResult hit_test_result = | 
| -      web_view->CoreHitTestResultAt(WebPoint(175, 1)); | 
| EXPECT_EQ(scrollbar->PressedPart(), ScrollbarPart::kNoPart); | 
| EXPECT_EQ(scrollbar->HoveredPart(), ScrollbarPart::kThumbPart); | 
|  | 
| @@ -11688,6 +11686,75 @@ TEST_F(WebFrameTest, MouseReleaseUpdatesScrollbarHoveredPart) { | 
| EXPECT_EQ(scrollbar->HoveredPart(), ScrollbarPart::kNoPart); | 
| } | 
|  | 
| +class TapChangeHoverStateTest : public WebFrameTest { | 
| + public: | 
| +  void RunTest(bool viewport_enabled, | 
| +               bool viewport_meta, | 
| +               bool should_change_hover_state) { | 
| +    std::string test_page = | 
| +        viewport_meta ? "viewport-2-div.html" : "noviewport-2-div.html"; | 
| + | 
| +    FakeCompositingWebViewClient client; | 
| +    RegisterMockedHttpURLLoad(test_page); | 
| +    FrameTestHelpers::WebViewHelper web_view_helper; | 
| +    WebViewBase* web_view; | 
| +    if (viewport_enabled) { | 
| +      web_view = web_view_helper.InitializeAndLoad(base_url_ + test_page, false, | 
| +                                                   nullptr, &client, nullptr, | 
| +                                                   ConfigureAndroid); | 
| +    } else { | 
| +      web_view = web_view_helper.InitializeAndLoad(base_url_ + test_page); | 
| +    } | 
| +    web_view_helper.Resize(WebSize(250, 250)); | 
| + | 
| +    Document* document = | 
| +        ToLocalFrame(web_view->GetPage()->MainFrame())->GetDocument(); | 
| + | 
| +    Element* div1 = document->getElementById("div1"); | 
| +    Element* div2 = document->getElementById("div2"); | 
| + | 
| +    // Move mouse over div1 should hover div1. | 
| +    WebMouseEvent mouse_move_over_div1( | 
| +        WebInputEvent::kMouseMove, WebFloatPoint(10, 10), WebFloatPoint(10, 10), | 
| +        WebPointerProperties::Button::kNoButton, 0, WebInputEvent::kNoModifiers, | 
| +        TimeTicks::Now().InSeconds()); | 
| +    mouse_move_over_div1.SetFrameScale(1); | 
| +    document->GetFrame()->GetEventHandler().HandleMouseMoveEvent( | 
| +        mouse_move_over_div1, Vector<WebMouseEvent>()); | 
| + | 
| +    DCHECK(document->HoverElement() == div1); | 
| + | 
| +    // Tap on div2. | 
| +    WebGestureEvent tap_on_div2(WebInputEvent::kGestureTap, | 
| +                                WebInputEvent::kNoModifiers, | 
| +                                WebInputEvent::kTimeStampForTesting); | 
| +    tap_on_div2.SetFrameScale(1); | 
| +    tap_on_div2.x = tap_on_div2.global_x = 10; | 
| +    tap_on_div2.y = tap_on_div2.global_y = 110; | 
| +    tap_on_div2.source_device = kWebGestureDeviceTouchscreen; | 
| +    web_view_helper.WebView() | 
| +        ->MainFrameImpl() | 
| +        ->GetFrame() | 
| +        ->GetEventHandler() | 
| +        .HandleGestureEvent(tap_on_div2); | 
| + | 
| +    Element* expected_hover_element = should_change_hover_state ? div2 : div1; | 
| +    EXPECT_EQ(expected_hover_element, document->HoverElement()); | 
| +  } | 
| +}; | 
| + | 
| +TEST_F(TapChangeHoverStateTest, TapNotChangeHoverStateOnViewportMetaAndMobile) { | 
| +  RunTest(true, true, false); | 
| +} | 
| + | 
| +TEST_F(TapChangeHoverStateTest, TapChangeHoverStateOnNoViewportMetaAndMobile) { | 
| +  RunTest(true, false, true); | 
| +} | 
| + | 
| +TEST_F(TapChangeHoverStateTest, TapChangeHoverStateOnViewportMetaAndDesktop) { | 
| +  RunTest(false, true, true); | 
| +} | 
| + | 
| TEST_F(WebFrameTest, | 
| CustomScrollbarInOverlayScrollbarThemeWillNotCauseDCHECKFails) { | 
| RegisterMockedHttpURLLoad( | 
|  |