Index: chrome/browser/apps/guest_view/web_view_browsertest.cc |
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc |
index 1f2526d009d601d8e73fa8d21b8e804bc993c084..72656f45138d29f00b361b12fdcc6cf5b1447131 100644 |
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc |
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc |
@@ -3408,6 +3408,79 @@ IN_PROC_BROWSER_TEST_P(WebViewGuestScrollTouchTest, |
} |
} |
+class WebViewScrollGuestContentTest : public WebViewTest { |
+ public: |
+ ~WebViewScrollGuestContentTest() override {} |
+ |
+ void SetUpCommandLine(base::CommandLine* command_line) override { |
+ WebViewTest::SetUpCommandLine(command_line); |
+ |
+ command_line->AppendSwitchASCII(switches::kTouchEvents, |
+ switches::kTouchEventsEnabled); |
+ } |
+}; |
+ |
+INSTANTIATE_TEST_CASE_P(WebViewScrollGuestContent, |
+ WebViewScrollGuestContentTest, |
+ testing::Values(false)); |
+ |
+IN_PROC_BROWSER_TEST_P(WebViewScrollGuestContentTest, ScrollGuestContent) { |
+ LoadAppWithGuest("web_view/scrollable_embedder_and_guest"); |
+ |
+ content::WebContents* embedder_contents = GetEmbedderWebContents(); |
+ |
+ std::vector<content::WebContents*> guest_web_contents_list; |
+ GetGuestViewManager()->WaitForNumGuestsCreated(1u); |
+ GetGuestViewManager()->GetGuestWebContentsList(&guest_web_contents_list); |
+ ASSERT_EQ(1u, guest_web_contents_list.size()); |
+ |
+ content::WebContents* guest_contents = guest_web_contents_list[0]; |
+ content::RenderWidgetHostView* guest_host_view = |
+ guest_contents->GetRenderWidgetHostView(); |
+ |
+ gfx::Rect embedder_rect = embedder_contents->GetContainerBounds(); |
+ gfx::Rect guest_rect = guest_contents->GetContainerBounds(); |
+ guest_rect.set_x(guest_rect.x() - embedder_rect.x()); |
+ guest_rect.set_y(guest_rect.y() - embedder_rect.y()); |
+ |
+ content::RenderWidgetHostView* embedder_host_view = |
+ embedder_contents->GetRenderWidgetHostView(); |
+ EXPECT_EQ(gfx::Vector2dF(), guest_host_view->GetLastScrollOffset()); |
+ EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
+ |
+ gfx::Point guest_scroll_location(guest_rect.x() + guest_rect.width() / 2, |
+ guest_rect.y()); |
+ |
+ float gesture_distance = 15.f; |
+ { |
+ gfx::Vector2dF expected_offset(0.f, gesture_distance); |
+ |
+ ScrollWaiter waiter(guest_host_view); |
+ |
+ content::SimulateGestureScrollSequence( |
+ embedder_contents, guest_scroll_location, |
+ gfx::Vector2dF(0, -gesture_distance)); |
+ |
+ waiter.WaitForScrollChange(expected_offset); |
+ } |
+ EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
+ |
+ // Use fling gesture to scroll back, velocity should be big enough to scroll |
+ // content back. |
+ float fling_velocity = 300.f; |
+ { |
+ ScrollWaiter waiter(guest_host_view); |
+ |
+ content::SimulateGestureFlingSequence( |
+ embedder_contents, guest_scroll_location, |
+ gfx::Vector2dF(0, fling_velocity)); |
+ |
+ waiter.WaitForScrollChange(gfx::Vector2dF()); |
+ } |
+ |
+ EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
+} |
+ |
#if defined(USE_AURA) |
// TODO(wjmaclean): when WebViewTest is re-enabled on the site-isolation |
// bots, then re-enable this test class as well. |