47988102659d0bfce2289ed8392b04fbb891c186
[WebKit-https.git] / WebKit / gtk / tests / testwebdatasource.c
1 /*
2  * Copyright (C) 2009 Jan Michael Alonzo
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 <glib.h>
21 #include <gtk/gtk.h>
22 #include <webkit/webkit.h>
23
24 #if GLIB_CHECK_VERSION(2, 16, 0) && GTK_CHECK_VERSION(2, 14, 0)
25
26 static const gshort defaultTimeout = 10;
27 guint waitTimer;
28 gboolean shouldWait;
29
30 typedef struct {
31     WebKitWebView* webView;
32     WebKitWebFrame* mainFrame;
33 } WebDataSourceFixture;
34
35 static void test_webkit_web_data_source_get_initial_request()
36 {
37     WebKitWebView* view;
38     WebKitWebFrame* frame;
39     WebKitWebDataSource* dataSource;
40     WebKitNetworkRequest* initialRequest;
41
42     view = WEBKIT_WEB_VIEW(webkit_web_view_new());
43     g_object_ref_sink(view);
44     frame = webkit_web_view_get_main_frame(view);
45
46     WebKitNetworkRequest* request = webkit_network_request_new("http://www.google.com");
47     webkit_web_frame_load_request(frame, request);
48     g_object_unref(request);
49
50     dataSource = webkit_web_frame_get_provisional_data_source(frame);
51     g_assert(dataSource);
52     initialRequest = webkit_web_data_source_get_initial_request(dataSource);
53     g_assert_cmpstr(webkit_network_request_get_uri(initialRequest), ==, "http://www.google.com/");
54
55     g_object_unref(view);
56 }
57
58 static void notify_load_status_unreachable_cb(WebKitWebView* view, GParamSpec* pspec, GMainLoop* loop)
59 {
60     WebKitLoadStatus status = webkit_web_view_get_load_status (view);
61     WebKitWebFrame* frame = webkit_web_view_get_main_frame(view);
62
63     g_assert(status != WEBKIT_LOAD_FINISHED);
64
65     if (status != WEBKIT_LOAD_FAILED)
66         return;
67
68     WebKitWebDataSource* datasource = webkit_web_frame_get_data_source(frame);
69
70     g_assert_cmpstr("http://this.host.does.not.exist/doireallyexist.html", ==,
71                     webkit_web_data_source_get_unreachable_uri(datasource));
72
73     g_main_loop_quit(loop);
74 }
75
76 static void notify_load_status_cb(WebKitWebView* view, GParamSpec* pspec, GMainLoop* loop)
77 {
78     WebKitLoadStatus status = webkit_web_view_get_load_status (view);
79     WebKitWebFrame* frame = webkit_web_view_get_main_frame(view);
80     WebKitWebDataSource* dataSource = webkit_web_frame_get_data_source(frame);
81
82     if (status == WEBKIT_LOAD_COMMITTED) {
83         g_assert(webkit_web_data_source_is_loading(dataSource));
84         return;
85     }
86     else if (status != WEBKIT_LOAD_FINISHED)
87         return;
88
89     /* Test get_request */
90     g_test_message("Testing webkit_web_data_source_get_request");
91     WebKitNetworkRequest* request = webkit_web_data_source_get_request(dataSource);
92     g_assert_cmpstr(webkit_network_request_get_uri(request), ==, "http://webkit.org/");
93
94     /* Test get_main_resource */
95     g_test_message("Testing webkit_web_data_source_get_main_resource");
96     WebKitWebResource* resource = webkit_web_data_source_get_main_resource(dataSource);
97     g_assert_cmpstr("text/html", ==, webkit_web_resource_get_mime_type(resource));
98     g_assert_cmpstr("http://webkit.org/", ==, webkit_web_resource_get_uri(resource));
99
100     /* Test get_data. We just test if data has certain size for the mean time */
101     g_test_message("Testing webkit_web_data_source_get_data has certain size");
102     GString* data = webkit_web_data_source_get_data(dataSource);
103     g_assert(data->len > 100);
104
105     /* FIXME: Add test for get_encoding */
106
107     g_main_loop_quit(loop);
108 }
109
110 static gboolean wait_timer_fired(GMainLoop* loop)
111 {
112     waitTimer = 0;
113     g_main_loop_quit(loop);
114
115     return FALSE;
116 }
117
118 static void test_webkit_web_data_source()
119 {
120     WebKitWebView* view;
121     GMainLoop* loop;
122
123     view = WEBKIT_WEB_VIEW(webkit_web_view_new());
124     g_object_ref_sink(view);
125     loop = g_main_loop_new(NULL, TRUE);
126     g_signal_connect(view, "notify::load-status", G_CALLBACK(notify_load_status_cb), loop);
127     webkit_web_view_load_uri(view, "http://webkit.org");
128
129     waitTimer = g_timeout_add_seconds(defaultTimeout, (GSourceFunc)wait_timer_fired, loop);
130
131     g_main_loop_run(loop);
132
133     if (waitTimer)
134         g_source_remove(waitTimer);
135
136     waitTimer = 0;
137
138     g_main_loop_unref(loop);
139     g_object_unref(view);
140 }
141
142 static void test_webkit_web_data_source_unreachable_uri()
143 {
144     /* FIXME: this test fails currently. */
145     return;
146
147     WebKitWebView* view;
148     GMainLoop* loop;
149
150     view = WEBKIT_WEB_VIEW(webkit_web_view_new());
151     g_object_ref_sink(view);
152     loop = g_main_loop_new(NULL, TRUE);
153     g_signal_connect(view, "notify::load-status", G_CALLBACK(notify_load_status_unreachable_cb), loop);
154     webkit_web_view_load_uri(view, "http://this.host.does.not.exist/doireallyexist.html");
155
156     waitTimer = g_timeout_add_seconds(defaultTimeout, (GSourceFunc)wait_timer_fired, loop);
157
158     g_main_loop_run(loop);
159
160     if (waitTimer)
161         g_source_remove(waitTimer);
162
163     waitTimer = 0;
164
165     g_main_loop_unref(loop);
166     g_object_unref(view);
167 }
168
169 int main(int argc, char** argv)
170 {
171     g_thread_init(NULL);
172     gtk_test_init(&argc, &argv, NULL);
173
174     g_test_bug_base("https://bugs.webkit.org/");
175     g_test_bug("24758");
176     g_test_add_func("/webkit/webdatasource/get_initial_request",
177                     test_webkit_web_data_source_get_initial_request);
178     g_test_add_func("/webkit/webdatasource/api",
179                     test_webkit_web_data_source);
180     g_test_add_func("/webkit/webdatasource/unreachable_uri",
181                     test_webkit_web_data_source_unreachable_uri);
182     return g_test_run ();
183 }
184
185 #else
186 int main(int argc, char** argv)
187 {
188     g_critical("You will need at least glib-2.16.0 and gtk-2.14.0 to run the unit tests. Doing nothing now.");
189     return 0;
190 }
191
192 #endif