Esempio n. 1
0
void Tab::onCommitLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef, const void *clientInfo)
{
    Tab* self = ((Tab*)clientInfo);

    if (page != self->m_page || !WKFrameIsMainFrame(frame))
        return;

    WKURLRef url = WKPageCopyActiveURL(page);
    WKStringRef urlString = WKURLCopyString(url);
    postToBundle(self->m_browser->ui(), "urlChanged", self->m_id, urlString);
    WKRelease(url);
    WKRelease(urlString);
}
TEST(WebKit2, PendingAPIRequestURL)
{
    WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
    PlatformWebView webView(context.get());

    WKPageLoaderClientV0 loaderClient;
    memset(&loaderClient, 0, sizeof(loaderClient));
    loaderClient.base.version = 0;
    loaderClient.didFinishLoadForFrame = [](WKPageRef, WKFrameRef, WKTypeRef, const void*) { done = true; };
    WKPageSetPageLoaderClient(webView.page(), &loaderClient.base);

    WKRetainPtr<WKURLRef> activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    EXPECT_NULL(activeURL.get());

    WKRetainPtr<WKURLRef> url = adoptWK(Util::createURLForResource("simple", "html"));
    WKPageLoadURL(webView.page(), url.get());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKRetainPtr<WKStringRef> htmlString = Util::toWK("<body>Hello, World</body>");
    WKRetainPtr<WKURLRef> blankURL = adoptWK(WKURLCreateWithUTF8CString("about:blank"));
    WKPageLoadHTMLString(webView.page(), htmlString.get(), nullptr);
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
    Util::run(&done);
    done = false;

    url = adoptWK(Util::createURLForResource("simple2", "html"));
    WKPageLoadHTMLString(webView.page(), htmlString.get(), url.get());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKRetainPtr<WKDataRef> data = adoptWK(WKDataCreate(nullptr, 0));
    WKPageLoadData(webView.page(), data.get(), nullptr, nullptr, nullptr);
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
    Util::run(&done);
    done = false;

    WKPageLoadData(webView.page(), data.get(), nullptr, nullptr, url.get());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKPageLoadAlternateHTMLString(webView.page(), htmlString.get(), nullptr, url.get());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    Util::run(&done);
    done = false;

    WKRetainPtr<WKStringRef> plainTextString = Util::toWK("Hello, World");
    WKPageLoadPlainTextString(webView.page(), plainTextString.get());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
    Util::run(&done);
    done = false;

    WKPageReload(webView.page());
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
    Util::run(&done);
    done = false;

    url = adoptWK(WKURLCreateWithUTF8CString("file:///tmp/index.html"));
    WKPageLoadFile(webView.page(), url.get(), nullptr);
    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
    ASSERT_NOT_NULL(activeURL.get());
    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
    WKPageStopLoading(webView.page());
}