1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/*
2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Jan Michael Alonzo
3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * This library is free software; you can redistribute it and/or
5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * modify it under the terms of the GNU Library General Public
6231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * License as published by the Free Software Foundation; either
7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * version 2 of the License, or (at your option) any later version.
8231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
9231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * This library is distributed in the hope that it will be useful,
10231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * but WITHOUT ANY WARRANTY; without even the implied warranty of
11231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Library General Public License for more details.
13231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *
14231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * You should have received a copy of the GNU Library General Public License
15231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * along with this library; see the file COPYING.LIB.  If not, write to
16231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Boston, MA 02110-1301, USA.
18231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */
19231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
20231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <glib.h>
21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <gtk/gtk.h>
22231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <webkit/webkit.h>
23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
24f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if GTK_CHECK_VERSION(2, 14, 0)
25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic const gshort defaultTimeout = 10;
27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockguint waitTimer;
28231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockgboolean shouldWait;
29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocktypedef struct {
31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebView* webView;
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebFrame* mainFrame;
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} WebDataSourceFixture;
34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void test_webkit_web_data_source_get_initial_request()
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebView* view;
38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebFrame* frame;
39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebDataSource* dataSource;
40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitNetworkRequest* initialRequest;
41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
42231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    view = WEBKIT_WEB_VIEW(webkit_web_view_new());
43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_ref_sink(view);
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    frame = webkit_web_view_get_main_frame(view);
45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitNetworkRequest* request = webkit_network_request_new("http://www.google.com");
47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    webkit_web_frame_load_request(frame, request);
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_unref(request);
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    dataSource = webkit_web_frame_get_provisional_data_source(frame);
51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_assert(dataSource);
52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    initialRequest = webkit_web_data_source_get_initial_request(dataSource);
53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_assert_cmpstr(webkit_network_request_get_uri(initialRequest), ==, "http://www.google.com/");
54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_unref(view);
56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
58d0825bca7fe65beaee391d30da42e937db621564Steve Blockstatic void notify_load_status_unreachable_cb(WebKitWebView* view, GParamSpec* pspec, GMainLoop* loop)
59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
60d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebKitLoadStatus status = webkit_web_view_get_load_status (view);
61d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebKitWebFrame* frame = webkit_web_view_get_main_frame(view);
62d0825bca7fe65beaee391d30da42e937db621564Steve Block
63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_assert(status != WEBKIT_LOAD_FINISHED);
64d0825bca7fe65beaee391d30da42e937db621564Steve Block
65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (status != WEBKIT_LOAD_FAILED)
66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return;
67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
68d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebKitWebDataSource* datasource = webkit_web_frame_get_data_source(frame);
69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    g_assert_cmpstr("http://this.host.does.not.exist/doireallyexist.html", ==,
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                    webkit_web_data_source_get_unreachable_uri(datasource));
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
73d0825bca7fe65beaee391d30da42e937db621564Steve Block    g_main_loop_quit(loop);
74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
76d0825bca7fe65beaee391d30da42e937db621564Steve Blockstatic void notify_load_status_cb(WebKitWebView* view, GParamSpec* pspec, GMainLoop* loop)
77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
78d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebKitLoadStatus status = webkit_web_view_get_load_status (view);
79d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebKitWebFrame* frame = webkit_web_view_get_main_frame(view);
80d0825bca7fe65beaee391d30da42e937db621564Steve Block    WebKitWebDataSource* dataSource = webkit_web_frame_get_data_source(frame);
81d0825bca7fe65beaee391d30da42e937db621564Steve Block
82d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (status == WEBKIT_LOAD_COMMITTED) {
83d0825bca7fe65beaee391d30da42e937db621564Steve Block        g_assert(webkit_web_data_source_is_loading(dataSource));
84d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
85d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
86d0825bca7fe65beaee391d30da42e937db621564Steve Block    else if (status != WEBKIT_LOAD_FINISHED)
87d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
88d0825bca7fe65beaee391d30da42e937db621564Steve Block
89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /* Test get_request */
90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_message("Testing webkit_web_data_source_get_request");
91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitNetworkRequest* request = webkit_web_data_source_get_request(dataSource);
9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    g_assert_cmpstr(webkit_network_request_get_uri(request), ==, "http://www.webkit.org/");
93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /* Test get_main_resource */
95231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_message("Testing webkit_web_data_source_get_main_resource");
96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebResource* resource = webkit_web_data_source_get_main_resource(dataSource);
97231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_assert_cmpstr("text/html", ==, webkit_web_resource_get_mime_type(resource));
9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    g_assert_cmpstr("http://www.webkit.org/", ==, webkit_web_resource_get_uri(resource));
99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /* Test get_data. We just test if data has certain size for the mean time */
101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_message("Testing webkit_web_data_source_get_data has certain size");
102231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    GString* data = webkit_web_data_source_get_data(dataSource);
103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_assert(data->len > 100);
104231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    /* FIXME: Add test for get_encoding */
106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
107d0825bca7fe65beaee391d30da42e937db621564Steve Block    g_main_loop_quit(loop);
108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
110231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic gboolean wait_timer_fired(GMainLoop* loop)
111231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
112231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    waitTimer = 0;
113d0825bca7fe65beaee391d30da42e937db621564Steve Block    g_main_loop_quit(loop);
114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
115231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return FALSE;
116231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void test_webkit_web_data_source()
119231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebView* view;
121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    GMainLoop* loop;
122231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    view = WEBKIT_WEB_VIEW(webkit_web_view_new());
124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_ref_sink(view);
125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    loop = g_main_loop_new(NULL, TRUE);
126d0825bca7fe65beaee391d30da42e937db621564Steve Block    g_signal_connect(view, "notify::load-status", G_CALLBACK(notify_load_status_cb), loop);
12781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webkit_web_view_load_uri(view, "http://www.webkit.org");
128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    waitTimer = g_timeout_add_seconds(defaultTimeout, (GSourceFunc)wait_timer_fired, loop);
130f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_main_loop_run(loop);
132f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
133f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (waitTimer)
134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        g_source_remove(waitTimer);
135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
136f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    waitTimer = 0;
137f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
138f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_main_loop_unref(loop);
139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_object_unref(view);
140f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
141f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
142f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic void notify_load_status_lifetime_cb(WebKitWebView* view, GParamSpec* pspec, GMainLoop* loop)
143f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
144f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitLoadStatus status = webkit_web_view_get_load_status (view);
145f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitWebFrame* frame = webkit_web_view_get_main_frame(view);
146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitWebDataSource* dataSource = webkit_web_frame_get_data_source(frame);
147f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
148f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (status == WEBKIT_LOAD_COMMITTED) {
149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        g_assert(webkit_web_data_source_is_loading(dataSource));
150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return;
151f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    } else if (status != WEBKIT_LOAD_FINISHED)
152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return;
153f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
154f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_main_loop_quit(loop);
155f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
156f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
157f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic void test_webkit_web_data_source_lifetime()
158f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
159f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitWebView* view;
160f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    GMainLoop* loop;
161f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
162f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    view = WEBKIT_WEB_VIEW(webkit_web_view_new());
163f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_object_ref_sink(view);
164f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    loop = g_main_loop_new(NULL, TRUE);
165f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_signal_connect(view, "notify::load-status", G_CALLBACK(notify_load_status_lifetime_cb), loop);
16681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webkit_web_view_load_uri(view, "http://www.webkit.org");
167f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
168f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    waitTimer = g_timeout_add_seconds(defaultTimeout, (GSourceFunc)wait_timer_fired, loop);
169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_main_loop_run(loop);
171f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebKitWebDataSource* dataSource = webkit_web_frame_get_data_source(webkit_web_view_get_main_frame(view));
173f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    GList* subResources = webkit_web_data_source_get_subresources(dataSource);
174f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    gint numberOfResources = g_list_length(subResources);
175f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_list_free(subResources);
176f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
177f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_assert_cmpint(webkit_web_view_get_load_status(view), ==, WEBKIT_LOAD_FINISHED);
178f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
179f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    webkit_web_view_load_uri(view, "http://gnome.org");
180f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
181f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_assert_cmpint(webkit_web_view_get_load_status(view), ==, WEBKIT_LOAD_PROVISIONAL);
182f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
183f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    webkit_web_view_stop_loading(view);
184f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
185f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_assert_cmpint(webkit_web_view_get_load_status(view), ==, WEBKIT_LOAD_FAILED);
186f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
187f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    subResources = webkit_web_data_source_get_subresources(dataSource);
188f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_assert_cmpint(numberOfResources, ==, g_list_length(subResources));
189f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_list_free(subResources);
190f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
191f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (waitTimer)
192f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        g_source_remove(waitTimer);
193f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
194f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    waitTimer = 0;
195f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
196f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_main_loop_unref(loop);
197231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_unref(view);
198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic void test_webkit_web_data_source_unreachable_uri()
201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
202f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    /* FIXME: this test fails currently. */
203f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return;
204f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebKitWebView* view;
206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    GMainLoop* loop;
207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
208231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    view = WEBKIT_WEB_VIEW(webkit_web_view_new());
209231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_ref_sink(view);
210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    loop = g_main_loop_new(NULL, TRUE);
211d0825bca7fe65beaee391d30da42e937db621564Steve Block    g_signal_connect(view, "notify::load-status", G_CALLBACK(notify_load_status_unreachable_cb), loop);
212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    webkit_web_view_load_uri(view, "http://this.host.does.not.exist/doireallyexist.html");
213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
214f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    waitTimer = g_timeout_add_seconds(defaultTimeout, (GSourceFunc)wait_timer_fired, loop);
215231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
216231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_main_loop_run(loop);
217f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
218f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (waitTimer)
219f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        g_source_remove(waitTimer);
220f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
221f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    waitTimer = 0;
222f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
223f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_main_loop_unref(loop);
224231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_object_unref(view);
225231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
226231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint main(int argc, char** argv)
228231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_thread_init(NULL);
230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gtk_test_init(&argc, &argv, NULL);
231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_bug_base("https://bugs.webkit.org/");
233231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_bug("24758");
234231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_add_func("/webkit/webdatasource/get_initial_request",
235231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                    test_webkit_web_data_source_get_initial_request);
236231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_add_func("/webkit/webdatasource/api",
237231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                    test_webkit_web_data_source);
238231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    g_test_add_func("/webkit/webdatasource/unreachable_uri",
239231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                    test_webkit_web_data_source_unreachable_uri);
240f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_test_add_func("/webkit/webdatasource/lifetime",
241f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch                    test_webkit_web_data_source_lifetime);
242f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
243231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return g_test_run ();
244231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
245231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
246231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else
247231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint main(int argc, char** argv)
248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
249f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    g_critical("You will need gtk-2.14.0 to run the unit tests. Doing nothing now.");
250231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return 0;
251231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
252231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
253231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
254