1/*
2 * Copyright (c) 2011 Motorola Mobility, Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification,
5 * are permitted provided that the following conditions are met:
6 *
7 * Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 *
10 * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation and/or
12 * other materials provided with the distribution.
13 *
14 * Neither the name of Motorola Mobility, Inc. nor the names of its contributors may
15 * be used to endorse or promote products derived from this software without
16 * specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#include "config.h"
32
33#include "TestMain.h"
34#include "WebKitTestServer.h"
35#include "WebViewTest.h"
36#include <wtf/glib/GRefPtr.h>
37
38static WebKitTestServer* gServer;
39
40static void testWebKitSettings(Test*, gconstpointer)
41{
42 WebKitSettings* settings = webkit_settings_new();
43
44 // JavaScript is enabled by default.
45 g_assert_true(webkit_settings_get_enable_javascript(settings));
46 webkit_settings_set_enable_javascript(settings, FALSE);
47 g_assert_false(webkit_settings_get_enable_javascript(settings));
48
49 // By default auto-load-image is true.
50 g_assert_true(webkit_settings_get_auto_load_images(settings));
51 webkit_settings_set_auto_load_images(settings, FALSE);
52 g_assert_false(webkit_settings_get_auto_load_images(settings));
53
54 // load-icons-ignoring-image-load-setting is false by default.
55 g_assert_false(webkit_settings_get_load_icons_ignoring_image_load_setting(settings));
56 webkit_settings_set_load_icons_ignoring_image_load_setting(settings, TRUE);
57 g_assert_true(webkit_settings_get_load_icons_ignoring_image_load_setting(settings));
58
59 // Offline application cache is true by default.
60 g_assert_true(webkit_settings_get_enable_offline_web_application_cache(settings));
61 webkit_settings_set_enable_offline_web_application_cache(settings, FALSE);
62 g_assert_false(webkit_settings_get_enable_offline_web_application_cache(settings));
63
64 // Local storage is enable by default.
65 g_assert_true(webkit_settings_get_enable_html5_local_storage(settings));
66 webkit_settings_set_enable_html5_local_storage(settings, FALSE);
67 g_assert_false(webkit_settings_get_enable_html5_local_storage(settings));
68
69 // HTML5 database is enabled by default.
70 g_assert_true(webkit_settings_get_enable_html5_database(settings));
71 webkit_settings_set_enable_html5_database(settings, FALSE);
72 g_assert_false(webkit_settings_get_enable_html5_database(settings));
73
74 // XSS Auditor is enabled by default.
75 g_assert_true(webkit_settings_get_enable_xss_auditor(settings));
76 webkit_settings_set_enable_xss_auditor(settings, FALSE);
77 g_assert_false(webkit_settings_get_enable_xss_auditor(settings));
78
79 // Frame flattening is disabled by default.
80 g_assert_false(webkit_settings_get_enable_frame_flattening(settings));
81 webkit_settings_set_enable_frame_flattening(settings, TRUE);
82 g_assert_true(webkit_settings_get_enable_frame_flattening(settings));
83
84 // Plugins are enabled by default.
85 g_assert_true(webkit_settings_get_enable_plugins(settings));
86 webkit_settings_set_enable_plugins(settings, FALSE);
87 g_assert_false(webkit_settings_get_enable_plugins(settings));
88
89 // Java is enabled by default.
90 g_assert_true(webkit_settings_get_enable_java(settings));
91 webkit_settings_set_enable_java(settings, FALSE);
92 g_assert_false(webkit_settings_get_enable_java(settings));
93
94 // By default, JavaScript can open windows automatically is disabled.
95 g_assert_false(webkit_settings_get_javascript_can_open_windows_automatically(settings));
96 webkit_settings_set_javascript_can_open_windows_automatically(settings, TRUE);
97 g_assert_true(webkit_settings_get_javascript_can_open_windows_automatically(settings));
98
99 // By default hyper link auditing is disabled.
100 g_assert_false(webkit_settings_get_enable_hyperlink_auditing(settings));
101 webkit_settings_set_enable_hyperlink_auditing(settings, TRUE);
102 g_assert_true(webkit_settings_get_enable_hyperlink_auditing(settings));
103
104 // Default font family is "sans-serif".
105 g_assert_cmpstr(webkit_settings_get_default_font_family(settings), ==, "sans-serif");
106 webkit_settings_set_default_font_family(settings, "monospace");
107 g_assert_cmpstr(webkit_settings_get_default_font_family(settings), ==, "monospace");
108
109 // Default monospace font family font family is "monospace".
110 g_assert_cmpstr(webkit_settings_get_monospace_font_family(settings), ==, "monospace");
111 webkit_settings_set_monospace_font_family(settings, "sans-serif");
112 g_assert_cmpstr(webkit_settings_get_monospace_font_family(settings), ==, "sans-serif");
113
114 // Default serif font family is "serif".
115 g_assert_cmpstr(webkit_settings_get_serif_font_family(settings), ==, "serif");
116 webkit_settings_set_serif_font_family(settings, "sans-serif");
117 g_assert_cmpstr(webkit_settings_get_serif_font_family(settings), ==, "sans-serif");
118
119 // Default sans serif font family is "sans-serif".
120 g_assert_cmpstr(webkit_settings_get_sans_serif_font_family(settings), ==, "sans-serif");
121 webkit_settings_set_sans_serif_font_family(settings, "serif");
122 g_assert_cmpstr(webkit_settings_get_sans_serif_font_family(settings), ==, "serif");
123
124 // Default cursive font family "serif".
125 g_assert_cmpstr(webkit_settings_get_cursive_font_family(settings), ==, "serif");
126 webkit_settings_set_cursive_font_family(settings, "sans-serif");
127 g_assert_cmpstr(webkit_settings_get_cursive_font_family(settings), ==, "sans-serif");
128
129 // Default fantasy font family is "serif".
130 g_assert_cmpstr(webkit_settings_get_fantasy_font_family(settings), ==, "serif");
131 webkit_settings_set_fantasy_font_family(settings, "sans-serif");
132 g_assert_cmpstr(webkit_settings_get_fantasy_font_family(settings), ==, "sans-serif");
133
134 // Default pictograph font family is "serif".
135 g_assert_cmpstr(webkit_settings_get_pictograph_font_family(settings), ==, "serif");
136 webkit_settings_set_pictograph_font_family(settings, "sans-serif");
137 g_assert_cmpstr(webkit_settings_get_pictograph_font_family(settings), ==, "sans-serif");
138
139 // Default font size is 16.
140 g_assert_cmpuint(webkit_settings_get_default_font_size(settings), ==, 16);
141 webkit_settings_set_default_font_size(settings, 14);
142 g_assert_cmpuint(webkit_settings_get_default_font_size(settings), ==, 14);
143
144 // Default monospace font size is 13.
145 g_assert_cmpuint(webkit_settings_get_default_monospace_font_size(settings), ==, 13);
146 webkit_settings_set_default_monospace_font_size(settings, 10);
147 g_assert_cmpuint(webkit_settings_get_default_monospace_font_size(settings), ==, 10);
148
149 // Default minimum font size is 0.
150 g_assert_cmpuint(webkit_settings_get_minimum_font_size(settings), ==, 0);
151 webkit_settings_set_minimum_font_size(settings, 7);
152 g_assert_cmpuint(webkit_settings_get_minimum_font_size(settings), ==, 7);
153
154 // Test conversion between pixels and points. Use a standard DPI of 96.
155 // Set DPI explicitly to avoid the tests failing for users that use a
156 // different default DPI. This doesn't affect the system's DPI outside
157 // of the tests scope, so we don't need to change it back to the original
158 // value. We can control DPI only on GTK. On WPE, WebCore defaults it to 96.
159#if PLATFORM(GTK)
160 GtkSettings* gtkSettings = gtk_settings_get_default();
161 if (gtkSettings)
162 g_object_set(gtkSettings, "gtk-xft-dpi", 96 * 1024, nullptr);
163
164 // At 96 DPI, 9 points is 12 pixels and 24 points is 32 pixels.
165 g_assert_cmpuint(webkit_settings_font_size_to_pixels(9), ==, 12);
166 g_assert_cmpuint(webkit_settings_font_size_to_pixels(24), ==, 32);
167
168 // At 96 DPI, 8 pixels is 6 points and 24 pixels is 18 points.
169 g_assert_cmpuint(webkit_settings_font_size_to_points(8), ==, 6);
170 g_assert_cmpuint(webkit_settings_font_size_to_points(24), ==, 18);
171
172 // Test font size on DPI change. The font size value in pixels should scale
173 // accordingly, while the font size value in points should remain the same.
174 if (gtkSettings) {
175 // At 96 DPI, 20 pixels is 15 points.
176 webkit_settings_set_default_font_size(settings, 20);
177 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_font_size(settings)), ==, 15);
178 // At 96 DPI, 16 pixels is 12 points.
179 webkit_settings_set_default_monospace_font_size(settings, 16);
180 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_monospace_font_size(settings)), ==, 12);
181
182 // Set DPI to 120. The scaling factor is 120 / 96 == 1.25.
183 g_object_set(gtkSettings, "gtk-xft-dpi", 120 * 1024, nullptr);
184 g_assert_cmpuint(webkit_settings_get_default_font_size(settings), ==, 25);
185 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_font_size(settings)), ==, 15);
186 g_assert_cmpuint(webkit_settings_get_default_monospace_font_size(settings), ==, 20);
187 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_monospace_font_size(settings)), ==, 12);
188
189 // Set DPI back to 96. The scaling factor is 96 / 120 == 0.8.
190 g_object_set(gtkSettings, "gtk-xft-dpi", 96 * 1024, nullptr);
191 g_assert_cmpuint(webkit_settings_get_default_font_size(settings), ==, 20);
192 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_font_size(settings)), ==, 15);
193 g_assert_cmpuint(webkit_settings_get_default_monospace_font_size(settings), ==, 16);
194 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_monospace_font_size(settings)), ==, 12);
195 }
196#endif
197
198 // Default charset is "iso-8859-1".
199 g_assert_cmpstr(webkit_settings_get_default_charset(settings), ==, "iso-8859-1");
200 webkit_settings_set_default_charset(settings, "utf8");
201 g_assert_cmpstr(webkit_settings_get_default_charset(settings), ==, "utf8");
202
203#if PLATFORM(GTK)
204 G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
205 g_assert_false(webkit_settings_get_enable_private_browsing(settings));
206 webkit_settings_set_enable_private_browsing(settings, TRUE);
207 g_assert_true(webkit_settings_get_enable_private_browsing(settings));
208 G_GNUC_END_IGNORE_DEPRECATIONS;
209#endif
210
211 g_assert_false(webkit_settings_get_enable_developer_extras(settings));
212 webkit_settings_set_enable_developer_extras(settings, TRUE);
213 g_assert_true(webkit_settings_get_enable_developer_extras(settings));
214
215 g_assert_true(webkit_settings_get_enable_resizable_text_areas(settings));
216 webkit_settings_set_enable_resizable_text_areas(settings, FALSE);
217 g_assert_false(webkit_settings_get_enable_resizable_text_areas(settings));
218
219 g_assert_true(webkit_settings_get_enable_tabs_to_links(settings));
220 webkit_settings_set_enable_tabs_to_links(settings, FALSE);
221 g_assert_false(webkit_settings_get_enable_tabs_to_links(settings));
222
223 g_assert_false(webkit_settings_get_enable_dns_prefetching(settings));
224 webkit_settings_set_enable_dns_prefetching(settings, TRUE);
225 g_assert_true(webkit_settings_get_enable_dns_prefetching(settings));
226
227 // Caret browsing is disabled by default.
228 g_assert_false(webkit_settings_get_enable_caret_browsing(settings));
229 webkit_settings_set_enable_caret_browsing(settings, TRUE);
230 g_assert_true(webkit_settings_get_enable_caret_browsing(settings));
231
232 // Fullscreen JavaScript API is enabled by default.
233 g_assert_true(webkit_settings_get_enable_fullscreen(settings));
234 webkit_settings_set_enable_fullscreen(settings, FALSE);
235 g_assert_false(webkit_settings_get_enable_fullscreen(settings));
236
237 // Print backgrounds is enabled by default
238 g_assert_true(webkit_settings_get_print_backgrounds(settings));
239 webkit_settings_set_print_backgrounds(settings, FALSE);
240 g_assert_false(webkit_settings_get_print_backgrounds(settings));
241
242 // WebAudio is disabled by default.
243 g_assert_false(webkit_settings_get_enable_webaudio(settings));
244 webkit_settings_set_enable_webaudio(settings, TRUE);
245 g_assert_true(webkit_settings_get_enable_webaudio(settings));
246
247 // WebGL is disabled by default.
248 g_assert_false(webkit_settings_get_enable_webgl(settings));
249 webkit_settings_set_enable_webgl(settings, TRUE);
250 g_assert_true(webkit_settings_get_enable_webgl(settings));
251
252 // Allow Modal Dialogs is disabled by default.
253 g_assert_false(webkit_settings_get_allow_modal_dialogs(settings));
254 webkit_settings_set_allow_modal_dialogs(settings, TRUE);
255 g_assert_true(webkit_settings_get_allow_modal_dialogs(settings));
256
257 // Zoom text only is disabled by default.
258 g_assert_false(webkit_settings_get_zoom_text_only(settings));
259 webkit_settings_set_zoom_text_only(settings, TRUE);
260 g_assert_true(webkit_settings_get_zoom_text_only(settings));
261
262 // By default, JavaScript cannot access the clipboard.
263 g_assert_false(webkit_settings_get_javascript_can_access_clipboard(settings));
264 webkit_settings_set_javascript_can_access_clipboard(settings, TRUE);
265 g_assert_true(webkit_settings_get_javascript_can_access_clipboard(settings));
266
267 // By default, media playback doesn't require user gestures.
268 g_assert_false(webkit_settings_get_media_playback_requires_user_gesture(settings));
269 webkit_settings_set_media_playback_requires_user_gesture(settings, TRUE);
270 g_assert_true(webkit_settings_get_media_playback_requires_user_gesture(settings));
271
272 // By default, inline media playback is allowed
273 g_assert_true(webkit_settings_get_media_playback_allows_inline(settings));
274 webkit_settings_set_media_playback_allows_inline(settings, FALSE);
275 g_assert_false(webkit_settings_get_media_playback_allows_inline(settings));
276
277 // By default, debug indicators are disabled.
278 g_assert_false(webkit_settings_get_draw_compositing_indicators(settings));
279 webkit_settings_set_draw_compositing_indicators(settings, TRUE);
280 g_assert_true(webkit_settings_get_draw_compositing_indicators(settings));
281
282 // By default, site specific quirks are enabled.
283 g_assert_true(webkit_settings_get_enable_site_specific_quirks(settings));
284 webkit_settings_set_enable_site_specific_quirks(settings, FALSE);
285 g_assert_false(webkit_settings_get_enable_site_specific_quirks(settings));
286
287 // By default, page cache is enabled.
288 g_assert_true(webkit_settings_get_enable_page_cache(settings));
289 webkit_settings_set_enable_page_cache(settings, FALSE);
290 g_assert_false(webkit_settings_get_enable_page_cache(settings));
291
292 // By default, smooth scrolling is disabled.
293 g_assert_false(webkit_settings_get_enable_smooth_scrolling(settings));
294 webkit_settings_set_enable_smooth_scrolling(settings, TRUE);
295 g_assert_true(webkit_settings_get_enable_smooth_scrolling(settings));
296
297 // By default, accelerated 2D canvas is disabled.
298 g_assert_false(webkit_settings_get_enable_accelerated_2d_canvas(settings));
299 webkit_settings_set_enable_accelerated_2d_canvas(settings, TRUE);
300 g_assert_true(webkit_settings_get_enable_accelerated_2d_canvas(settings));
301
302 // By default, writing of console messages to stdout is disabled.
303 g_assert_false(webkit_settings_get_enable_write_console_messages_to_stdout(settings));
304 webkit_settings_set_enable_write_console_messages_to_stdout(settings, TRUE);
305 g_assert_true(webkit_settings_get_enable_write_console_messages_to_stdout(settings));
306
307 // MediaStream is disabled by default.
308 g_assert_false(webkit_settings_get_enable_media_stream(settings));
309 webkit_settings_set_enable_media_stream(settings, TRUE);
310 g_assert_true(webkit_settings_get_enable_media_stream(settings));
311
312 // By default, SpatialNavigation is disabled
313 g_assert_false(webkit_settings_get_enable_spatial_navigation(settings));
314 webkit_settings_set_enable_spatial_navigation(settings, TRUE);
315 g_assert_true(webkit_settings_get_enable_spatial_navigation(settings));
316
317 // MediaSource is enabled by default
318 g_assert_true(webkit_settings_get_enable_mediasource(settings));
319 webkit_settings_set_enable_mediasource(settings, FALSE);
320 g_assert_false(webkit_settings_get_enable_mediasource(settings));
321
322 // EncryptedMedia is disabled by default
323 g_assert_false(webkit_settings_get_enable_encrypted_media(settings));
324 webkit_settings_set_enable_encrypted_media(settings, TRUE);
325 g_assert_true(webkit_settings_get_enable_encrypted_media(settings));
326
327 // MediaCapabilities is disabled by default
328 g_assert_false(webkit_settings_get_enable_media_capabilities(settings));
329 webkit_settings_set_enable_media_capabilities(settings, TRUE);
330 g_assert_true(webkit_settings_get_enable_media_capabilities(settings));
331
332 // File access from file URLs is not allowed by default.
333 g_assert_false(webkit_settings_get_allow_file_access_from_file_urls(settings));
334 webkit_settings_set_allow_file_access_from_file_urls(settings, TRUE);
335 g_assert_true(webkit_settings_get_allow_file_access_from_file_urls(settings));
336
337 // Universal access from file URLs is not allowed by default.
338 g_assert_false(webkit_settings_get_allow_universal_access_from_file_urls(settings));
339 webkit_settings_set_allow_universal_access_from_file_urls(settings, TRUE);
340 g_assert_true(webkit_settings_get_allow_universal_access_from_file_urls(settings));
341
342 // Media is enabled by default.
343 g_assert_true(webkit_settings_get_enable_media(settings));
344 webkit_settings_set_enable_media(settings, FALSE);
345 g_assert_false(webkit_settings_get_enable_media(settings));
346
347#if PLATFORM(GTK)
348 // Ondemand is the default hardware acceleration policy.
349 g_assert_cmpuint(webkit_settings_get_hardware_acceleration_policy(settings), ==, WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND);
350 webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER);
351 g_assert_cmpuint(webkit_settings_get_hardware_acceleration_policy(settings), ==, WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER);
352 webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_ALWAYS);
353 g_assert_cmpuint(webkit_settings_get_hardware_acceleration_policy(settings), ==, WEBKIT_HARDWARE_ACCELERATION_POLICY_ALWAYS);
354 webkit_settings_set_hardware_acceleration_policy(settings, WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND);
355 g_assert_cmpuint(webkit_settings_get_hardware_acceleration_policy(settings), ==, WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND);
356
357 // Back-forward navigation gesture is disabled by default
358 g_assert_false(webkit_settings_get_enable_back_forward_navigation_gestures(settings));
359 webkit_settings_set_enable_back_forward_navigation_gestures(settings, TRUE);
360 g_assert_true(webkit_settings_get_enable_back_forward_navigation_gestures(settings));
361#endif
362
363 // JavaScript markup is enabled by default.
364 g_assert_true(webkit_settings_get_enable_javascript_markup(settings));
365 webkit_settings_set_enable_javascript_markup(settings, FALSE);
366 g_assert_false(webkit_settings_get_enable_javascript_markup(settings));
367
368 g_object_unref(G_OBJECT(settings));
369}
370
371void testWebKitSettingsNewWithSettings(Test* test, gconstpointer)
372{
373 GRefPtr<WebKitSettings> settings = adoptGRef(webkit_settings_new_with_settings(
374 "enable-javascript", FALSE,
375 "auto-load-images", FALSE,
376 "load-icons-ignoring-image-load-setting", TRUE,
377 nullptr));
378 test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(settings.get()));
379 g_assert_false(webkit_settings_get_enable_javascript(settings.get()));
380 g_assert_false(webkit_settings_get_auto_load_images(settings.get()));
381 g_assert_true(webkit_settings_get_load_icons_ignoring_image_load_setting(settings.get()));
382}
383
384#if PLATFORM(GTK)
385static CString convertWebViewMainResourceDataToCString(WebViewTest* test)
386{
387 size_t mainResourceDataSize = 0;
388 const char* mainResourceData = test->mainResourceData(mainResourceDataSize);
389 return CString(mainResourceData, mainResourceDataSize);
390}
391
392static void assertThatUserAgentIsSentInHeaders(WebViewTest* test, const CString& userAgent)
393{
394 test->loadURI(gServer->getURIForPath("/").data());
395 test->waitUntilLoadFinished();
396 ASSERT_CMP_CSTRING(convertWebViewMainResourceDataToCString(test), ==, userAgent);
397}
398
399static void testWebKitSettingsUserAgent(WebViewTest* test, gconstpointer)
400{
401 GRefPtr<WebKitSettings> settings = adoptGRef(webkit_settings_new());
402 CString defaultUserAgent = webkit_settings_get_user_agent(settings.get());
403 webkit_web_view_set_settings(test->m_webView, settings.get());
404
405 g_assert_nonnull(g_strstr_len(defaultUserAgent.data(), -1, "AppleWebKit"));
406 g_assert_nonnull(g_strstr_len(defaultUserAgent.data(), -1, "Safari"));
407
408 webkit_settings_set_user_agent(settings.get(), 0);
409 g_assert_cmpstr(defaultUserAgent.data(), ==, webkit_settings_get_user_agent(settings.get()));
410 assertThatUserAgentIsSentInHeaders(test, defaultUserAgent.data());
411
412 webkit_settings_set_user_agent(settings.get(), "");
413 g_assert_cmpstr(defaultUserAgent.data(), ==, webkit_settings_get_user_agent(settings.get()));
414
415 const char* funkyUserAgent = "Funky!";
416 webkit_settings_set_user_agent(settings.get(), funkyUserAgent);
417 g_assert_cmpstr(funkyUserAgent, ==, webkit_settings_get_user_agent(settings.get()));
418 assertThatUserAgentIsSentInHeaders(test, funkyUserAgent);
419
420 webkit_settings_set_user_agent_with_application_details(settings.get(), "WebKitGTK+", 0);
421 const char* userAgentWithNullVersion = webkit_settings_get_user_agent(settings.get());
422 g_assert_cmpstr(g_strstr_len(userAgentWithNullVersion, -1, defaultUserAgent.data()), ==, userAgentWithNullVersion);
423 g_assert_nonnull(g_strstr_len(userAgentWithNullVersion, -1, "WebKitGTK+"));
424
425 webkit_settings_set_user_agent_with_application_details(settings.get(), "WebKitGTK+", "");
426 g_assert_cmpstr(webkit_settings_get_user_agent(settings.get()), ==, userAgentWithNullVersion);
427
428 webkit_settings_set_user_agent_with_application_details(settings.get(), "WebCatGTK+", "3.4.5");
429 const char* newUserAgent = webkit_settings_get_user_agent(settings.get());
430 g_assert_nonnull(g_strstr_len(newUserAgent, -1, "3.4.5"));
431 g_assert_nonnull(g_strstr_len(newUserAgent, -1, "WebCatGTK+"));
432
433 GUniquePtr<char> applicationUserAgent(g_strdup_printf("%s %s", defaultUserAgent.data(), "WebCatGTK+/3.4.5"));
434 g_assert_cmpstr(applicationUserAgent.get(), ==, webkit_settings_get_user_agent(settings.get()));
435}
436#endif // PLATFORM(GTK)
437
438static void testWebKitSettingsJavaScriptMarkup(WebViewTest* test, gconstpointer)
439{
440 webkit_settings_set_enable_javascript_markup(webkit_web_view_get_settings(test->m_webView), FALSE);
441 static const char* html =
442 "<html>"
443 " <head>"
444 " <title>No JavaScript allowed</title>"
445 " <script>document.title = 'JavaScript allowed from head script'</script>"
446 " </head>"
447 " <body onload='document.title = \"JavaScript allowed from body onload attribute\"'>"
448 " <p>No JavaScript markup should be allowed</p>"
449 " <script>document.title = 'JavaScript allowed from body script'</script>"
450 " </body>"
451 "</html>";
452 test->loadHtml(html, nullptr);
453 test->waitUntilLoadFinished();
454
455 g_assert_cmpstr(webkit_web_view_get_title(test->m_webView), ==, "No JavaScript allowed");
456 auto* jsResult = test->runJavaScriptAndWaitUntilFinished("document.getElementsByTagName('script').length", nullptr);
457 g_assert(jsResult);
458 g_assert_cmpfloat(WebViewTest::javascriptResultToNumber(jsResult), ==, 0);
459
460 webkit_settings_set_enable_javascript_markup(webkit_web_view_get_settings(test->m_webView), TRUE);
461}
462
463static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
464{
465 if (message->method != SOUP_METHOD_GET) {
466 soup_message_set_status(message, SOUP_STATUS_NOT_IMPLEMENTED);
467 return;
468 }
469
470 if (g_str_equal(path, "/")) {
471 const char* userAgent = soup_message_headers_get_one(message->request_headers, "User-Agent");
472 soup_message_set_status(message, SOUP_STATUS_OK);
473 soup_message_body_append(message->response_body, SOUP_MEMORY_COPY, userAgent, strlen(userAgent));
474 soup_message_body_complete(message->response_body);
475 } else
476 soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
477}
478
479void beforeAll()
480{
481 gServer = new WebKitTestServer();
482 gServer->run(serverCallback);
483
484 Test::add("WebKitSettings", "webkit-settings", testWebKitSettings);
485 Test::add("WebKitSettings", "new-with-settings", testWebKitSettingsNewWithSettings);
486#if PLATFORM(GTK)
487 WebViewTest::add("WebKitSettings", "user-agent", testWebKitSettingsUserAgent);
488#endif
489 WebViewTest::add("WebKitSettings", "javascript-markup", testWebKitSettingsJavaScriptMarkup);
490}
491
492void afterAll()
493{
494 delete gServer;
495}
496
497