Tab::~Tab() { WKPageClose(m_page); WKRelease(m_context); WKRelease(m_view); }
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()); }
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(); } }
static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef urlRequest, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton mouseButton, const void *clientInfo) { EXPECT_TRUE(openedWebView == nullptr); openedWebView = std::make_unique<PlatformWebView>(page); WKPageUIClientV5 uiClient; memset(&uiClient, 0, sizeof(uiClient)); uiClient.base.version = 5; uiClient.runJavaScriptAlert = runJavaScriptAlert; WKPageSetPageUIClient(openedWebView->page(), &uiClient.base); WKPageClose(page); WKRetain(openedWebView->page()); return openedWebView->page(); }
TEST(WebKit2, CloseThenTerminate) { WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate()); 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(&loaded); WKPageClose(webView.page()); WKPageTerminate(webView.page()); }
static void closeOtherPage(WKPageRef page, const void* clientInfo) { WKPageClose(page); PlatformWebView* view = static_cast<PlatformWebView*>(const_cast<void*>(clientInfo)); delete view; }