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); }
static void setPagePolicyClient(WKPageRef page) { WKPagePolicyClient policyClient; memset(&policyClient, 0, sizeof(policyClient)); policyClient.version = 1; policyClient.decidePolicyForNavigationAction = decidePolicyForNavigationAction; WKPageSetPagePolicyClient(page, &policyClient); }
QtWebPagePolicyClient::QtWebPagePolicyClient(WKPageRef pageRef, QQuickWebView* webView) : m_webView(webView) { WKPagePolicyClient policyClient; memset(&policyClient, 0, sizeof(WKPagePolicyClient)); policyClient.version = kWKPagePolicyClientCurrentVersion; policyClient.clientInfo = this; policyClient.decidePolicyForNavigationAction = decidePolicyForNavigationAction; policyClient.decidePolicyForResponse = decidePolicyForResponse; WKPageSetPagePolicyClient(pageRef, &policyClient); }
// Called by WebInspectorProxy messages void WebInspectorProxy::createInspectorPage(uint64_t& inspectorPageID, WebPageCreationParameters& inspectorPageParameters) { inspectorPageID = 0; if (!m_page) return; m_isAttached = shouldOpenAttached(); m_attachmentSide = static_cast<AttachmentSide>(inspectorPageGroup()->preferences()->inspectorAttachmentSide()); WebPageProxy* inspectorPage = platformCreateInspectorPage(); ASSERT(inspectorPage); if (!inspectorPage) return; inspectorPageID = inspectorPage->pageID(); inspectorPageParameters = inspectorPage->creationParameters(); WKPagePolicyClientV1 policyClient = { { 1, this }, 0, /* decidePolicyForNavigationAction_deprecatedForUseWithV0 */ 0, /* decidePolicyForNewWindowAction */ 0, /* decidePolicyForResponse_deprecatedForUseWithV0 */ 0, /* unableToImplementPolicy */ decidePolicyForNavigationAction, 0, /* decidePolicyForResponse */ }; WKPageSetPagePolicyClient(toAPI(inspectorPage), &policyClient.base); String url = inspectorPageURL(); url.append("?dockSide="); if (m_isAttached) { switch (m_attachmentSide) { case AttachmentSideBottom: url.append("bottom"); m_page->process().send(Messages::WebInspector::AttachedBottom(), m_page->pageID()); break; case AttachmentSideRight: url.append("right"); m_page->process().send(Messages::WebInspector::AttachedRight(), m_page->pageID()); break; } } else url.append("undocked"); m_page->process().assumeReadAccessToBaseURL(inspectorBaseURL()); inspectorPage->loadRequest(URL(URL(), url)); m_createdInspectorPage = true; }
void TestController::ensureViewSupportsOptions(WKDictionaryRef options) { if (m_mainWebView && !m_mainWebView->viewSupportsOptions(options)) { WKPageSetPageUIClient(m_mainWebView->page(), 0); WKPageSetPageLoaderClient(m_mainWebView->page(), 0); WKPageSetPagePolicyClient(m_mainWebView->page(), 0); WKPageClose(m_mainWebView->page()); m_mainWebView = nullptr; createWebViewWithOptions(options); resetStateToConsistentValues(); } }
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); }
void WebInspectorProxy::eagerlyCreateInspectorPage() { if (m_inspectorPage) return; m_inspectorPage = platformCreateInspectorPage(); ASSERT(m_inspectorPage); if (!m_inspectorPage) return; pageLevelMap().set(m_inspectorPage, inspectionLevel()); WKPagePolicyClientV1 policyClient = { { 1, this }, nullptr, // decidePolicyForNavigationAction_deprecatedForUseWithV0 nullptr, // decidePolicyForNewWindowAction nullptr, // decidePolicyForResponse_deprecatedForUseWithV0 nullptr, // unableToImplementPolicy decidePolicyForNavigationAction, nullptr, // decidePolicyForResponse }; WKPageLoaderClientV5 loaderClient = { { 5, this }, nullptr, // didStartProvisionalLoadForFrame nullptr, // didReceiveServerRedirectForProvisionalLoadForFrame nullptr, // didFailProvisionalLoadWithErrorForFrame nullptr, // didCommitLoadForFrame nullptr, // didFinishDocumentLoadForFrame nullptr, // didFinishLoadForFrame nullptr, // didFailLoadWithErrorForFrame nullptr, // didSameDocumentNavigationForFrame nullptr, // didReceiveTitleForFrame nullptr, // didFirstLayoutForFrame nullptr, // didFirstVisuallyNonEmptyLayoutForFrame nullptr, // didRemoveFrameFromHierarchy nullptr, // didDisplayInsecureContentForFrame nullptr, // didRunInsecureContentForFrame nullptr, // canAuthenticateAgainstProtectionSpaceInFrame nullptr, // didReceiveAuthenticationChallengeInFrame nullptr, // didStartProgress nullptr, // didChangeProgress nullptr, // didFinishProgress nullptr, // didBecomeUnresponsive nullptr, // didBecomeResponsive processDidCrash, nullptr, // didChangeBackForwardList nullptr, // shouldGoToBackForwardListItem nullptr, // didFailToInitializePlugin_deprecatedForUseWithV0 nullptr, // didDetectXSSForFrame nullptr, // didNewFirstVisuallyNonEmptyLayout_unavailable nullptr, // willGoToBackForwardListItem nullptr, // interactionOccurredWhileProcessUnresponsive nullptr, // pluginDidFail_deprecatedForUseWithV1 nullptr, // didReceiveIntentForFrame_unavailable nullptr, // registerIntentServiceForFrame_unavailable nullptr, // didLayout nullptr, // pluginLoadPolicy_deprecatedForUseWithV2 nullptr, // pluginDidFail nullptr, // pluginLoadPolicy nullptr, // webGLLoadPolicy nullptr, // resolveWebGLLoadPolicy nullptr, // shouldKeepCurrentBackForwardListItemInList }; WKPageContextMenuClientV3 contextMenuClient = { { 3, this }, 0, // getContextMenuFromProposedMenu_deprecatedForUseWithV0 0, // customContextMenuItemSelected 0, // contextMenuDismissed getContextMenuFromProposedMenu, 0, // showContextMenu 0, // hideContextMenu }; WKPageSetPagePolicyClient(toAPI(m_inspectorPage), &policyClient.base); WKPageSetPageLoaderClient(toAPI(m_inspectorPage), &loaderClient.base); WKPageSetPageContextMenuClient(toAPI(m_inspectorPage), &contextMenuClient.base); m_inspectorPage->process().addMessageReceiver(Messages::WebInspectorProxy::messageReceiverName(), m_inspectedPage->pageID(), *this); m_inspectorPage->process().assumeReadAccessToBaseURL(WebInspectorProxy::inspectorBaseURL()); }
void TestController::createWebViewWithOptions(WKDictionaryRef options) { m_mainWebView = adoptPtr(new PlatformWebView(m_context.get(), m_pageGroup.get(), 0, options)); WKPageUIClient pageUIClient = { kWKPageUIClientCurrentVersion, m_mainWebView.get(), 0, // createNewPage_deprecatedForUseWithV0 0, // showPage 0, // close 0, // takeFocus focus, unfocus, 0, // runJavaScriptAlert 0, // runJavaScriptConfirm 0, // runJavaScriptPrompt 0, // setStatusText 0, // mouseDidMoveOverElement_deprecatedForUseWithV0 0, // missingPluginButtonClicked 0, // didNotHandleKeyEvent 0, // didNotHandleWheelEvent 0, // toolbarsAreVisible 0, // setToolbarsAreVisible 0, // menuBarIsVisible 0, // setMenuBarIsVisible 0, // statusBarIsVisible 0, // setStatusBarIsVisible 0, // isResizable 0, // setIsResizable getWindowFrame, setWindowFrame, runBeforeUnloadConfirmPanel, 0, // didDraw 0, // pageDidScroll exceededDatabaseQuota, 0, // runOpenPanel decidePolicyForGeolocationPermissionRequest, 0, // headerHeight 0, // footerHeight 0, // drawHeader 0, // drawFooter 0, // printFrame runModal, 0, // didCompleteRubberBandForMainFrame 0, // saveDataToFileInDownloadsFolder 0, // shouldInterruptJavaScript createOtherPage, 0, // mouseDidMoveOverElement decidePolicyForNotificationPermissionRequest, // decidePolicyForNotificationPermissionRequest 0, // unavailablePluginButtonClicked_deprecatedForUseWithV1 0, // showColorPicker 0, // hideColorPicker unavailablePluginButtonClicked, }; WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient); WKPageLoaderClient pageLoaderClient = { kWKPageLoaderClientCurrentVersion, this, 0, // didStartProvisionalLoadForFrame 0, // didReceiveServerRedirectForProvisionalLoadForFrame 0, // didFailProvisionalLoadWithErrorForFrame didCommitLoadForFrame, 0, // didFinishDocumentLoadForFrame didFinishLoadForFrame, 0, // didFailLoadWithErrorForFrame 0, // didSameDocumentNavigationForFrame 0, // didReceiveTitleForFrame 0, // didFirstLayoutForFrame 0, // didFirstVisuallyNonEmptyLayoutForFrame 0, // didRemoveFrameFromHierarchy 0, // didFailToInitializePlugin 0, // didDisplayInsecureContentForFrame 0, // canAuthenticateAgainstProtectionSpaceInFrame didReceiveAuthenticationChallengeInFrame, // didReceiveAuthenticationChallengeInFrame 0, // didStartProgress 0, // didChangeProgress 0, // didFinishProgress 0, // didBecomeUnresponsive 0, // didBecomeResponsive processDidCrash, 0, // didChangeBackForwardList 0, // shouldGoToBackForwardListItem 0, // didRunInsecureContentForFrame 0, // didDetectXSSForFrame 0, // didNewFirstVisuallyNonEmptyLayout 0, // willGoToBackForwardListItem 0, // interactionOccurredWhileProcessUnresponsive 0, // pluginDidFail_deprecatedForUseWithV1 0, // didReceiveIntentForFrame 0, // registerIntentServiceForFrame 0, // didLayout 0, // pluginLoadPolicy 0, // pluginDidFail }; WKPageSetPageLoaderClient(m_mainWebView->page(), &pageLoaderClient); WKPagePolicyClient pagePolicyClient = { kWKPagePolicyClientCurrentVersion, this, decidePolicyForNavigationAction, 0, // decidePolicyForNewWindowAction decidePolicyForResponse, 0, // unableToImplementPolicy }; WKPageSetPagePolicyClient(m_mainWebView->page(), &pagePolicyClient); m_mainWebView->didInitializeClients(); }
void TestController::initialize(int argc, const char* argv[]) { platformInitialize(); if (argc < 2) { fputs("Usage: WebKitTestRunner [options] filename [filename2..n]\n", stderr); // FIXME: Refactor option parsing to allow us to print // an auto-generated list of options. exit(1); } bool printSupportedFeatures = false; for (int i = 1; i < argc; ++i) { std::string argument(argv[i]); if (argument == "--timeout" && i + 1 < argc) { m_longTimeout = atoi(argv[++i]); // Scale up the short timeout to match. m_shortTimeout = defaultShortTimeout * m_longTimeout / defaultLongTimeout; continue; } if (argument == "--no-timeout") { m_useWaitToDumpWatchdogTimer = false; continue; } if (argument == "--no-timeout-at-all") { m_useWaitToDumpWatchdogTimer = false; m_forceNoTimeout = true; continue; } if (argument == "--verbose") { m_verbose = true; continue; } if (argument == "--gc-between-tests") { m_gcBetweenTests = true; continue; } if (argument == "--print-supported-features") { printSupportedFeatures = true; break; } // Skip any other arguments that begin with '--'. if (argument.length() >= 2 && argument[0] == '-' && argument[1] == '-') continue; m_paths.push_back(argument); } if (printSupportedFeatures) { // FIXME: On Windows, DumpRenderTree uses this to expose whether it supports 3d // transforms and accelerated compositing. When we support those features, we // should match DRT's behavior. exit(0); } m_usingServerMode = (m_paths.size() == 1 && m_paths[0] == "-"); if (m_usingServerMode) m_printSeparators = true; else m_printSeparators = m_paths.size() > 1; initializeInjectedBundlePath(); initializeTestPluginDirectory(); WKRetainPtr<WKStringRef> pageGroupIdentifier(AdoptWK, WKStringCreateWithUTF8CString("WebKitTestRunnerPageGroup")); m_pageGroup.adopt(WKPageGroupCreateWithIdentifier(pageGroupIdentifier.get())); m_context.adopt(WKContextCreateWithInjectedBundlePath(injectedBundlePath())); m_geolocationProvider = adoptPtr(new GeolocationProviderMock(m_context.get())); if (const char* dumpRenderTreeTemp = libraryPathForTesting()) { WKRetainPtr<WKStringRef> dumpRenderTreeTempWK(AdoptWK, WKStringCreateWithUTF8CString(dumpRenderTreeTemp)); WKContextSetDatabaseDirectory(m_context.get(), dumpRenderTreeTempWK.get()); WKContextSetLocalStorageDirectory(m_context.get(), dumpRenderTreeTempWK.get()); WKContextSetDiskCacheDirectory(m_context.get(), dumpRenderTreeTempWK.get()); WKContextSetCookieStorageDirectory(m_context.get(), dumpRenderTreeTempWK.get()); } platformInitializeContext(); WKContextInjectedBundleClient injectedBundleClient = { kWKContextInjectedBundleClientCurrentVersion, this, didReceiveMessageFromInjectedBundle, didReceiveSynchronousMessageFromInjectedBundle, 0 // getInjectedBundleInitializationUserData }; WKContextSetInjectedBundleClient(m_context.get(), &injectedBundleClient); WKNotificationManagerRef notificationManager = WKContextGetNotificationManager(m_context.get()); WKNotificationProvider notificationKit = m_webNotificationProvider.provider(); WKNotificationManagerSetProvider(notificationManager, ¬ificationKit); if (testPluginDirectory()) WKContextSetAdditionalPluginsDirectory(m_context.get(), testPluginDirectory()); m_mainWebView = adoptPtr(new PlatformWebView(m_context.get(), m_pageGroup.get())); WKPageUIClient pageUIClient = { kWKPageUIClientCurrentVersion, m_mainWebView.get(), 0, // createNewPage_deprecatedForUseWithV0 0, // showPage 0, // close 0, // takeFocus focus, unfocus, 0, // runJavaScriptAlert 0, // runJavaScriptConfirm 0, // runJavaScriptPrompt 0, // setStatusText 0, // mouseDidMoveOverElement_deprecatedForUseWithV0 0, // missingPluginButtonClicked 0, // didNotHandleKeyEvent 0, // didNotHandleWheelEvent 0, // toolbarsAreVisible 0, // setToolbarsAreVisible 0, // menuBarIsVisible 0, // setMenuBarIsVisible 0, // statusBarIsVisible 0, // setStatusBarIsVisible 0, // isResizable 0, // setIsResizable getWindowFrame, setWindowFrame, runBeforeUnloadConfirmPanel, 0, // didDraw 0, // pageDidScroll exceededDatabaseQuota, 0, // runOpenPanel decidePolicyForGeolocationPermissionRequest, 0, // headerHeight 0, // footerHeight 0, // drawHeader 0, // drawFooter 0, // printFrame runModal, 0, // didCompleteRubberBandForMainFrame 0, // saveDataToFileInDownloadsFolder 0, // shouldInterruptJavaScript createOtherPage, 0, // mouseDidMoveOverElement decidePolicyForNotificationPermissionRequest, // decidePolicyForNotificationPermissionRequest 0, // unavailablePluginButtonClicked 0, // showColorPicker 0, // hideColorPicker }; WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient); WKPageLoaderClient pageLoaderClient = { kWKPageLoaderClientCurrentVersion, this, 0, // didStartProvisionalLoadForFrame 0, // didReceiveServerRedirectForProvisionalLoadForFrame 0, // didFailProvisionalLoadWithErrorForFrame didCommitLoadForFrame, 0, // didFinishDocumentLoadForFrame didFinishLoadForFrame, 0, // didFailLoadWithErrorForFrame 0, // didSameDocumentNavigationForFrame 0, // didReceiveTitleForFrame 0, // didFirstLayoutForFrame 0, // didFirstVisuallyNonEmptyLayoutForFrame 0, // didRemoveFrameFromHierarchy 0, // didFailToInitializePlugin 0, // didDisplayInsecureContentForFrame 0, // canAuthenticateAgainstProtectionSpaceInFrame 0, // didReceiveAuthenticationChallengeInFrame 0, // didStartProgress 0, // didChangeProgress 0, // didFinishProgress 0, // didBecomeUnresponsive 0, // didBecomeResponsive processDidCrash, 0, // didChangeBackForwardList 0, // shouldGoToBackForwardListItem 0, // didRunInsecureContentForFrame 0, // didDetectXSSForFrame 0, // didNewFirstVisuallyNonEmptyLayout 0, // willGoToBackForwardListItem 0, // interactionOccurredWhileProcessUnresponsive 0, // pluginDidFail 0, // didReceiveIntentForFrame 0, // registerIntentServiceForFrame 0, // didLayout }; WKPageSetPageLoaderClient(m_mainWebView->page(), &pageLoaderClient); WKPagePolicyClient pagePolicyClient = { kWKPagePolicyClientCurrentVersion, this, decidePolicyForNavigationAction, 0, // decidePolicyForNewWindowAction decidePolicyForResponse, 0, // unableToImplementPolicy }; WKPageSetPagePolicyClient(m_mainWebView->page(), &pagePolicyClient); }