diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-07-16 14:51:15 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-07-16 14:51:15 +0200 |
commit | 4e6b3a206fa4ad8bb0b664f7674c9a70376d6e26 (patch) | |
tree | 7bb9ad7e31c24d1cf1707e03e6f1a80f6d033951 /Source/WebKit2/UIProcess/API/gtk/tests | |
parent | 3977e3d2f72f7fe2c887c1ec0e0c342e1d169f42 (diff) | |
download | qtwebkit-4e6b3a206fa4ad8bb0b664f7674c9a70376d6e26.tar.gz |
Imported WebKit commit 953baa67aa07087b6ecd4199351ec554c724e27d (http://svn.webkit.org/repository/webkit/trunk@122676)
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/tests')
8 files changed, 250 insertions, 6 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am b/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am index 058a613f1..919202522 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am +++ b/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am @@ -9,6 +9,7 @@ TEST_PROGS += \ Programs/WebKit2APITests/TestLoaderClient \ Programs/WebKit2APITests/TestPrinting \ Programs/WebKit2APITests/TestResources \ + Programs/WebKit2APITests/TestSSL \ Programs/WebKit2APITests/TestWebKitVersion \ Programs/WebKit2APITests/TestWebKitFindController \ Programs/WebKit2APITests/TestWebKitPolicyClient \ @@ -174,4 +175,10 @@ Programs_WebKit2APITests_TestContextMenu_CPPFLAGS = $(webkit2_tests_cppflags) Programs_WebKit2APITests_TestContextMenu_LDADD = $(webkit2_tests_ldadd) Programs_WebKit2APITests_TestContextMenu_LDFLAGS = $(webkit2_tests_ldflags) +Programs_WebKit2APITests_TestSSL_SOURCES = \ + Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp +Programs_WebKit2APITests_TestSSL_CPPFLAGS = $(webkit2_tests_cppflags) +Programs_WebKit2APITests_TestSSL_LDADD = $(webkit2_tests_ldadd) +Programs_WebKit2APITests_TestSSL_LDFLAGS = $(webkit2_tests_ldflags) + endif # ENABLE_WEBKIT2 diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp index 1ddfd82bf..2fe8998b5 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp @@ -21,8 +21,10 @@ #include "WebKitTestServer.h" #include "WebViewTest.h" +#include <glib/gstdio.h> static WebKitTestServer* kServer; +static char* kTempDirectory; static const char* kFirstPartyDomain = "127.0.0.1"; static const char* kThirdPartyDomain = "localhost"; @@ -58,6 +60,30 @@ public: { g_strfreev(m_domains); g_signal_handlers_disconnect_matched(m_cookieManager, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); + if (m_cookiesTextFile) + g_unlink(m_cookiesTextFile.get()); + if (m_cookiesSQLiteFile) + g_unlink(m_cookiesSQLiteFile.get()); + } + + void setPersistentStorage(WebKitCookiePersistentStorage storage) + { + const char* filename = 0; + switch (storage) { + case WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT: + if (!m_cookiesTextFile) + m_cookiesTextFile.set(g_build_filename(kTempDirectory, "cookies.txt", NULL)); + filename = m_cookiesTextFile.get(); + break; + case WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE: + if (!m_cookiesSQLiteFile) + m_cookiesSQLiteFile.set(g_build_filename(kTempDirectory, "cookies.db", NULL)); + filename = m_cookiesSQLiteFile.get(); + break; + default: + g_assert_not_reached(); + } + webkit_cookie_manager_set_persistent_storage(m_cookieManager, filename, storage); } static void getAcceptPolicyReadyCallback(GObject* object, GAsyncResult* result, gpointer userData) @@ -129,6 +155,8 @@ public: char** m_domains; bool m_cookiesChanged; bool m_finishLoopWhenCookiesChange; + GOwnPtr<char> m_cookiesTextFile; + GOwnPtr<char> m_cookiesSQLiteFile; }; static void testCookieManagerAcceptPolicy(CookieManagerTest* test, gconstpointer) @@ -204,6 +232,54 @@ static void testCookieManagerCookiesChanged(CookieManagerTest* test, gconstpoint g_assert(test->m_cookiesChanged); } +static void testCookieManagerPersistentStorage(CookieManagerTest* test, gconstpointer) +{ + test->setAcceptPolicy(WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS); + + // Text storage using a new file. + test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT); + char** domains = test->getDomains(); + g_assert(domains); + g_assert_cmpint(g_strv_length(domains), ==, 0); + + test->loadURI(kServer->getURIForPath("/index.html").data()); + test->waitUntilLoadFinished(); + g_assert(test->m_cookiesChanged); + domains = test->getDomains(); + g_assert(domains); + g_assert_cmpint(g_strv_length(domains), ==, 2); + + + // SQLite storage using a new file. + test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); + domains = test->getDomains(); + g_assert(domains); + g_assert_cmpint(g_strv_length(domains), ==, 0); + + test->loadURI(kServer->getURIForPath("/index.html").data()); + test->waitUntilLoadFinished(); + g_assert(test->m_cookiesChanged); + domains = test->getDomains(); + g_assert(domains); + g_assert_cmpint(g_strv_length(domains), ==, 2); + + // Text storage using an existing file. + test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT); + domains = test->getDomains(); + g_assert(domains); + g_assert_cmpint(g_strv_length(domains), ==, 2); + test->deleteAllCookies(); + g_assert_cmpint(g_strv_length(test->getDomains()), ==, 0); + + // SQLite storage with an existing file. + test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_SQLITE); + domains = test->getDomains(); + g_assert(domains); + g_assert_cmpint(g_strv_length(domains), ==, 2); + test->deleteAllCookies(); + g_assert_cmpint(g_strv_length(test->getDomains()), ==, 0); +} + static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) { if (message->method != SOUP_METHOD_GET) { @@ -214,10 +290,10 @@ static void serverCallback(SoupServer* server, SoupMessage* message, const char* soup_message_set_status(message, SOUP_STATUS_OK); if (g_str_equal(path, "/index.html")) { char* indexHtml = g_strdup_printf(kIndexHtmlFormat, soup_server_get_port(server)); - soup_message_headers_replace(message->response_headers, "Set-Cookie", "foo=bar"); + soup_message_headers_replace(message->response_headers, "Set-Cookie", "foo=bar; Max-Age=60"); soup_message_body_append(message->response_body, SOUP_MEMORY_TAKE, indexHtml, strlen(indexHtml)); } else if (g_str_equal(path, "/image.png")) - soup_message_headers_replace(message->response_headers, "Set-Cookie", "baz=qux"); + soup_message_headers_replace(message->response_headers, "Set-Cookie", "baz=qux; Max-Age=60"); else g_assert_not_reached(); soup_message_body_complete(message->response_body); @@ -228,12 +304,17 @@ void beforeAll() kServer = new WebKitTestServer(); kServer->run(serverCallback); + kTempDirectory = g_dir_make_tmp("WebKit2Tests-XXXXXX", 0); + g_assert(kTempDirectory); + CookieManagerTest::add("WebKitCookieManager", "accept-policy", testCookieManagerAcceptPolicy); CookieManagerTest::add("WebKitCookieManager", "delete-cookies", testCookieManagerDeleteCookies); CookieManagerTest::add("WebKitCookieManager", "cookies-changed", testCookieManagerCookiesChanged); + CookieManagerTest::add("WebKitCookieManager", "persistent-storage", testCookieManagerPersistentStorage); } void afterAll() { delete kServer; + g_rmdir(kTempDirectory); } diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h b/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h index 6929c3595..6fe9de86d 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h @@ -75,6 +75,12 @@ public: return resourcesDir.get(); } + static CString getResourcesDir() + { + GOwnPtr<char> resourcesDir(g_build_filename(WEBKIT_SRC_DIR, "Source", "WebKit2", "UIProcess", "API", "gtk", "tests", "resources", NULL)); + return resourcesDir.get(); + } + void addLogFatalFlag(unsigned flag) { unsigned fatalMask = g_log_set_always_fatal(static_cast<GLogLevelFlags>(G_LOG_FATAL_MASK)); diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp new file mode 100644 index 000000000..40e9fbeee --- /dev/null +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2012 Igalia S.L. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" + +#include "LoadTrackingTest.h" +#include "WebKitTestServer.h" +#include <gtk/gtk.h> + +static WebKitTestServer* kServer; +static const char* indexHTML = "<html><body>Testing WebKit2GTK+ SSL</body></htmll>"; + +class SSLTest: public LoadTrackingTest { +public: + MAKE_GLIB_TEST_FIXTURE(SSLTest); + + SSLTest() + : m_tlsErrors(static_cast<GTlsCertificateFlags>(0)) + { + } + + virtual void loadCommitted() + { + WebKitWebResource* resource = webkit_web_view_get_main_resource(m_webView); + g_assert(resource); + WebKitURIResponse* response = webkit_web_resource_get_response(resource); + g_assert(response); + + GTlsCertificate* certificate = 0; + webkit_uri_response_get_https_status(response, &certificate, &m_tlsErrors); + m_certificate = certificate; + } + + void waitUntilLoadFinished() + { + m_certificate = 0; + m_tlsErrors = static_cast<GTlsCertificateFlags>(0); + LoadTrackingTest::waitUntilLoadFinished(); + } + + GRefPtr<GTlsCertificate> m_certificate; + GTlsCertificateFlags m_tlsErrors; +}; + +static void testSSL(SSLTest* test, gconstpointer) +{ + test->loadURI(kServer->getURIForPath("/").data()); + test->waitUntilLoadFinished(); + g_assert(test->m_certificate); + // We always expect errors because we are using a self-signed certificate, + // but only G_TLS_CERTIFICATE_UNKNOWN_CA flags should be present. + g_assert(test->m_tlsErrors); + g_assert_cmpuint(test->m_tlsErrors, ==, G_TLS_CERTIFICATE_UNKNOWN_CA); + + // Non HTTPS loads shouldn't have a certificate nor errors. + test->loadHtml(indexHTML, 0); + test->waitUntilLoadFinished(); + g_assert(!test->m_certificate); + g_assert(!test->m_tlsErrors); +} + +static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) +{ + if (message->method != SOUP_METHOD_GET) { + soup_message_set_status(message, SOUP_STATUS_NOT_IMPLEMENTED); + return; + } + + soup_message_set_status(message, SOUP_STATUS_OK); + soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, indexHTML, strlen(indexHTML)); + soup_message_body_complete(message->response_body); +} + +void beforeAll() +{ + kServer = new WebKitTestServer(WebKitTestServer::ServerHTTPS); + kServer->run(serverCallback); + + SSLTest::add("WebKitWebView", "ssl", testSSL); +} + +void afterAll() +{ + delete kServer; +} diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp index 55a93de87..98b4a9a2b 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp @@ -20,12 +20,26 @@ #include "config.h" #include "WebKitTestServer.h" +#include "TestMain.h" #include <wtf/gobject/GOwnPtr.h> -WebKitTestServer::WebKitTestServer() - : m_soupServer(adoptGRef(soup_server_new(SOUP_SERVER_PORT, 0, NULL))) - , m_baseURI(soup_uri_new("http://127.0.0.1/")) +WebKitTestServer::WebKitTestServer(ServerType type) { + GOwnPtr<char> sslCertificateFile; + GOwnPtr<char> sslKeyFile; + if (type == ServerHTTPS) { + CString resourcesDir = Test::getResourcesDir(); + sslCertificateFile.set(g_build_filename(resourcesDir.data(), "test-cert.pem", NULL)); + sslKeyFile.set(g_build_filename(resourcesDir.data(), "test-key.pem", NULL)); + } + + GRefPtr<SoupAddress> address = adoptGRef(soup_address_new("127.0.0.1", SOUP_ADDRESS_ANY_PORT)); + soup_address_resolve_sync(address.get(), 0); + + m_soupServer = adoptGRef(soup_server_new(SOUP_SERVER_INTERFACE, address.get(), + SOUP_SERVER_SSL_CERT_FILE, sslCertificateFile.get(), + SOUP_SERVER_SSL_KEY_FILE, sslKeyFile.get(), NULL)); + m_baseURI = type == ServerHTTPS ? soup_uri_new("https://127.0.0.1/") : soup_uri_new("http://127.0.0.1/"); soup_uri_set_port(m_baseURI, soup_server_get_port(m_soupServer.get())); } diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h b/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h index 9f00349e0..d4626f6b1 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h +++ b/Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h @@ -27,7 +27,13 @@ class WebKitTestServer { public: - WebKitTestServer(); + + enum ServerType { + ServerHTTP, + ServerHTTPS + }; + + WebKitTestServer(ServerType type = ServerHTTP); virtual ~WebKitTestServer(); SoupURI* baseURI() { return m_baseURI; } diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem b/Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem new file mode 100644 index 000000000..b34301f25 --- /dev/null +++ b/Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB9jCCAV+gAwIBAgIJALeuXBo+vwz9MA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV +BAMMCTEyNy4wLjAuMTAeFw0xMjA3MTIxMjQ4MjRaFw0yMjA3MTAxMjQ4MjRaMBQx +EjAQBgNVBAMMCTEyNy4wLjAuMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA +0TUzOQxHBIKDD2mkuq+tU92mQvDZg73B0G+Nhr2T2G6MbcLqIwjg1QYtBZWJ83tZ +xMMEfiweHLF85Z9ohavAgxJlKG7YmvZO79KkFpmjV2W5CVRm0eYMPnzmxNCoaYqo +DLl0zsH6KZOLPKu/fX4eDX9XpAP1f83hWB1UFBmHKN8CAwEAAaNQME4wHQYDVR0O +BBYEFDHv5ZQ1BdmhzTsDUEoY55EXyUdKMB8GA1UdIwQYMBaAFDHv5ZQ1BdmhzTsD +UEoY55EXyUdKMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAh3qMBx7v +jSodMf3OyTqTLE7deLnmnCeBVpgzxRZEoizcGqYcjiqO27i5N5Z6KVQsnITnLiyC +mUtuR5KnF69uTKUw4m/ugZe5whjig5Mq2l410KVK6EeG4tdLlfXR+wi4U5K4KjP6 +p4nchQUXLa2zcbJn+VBexJn6/9wdhr+DUGY= +-----END CERTIFICATE----- diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem b/Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem new file mode 100644 index 000000000..9036222ce --- /dev/null +++ b/Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANE1MzkMRwSCgw9p +pLqvrVPdpkLw2YO9wdBvjYa9k9hujG3C6iMI4NUGLQWVifN7WcTDBH4sHhyxfOWf +aIWrwIMSZShu2Jr2Tu/SpBaZo1dluQlUZtHmDD585sTQqGmKqAy5dM7B+imTizyr +v31+Hg1/V6QD9X/N4VgdVBQZhyjfAgMBAAECgYB2QwOUsRsIMprRwJ9tJNfvO7G7 +z5i1/zOrlxPC4jHMPBnIBlICwgcOhLI4oOLdr5H8R12n0VqoT7DRwP396iwlJipF +iO1heDMn/8z8LPGwkCK/+ck04rMDksxWIdMwYKBXt9ahnJ/xRLzQ1/3AJiAGnoe5 +/QLXQweofd4mmfsjKQJBAO2CwT7uMP6nMjXgtVMJq5QP8UbeCS1sEOPJJbHuDxJB +/HePQHBjq4kzG6CL4oO7T+5fDv4g+fIIHzuXerZ0imsCQQDhfmiTIc9OucEIfg6/ +ms0JiKSmWc+qoiOCtrILuQvFoNwJRciQANqeJs6wpaDvevSUvBLGfG/7b3HvaE5X +iqBdAkBEQIvp2qcHtuJN60oQF7pPrRknxUyb2e8sljQX4pJAK+gyL19ULMAxiBdL +Vod8VYqNtJFpY+6Pp9fZ1xjzb6ALAkEA4JzrDAw0lQXA+3WduUw4ixOadr2ldyG0 +36KebcDwsfZO18m0Q4UmPz0Gy7zgN0wxzuochaw0W6+iPUiYKOlEXQJBAMWQrPlu +rrinoZS2f8doJ9BNNUa+RNpMug6UXc55qoUJlyiXEh+tu4AaMOtxuGIyC0sAcuw6 +XdAPVPXKd7Mne70= +-----END PRIVATE KEY----- |