1/*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "WKPreferences.h"
28#include "WKPreferencesPrivate.h"
29
30#include "WKAPICast.h"
31#include "WebPreferences.h"
32#include <WebCore/Settings.h>
33#include <wtf/PassRefPtr.h>
34#include <wtf/RefPtr.h>
35
36using namespace WebKit;
37
38WKTypeID WKPreferencesGetTypeID()
39{
40    return toAPI(WebPreferences::APIType);
41}
42
43WKPreferencesRef WKPreferencesCreate()
44{
45    RefPtr<WebPreferences> preferences = WebPreferences::create();
46    return toAPI(preferences.release().leakRef());
47}
48
49WKPreferencesRef WKPreferencesCreateWithIdentifier(WKStringRef identifierRef)
50{
51    RefPtr<WebPreferences> preferences = WebPreferences::create(toWTFString(identifierRef));
52    return toAPI(preferences.release().releaseRef());
53}
54
55void WKPreferencesSetJavaScriptEnabled(WKPreferencesRef preferencesRef, bool javaScriptEnabled)
56{
57    toImpl(preferencesRef)->setJavaScriptEnabled(javaScriptEnabled);
58}
59
60bool WKPreferencesGetJavaScriptEnabled(WKPreferencesRef preferencesRef)
61{
62    return toImpl(preferencesRef)->javaScriptEnabled();
63}
64
65void WKPreferencesSetLoadsImagesAutomatically(WKPreferencesRef preferencesRef, bool loadsImagesAutomatically)
66{
67    toImpl(preferencesRef)->setLoadsImagesAutomatically(loadsImagesAutomatically);
68}
69
70bool WKPreferencesGetLoadsImagesAutomatically(WKPreferencesRef preferencesRef)
71{
72    return toImpl(preferencesRef)->loadsImagesAutomatically();
73}
74
75void WKPreferencesSetLoadsSiteIconsIgnoringImageLoadingPreference(WKPreferencesRef preferencesRef, bool loadsSiteIconsIgnoringImageLoadingPreference)
76{
77    toImpl(preferencesRef)->setLoadsSiteIconsIgnoringImageLoadingPreference(loadsSiteIconsIgnoringImageLoadingPreference);
78}
79
80bool WKPreferencesGetLoadsSiteIconsIgnoringImageLoadingPreference(WKPreferencesRef preferencesRef)
81{
82    return toImpl(preferencesRef)->loadsSiteIconsIgnoringImageLoadingPreference();
83}
84
85void WKPreferencesSetOfflineWebApplicationCacheEnabled(WKPreferencesRef preferencesRef, bool offlineWebApplicationCacheEnabled)
86{
87    toImpl(preferencesRef)->setOfflineWebApplicationCacheEnabled(offlineWebApplicationCacheEnabled);
88}
89
90bool WKPreferencesGetOfflineWebApplicationCacheEnabled(WKPreferencesRef preferencesRef)
91{
92    return toImpl(preferencesRef)->offlineWebApplicationCacheEnabled();
93}
94
95void WKPreferencesSetLocalStorageEnabled(WKPreferencesRef preferencesRef, bool localStorageEnabled)
96{
97    toImpl(preferencesRef)->setLocalStorageEnabled(localStorageEnabled);
98}
99
100bool WKPreferencesGetLocalStorageEnabled(WKPreferencesRef preferencesRef)
101{
102    return toImpl(preferencesRef)->localStorageEnabled();
103}
104
105void WKPreferencesSetDatabasesEnabled(WKPreferencesRef preferencesRef, bool databasesEnabled)
106{
107    toImpl(preferencesRef)->setDatabasesEnabled(databasesEnabled);
108}
109
110bool WKPreferencesGetDatabasesEnabled(WKPreferencesRef preferencesRef)
111{
112    return toImpl(preferencesRef)->databasesEnabled();
113}
114
115void WKPreferencesSetXSSAuditorEnabled(WKPreferencesRef preferencesRef, bool xssAuditorEnabled)
116{
117    toImpl(preferencesRef)->setXSSAuditorEnabled(xssAuditorEnabled);
118}
119
120bool WKPreferencesGetXSSAuditorEnabled(WKPreferencesRef preferencesRef)
121{
122    return toImpl(preferencesRef)->xssAuditorEnabled();
123}
124
125void WKPreferencesSetFrameFlatteningEnabled(WKPreferencesRef preferencesRef, bool frameFlatteningEnabled)
126{
127    toImpl(preferencesRef)->setFrameFlatteningEnabled(frameFlatteningEnabled);
128}
129
130bool WKPreferencesGetFrameFlatteningEnabled(WKPreferencesRef preferencesRef)
131{
132    return toImpl(preferencesRef)->frameFlatteningEnabled();
133}
134
135void WKPreferencesSetPluginsEnabled(WKPreferencesRef preferencesRef, bool pluginsEnabled)
136{
137    toImpl(preferencesRef)->setPluginsEnabled(pluginsEnabled);
138}
139
140bool WKPreferencesGetPluginsEnabled(WKPreferencesRef preferencesRef)
141{
142    return toImpl(preferencesRef)->pluginsEnabled();
143}
144
145void WKPreferencesSetJavaEnabled(WKPreferencesRef preferencesRef, bool javaEnabled)
146{
147    toImpl(preferencesRef)->setJavaEnabled(javaEnabled);
148}
149
150bool WKPreferencesGetJavaEnabled(WKPreferencesRef preferencesRef)
151{
152    return toImpl(preferencesRef)->javaEnabled();
153}
154
155void WKPreferencesSetJavaScriptCanOpenWindowsAutomatically(WKPreferencesRef preferencesRef, bool javaScriptCanOpenWindowsAutomatically)
156{
157    toImpl(preferencesRef)->setJavaScriptCanOpenWindowsAutomatically(javaScriptCanOpenWindowsAutomatically);
158}
159
160bool WKPreferencesGetJavaScriptCanOpenWindowsAutomatically(WKPreferencesRef preferencesRef)
161{
162    return toImpl(preferencesRef)->javaScriptCanOpenWindowsAutomatically();
163}
164
165void WKPreferencesSetHyperlinkAuditingEnabled(WKPreferencesRef preferencesRef, bool hyperlinkAuditingEnabled)
166{
167    toImpl(preferencesRef)->setHyperlinkAuditingEnabled(hyperlinkAuditingEnabled);
168}
169
170bool WKPreferencesGetHyperlinkAuditingEnabled(WKPreferencesRef preferencesRef)
171{
172    return toImpl(preferencesRef)->hyperlinkAuditingEnabled();
173}
174
175void WKPreferencesSetStandardFontFamily(WKPreferencesRef preferencesRef, WKStringRef family)
176{
177    toImpl(preferencesRef)->setStandardFontFamily(toWTFString(family));
178}
179
180WKStringRef WKPreferencesCopyStandardFontFamily(WKPreferencesRef preferencesRef)
181{
182    return toCopiedAPI(toImpl(preferencesRef)->standardFontFamily());
183}
184
185void WKPreferencesSetFixedFontFamily(WKPreferencesRef preferencesRef, WKStringRef family)
186{
187    toImpl(preferencesRef)->setFixedFontFamily(toWTFString(family));
188}
189
190WKStringRef WKPreferencesCopyFixedFontFamily(WKPreferencesRef preferencesRef)
191{
192    return toCopiedAPI(toImpl(preferencesRef)->fixedFontFamily());
193}
194
195void WKPreferencesSetSerifFontFamily(WKPreferencesRef preferencesRef, WKStringRef family)
196{
197    toImpl(preferencesRef)->setSerifFontFamily(toWTFString(family));
198}
199
200WKStringRef WKPreferencesCopySerifFontFamily(WKPreferencesRef preferencesRef)
201{
202    return toCopiedAPI(toImpl(preferencesRef)->serifFontFamily());
203}
204
205void WKPreferencesSetSansSerifFontFamily(WKPreferencesRef preferencesRef, WKStringRef family)
206{
207    toImpl(preferencesRef)->setSansSerifFontFamily(toWTFString(family));
208}
209
210WKStringRef WKPreferencesCopySansSerifFontFamily(WKPreferencesRef preferencesRef)
211{
212    return toCopiedAPI(toImpl(preferencesRef)->sansSerifFontFamily());
213}
214
215void WKPreferencesSetCursiveFontFamily(WKPreferencesRef preferencesRef, WKStringRef family)
216{
217    toImpl(preferencesRef)->setCursiveFontFamily(toWTFString(family));
218}
219
220WKStringRef WKPreferencesCopyCursiveFontFamily(WKPreferencesRef preferencesRef)
221{
222    return toCopiedAPI(toImpl(preferencesRef)->cursiveFontFamily());
223}
224
225void WKPreferencesSetFantasyFontFamily(WKPreferencesRef preferencesRef, WKStringRef family)
226{
227    toImpl(preferencesRef)->setFantasyFontFamily(toWTFString(family));
228}
229
230WKStringRef WKPreferencesCopyFantasyFontFamily(WKPreferencesRef preferencesRef)
231{
232    return toCopiedAPI(toImpl(preferencesRef)->fantasyFontFamily());
233}
234
235void WKPreferencesSetDefaultFontSize(WKPreferencesRef preferencesRef, uint32_t size)
236{
237    toImpl(preferencesRef)->setDefaultFontSize(size);
238}
239
240uint32_t WKPreferencesGetDefaultFontSize(WKPreferencesRef preferencesRef)
241{
242    return toImpl(preferencesRef)->defaultFontSize();
243}
244
245void WKPreferencesSetDefaultFixedFontSize(WKPreferencesRef preferencesRef, uint32_t size)
246{
247    toImpl(preferencesRef)->setDefaultFixedFontSize(size);
248}
249
250uint32_t WKPreferencesGetDefaultFixedFontSize(WKPreferencesRef preferencesRef)
251{
252    return toImpl(preferencesRef)->defaultFixedFontSize();
253}
254
255void WKPreferencesSetMinimumFontSize(WKPreferencesRef preferencesRef, uint32_t size)
256{
257    toImpl(preferencesRef)->setMinimumFontSize(size);
258}
259
260uint32_t WKPreferencesGetMinimumFontSize(WKPreferencesRef preferencesRef)
261{
262    return toImpl(preferencesRef)->minimumFontSize();
263}
264
265void WKPreferencesSetEditableLinkBehavior(WKPreferencesRef preferencesRef, WKEditableLinkBehavior wkBehavior)
266{
267    toImpl(preferencesRef)->setEditableLinkBehavior(toEditableLinkBehavior(wkBehavior));
268}
269
270WKEditableLinkBehavior WKPreferencesGetEditableLinkBehavior(WKPreferencesRef preferencesRef)
271{
272    return toAPI(static_cast<WebCore::EditableLinkBehavior>(toImpl(preferencesRef)->editableLinkBehavior()));
273}
274
275void WKPreferencesSetDefaultTextEncodingName(WKPreferencesRef preferencesRef, WKStringRef name)
276{
277    toImpl(preferencesRef)->setDefaultTextEncodingName(toWTFString(name));
278}
279
280WKStringRef WKPreferencesCopyDefaultTextEncodingName(WKPreferencesRef preferencesRef)
281{
282    return toCopiedAPI(toImpl(preferencesRef)->defaultTextEncodingName());
283}
284
285void WKPreferencesSetPrivateBrowsingEnabled(WKPreferencesRef preferencesRef, bool enabled)
286{
287    toImpl(preferencesRef)->setPrivateBrowsingEnabled(enabled);
288}
289
290bool WKPreferencesGetPrivateBrowsingEnabled(WKPreferencesRef preferencesRef)
291{
292    return toImpl(preferencesRef)->privateBrowsingEnabled();
293}
294
295void WKPreferencesSetDeveloperExtrasEnabled(WKPreferencesRef preferencesRef, bool enabled)
296{
297    toImpl(preferencesRef)->setDeveloperExtrasEnabled(enabled);
298}
299
300bool WKPreferencesGetDeveloperExtrasEnabled(WKPreferencesRef preferencesRef)
301{
302    return toImpl(preferencesRef)->developerExtrasEnabled();
303}
304
305void WKPreferencesSetTextAreasAreResizable(WKPreferencesRef preferencesRef, bool resizable)
306{
307    toImpl(preferencesRef)->setTextAreasAreResizable(resizable);
308}
309
310bool WKPreferencesGetTextAreasAreResizable(WKPreferencesRef preferencesRef)
311{
312    return toImpl(preferencesRef)->textAreasAreResizable();
313}
314
315void WKPreferencesSetFontSmoothingLevel(WKPreferencesRef preferencesRef, WKFontSmoothingLevel wkLevel)
316{
317    toImpl(preferencesRef)->setFontSmoothingLevel(toFontSmoothingLevel(wkLevel));
318}
319
320WKFontSmoothingLevel WKPreferencesGetFontSmoothingLevel(WKPreferencesRef preferencesRef)
321{
322    return toAPI(static_cast<FontSmoothingLevel>(toImpl(preferencesRef)->fontSmoothingLevel()));
323}
324
325void WKPreferencesSetAcceleratedDrawingEnabled(WKPreferencesRef preferencesRef, bool flag)
326{
327    toImpl(preferencesRef)->setAcceleratedDrawingEnabled(flag);
328}
329
330bool WKPreferencesGetAcceleratedDrawingEnabled(WKPreferencesRef preferencesRef)
331{
332    return toImpl(preferencesRef)->acceleratedDrawingEnabled();
333}
334
335void WKPreferencesSetCanvasUsesAcceleratedDrawing(WKPreferencesRef preferencesRef, bool flag)
336{
337    toImpl(preferencesRef)->setCanvasUsesAcceleratedDrawing(flag);
338}
339
340bool WKPreferencesGetCanvasUsesAcceleratedDrawing(WKPreferencesRef preferencesRef)
341{
342    return toImpl(preferencesRef)->canvasUsesAcceleratedDrawing();
343}
344
345void WKPreferencesSetAcceleratedCompositingEnabled(WKPreferencesRef preferencesRef, bool flag)
346{
347    toImpl(preferencesRef)->setAcceleratedCompositingEnabled(flag);
348}
349
350bool WKPreferencesGetAcceleratedCompositingEnabled(WKPreferencesRef preferencesRef)
351{
352    return toImpl(preferencesRef)->acceleratedCompositingEnabled();
353}
354
355void WKPreferencesSetCompositingBordersVisible(WKPreferencesRef preferencesRef, bool flag)
356{
357    toImpl(preferencesRef)->setCompositingBordersVisible(flag);
358}
359
360bool WKPreferencesGetCompositingBordersVisible(WKPreferencesRef preferencesRef)
361{
362    return toImpl(preferencesRef)->compositingBordersVisible();
363}
364
365void WKPreferencesSetCompositingRepaintCountersVisible(WKPreferencesRef preferencesRef, bool flag)
366{
367    toImpl(preferencesRef)->setCompositingRepaintCountersVisible(flag);
368}
369
370bool WKPreferencesGetCompositingRepaintCountersVisible(WKPreferencesRef preferencesRef)
371{
372    return toImpl(preferencesRef)->compositingRepaintCountersVisible();
373}
374
375void WKPreferencesSetWebGLEnabled(WKPreferencesRef preferencesRef, bool flag)
376{
377    toImpl(preferencesRef)->setWebGLEnabled(flag);
378}
379
380bool WKPreferencesGetWebGLEnabled(WKPreferencesRef preferencesRef)
381{
382    return toImpl(preferencesRef)->webGLEnabled();
383}
384
385void WKPreferencesSetNeedsSiteSpecificQuirks(WKPreferencesRef preferencesRef, bool flag)
386{
387    toImpl(preferencesRef)->setNeedsSiteSpecificQuirks(flag);
388}
389
390bool WKPreferencesGetNeedsSiteSpecificQuirks(WKPreferencesRef preferencesRef)
391{
392    return toImpl(preferencesRef)->needsSiteSpecificQuirks();
393}
394
395void WKPreferencesSetForceFTPDirectoryListings(WKPreferencesRef preferencesRef, bool flag)
396{
397    toImpl(preferencesRef)->setForceFTPDirectoryListings(flag);
398}
399
400bool WKPreferencesGetForceFTPDirectoryListings(WKPreferencesRef preferencesRef)
401{
402    return toImpl(preferencesRef)->forceFTPDirectoryListings();
403}
404
405void WKPreferencesSetFTPDirectoryTemplatePath(WKPreferencesRef preferencesRef, WKStringRef pathRef)
406{
407    toImpl(preferencesRef)->setFTPDirectoryTemplatePath(toWTFString(pathRef));
408}
409
410WKStringRef WKPreferencesCopyFTPDirectoryTemplatePath(WKPreferencesRef preferencesRef)
411{
412    return toCopiedAPI(toImpl(preferencesRef)->ftpDirectoryTemplatePath());
413}
414
415void WKPreferencesSetTabsToLinks(WKPreferencesRef preferencesRef, bool tabsToLinks)
416{
417    toImpl(preferencesRef)->setTabsToLinks(tabsToLinks);
418}
419
420bool WKPreferencesGetTabsToLinks(WKPreferencesRef preferencesRef)
421{
422    return toImpl(preferencesRef)->tabsToLinks();
423}
424
425void WKPreferencesSetDNSPrefetchingEnabled(WKPreferencesRef preferencesRef, bool enabled)
426{
427    toImpl(preferencesRef)->setDNSPrefetchingEnabled(enabled);
428}
429
430bool WKPreferencesGetDNSPrefetchingEnabled(WKPreferencesRef preferencesRef)
431{
432    return toImpl(preferencesRef)->dnsPrefetchingEnabled();
433}
434
435void WKPreferencesSetAuthorAndUserStylesEnabled(WKPreferencesRef preferencesRef, bool enabled)
436{
437    toImpl(preferencesRef)->setAuthorAndUserStylesEnabled(enabled);
438}
439
440bool WKPreferencesGetAuthorAndUserStylesEnabled(WKPreferencesRef preferencesRef)
441{
442    return toImpl(preferencesRef)->authorAndUserStylesEnabled();
443}
444
445void WKPreferencesSetShouldPrintBackgrounds(WKPreferencesRef preferencesRef, bool flag)
446{
447    toImpl(preferencesRef)->setShouldPrintBackgrounds(flag);
448}
449
450bool WKPreferencesGetShouldPrintBackgrounds(WKPreferencesRef preferencesRef)
451{
452    return toImpl(preferencesRef)->shouldPrintBackgrounds();
453}
454
455void WKPreferencesSetWebArchiveDebugModeEnabled(WKPreferencesRef preferencesRef, bool enabled)
456{
457    toImpl(preferencesRef)->setWebArchiveDebugModeEnabled(enabled);
458}
459
460bool WKPreferencesGetWebArchiveDebugModeEnabled(WKPreferencesRef preferencesRef)
461{
462    return toImpl(preferencesRef)->webArchiveDebugModeEnabled();
463}
464
465void WKPreferencesSetLocalFileContentSniffingEnabled(WKPreferencesRef preferencesRef, bool enabled)
466{
467    toImpl(preferencesRef)->setLocalFileContentSniffingEnabled(enabled);
468}
469
470bool WKPreferencesGetLocalFileContentSniffingEnabled(WKPreferencesRef preferencesRef)
471{
472    return toImpl(preferencesRef)->localFileContentSniffingEnabled();
473}
474
475void WKPreferencesSetPageCacheEnabled(WKPreferencesRef preferencesRef, bool enabled)
476{
477    toImpl(preferencesRef)->setUsesPageCache(enabled);
478}
479
480bool WKPreferencesGetPageCacheEnabled(WKPreferencesRef preferencesRef)
481{
482    return toImpl(preferencesRef)->usesPageCache();
483}
484
485void WKPreferencesSetPaginateDuringLayoutEnabled(WKPreferencesRef preferencesRef, bool enabled)
486{
487    toImpl(preferencesRef)->setPaginateDuringLayoutEnabled(enabled);
488}
489
490bool WKPreferencesGetPaginateDuringLayoutEnabled(WKPreferencesRef preferencesRef)
491{
492    return toImpl(preferencesRef)->paginateDuringLayoutEnabled();
493}
494
495void WKPreferencesSetDOMPasteAllowed(WKPreferencesRef preferencesRef, bool enabled)
496{
497    toImpl(preferencesRef)->setDOMPasteAllowed(enabled);
498}
499
500bool WKPreferencesGetDOMPasteAllowed(WKPreferencesRef preferencesRef)
501{
502    return toImpl(preferencesRef)->domPasteAllowed();
503}
504
505void WKPreferencesSetJavaScriptCanAccessClipboard(WKPreferencesRef preferencesRef, bool enabled)
506{
507    toImpl(preferencesRef)->setJavaScriptCanAccessClipboard(enabled);
508}
509
510bool WKPreferencesGetJavaScriptCanAccessClipboard(WKPreferencesRef preferencesRef)
511{
512    return toImpl(preferencesRef)->javaScriptCanAccessClipboard();
513}
514
515void WKPreferencesSetFullScreenEnabled(WKPreferencesRef preferencesRef, bool enabled)
516{
517    toImpl(preferencesRef)->setFullScreenEnabled(enabled);
518}
519
520bool WKPreferencesGetFullScreenEnabled(WKPreferencesRef preferencesRef)
521{
522    return toImpl(preferencesRef)->fullScreenEnabled();
523}
524
525void WKPreferencesSetWebSecurityEnabled(WKPreferencesRef preferencesRef, bool enabled)
526{
527    toImpl(preferencesRef)->setWebSecurityEnabled(enabled);
528}
529
530bool WKPreferencesGetWebSecurityEnabled(WKPreferencesRef preferencesRef)
531{
532    return toImpl(preferencesRef)->webSecurityEnabled();
533}
534
535void WKPreferencesSetUniversalAccessFromFileURLsAllowed(WKPreferencesRef preferencesRef, bool allowed)
536{
537    toImpl(preferencesRef)->setAllowUniversalAccessFromFileURLs(allowed);
538}
539
540bool WKPreferencesGetUniversalAccessFromFileURLsAllowed(WKPreferencesRef preferencesRef)
541{
542    return toImpl(preferencesRef)->allowUniversalAccessFromFileURLs();
543}
544
545void WKPreferencesSetFileAccessFromFileURLsAllowed(WKPreferencesRef preferencesRef, bool allowed)
546{
547    toImpl(preferencesRef)->setAllowFileAccessFromFileURLs(allowed);
548}
549
550bool WKPreferencesGetFileAccessFromFileURLsAllowed(WKPreferencesRef preferencesRef)
551{
552    return toImpl(preferencesRef)->allowFileAccessFromFileURLs();
553}
554