TEST(WebKit2, SpacebarScrolling) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); WKRetainPtr<WKPageNamespaceRef> pageNamespace(AdoptWK, WKPageNamespaceCreate(context.get())); PlatformWebView webView(pageNamespace.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); TEST_ASSERT(runJSTest(webView.page(), "isDocumentScrolled()", "false")); TEST_ASSERT(runJSTest(webView.page(), "textFieldContainsSpace()", "false")); webView.simulateSpacebarKeyPress(); TEST_ASSERT(runJSTest(webView.page(), "isDocumentScrolled()", "false")); TEST_ASSERT(runJSTest(webView.page(), "textFieldContainsSpace()", "true")); // 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) TEST_ASSERT(!didNotHandleKeyDownEvent); #elif PLATFORM(WIN) TEST_ASSERT(didNotHandleKeyDownEvent); #endif TEST_ASSERT(runJSTest(webView.page(), "blurTextField()", "undefined")); didNotHandleKeyDownEvent = false; webView.simulateSpacebarKeyPress(); TEST_ASSERT(runJSTest(webView.page(), "isDocumentScrolled()", "true")); TEST_ASSERT(runJSTest(webView.page(), "textFieldContainsSpace()", "true")); #if PLATFORM(MAC) TEST_ASSERT(!didNotHandleKeyDownEvent); #elif PLATFORM(WIN) TEST_ASSERT(didNotHandleKeyDownEvent); #endif }
static WKRetainPtr<WKDataRef> createSessionStateContainingFormData(WKContextRef context) { PlatformWebView webView(context); setPageLoaderClient(webView.page()); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple-form", "html")).get()); Util::run(&didFinishLoad); didFinishLoad = false; TEST_ASSERT_RETURN(runJSTest(webView.page(), "submitForm()", "undefined"), 0); Util::run(&didFinishLoad); didFinishLoad = false; return adoptWK(WKPageCopySessionState(webView.page(), 0, 0)); }