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, true) \ 74 macro(WebSecurityEnabled, webSecurityEnabled, Bool, bool, true) \ 75 macro(AllowUniversalAccessFromFileURLs, allowUniversalAccessFromFileURLs, Bool, bool, false) \ 76 macro(AllowFileAccessFromFileURLs, allowFileAccessFromFileURLs, Bool, bool, false) \ 77 \ 78 79 #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \ 80 macro(PDFScaleFactor, pdfScaleFactor, Double, double, 0) \ 81 \ 82 83 #define FOR_EACH_WEBKIT_UINT32_PREFERENCE(macro) \ 84 macro(FontSmoothingLevel, fontSmoothingLevel, UInt32, uint32_t, FontSmoothingLevelMedium) \ 85 macro(MinimumFontSize, minimumFontSize, UInt32, uint32_t, 0) \ 86 macro(MinimumLogicalFontSize, minimumLogicalFontSize, UInt32, uint32_t, 9) \ 87 macro(DefaultFontSize, defaultFontSize, UInt32, uint32_t, 16) \ 88 macro(DefaultFixedFontSize, defaultFixedFontSize, UInt32, uint32_t, 13) \ 89 macro(PDFDisplayMode, pdfDisplayMode, UInt32, uint32_t, 1) \ 90 macro(EditableLinkBehavior, editableLinkBehavior, UInt32, uint32_t, WebCore::EditableLinkNeverLive) \ 91 \ 92 93 #if PLATFORM(WIN) 94 95 #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \ 96 macro(StandardFontFamily, standardFontFamily, String, String, "Times New Roman") \ 97 macro(CursiveFontFamily, cursiveFontFamily, String, String, "Comic Sans MS") \ 98 macro(FantasyFontFamily, fantasyFontFamily, String, String, "Comic Sans MS") \ 99 macro(FixedFontFamily, fixedFontFamily, String, String, "Courier New") \ 100 macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Arial") \ 101 macro(SerifFontFamily, serifFontFamily, String, String, "Times New Roman") \ 102 \ 103 104 #elif PLATFORM(MAC) 105 106 #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \ 107 macro(StandardFontFamily, standardFontFamily, String, String, "Times") \ 108 macro(CursiveFontFamily, cursiveFontFamily, String, String, "Apple Chancery") \ 109 macro(FantasyFontFamily, fantasyFontFamily, String, String, "Papyrus") \ 110 macro(FixedFontFamily, fixedFontFamily, String, String, "Courier") \ 111 macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Helvetica") \ 112 macro(SerifFontFamily, serifFontFamily, String, String, "Times") \ 113 \ 114 115 #elif PLATFORM(QT) || PLATFORM(GTK) 116 117 #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \ 118 macro(StandardFontFamily, standardFontFamily, String, String, "Times") \ 119 macro(CursiveFontFamily, cursiveFontFamily, String, String, "Comic Sans MS") \ 120 macro(FantasyFontFamily, fantasyFontFamily, String, String, "Impact") \ 121 macro(FixedFontFamily, fixedFontFamily, String, String, "Courier New") \ 122 macro(SansSerifFontFamily, sansSerifFontFamily, String, String, "Helvetica") \ 123 macro(SerifFontFamily, serifFontFamily, String, String, "Times") \ 124 \ 125 126 #endif 127 128 #define FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \ 129 FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \ 130 macro(DefaultTextEncodingName, defaultTextEncodingName, String, String, "ISO-8859-1") \ 131 macro(FTPDirectoryTemplatePath, ftpDirectoryTemplatePath, String, String, "") \ 132 \ 133 134 135 #define FOR_EACH_WEBKIT_PREFERENCE(macro) \ 136 FOR_EACH_WEBKIT_BOOL_PREFERENCE(macro) \ 137 FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \ 138 FOR_EACH_WEBKIT_UINT32_PREFERENCE(macro) \ 139 FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \ 140 \ 141 142 namespace WebPreferencesKey { 143 144 #define DECLARE_KEY_GETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) const String& KeyLower##Key(); 145 146 FOR_EACH_WEBKIT_PREFERENCE(DECLARE_KEY_GETTERS) 147 148 #undef DECLARE_KEY_GETTERS 149 150 } // namespace WebPreferencesKey 151 152 struct WebPreferencesStore { 153 WebPreferencesStore(); 154 155 void encode(CoreIPC::ArgumentEncoder* encoder) const; 156 static bool decode(CoreIPC::ArgumentDecoder*, WebPreferencesStore&); 157 158 // NOTE: The getters in this class have non-standard names to aid in the use of the preference macros. 159 160 bool setStringValueForKey(const String& key, const String& value); 161 String getStringValueForKey(const String& key) const; 162 163 bool setBoolValueForKey(const String& key, bool value); 164 bool getBoolValueForKey(const String& key) const; 165 166 bool setUInt32ValueForKey(const String& key, uint32_t value); 167 uint32_t getUInt32ValueForKey(const String& key) const; 168 169 bool setDoubleValueForKey(const String& key, double value); 170 double getDoubleValueForKey(const String& key) const; 171 172 static void overrideXSSAuditorEnabledForTestRunner(bool); 173 static void overrideAllowUniversalAccessFromFileURLsForTestRunner(bool); 174 static void overrideAllowFileAccessFromFileURLsForTestRunner(bool); 175 static void removeTestRunnerOverrides(); 176 177 HashMap<String, String> m_stringValues; 178 HashMap<String, bool> m_boolValues; 179 HashMap<String, uint32_t> m_uint32Values; 180 HashMap<String, double> m_doubleValues; 181 }; 182 183 } // namespace WebKit 184 185 #endif // WebPreferencesStore_h 186