static void createSessionStates(WKContextRef context) { PlatformWebView webView(context); setPageLoaderClient(webView.page()); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple", "html")).get()); Util::run(&didFinishLoad); didFinishLoad = false; WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple2", "html")).get()); Util::run(&didFinishLoad); didFinishLoad = false; WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple3", "html")).get()); Util::run(&didFinishLoad); didFinishLoad = false; WKPageGoBack(webView.page()); Util::run(&didFinishLoad); didFinishLoad = false; WKPageGoBack(webView.page()); Util::run(&didFinishLoad); didFinishLoad = false; // Should be back on simple.html at this point. sessionStateWithFirstItemRemoved = adoptWK(static_cast<WKSessionStateRef>(WKPageCopySessionState(webView.page(), reinterpret_cast<void*>(1), filterFirstItemCallback))); sessionStateWithAllItemsRemoved = adoptWK(static_cast<WKSessionStateRef>(WKPageCopySessionState(webView.page(), reinterpret_cast<void*>(1), filterAllItemsCallback))); }
TEST(WebKit2, ResizeWindowAfterCrash) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); TestStatesData states(context.get()); WKPageLoaderClientV0 loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.base.version = 0; loaderClient.base.clientInfo = &states; loaderClient.didFinishLoadForFrame = didFinishLoad; loaderClient.processDidCrash = didCrash; WKPageSetPageLoaderClient(states.webView.page(), &loaderClient.base); WKRetainPtr<WKURLRef> url = adoptWK(WKURLCreateWithUTF8CString("about:blank")); // Load a blank page and next kills WebProcess. WKPageLoadURL(states.webView.page(), url.get()); Util::run(&states.firstLoad); WKPageTerminate(states.webView.page()); // Let's try load a page and see what happens. WKPageLoadURL(states.webView.page(), url.get()); Util::run(&states.resizeAfterCrash); }
TEST(WebKit2, GeolocationTransitionToLowAccuracy) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); GeolocationTransitionToLowAccuracyStateTracker stateTracker; setupGeolocationProvider(context.get(), &stateTracker); PlatformWebView highAccuracyWebView(context.get()); setupView(highAccuracyWebView); WKRetainPtr<WKURLRef> highAccuracyURL(AdoptWK, Util::createURLForResource("geolocationWatchPositionWithHighAccuracy", "html")); WKPageLoadURL(highAccuracyWebView.page(), highAccuracyURL.get()); Util::run(&stateTracker.finishedFirstStep); PlatformWebView lowAccuracyWebView(context.get()); setupView(lowAccuracyWebView); bool finishedSecondStep = false; WKPageLoaderClientV0 loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.base.version = 0; loaderClient.base.clientInfo = &finishedSecondStep; loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(lowAccuracyWebView.page(), &loaderClient.base); WKRetainPtr<WKURLRef> lowAccuracyURL(AdoptWK, Util::createURLForResource("geolocationWatchPosition", "html")); WKPageLoadURL(lowAccuracyWebView.page(), lowAccuracyURL.get()); Util::run(&finishedSecondStep); WKRetainPtr<WKURLRef> resetUrl = adoptWK(WKURLCreateWithUTF8CString("about:blank")); WKPageLoadURL(highAccuracyWebView.page(), resetUrl.get()); Util::run(&stateTracker.finished); }
TEST(WebKit2, DISABLED_DOMWindowExtensionBasic) { WKRetainPtr<WKPageGroupRef> pageGroup(AdoptWK, WKPageGroupCreateWithIdentifier(WKStringCreateWithUTF8CString("DOMWindowExtensionBasicPageGroup"))); WKRetainPtr<WKContextRef> context(AdoptWK, Util::createContextForInjectedBundleTest("DOMWindowExtensionBasic", pageGroup.get())); WKContextInjectedBundleClientV0 injectedBundleClient; memset(&injectedBundleClient, 0, sizeof(injectedBundleClient)); injectedBundleClient.base.version = 0; injectedBundleClient.didReceiveMessageFromInjectedBundle = didReceiveMessageFromInjectedBundle; WKContextSetInjectedBundleClient(context.get(), &injectedBundleClient.base); // The default cache model has a capacity of 0, so it is necessary to switch to a cache // model that actually allows for a page cache. WKContextSetCacheModel(context.get(), kWKCacheModelDocumentBrowser); PlatformWebView webView(context.get(), pageGroup.get()); // Make sure the extensions for each frame are installed in each world. WKRetainPtr<WKURLRef> url1(AdoptWK, Util::createURLForResource("simple-iframe", "html")); WKPageLoadURL(webView.page(), url1.get()); Util::run(&finished); finished = false; // Make sure those first 4 extensions are disconnected, and 2 new ones are installed. WKRetainPtr<WKURLRef> url2(AdoptWK, Util::createURLForResource("simple", "html")); WKPageLoadURL(webView.page(), url2.get()); Util::run(&finished); finished = false; // Make sure those two are disconnected, and the first four are reconnected. WKPageGoBack(webView.page()); Util::run(&finished); finished = false; // Make sure the 2 disconnected extensions in the page cache and the 4 active extensions are all removed. WKPageClose(webView.page()); Util::run(&finished); const size_t expectedSize = sizeof(expectedMessages) / sizeof(const char*); EXPECT_EQ(expectedSize, messages.size()); if (messages.size() != expectedSize) return; for (size_t i = 0; i < messages.size(); ++i) EXPECT_WK_STREQ(expectedMessages[i], messages[i].get()); }
TEST(WebKit2, DISABLED_DOMWindowExtensionNoCache) { WKRetainPtr<WKPageGroupRef> pageGroup(AdoptWK, WKPageGroupCreateWithIdentifier(WKStringCreateWithUTF8CString("DOMWindowExtensionNoCachePageGroup"))); WKRetainPtr<WKContextRef> context(AdoptWK, Util::createContextForInjectedBundleTest("DOMWindowExtensionNoCache", pageGroup.get())); WKContextInjectedBundleClientV1 injectedBundleClient; memset(&injectedBundleClient, 0, sizeof(injectedBundleClient)); injectedBundleClient.base.version = 1; injectedBundleClient.didReceiveMessageFromInjectedBundle = didReceiveMessageFromInjectedBundle; WKContextSetInjectedBundleClient(context.get(), &injectedBundleClient.base); // Disable the page cache. WKContextSetCacheModel(context.get(), kWKCacheModelDocumentViewer); PlatformWebView webView(context.get(), pageGroup.get()); // Make sure the extensions for each frame are installed in each world. WKRetainPtr<WKURLRef> url1(AdoptWK, Util::createURLForResource("simple-iframe", "html")); WKPageLoadURL(webView.page(), url1.get()); Util::run(&finished); finished = false; // Make sure those first 4 extensions are destroyed, and 2 new ones are installed. WKRetainPtr<WKURLRef> url2(AdoptWK, Util::createURLForResource("simple", "html")); WKPageLoadURL(webView.page(), url2.get()); Util::run(&finished); finished = false; // Make sure those 2 are destroyed, and the first 4 are recreated. WKPageGoBack(webView.page()); Util::run(&finished); finished = false; WKPageClose(webView.page()); Util::run(&finished); const size_t expectedSize = sizeof(expectedMessages) / sizeof(const char*); EXPECT_EQ(expectedSize, messages.size()); if (messages.size() != expectedSize) return; for (size_t i = 0; i < messages.size(); ++i) EXPECT_WK_STREQ(expectedMessages[i], messages[i].get()); }
TEST(WebKit2, PrivateBrowsingPushStateNoHistoryCallback) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); WKContextHistoryClient historyClient; memset(&historyClient, 0, sizeof(historyClient)); historyClient.version = 0; historyClient.clientInfo = 0; historyClient.didNavigateWithNavigationData = didNavigateWithNavigationData; WKContextSetHistoryClient(context.get(), &historyClient); PlatformWebView webView(context.get()); WKPageLoaderClient pageLoaderClient; memset(&pageLoaderClient, 0, sizeof(pageLoaderClient)); pageLoaderClient.version = 0; pageLoaderClient.clientInfo = 0; pageLoaderClient.didSameDocumentNavigationForFrame = didSameDocumentNavigationForFrame; WKPageSetPageLoaderClient(webView.page(), &pageLoaderClient); WKRetainPtr<WKPreferencesRef> preferences(AdoptWK, WKPreferencesCreate()); WKPreferencesSetPrivateBrowsingEnabled(preferences.get(), true); WKPageGroupRef pageGroup = WKPageGetPageGroup(webView.page()); WKPageGroupSetPreferences(pageGroup, preferences.get()); WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("push-state", "html")); WKPageLoadURL(webView.page(), url.get()); Util::run(&testDone); }
gpointer Shell::launchWPE(gpointer data) { Shell::m_instance = static_cast<Shell*>(data); GMainContext* threadContext = g_main_context_new(); GMainLoop* threadLoop = g_main_loop_new(threadContext, FALSE); g_main_context_push_thread_default(threadContext); auto pageGroupIdentifier = adoptWK(WKStringCreateWithUTF8CString("WPEPageGroup")); auto pageGroup = adoptWK(WKPageGroupCreateWithIdentifier(pageGroupIdentifier.get())); auto context = adoptWK(WKContextCreate()); Shell::instance().m_view = adoptWK(WKViewCreate(context.get(), pageGroup.get())); auto view = Shell::instance().m_view.get(); WKViewResize(view, Shell::instance().m_environment.outputSize()); WKViewMakeWPEInputTarget(view); const char* url = g_getenv("WPE_SHELL_URL"); if (!url) url = "http://www.webkit.org/blog-files/3d-transforms/poster-circle.html"; auto shellURL = adoptWK(WKURLCreateWithUTF8CString(url)); WKPageLoadURL(WKViewGetPage(view), shellURL.get()); g_main_loop_run(threadLoop); return nullptr; }
TEST(WebKit2, InjectedBundleBasic) { WKRetainPtr<WKContextRef> context(AdoptWK, Util::createContextForInjectedBundleTest("InjectedBundleBasicTest")); WKContextInjectedBundleClientV0 injectedBundleClient; memset(&injectedBundleClient, 0, sizeof(injectedBundleClient)); injectedBundleClient.base.version = 0; injectedBundleClient.didReceiveMessageFromInjectedBundle = didReceiveMessageFromInjectedBundle; WKContextSetInjectedBundleClient(context.get(), &injectedBundleClient.base); PlatformWebView webView(context.get()); WKPageLoaderClientV0 loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.base.version = 0; loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(webView.page(), &loaderClient.base); WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("simple", "html")); WKPageLoadURL(webView.page(), url.get()); Util::run(&done); }
TEST(WebKit2, PageLoadBasic) { State state; WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); PlatformWebView webView(context.get()); WKPageLoaderClient loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.version = 0; loaderClient.clientInfo = &state; loaderClient.didStartProvisionalLoadForFrame = didStartProvisionalLoadForFrame; loaderClient.didCommitLoadForFrame = didCommitLoadForFrame; loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(webView.page(), &loaderClient); WKPagePolicyClient policyClient; memset(&policyClient, 0, sizeof(policyClient)); policyClient.version = 0; policyClient.clientInfo = &state; policyClient.decidePolicyForNavigationAction = decidePolicyForNavigationAction; policyClient.decidePolicyForNewWindowAction = decidePolicyForNewWindowAction; policyClient.decidePolicyForResponse = decidePolicyForResponse; WKPageSetPagePolicyClient(webView.page(), &policyClient); WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("simple", "html")); WKPageLoadURL(webView.page(), url.get()); Util::run(&test1Done); }
void TestInvocation::invoke() { sizeWebViewForCurrentTest(m_pathOrURL.c_str()); WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("BeginTest")); WKRetainPtr<WKBooleanRef> dumpPixels = adoptWK(WKBooleanCreate(m_dumpPixels)); WKContextPostMessageToInjectedBundle(TestController::shared().context(), messageName.get(), dumpPixels.get()); TestController::shared().runUntil(m_gotInitialResponse, TestController::ShortTimeout); if (!m_gotInitialResponse) { dump("Timed out waiting for initial response from web process\n"); return; } if (m_error) { dump("FAIL\n"); return; } if (shouldOpenWebInspector(m_pathOrURL.c_str())) WKInspectorShow(WKPageGetInspector(TestController::shared().mainWebView()->page())); WKPageLoadURL(TestController::shared().mainWebView()->page(), m_url.get()); TestController::shared().runUntil(m_gotFinalMessage, TestController::LongTimeout); if (!m_gotFinalMessage) dump("Timed out waiting for final message from web process\n"); else if (m_error) dump("FAIL\n"); WKInspectorClose(WKPageGetInspector(TestController::shared().mainWebView()->page())); }
TEST(WebKit2, Find) { 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); WKPageFindClient findClient; memset(&findClient, 0, sizeof(findClient)); findClient.version = 0; findClient.didCountStringMatches = didCountStringMatches; WKPageSetPageFindClient(webView.page(), &findClient); WKRetainPtr<WKURLRef> url(AdoptWK, Util::createURLForResource("find", "html")); WKPageLoadURL(webView.page(), url.get()); Util::run(&didFinishLoad); WKRetainPtr<WKStringRef> findString(AdoptWK, WKStringCreateWithUTF8CString("Hello")); WKPageCountStringMatches(webView.page(), findString.get(), true, 100); Util::run(&didCallCountStringMatches); }
int main(int argc, char* argv[]) { Options options; if (!options.parse(argc, argv)) return 1; printf("MiniBrowser: Use Alt + Left and Alt + Right to navigate back and forward. Use F5 to reload.\n"); std::string url = options.url; if (url.empty()) url = "http://www.google.com"; else if (url.find("http") != 0 && url.find("file://") != 0) { std::ifstream localFile(url.c_str()); url.insert(0, localFile ? "file://" : "http://"); } GMainLoop* mainLoop = g_main_loop_new(0, false); MiniBrowser browser(mainLoop, options.desktopModeEnabled ? MiniBrowser::DesktopMode : MiniBrowser::MobileMode, options.width, options.height, options.viewportHorizontalDisplacement, options.viewportVerticalDisplacement); if (options.forceTouchEmulationEnabled || !options.desktopModeEnabled) { printf("Touch Emulation Mode enabled. Hold Control key to build and emit a multi-touch event: each mouse button should be a different touch point. Release Control Key to clear all tracking pressed touches.\n"); browser.setTouchEmulationMode(true); } if (!options.userAgent.empty()) WKPageSetCustomUserAgent(browser.pageRef(), WKStringCreateWithUTF8CString(options.userAgent.c_str())); if (!options.desktopModeEnabled) printf("Use Control + mouse wheel to zoom in and out.\n"); WKPageLoadURL(browser.pageRef(), WKURLCreateWithUTF8CString(url.c_str())); g_main_loop_run(mainLoop); g_main_loop_unref(mainLoop); }
TEST(WebKit2, ScrollPinningBehaviors) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); // Turn off threaded scrolling; synchronously waiting for the main thread scroll position to // update using WKPageForceRepaint would be better, but for some reason doesn't block until // it's updated after the initial WKPageSetScrollPinningBehavior above. WKRetainPtr<WKPageGroupRef> pageGroup(AdoptWK, WKPageGroupCreateWithIdentifier(Util::toWK("NoThreadedScrollingPageGroup").get())); WKPreferencesRef preferences = WKPageGroupGetPreferences(pageGroup.get()); WKPreferencesSetThreadedScrollingEnabled(preferences, false); PlatformWebView webView(context.get(), pageGroup.get()); WKPageLoaderClient loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.version = kWKPageLoaderClientCurrentVersion; loaderClient.didFinishDocumentLoadForFrame = didFinishDocumentLoadForFrame; loaderClient.clientInfo = &webView; WKPageSetPageLoaderClient(webView.page(), &loaderClient); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple-tall", "html")).get()); Util::run(&testDone); EXPECT_TRUE(testDone); }
TEST(WebKit2, ResizeReversePaginatedWebView) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); PlatformWebView webView(context.get()); WKPageLoaderClientV3 loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.base.version = 3; loaderClient.base.clientInfo = &webView; loaderClient.didLayout = didLayout; WKPageSetPageLoaderClient(webView.page(), &loaderClient.base); WKPageListenForLayoutMilestones(webView.page(), kWKDidFirstLayoutAfterSuppressedIncrementalRendering); WKPageGroupRef pageGroup = WKPageGetPageGroup(webView.page()); WKPreferencesRef preferences = WKPageGroupGetPreferences(pageGroup); WKPreferencesSetSuppressesIncrementalRendering(preferences, true); WKPageSetPaginationMode(webView.page(), kWKPaginationModeRightToLeft); WKPageSetPageLength(webView.page(), pageLength); WKPageSetGapBetweenPages(webView.page(), pageGap); WKPageSetPaginationBehavesLikeColumns(webView.page(), true); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("lots-of-text-vertical-lr", "html")).get()); Util::run(&testDone); EXPECT_TRUE(testDone); }
TEST(WebKit2, WillSendSubmitEvent) { WKRetainPtr<WKContextRef> context = adoptWK(Util::createContextForInjectedBundleTest("WillSendSubmitEventTest")); setInjectedBundleClient(context.get()); PlatformWebView webView(context.get()); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("auto-submitting-form", "html")).get()); Util::run(&didReceiveMessage); }
TEST(WebKit2, GeolocationTransitionToHighAccuracy) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); GeolocationTransitionToHighAccuracyStateTracker stateTracker; setupGeolocationProvider(context.get(), &stateTracker); PlatformWebView lowAccuracyWebView(context.get()); setupView(lowAccuracyWebView); WKRetainPtr<WKURLRef> lowAccuracyURL(AdoptWK, Util::createURLForResource("geolocationWatchPosition", "html")); WKPageLoadURL(lowAccuracyWebView.page(), lowAccuracyURL.get()); Util::run(&stateTracker.finishedFirstStep); PlatformWebView highAccuracyWebView(context.get()); setupView(highAccuracyWebView); WKRetainPtr<WKURLRef> highAccuracyURL(AdoptWK, Util::createURLForResource("geolocationWatchPositionWithHighAccuracy", "html")); WKPageLoadURL(highAccuracyWebView.page(), highAccuracyURL.get()); Util::run(&stateTracker.finished); }
WorkQueueItem::Type invoke() const { if (!m_target.isEmpty()) { // FIXME: Use target. Some layout tests cannot pass as they rely on this functionality. fprintf(stderr, "queueLoad for a specific target is not implemented.\n"); return WorkQueueItem::NonLoading; } WKPageLoadURL(mainPage(), m_url.get()); return WorkQueueItem::Loading; }
static WKRetainPtr<WKDataRef> createSessionState(WKContextRef context) { PlatformWebView webView(context); setPageLoaderClient(webView.page()); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple", "html")).get()); Util::run(&didFinishLoad); didFinishLoad = false; return adoptWK(WKPageCopySessionState(webView.page(), 0, 0)); }
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 }
bool TestController::resetStateToConsistentValues() { m_state = Resetting; WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("Reset")); WKRetainPtr<WKMutableDictionaryRef> resetMessageBody = adoptWK(WKMutableDictionaryCreate()); WKRetainPtr<WKStringRef> shouldGCKey = adoptWK(WKStringCreateWithUTF8CString("ShouldGC")); WKRetainPtr<WKBooleanRef> shouldGCValue = adoptWK(WKBooleanCreate(m_gcBetweenTests)); WKDictionaryAddItem(resetMessageBody.get(), shouldGCKey.get(), shouldGCValue.get()); WKContextPostMessageToInjectedBundle(TestController::shared().context(), messageName.get(), resetMessageBody.get()); // FIXME: This function should also ensure that there is only one page open. // Reset preferences WKPreferencesRef preferences = WKPageGroupGetPreferences(m_pageGroup.get()); WKPreferencesSetOfflineWebApplicationCacheEnabled(preferences, true); WKPreferencesSetFontSmoothingLevel(preferences, kWKFontSmoothingLevelNoSubpixelAntiAliasing); WKPreferencesSetXSSAuditorEnabled(preferences, false); WKPreferencesSetDeveloperExtrasEnabled(preferences, true); WKPreferencesSetJavaScriptCanOpenWindowsAutomatically(preferences, true); WKPreferencesSetJavaScriptCanAccessClipboard(preferences, true); WKPreferencesSetDOMPasteAllowed(preferences, true); WKPreferencesSetUniversalAccessFromFileURLsAllowed(preferences, true); WKPreferencesSetFileAccessFromFileURLsAllowed(preferences, true); #if ENABLE(FULLSCREEN_API) WKPreferencesSetFullScreenEnabled(preferences, true); #endif static WKStringRef standardFontFamily = WKStringCreateWithUTF8CString("Times"); static WKStringRef cursiveFontFamily = WKStringCreateWithUTF8CString("Apple Chancery"); static WKStringRef fantasyFontFamily = WKStringCreateWithUTF8CString("Papyrus"); static WKStringRef fixedFontFamily = WKStringCreateWithUTF8CString("Courier"); static WKStringRef sansSerifFontFamily = WKStringCreateWithUTF8CString("Helvetica"); static WKStringRef serifFontFamily = WKStringCreateWithUTF8CString("Times"); WKPreferencesSetStandardFontFamily(preferences, standardFontFamily); WKPreferencesSetCursiveFontFamily(preferences, cursiveFontFamily); WKPreferencesSetFantasyFontFamily(preferences, fantasyFontFamily); WKPreferencesSetFixedFontFamily(preferences, fixedFontFamily); WKPreferencesSetSansSerifFontFamily(preferences, sansSerifFontFamily); WKPreferencesSetSerifFontFamily(preferences, serifFontFamily); m_mainWebView->focus(); // Reset main page back to about:blank m_doneResetting = false; WKPageLoadURL(m_mainWebView->page(), blankURL()); runUntil(m_doneResetting, ShortTimeout); return m_doneResetting; }
void BrowserView::goToURL(const std::wstring& urlString) { CFStringRef string = CFStringCreateWithCharacters(0, (const UniChar*)urlString.data(), urlString.size()); CFURLRef cfURL = CFURLCreateWithString(0, string, 0); CFRelease(string); WKURLRef url = WKURLCreateWithCFURL(cfURL); CFRelease(cfURL); WKPageRef page = WKViewGetPage(m_webView); WKPageLoadURL(page, url); WKRelease(url); }
TEST(WebKit2, ShouldGoToBackForwardListItem) { WKRetainPtr<WKContextRef> context = adoptWK(Util::createContextForInjectedBundleTest("ShouldGoToBackForwardListItemTest")); // Enable the page cache so we can test the WKBundleBackForwardListItemIsInPageCache API WKContextSetCacheModel(context.get(), kWKCacheModelDocumentBrowser); PlatformWebView webView(context.get()); setPageLoaderClient(webView.page()); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple", "html")).get()); Util::run(&finished); finished = false; WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple-iframe", "html")).get()); Util::run(&finished); finished = false; WKPageGoBack(webView.page()); Util::run(&finished); EXPECT_EQ(receivedProperBackForwardCallbacks, true); }
// FIXME: This test has been broken since http://trac.webkit.org/changeset/115752 It's failing because // the frame load is completing before didLayout() manages to unlock the // kWKDidHitRelevantRepaintedObjectsAreaThreshold achievement. We probably need to fix this by making // this test have a long-running resource. TEST(WebKit2, DISABLED_NewFirstVisuallyNonEmptyLayout) { WKRetainPtr<WKContextRef> context(AdoptWK, Util::createContextForInjectedBundleTest("NewFirstVisuallyNonEmptyLayoutTest")); PlatformWebView webView(context.get()); setPageLoaderClient(webView.page()); // This test is expected to succeed because lots-of-text.html is a large document and the relevant painted // objects take up more than 10% of the view. WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("lots-of-text", "html")).get()); Util::run(&didUnlockAllLayoutMilestones); EXPECT_TRUE(didUnlockAllLayoutMilestones); }
TEST(WebKit2, AboutBlankLoad) { WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); PlatformWebView webView(context.get()); WKPageLoaderClient loaderClient; memset(&loaderClient, 0 , sizeof(loaderClient)); loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(webView.page(), &loaderClient); WKPageLoadURL(webView.page(), adoptWK(WKURLCreateWithUTF8CString("about:blank")).get()); Util::run(&done); }
TEST(WebKit2, WebWorker) { // This test cover the binding between functions of JavaScript Workers and // functions defined at a previously loaded bundle. It verifies the two // types of Workers, dedicated and shared. WKRetainPtr<WKContextRef> context = adoptWK(Util::createContextForInjectedBundleTest("WebWorkerTest")); PlatformWebView view(context.get()); WKPageLoaderClientV3 pageLoaderClient; memset(&pageLoaderClient, 0, sizeof(pageLoaderClient)); pageLoaderClient.base.version = 3; pageLoaderClient.didReceiveTitleForFrame = didReceiveTitleForFrame; WKPageSetPageLoaderClient(WKViewGetPage(view.platformView()), &pageLoaderClient.base); WKContextInjectedBundleClientV1 injectedBundleClient; memset(&injectedBundleClient, 0, sizeof(injectedBundleClient)); injectedBundleClient.base.version = 1; injectedBundleClient.didReceiveMessageFromInjectedBundle = didReceiveMessageFromInjectedBundle; WKContextSetInjectedBundleClient(context.get(), &injectedBundleClient.base); WKPageGroupRef pageGroup = WKPageGetPageGroup(WKViewGetPage(view.platformView())); WKPreferencesRef preferences = WKPageGroupGetPreferences(pageGroup); WKPreferencesSetFileAccessFromFileURLsAllowed(preferences, true); WKRetainPtr<WKURLRef> url = adoptWK(Util::createURLForResource("../WebKit2/WebWorkerTest", "html")); WKPageLoadURL(WKViewGetPage(view.platformView()), url.get()); Util::run(&initialized); Util::run(&terminated); Util::run(&changedTitle); url = adoptWK(Util::createURLForResource("../WebKit2/WebWorkerSharedTest", "html")); WKPageLoadURL(WKViewGetPage(view.platformView()), url.get()); Util::run(&initializedShared); Util::run(&terminatedShared); Util::run(&changedTitleShared); }
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)); }
TEST(WebKit2, CanHandleRequest) { WKRetainPtr<WKContextRef> context = adoptWK(Util::createContextForInjectedBundleTest("CanHandleRequestTest")); setInjectedBundleClient(context.get()); _WKContextRegisterURLSchemeAsEmptyDocument(context.get(), Util::toWK("emptyscheme").get()); PlatformWebView webView(context.get()); WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("simple", "html")).get()); WKContextPostMessageToInjectedBundle(context.get(), Util::toWK("CheckCanHandleRequest").get(), 0); Util::run(&didReceiveMessage); EXPECT_TRUE(canHandleRequest); }
TEST(WebKit2, DownloadDecideDestinationCrash) { WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); setContextDownloadClient(context.get()); PlatformWebView webView(context.get()); setPagePolicyClient(webView.page()); // The length of this filename was specially chosen to trigger the crash conditions in // <http://webkit.org/b/61142>. Specifically, it causes ArgumentDecoder::m_bufferPos and m_bufferEnd // to be equal after the DecideDestinationWithSuggestedFilename message has been handled. WKPageLoadURL(webView.page(), adoptWK(Util::createURLForResource("18-characters", "html")).get()); Util::run(&didDecideDestination); }
void Tab::loadUrl(const std::string& url) { std::string fixedUrl(url); if (!hasValidPrefix(fixedUrl)) { if (std::ifstream(fixedUrl.c_str())) fixedUrl.insert(0, "file:///"); else fixedUrl.insert(0, "http://"); } std::cout << "Load URL: " << fixedUrl << std::endl; WKURLRef wkUrl = WKURLCreateWithUTF8CString(fixedUrl.c_str()); WKPageLoadURL(m_page, wkUrl); WKRelease(wkUrl); }
TEST(WebKit2, AboutBlankLoad) { WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); PlatformWebView webView(context.get()); WKPagePolicyClient policyClient; memset(&policyClient, 0, sizeof(policyClient)); policyClient.decidePolicyForResponse = decidePolicyForResponse; WKPageSetPagePolicyClient(webView.page(), &policyClient); WKPageLoadURL(webView.page(), adoptWK(WKURLCreateWithUTF8CString("about:blank")).get()); Util::run(&done); }