2011-06-27 Yuta Kitamura <yutak@chromium.org>
[WebKit-https.git] / Source / WebKit2 / Shared / WebPreferencesStore.h
1 /*
2  * Copyright (C) 2010, 2011 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 #ifndef WebPreferencesStore_h
27 #define WebPreferencesStore_h
28
29 #include "ArgumentDecoder.h"
30 #include "ArgumentEncoder.h"
31 #include <wtf/HashMap.h>
32 #include <wtf/text/StringHash.h>
33 #include <wtf/text/WTFString.h>
34
35 namespace WebKit {
36
37 // macro(KeyUpper, KeyLower, TypeNameUpper, TypeName, DefaultValue) 
38
39 #define FOR_EACH_WEBKIT_BOOL_PREFERENCE(macro) \
40     macro(JavaScriptEnabled, javaScriptEnabled, Bool, bool, true) \
41     macro(LoadsImagesAutomatically, loadsImagesAutomatically, Bool, bool, true) \
42     macro(LoadsSiteIconsIgnoringImageLoadingPreference, loadsSiteIconsIgnoringImageLoadingPreference, Bool, bool, false) \
43     macro(PluginsEnabled, pluginsEnabled, Bool, bool, true) \
44     macro(JavaEnabled, javaEnabled, Bool, bool, true) \
45     macro(OfflineWebApplicationCacheEnabled, offlineWebApplicationCacheEnabled, Bool, bool, false) \
46     macro(LocalStorageEnabled, localStorageEnabled, Bool, bool, true) \
47     macro(DatabasesEnabled, databasesEnabled, Bool, bool, true) \
48     macro(XSSAuditorEnabled, xssAuditorEnabled, Bool, bool, true) \
49     macro(FrameFlatteningEnabled, frameFlatteningEnabled, Bool, bool, false) \
50     macro(DeveloperExtrasEnabled, developerExtrasEnabled, Bool, bool, false) \
51     macro(PrivateBrowsingEnabled, privateBrowsingEnabled, Bool, bool, false) \
52     macro(TextAreasAreResizable, textAreasAreResizable, Bool, bool, true) \
53     macro(JavaScriptCanOpenWindowsAutomatically, javaScriptCanOpenWindowsAutomatically, Bool, bool, true) \
54     macro(HyperlinkAuditingEnabled, hyperlinkAuditingEnabled, Bool, bool, true) \
55     macro(NeedsSiteSpecificQuirks, needsSiteSpecificQuirks, Bool, bool, false) \
56     macro(AcceleratedCompositingEnabled, acceleratedCompositingEnabled, Bool, bool, true) \
57     macro(AcceleratedDrawingEnabled, acceleratedDrawingEnabled, Bool, bool, false) \
58     macro(CanvasUsesAcceleratedDrawing, canvasUsesAcceleratedDrawing, Bool, bool, true) \
59     macro(CompositingBordersVisible, compositingBordersVisible, Bool, bool, false) \
60     macro(CompositingRepaintCountersVisible, compositingRepaintCountersVisible, Bool, bool, false) \
61     macro(WebGLEnabled, webGLEnabled, Bool, bool, false) \
62     macro(ForceFTPDirectoryListings, forceFTPDirectoryListings, Bool, bool, false) \
63     macro(TabsToLinks, tabsToLinks, Bool, bool, false) \
64     macro(DNSPrefetchingEnabled, dnsPrefetchingEnabled, Bool, bool, false) \
65     macro(WebArchiveDebugModeEnabled, webArchiveDebugModeEnabled, Bool, bool, false) \
66     macro(LocalFileContentSniffingEnabled, localFileContentSniffingEnabled, Bool, bool, false) \
67     macro(UsesPageCache, usesPageCache, Bool, bool, true) \
68     macro(AuthorAndUserStylesEnabled, authorAndUserStylesEnabled, Bool, bool, true) \
69     macro(PaginateDuringLayoutEnabled, paginateDuringLayoutEnabled, Bool, bool, false) \
70     macro(DOMPasteAllowed, domPasteAllowed, Bool, bool, false) \
71     macro(JavaScriptCanAccessClipboard, javaScriptCanAccessClipboard, Bool, bool, false) \
72     macro(ShouldPrintBackgrounds, shouldPrintBackgrounds, Bool, bool, false) \
73     macro(FullScreenEnabled, fullScreenEnabled, Bool, bool, false) \
74     macro(WebSecurityEnabled, webSecurityEnabled, Bool, bool, true) \
75     macro(AllowUniversalAccessFromFileURLs, allowUniversalAccessFromFileURLs, Bool, bool, false) \
76     macro(AllowFileAccessFromFileURLs, allowFileAccessFromFileURLs, Bool, bool, false) \
77     macro(AVFoundationEnabled, isAVFoundationEnabled, Bool, bool, true) \
78     macro(Hixie76WebSocketProtocolEnabled, hixie76WebSocketProtocolEnabled, Bool, bool, true) \
79     \
80
81 #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \
82     macro(PDFScaleFactor, pdfScaleFactor, Double, double, 0) \
83     \
84
85 #if PLATFORM(WIN)
86 #define DEFAULT_WEBKIT_FONT_SMOOTHING_LEVEL FontSmoothingLevelWindows
87 #else
88 #define DEFAULT_WEBKIT_FONT_SMOOTHING_LEVEL FontSmoothingLevelMedium
89 #endif
90
91 #define FOR_EACH_WEBKIT_UINT32_PREFERENCE(macro) \
92     macro(FontSmoothingLevel, fontSmoothingLevel, UInt32, uint32_t, DEFAULT_WEBKIT_FONT_SMOOTHING_LEVEL) \
93     macro(MinimumFontSize, minimumFontSize, UInt32, uint32_t, 0) \
94     macro(MinimumLogicalFontSize, minimumLogicalFontSize, UInt32, uint32_t, 9) \
95     macro(DefaultFontSize, defaultFontSize, UInt32, uint32_t, 16) \
96     macro(DefaultFixedFontSize, defaultFixedFontSize, UInt32, uint32_t, 13) \
97     macro(PDFDisplayMode, pdfDisplayMode, UInt32, uint32_t, 1) \
98     macro(EditableLinkBehavior, editableLinkBehavior, UInt32, uint32_t, WebCore::EditableLinkNeverLive) \
99     \
100
101 #if PLATFORM(WIN)
102
103 #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
104     macro(StandardFontFamily, standardFontFamily, String, String, "Times New Roman") \
105     macro(CursiveFontFamily, cursiveFontFamily, String, String, "Comic Sans MS") \
106     macro(FantasyFontFamily, fantasyFontFamily, String, String, "Comic Sans MS") \
107     macro(FixedFontFamily, fixedFontFamily, String, String, "Courier New") \
108     macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Arial") \
109     macro(SerifFontFamily, serifFontFamily, String, String, "Times New Roman") \
110     \
111
112 #elif PLATFORM(MAC)
113
114 #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
115     macro(StandardFontFamily, standardFontFamily, String, String, "Times") \
116     macro(CursiveFontFamily, cursiveFontFamily, String, String, "Apple Chancery") \
117     macro(FantasyFontFamily, fantasyFontFamily, String, String, "Papyrus") \
118     macro(FixedFontFamily, fixedFontFamily, String, String, "Courier") \
119     macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Helvetica") \
120     macro(SerifFontFamily, serifFontFamily, String, String, "Times") \
121     \
122
123 #elif PLATFORM(QT) || PLATFORM(GTK)
124
125 #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
126     macro(StandardFontFamily, standardFontFamily, String, String, "Times") \
127     macro(CursiveFontFamily, cursiveFontFamily, String, String, "Comic Sans MS") \
128     macro(FantasyFontFamily, fantasyFontFamily, String, String, "Impact") \
129     macro(FixedFontFamily, fixedFontFamily, String, String, "Courier New") \
130     macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Helvetica") \
131     macro(SerifFontFamily, serifFontFamily, String, String, "Times") \
132     \
133
134 #endif
135
136 #define FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \
137     FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
138     macro(DefaultTextEncodingName, defaultTextEncodingName, String, String, "ISO-8859-1") \
139     macro(FTPDirectoryTemplatePath, ftpDirectoryTemplatePath, String, String, "") \
140     \
141
142
143 #define FOR_EACH_WEBKIT_PREFERENCE(macro) \
144     FOR_EACH_WEBKIT_BOOL_PREFERENCE(macro) \
145     FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \
146     FOR_EACH_WEBKIT_UINT32_PREFERENCE(macro) \
147     FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \
148     \
149
150 namespace WebPreferencesKey {
151
152 #define DECLARE_KEY_GETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) const String& KeyLower##Key();
153
154     FOR_EACH_WEBKIT_PREFERENCE(DECLARE_KEY_GETTERS)
155
156 #undef DECLARE_KEY_GETTERS
157
158 } // namespace WebPreferencesKey
159
160 struct WebPreferencesStore {
161     WebPreferencesStore();
162
163     void encode(CoreIPC::ArgumentEncoder* encoder) const;
164     static bool decode(CoreIPC::ArgumentDecoder*, WebPreferencesStore&);
165
166     // NOTE: The getters in this class have non-standard names to aid in the use of the preference macros.
167
168     bool setStringValueForKey(const String& key, const String& value);
169     String getStringValueForKey(const String& key) const;
170
171     bool setBoolValueForKey(const String& key, bool value);
172     bool getBoolValueForKey(const String& key) const;
173
174     bool setUInt32ValueForKey(const String& key, uint32_t value);
175     uint32_t getUInt32ValueForKey(const String& key) const;
176
177     bool setDoubleValueForKey(const String& key, double value);
178     double getDoubleValueForKey(const String& key) const;
179
180     static void overrideXSSAuditorEnabledForTestRunner(bool);
181     static void removeTestRunnerOverrides();
182
183     HashMap<String, String> m_stringValues;
184     HashMap<String, bool> m_boolValues;
185     HashMap<String, uint32_t> m_uint32Values;
186     HashMap<String, double> m_doubleValues;
187 };
188
189 } // namespace WebKit
190
191 #endif // WebPreferencesStore_h