[GTK] Some unit tests fail when using the network process
[WebKit-https.git] / Tools / TestWebKitAPI / gtk / WebKit2Gtk / WebKitTestServer.cpp
1 /*
2  * Copyright (C) 2011 Igalia S.L.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19
20 #include "config.h"
21 #include "WebKitTestServer.h"
22
23 #include "TestMain.h"
24 #include <wtf/Threading.h>
25 #include <wtf/glib/GUniquePtr.h>
26
27 WebKitTestServer::WebKitTestServer(ServerOptions options)
28 {
29     if (options & ServerRunInThread) {
30         WTF::initializeThreading();
31         m_queue = WorkQueue::create("WebKitTestServer");
32     }
33
34     GUniquePtr<char> sslCertificateFile;
35     GUniquePtr<char> sslKeyFile;
36     if (options & ServerHTTPS) {
37         CString resourcesDir = Test::getResourcesDir();
38         sslCertificateFile.reset(g_build_filename(resourcesDir.data(), "test-cert.pem", NULL));
39         sslKeyFile.reset(g_build_filename(resourcesDir.data(), "test-key.pem", NULL));
40     }
41
42     GRefPtr<SoupAddress> address = adoptGRef(soup_address_new("127.0.0.1", SOUP_ADDRESS_ANY_PORT));
43     soup_address_resolve_sync(address.get(), 0);
44
45     m_soupServer = adoptGRef(soup_server_new(SOUP_SERVER_INTERFACE, address.get(),
46         SOUP_SERVER_ASYNC_CONTEXT, m_queue ? m_queue->runLoop().mainContext() : nullptr,
47         SOUP_SERVER_SSL_CERT_FILE, sslCertificateFile.get(),
48         SOUP_SERVER_SSL_KEY_FILE, sslKeyFile.get(), nullptr));
49     m_baseURI = options & ServerHTTPS ? soup_uri_new("https://127.0.0.1/") : soup_uri_new("http://127.0.0.1/");
50     soup_uri_set_port(m_baseURI, soup_server_get_port(m_soupServer.get()));
51 }
52
53 WebKitTestServer::~WebKitTestServer()
54 {
55     soup_uri_free(m_baseURI);
56 }
57
58 void WebKitTestServer::run(SoupServerCallback serverCallback)
59 {
60     if (m_queue) {
61         m_queue->dispatch([this, serverCallback] {
62             soup_server_run_async(m_soupServer.get());
63             soup_server_add_handler(m_soupServer.get(), nullptr, serverCallback, nullptr, nullptr);
64         });
65     } else {
66         soup_server_run_async(m_soupServer.get());
67         soup_server_add_handler(m_soupServer.get(), nullptr, serverCallback, nullptr, nullptr);
68     }
69 }
70
71 CString WebKitTestServer::getURIForPath(const char* path)
72 {
73     SoupURI* uri = soup_uri_new_with_base(m_baseURI, path);
74     GUniquePtr<gchar> uriString(soup_uri_to_string(uri, FALSE));
75     soup_uri_free(uri);
76     return uriString.get();
77 }
78