static bool runJSTest(WKPageRef page, const char* script, const char* expectedResult) { JavaScriptCallbackContext context(expectedResult); WKPageRunJavaScriptInMainFrame(page, wk(script).get(), &context, javaScriptCallback); Util::run(&context.didFinish); return context.didMatchExpectedString; }
TEST(WebKit2, EvaluateJavaScriptThatThrowsAnException) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); PlatformWebView webView(context.get()); WKRetainPtr<WKStringRef> javaScriptString(AdoptWK, WKStringCreateWithUTF8CString("throw 'Hello'")); WKPageRunJavaScriptInMainFrame(webView.page(), javaScriptString.get(), reinterpret_cast<void*>(0x1234578), didRunJavaScript); Util::run(&testDone); }
TEST(WebKit2, PreventEmptyUserAgent) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); PlatformWebView webView(context.get()); WKPageSetCustomUserAgent(webView.page(), WKStringCreateWithUTF8CString("")); WKRetainPtr<WKStringRef> javaScriptString(AdoptWK, WKStringCreateWithUTF8CString("navigator.userAgent")); WKPageRunJavaScriptInMainFrame(webView.page(), javaScriptString.get(), reinterpret_cast<void*>(0x1234578), didRunJavaScript); Util::run(&testDone); }
::testing::AssertionResult runJSTest(const char*, const char*, const char*, WKPageRef page, const char* script, const char* expectedResult) { JavaScriptCallbackContext context; WKPageRunJavaScriptInMainFrame(page, Util::toWK(script).get(), &context, javaScriptCallback); Util::run(&context.didFinish); size_t bufferSize = JSStringGetMaximumUTF8CStringSize(context.actualString.get()); auto buffer = std::make_unique<char[]>(bufferSize); JSStringGetUTF8CString(context.actualString.get(), buffer.get(), bufferSize); return compareJSResult(script, buffer.get(), expectedResult); }
TEST(WebKit2, PageLoadDidChangeLocationWithinPageForFrame) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); PlatformWebView webView(context.get()); WKPageLoaderClient loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; loaderClient.didSameDocumentNavigationForFrame = didSameDocumentNavigationForFrame; WKPageSetPageLoaderClient(webView.page(), &loaderClient); WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("file-with-anchor", "html")); WKPageLoadURL(webView.page(), url.get()); Util::run(&didFinishLoad); WKRetainPtr<WKURLRef> initialURL = adoptWK(WKFrameCopyURL(WKPageGetMainFrame(webView.page()))); WKPageRunJavaScriptInMainFrame(webView.page(), Util::toWK("clickLink()").get(), 0, nullJavaScriptCallback); Util::run(&didChangeLocationWithinPage); WKRetainPtr<WKURLRef> urlAfterAnchorClick = adoptWK(WKFrameCopyURL(WKPageGetMainFrame(webView.page()))); TEST_ASSERT(!WKURLIsEqual(initialURL.get(), urlAfterAnchorClick.get())); }
WorkQueueItem::Type invoke() const { WKPageRunJavaScriptInMainFrame(mainPage(), m_script.get(), 0, runJavaScriptFunction); return type; }