15ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark/*
25ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Copyright (C) 2008 Holger Hans Peter Freyther
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Collabora Ltd.
45ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *
55ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * This library is free software; you can redistribute it and/or
65ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * modify it under the terms of the GNU Library General Public
75ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * License as published by the Free Software Foundation; either
85ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * version 2 of the License, or (at your option) any later version.
95ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *
105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * This library is distributed in the hope that it will be useful,
115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * but WITHOUT ANY WARRANTY; without even the implied warranty of
125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Library General Public License for more details.
145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *
155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * You should have received a copy of the GNU Library General Public License
165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * along with this library; see the file COPYING.LIB.  If not, write to
175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Boston, MA 02110-1301, USA.
195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark */
205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <errno.h>
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <unistd.h>
235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <glib.h>
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <glib/gstdio.h>
255ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <gtk/gtk.h>
265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <webkit/webkit.h>
275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
28f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if GTK_CHECK_VERSION(2, 14, 0)
295ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
30db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic int numberOfFramesCreated = 0;
31db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
32db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic void createFrameSignalTestFrameCreatedCallback(WebKitWebView* webView, WebKitWebFrame* frame, gpointer data)
33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
34db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    numberOfFramesCreated++;
35db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
36db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
37db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic gboolean createFrameSignalTestTimeout(gpointer data)
38db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
39db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    g_assert_cmpint(numberOfFramesCreated, ==, 2);
40db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    g_main_loop_quit((GMainLoop*) data);
41db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return FALSE;
42db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
43db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
44db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic void test_webkit_web_frame_created_signal(void)
45db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
46db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    GtkWidget* webView;
47db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    GtkWidget* window;
48db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    GMainLoop* loop = g_main_loop_new(NULL, TRUE);
49db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
50db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
51db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
52db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    webView = webkit_web_view_new();
53db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    g_signal_connect(webView, "frame-created", G_CALLBACK(createFrameSignalTestFrameCreatedCallback), loop);
54db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
55db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // We want to ensure that exactly two create-frame signals are
56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // fired and no more, so we set a timeout here. There does not appear
57db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // to be a simple way via the API to figure out when all frames have
58db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    // loaded.
59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    g_timeout_add(500, createFrameSignalTestTimeout, loop);
60db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
61db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    gtk_container_add(GTK_CONTAINER(window), webView);
62db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    gtk_widget_show(window);
63db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    gtk_widget_show(webView);
64db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
65db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    webkit_web_view_load_string(WEBKIT_WEB_VIEW(webView),
66db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        "<html><body>Frames!"
67db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        "<iframe></iframe>"
68db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        "<iframe></iframe>"
69db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        "</body></html>",
70db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        "text/html", "utf-8", "file://");
71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    g_main_loop_run(loop);
72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
73db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
745ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkstatic void test_webkit_web_frame_create_destroy(void)
755ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GtkWidget *webView;
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GtkWidget *window;
785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_test_bug("21837");
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    webView = webkit_web_view_new();
815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_object_ref_sink(webView);
825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_assert_cmpint(G_OBJECT(webView)->ref_count, ==, 1);
835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // This crashed with the original version
845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_object_unref(webView);
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_test_bug("25042");
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    webView = webkit_web_view_new();
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gtk_container_add(GTK_CONTAINER(window), webView);
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gtk_widget_show(window);
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gtk_widget_show(webView);
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gtk_widget_destroy(webView);
935ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}
945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
955ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkstatic void test_webkit_web_frame_lifetime(void)
965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{
975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    WebKitWebView* webView;
985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    WebKitWebFrame* webFrame;
995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_test_bug("21837");
1005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
1025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_object_ref_sink(webView);
1035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_assert_cmpint(G_OBJECT(webView)->ref_count, ==, 1);
1045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    webFrame = webkit_web_view_get_main_frame(webView);
1055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_assert_cmpint(G_OBJECT(webFrame)->ref_count, ==, 1);
1065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1075ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // Add dummy reference on the WebKitWebFrame to keep it alive
1085ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_object_ref(webFrame);
1095ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_assert_cmpint(G_OBJECT(webFrame)->ref_count, ==, 2);
1105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // This crashed with the original version
1125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_object_unref(webView);
1135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // Make sure that the frame got deleted as well. We did this
1155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // by adding an extra ref on the WebKitWebFrame and we should
1165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // be the one holding the last reference.
1175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_assert_cmpint(G_OBJECT(webFrame)->ref_count, ==, 1);
1185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_object_unref(webFrame);
1195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}
1205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic gboolean print_requested_cb(WebKitWebView* webView, WebKitWebFrame* webFrame, GMainLoop* loop)
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_set_data(G_OBJECT(webView), "signal-handled", GINT_TO_POINTER(TRUE));
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_main_loop_quit(loop);
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return TRUE;
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void print_timeout(GMainLoop* loop)
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (g_main_loop_is_running(loop))
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_main_loop_quit(loop);
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void test_webkit_web_frame_printing(void)
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitWebView* webView;
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_ref_sink(webView);
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_assert_cmpint(G_OBJECT(webView)->ref_count, ==, 1);
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    webkit_web_view_load_string(webView,
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                "<html><body><h1>WebKitGTK+!</h1></body></html>",
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                "text/html",
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                "utf-8",
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                "file://");
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GMainLoop* loop = g_main_loop_new(NULL, TRUE);
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Does javascript print() work correctly?
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_signal_connect(webView, "print-requested",
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                     G_CALLBACK(print_requested_cb),
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                     loop);
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_set_data(G_OBJECT(webView), "signal-handled", GINT_TO_POINTER(FALSE));
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    webkit_web_view_execute_script (webView, "print();");
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Give javascriptcore some time to process the print request, but
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // prepare a timeout to avoid it running forever in case the signal is
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // never emitted.
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_timeout_add(1000, (GSourceFunc)print_timeout, loop);
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_main_loop_run(loop);
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_assert_cmpint(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(webView), "signal-handled")), ==, TRUE);
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Does printing directly to a file?
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GError *error = NULL;
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gchar* temporaryFilename = NULL;
1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gint fd = g_file_open_tmp ("webkit-testwebframe-XXXXXX", &temporaryFilename, &error);
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    close(fd);
1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (error) {
1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_critical("Failed to open a temporary file for writing: %s.", error->message);
1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_error_free(error);
1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        goto cleanup;
1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // We delete the file, so that we can easily figure out that the
1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // file got printed;
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (g_unlink(temporaryFilename) == -1) {
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        g_warning("Failed to delete the temporary file: %s.\nThis may cause the test to be bogus.", g_strerror(errno));
1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebKitWebFrame* webFrame = webkit_web_view_get_main_frame(webView);
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GtkPrintOperation* operation = gtk_print_operation_new();
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GtkPrintOperationAction action = GTK_PRINT_OPERATION_ACTION_EXPORT;
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    GtkPrintOperationResult result;
1880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    gtk_print_operation_set_export_filename(operation, temporaryFilename);
1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    result = webkit_web_frame_print_full (webFrame, operation, action, NULL);
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_assert_cmpint(result, ==, GTK_PRINT_OPERATION_RESULT_APPLY);
1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_assert_cmpint(g_file_test(temporaryFilename, G_FILE_TEST_IS_REGULAR), ==, TRUE);
1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_unlink(temporaryFilename);
1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_unref(operation);
1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcleanup:
1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_object_unref(webView);
1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_free(temporaryFilename);
2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
202643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic void test_webkit_web_frame_response()
203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitWebFrame* frame = g_object_new(WEBKIT_TYPE_WEB_FRAME, NULL);
205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebKitNetworkResponse* response = webkit_web_frame_get_network_response(frame);
206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_assert(!response);
207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_object_unref(frame);
208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
2105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkint main(int argc, char** argv)
2115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{
2125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_thread_init(NULL);
2135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    gtk_test_init(&argc, &argv, NULL);
2145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
2155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_test_bug_base("https://bugs.webkit.org/");
2165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_test_add_func("/webkit/webview/create_destroy", test_webkit_web_frame_create_destroy);
217db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    g_test_add_func("/webkit/webview/frame-created_signal", test_webkit_web_frame_created_signal);
2185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    g_test_add_func("/webkit/webframe/lifetime", test_webkit_web_frame_lifetime);
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    g_test_add_func("/webkit/webview/printing", test_webkit_web_frame_printing);
220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_test_add_func("/webkit/webview/response", test_webkit_web_frame_response);
2215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    return g_test_run ();
2225ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}
2235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
2245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#else
2255ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkint main(int argc, char** argv)
2265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark{
227f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_critical("You will need gtk-2.14.0 to run the unit tests. Doing nothing now.");
2285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    return 0;
2295ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}
2305ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
2315ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif
232