static void didFinishDocumentLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) { WKPageSetScrollPinningBehavior(page, kWKScrollPinningBehaviorPinToBottom); EXPECT_JS_EQ(page, "window.scrollY", "2434"); PlatformWebView* webView = (PlatformWebView*)clientInfo; webView->resizeTo(800, 200); EXPECT_JS_EQ(page, "window.scrollY", "2834"); EXPECT_JS_EQ(page, "window.scrollTo(0,0)", "undefined"); EXPECT_JS_EQ(page, "window.scrollY", "2834"); WKPageSetScrollPinningBehavior(page, kWKScrollPinningBehaviorPinToTop); EXPECT_JS_EQ(page, "window.scrollY", "0"); EXPECT_JS_EQ(page, "window.scrollTo(0,200)", "undefined"); EXPECT_JS_EQ(page, "window.scrollY", "0"); WKPageSetScrollPinningBehavior(page, kWKScrollPinningBehaviorDoNotPin); EXPECT_JS_EQ(page, "window.scrollY", "0"); EXPECT_JS_EQ(page, "window.scrollTo(0,200)", "undefined"); EXPECT_JS_EQ(page, "window.scrollY", "200"); testDone = true; }
TEST(WebKit2, SpacebarScrolling) { WKRetainPtr<WKContextRef> context(AdoptWK, Util::createContextWithInjectedBundle()); PlatformWebView webView(context.get()); WKPageLoaderClient loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.version = 0; loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(webView.page(), &loaderClient); WKPageUIClient uiClient; memset(&uiClient, 0, sizeof(uiClient)); uiClient.didNotHandleKeyEvent = didNotHandleKeyEventCallback; WKPageSetPageUIClient(webView.page(), &uiClient); WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("spacebar-scrolling", "html")); WKPageLoadURL(webView.page(), url.get()); Util::run(&didFinishLoad); EXPECT_JS_FALSE(webView.page(), "isDocumentScrolled()"); EXPECT_JS_FALSE(webView.page(), "textFieldContainsSpace()"); webView.simulateSpacebarKeyPress(); EXPECT_JS_FALSE(webView.page(), "isDocumentScrolled()"); EXPECT_JS_TRUE(webView.page(), "textFieldContainsSpace()"); // On Mac, a key down event represents both a raw key down and a key press. On Windows, a key // down event only represents a raw key down. We expect the key press to be handled (because it // inserts text into the text field). But the raw key down should not be handled. #if PLATFORM(MAC) EXPECT_FALSE(didNotHandleKeyDownEvent); #elif PLATFORM(WIN) EXPECT_TRUE(didNotHandleKeyDownEvent); #endif EXPECT_JS_EQ(webView.page(), "blurTextField()", "undefined"); didNotHandleKeyDownEvent = false; webView.simulateSpacebarKeyPress(); EXPECT_JS_TRUE(webView.page(), "isDocumentScrolled()"); EXPECT_JS_TRUE(webView.page(), "textFieldContainsSpace()"); #if PLATFORM(MAC) EXPECT_FALSE(didNotHandleKeyDownEvent); #elif PLATFORM(WIN) EXPECT_TRUE(didNotHandleKeyDownEvent); #endif }
static void didLayout(WKPageRef page, WKLayoutMilestones milestones, WKTypeRef, const void* clientInfo) { if (milestones & kWKDidFirstLayoutAfterSuppressedIncrementalRendering) { PlatformWebView* webView = (PlatformWebView*)clientInfo; unsigned pageCount = WKPageGetPageCount(page); EXPECT_EQ(expectedPageCount, pageCount); webView->resizeTo((pageLength * pageCount) + (pageGap * (pageCount - 1)), 500); EXPECT_JS_EQ(page, "window.scrollX", "0"); testDone = true; } }