1 /* 2 * Copyright (C) 2006, 2007, 2008, 2009 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 COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef WebPreferences_H 27 #define WebPreferences_H 28 29 #include "WebKit.h" 30 #include <CoreFoundation/CoreFoundation.h> 31 #include <WebCore/BString.h> 32 #include <wtf/RetainPtr.h> 33 34 class WebPreferences : public IWebPreferences, public IWebPreferencesPrivate { 35 public: 36 static WebPreferences* createInstance(); 37 protected: 38 WebPreferences(); 39 ~WebPreferences(); 40 41 public: 42 // IUnknown 43 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); 44 virtual ULONG STDMETHODCALLTYPE AddRef(void); 45 virtual ULONG STDMETHODCALLTYPE Release(void); 46 47 // IWebPreferences 48 virtual HRESULT STDMETHODCALLTYPE standardPreferences( 49 /* [retval][out] */ IWebPreferences** standardPreferences); 50 51 virtual HRESULT STDMETHODCALLTYPE initWithIdentifier( 52 /* [in] */ BSTR anIdentifier, 53 /* [retval][out] */ IWebPreferences** preferences); 54 55 virtual HRESULT STDMETHODCALLTYPE identifier( 56 /* [retval][out] */ BSTR* ident); 57 58 virtual HRESULT STDMETHODCALLTYPE standardFontFamily( 59 /* [retval][out] */ BSTR* family); 60 61 virtual HRESULT STDMETHODCALLTYPE setStandardFontFamily( 62 /* [in] */ BSTR family); 63 64 virtual HRESULT STDMETHODCALLTYPE fixedFontFamily( 65 /* [retval][out] */ BSTR* family); 66 67 virtual HRESULT STDMETHODCALLTYPE setFixedFontFamily( 68 /* [in] */ BSTR family); 69 70 virtual HRESULT STDMETHODCALLTYPE serifFontFamily( 71 /* [retval][out] */ BSTR* fontFamily); 72 73 virtual HRESULT STDMETHODCALLTYPE setSerifFontFamily( 74 /* [in] */ BSTR family); 75 76 virtual HRESULT STDMETHODCALLTYPE sansSerifFontFamily( 77 /* [retval][out] */ BSTR* family); 78 79 virtual HRESULT STDMETHODCALLTYPE setSansSerifFontFamily( 80 /* [in] */ BSTR family); 81 82 virtual HRESULT STDMETHODCALLTYPE cursiveFontFamily( 83 /* [retval][out] */ BSTR* family); 84 85 virtual HRESULT STDMETHODCALLTYPE setCursiveFontFamily( 86 /* [in] */ BSTR family); 87 88 virtual HRESULT STDMETHODCALLTYPE fantasyFontFamily( 89 /* [retval][out] */ BSTR* family); 90 91 virtual HRESULT STDMETHODCALLTYPE setFantasyFontFamily( 92 /* [in] */ BSTR family); 93 94 virtual HRESULT STDMETHODCALLTYPE defaultFontSize( 95 /* [retval][out] */ int* fontSize); 96 97 virtual HRESULT STDMETHODCALLTYPE setDefaultFontSize( 98 /* [in] */ int fontSize); 99 100 virtual HRESULT STDMETHODCALLTYPE defaultFixedFontSize( 101 /* [retval][out] */ int* fontSize); 102 103 virtual HRESULT STDMETHODCALLTYPE setDefaultFixedFontSize( 104 /* [in] */ int fontSize); 105 106 virtual HRESULT STDMETHODCALLTYPE minimumFontSize( 107 /* [retval][out] */ int* fontSize); 108 109 virtual HRESULT STDMETHODCALLTYPE setMinimumFontSize( 110 /* [in] */ int fontSize); 111 112 virtual HRESULT STDMETHODCALLTYPE minimumLogicalFontSize( 113 /* [retval][out] */ int* fontSize); 114 115 virtual HRESULT STDMETHODCALLTYPE setMinimumLogicalFontSize( 116 /* [in] */ int fontSize); 117 118 virtual HRESULT STDMETHODCALLTYPE defaultTextEncodingName( 119 /* [retval][out] */ BSTR* name); 120 121 virtual HRESULT STDMETHODCALLTYPE setDefaultTextEncodingName( 122 /* [in] */ BSTR name); 123 124 virtual HRESULT STDMETHODCALLTYPE userStyleSheetEnabled( 125 /* [retval][out] */ BOOL* enabled); 126 127 virtual HRESULT STDMETHODCALLTYPE setUserStyleSheetEnabled( 128 /* [in] */ BOOL enabled); 129 130 virtual HRESULT STDMETHODCALLTYPE userStyleSheetLocation( 131 /* [retval][out] */ BSTR* location); 132 133 virtual HRESULT STDMETHODCALLTYPE setUserStyleSheetLocation( 134 /* [in] */ BSTR location); 135 136 virtual HRESULT STDMETHODCALLTYPE isJavaEnabled( 137 /* [retval][out] */ BOOL* enabled); 138 139 virtual HRESULT STDMETHODCALLTYPE setJavaEnabled( 140 /* [in] */ BOOL enabled); 141 142 virtual HRESULT STDMETHODCALLTYPE isJavaScriptEnabled( 143 /* [retval][out] */ BOOL* enabled); 144 145 virtual HRESULT STDMETHODCALLTYPE setJavaScriptEnabled( 146 /* [in] */ BOOL enabled); 147 148 virtual HRESULT STDMETHODCALLTYPE javaScriptCanOpenWindowsAutomatically( 149 /* [retval][out] */ BOOL* enabled); 150 151 virtual HRESULT STDMETHODCALLTYPE setJavaScriptCanOpenWindowsAutomatically( 152 /* [in] */ BOOL enabled); 153 154 virtual HRESULT STDMETHODCALLTYPE arePlugInsEnabled( 155 /* [retval][out] */ BOOL* enabled); 156 157 virtual HRESULT STDMETHODCALLTYPE setPlugInsEnabled( 158 /* [in] */ BOOL enabled); 159 160 virtual HRESULT STDMETHODCALLTYPE allowsAnimatedImages( 161 /* [retval][out] */ BOOL* enabled); 162 163 virtual HRESULT STDMETHODCALLTYPE setAllowsAnimatedImages( 164 /* [in] */ BOOL enabled); 165 166 virtual HRESULT STDMETHODCALLTYPE allowAnimatedImageLooping( 167 /* [retval][out] */ BOOL* enabled); 168 169 virtual HRESULT STDMETHODCALLTYPE setAllowAnimatedImageLooping( 170 /* [in] */ BOOL enabled); 171 172 virtual HRESULT STDMETHODCALLTYPE setLoadsImagesAutomatically( 173 /* [in] */ BOOL enabled); 174 175 virtual HRESULT STDMETHODCALLTYPE loadsImagesAutomatically( 176 /* [retval][out] */ BOOL* enabled); 177 178 virtual HRESULT STDMETHODCALLTYPE setAutosaves( 179 /* [in] */ BOOL enabled); 180 181 virtual HRESULT STDMETHODCALLTYPE autosaves( 182 /* [retval][out] */ BOOL* enabled); 183 184 virtual HRESULT STDMETHODCALLTYPE setShouldPrintBackgrounds( 185 /* [in] */ BOOL enabled); 186 187 virtual HRESULT STDMETHODCALLTYPE shouldPrintBackgrounds( 188 /* [retval][out] */ BOOL* enabled); 189 190 virtual HRESULT STDMETHODCALLTYPE setPrivateBrowsingEnabled( 191 /* [in] */ BOOL enabled); 192 193 virtual HRESULT STDMETHODCALLTYPE privateBrowsingEnabled( 194 /* [retval][out] */ BOOL* enabled); 195 196 virtual HRESULT STDMETHODCALLTYPE setTabsToLinks( 197 /* [in] */ BOOL enabled); 198 199 virtual HRESULT STDMETHODCALLTYPE tabsToLinks( 200 /* [retval][out] */ BOOL* enabled); 201 202 virtual HRESULT STDMETHODCALLTYPE textAreasAreResizable( 203 /* [retval][out] */ BOOL *enabled); 204 205 virtual HRESULT STDMETHODCALLTYPE setTextAreasAreResizable( 206 /* [in] */ BOOL enabled); 207 208 virtual HRESULT STDMETHODCALLTYPE usesPageCache( 209 /* [retval][out] */ BOOL *usesPageCache); 210 211 virtual HRESULT STDMETHODCALLTYPE setUsesPageCache( 212 /* [in] */ BOOL usesPageCache); 213 214 virtual HRESULT STDMETHODCALLTYPE unused1(); 215 virtual HRESULT STDMETHODCALLTYPE unused2(); 216 217 virtual HRESULT STDMETHODCALLTYPE iconDatabaseLocation( 218 /* [retval][out] */ BSTR* location); 219 220 virtual HRESULT STDMETHODCALLTYPE setIconDatabaseLocation( 221 /* [in] */ BSTR location); 222 223 virtual HRESULT STDMETHODCALLTYPE iconDatabaseEnabled( 224 /* [retval][out] */ BOOL* enabled); 225 226 virtual HRESULT STDMETHODCALLTYPE setIconDatabaseEnabled( 227 /* [in] */ BOOL enabled); 228 229 virtual HRESULT STDMETHODCALLTYPE fontSmoothing( 230 /* [retval][out] */ FontSmoothingType* smoothingType); 231 232 virtual HRESULT STDMETHODCALLTYPE setFontSmoothing( 233 /* [in] */ FontSmoothingType smoothingType); 234 235 virtual HRESULT STDMETHODCALLTYPE editableLinkBehavior( 236 /* [retval][out] */ WebKitEditableLinkBehavior* behavior); 237 238 virtual HRESULT STDMETHODCALLTYPE setEditableLinkBehavior( 239 /* [in] */ WebKitEditableLinkBehavior behavior); 240 241 virtual HRESULT STDMETHODCALLTYPE editingBehavior( 242 /* [retval][out] */ WebKitEditingBehavior* behavior); 243 244 virtual HRESULT STDMETHODCALLTYPE setEditingBehavior( 245 /* [in] */ WebKitEditingBehavior behavior); 246 247 virtual HRESULT STDMETHODCALLTYPE cookieStorageAcceptPolicy( 248 /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy); 249 250 virtual HRESULT STDMETHODCALLTYPE setCookieStorageAcceptPolicy( 251 /* [in] */ WebKitCookieStorageAcceptPolicy acceptPolicy); 252 253 virtual HRESULT STDMETHODCALLTYPE continuousSpellCheckingEnabled( 254 /* [retval][out] */ BOOL *enabled); 255 256 virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled( 257 /* [in] */ BOOL enabled); 258 259 virtual HRESULT STDMETHODCALLTYPE grammarCheckingEnabled( 260 /* [retval][out] */ BOOL *enabled); 261 262 virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled( 263 /* [in] */ BOOL enabled); 264 265 virtual HRESULT STDMETHODCALLTYPE allowContinuousSpellChecking( 266 /* [retval][out] */ BOOL *enabled); 267 268 virtual HRESULT STDMETHODCALLTYPE setAllowContinuousSpellChecking( 269 /* [in] */ BOOL enabled); 270 271 virtual HRESULT STDMETHODCALLTYPE isDOMPasteAllowed( 272 /* [retval][out] */ BOOL *enabled); 273 274 virtual HRESULT STDMETHODCALLTYPE setDOMPasteAllowed( 275 /* [in] */ BOOL enabled); 276 277 virtual HRESULT STDMETHODCALLTYPE cacheModel( 278 /* [retval][out] */ WebCacheModel* cacheModel); 279 280 virtual HRESULT STDMETHODCALLTYPE setCacheModel( 281 /* [in] */ WebCacheModel cacheModel); 282 283 virtual HRESULT STDMETHODCALLTYPE setShouldPaintCustomScrollbars( 284 /* [in] */ BOOL shouldPaint); 285 286 virtual HRESULT STDMETHODCALLTYPE shouldPaintCustomScrollbars( 287 /* [retval][out] */ BOOL *shouldPaint); 288 289 // IWebPreferencesPrivate 290 virtual HRESULT STDMETHODCALLTYPE setDeveloperExtrasEnabled( 291 /* [in] */ BOOL); 292 293 virtual HRESULT STDMETHODCALLTYPE developerExtrasEnabled( 294 /* [retval][out] */ BOOL*); 295 296 virtual HRESULT STDMETHODCALLTYPE setAutomaticallyDetectsCacheModel( 297 /* [in] */ BOOL automaticallyDetectsCacheModel); 298 299 virtual HRESULT STDMETHODCALLTYPE automaticallyDetectsCacheModel( 300 /* [out, retval] */ BOOL* automaticallyDetectsCacheModel); 301 302 virtual HRESULT STDMETHODCALLTYPE setAuthorAndUserStylesEnabled(BOOL); 303 virtual HRESULT STDMETHODCALLTYPE authorAndUserStylesEnabled(BOOL*); 304 305 virtual HRESULT STDMETHODCALLTYPE inApplicationChromeMode( 306 /* [retval][out] */ BOOL *enabled); 307 308 virtual HRESULT STDMETHODCALLTYPE setApplicationChromeMode( 309 /* [in] */ BOOL enabled); 310 311 virtual HRESULT STDMETHODCALLTYPE setOfflineWebApplicationCacheEnabled( 312 /* [in] */ BOOL enabled); 313 314 virtual HRESULT STDMETHODCALLTYPE offlineWebApplicationCacheEnabled( 315 /* [retval][out] */ BOOL *enabled); 316 317 virtual HRESULT STDMETHODCALLTYPE setDatabasesEnabled( 318 /* [in] */ BOOL enabled); 319 320 virtual HRESULT STDMETHODCALLTYPE databasesEnabled( 321 /* [retval][out] */ BOOL *enabled); 322 323 virtual HRESULT STDMETHODCALLTYPE setLocalStorageEnabled( 324 /* [in] */ BOOL enabled); 325 326 virtual HRESULT STDMETHODCALLTYPE localStorageEnabled( 327 /* [retval][out] */ BOOL *enabled); 328 329 virtual HRESULT STDMETHODCALLTYPE localStorageDatabasePath( 330 /* [out, retval] */ BSTR* location); 331 332 virtual HRESULT STDMETHODCALLTYPE setLocalStorageDatabasePath( 333 /* [in] */ BSTR location); 334 335 virtual HRESULT STDMETHODCALLTYPE experimentalNotificationsEnabled( 336 /* [retval][out] */ BOOL *enabled); 337 338 virtual HRESULT STDMETHODCALLTYPE setExperimentalNotificationsEnabled( 339 /* [in] */ BOOL enabled); 340 341 virtual HRESULT STDMETHODCALLTYPE setShouldPaintNativeControls( 342 /* [in] */ BOOL shouldPaint); 343 344 virtual HRESULT STDMETHODCALLTYPE shouldPaintNativeControls( 345 /* [retval][out] */ BOOL *shouldPaint); 346 347 virtual HRESULT STDMETHODCALLTYPE setZoomsTextOnly( 348 /* [retval][out] */ BOOL zoomsTextOnly); 349 350 virtual HRESULT STDMETHODCALLTYPE zoomsTextOnly( 351 /* [retval][out] */ BOOL *zoomsTextOnly); 352 353 virtual HRESULT STDMETHODCALLTYPE fontSmoothingContrast( 354 /* [retval][out] */ float* contrast); 355 356 virtual HRESULT STDMETHODCALLTYPE setFontSmoothingContrast( 357 /* [in] */ float contrast); 358 359 virtual HRESULT STDMETHODCALLTYPE isWebSecurityEnabled( 360 /* [retval][out] */ BOOL* enabled); 361 362 virtual HRESULT STDMETHODCALLTYPE setWebSecurityEnabled( 363 /* [in] */ BOOL enabled); 364 365 virtual HRESULT STDMETHODCALLTYPE allowUniversalAccessFromFileURLs( 366 /* [retval][out] */ BOOL* allowAccess); 367 368 virtual HRESULT STDMETHODCALLTYPE setAllowUniversalAccessFromFileURLs( 369 /* [in] */ BOOL allowAccess); 370 371 virtual HRESULT STDMETHODCALLTYPE allowFileAccessFromFileURLs( 372 /* [retval][out] */ BOOL* allowAccess); 373 374 virtual HRESULT STDMETHODCALLTYPE setAllowFileAccessFromFileURLs( 375 /* [in] */ BOOL allowAccess); 376 377 virtual HRESULT STDMETHODCALLTYPE javaScriptCanAccessClipboard( 378 /* [retval][out] */ BOOL* enabled); 379 380 virtual HRESULT STDMETHODCALLTYPE setJavaScriptCanAccessClipboard( 381 /* [in] */ BOOL enabled); 382 383 virtual HRESULT STDMETHODCALLTYPE isXSSAuditorEnabled( 384 /* [retval][out] */ BOOL* enabled); 385 386 virtual HRESULT STDMETHODCALLTYPE setXSSAuditorEnabled( 387 /* [in] */ BOOL enabled); 388 389 virtual HRESULT STDMETHODCALLTYPE setShouldUseHighResolutionTimers( 390 /* [in] */ BOOL useHighResolutionTimers); 391 392 virtual HRESULT STDMETHODCALLTYPE shouldUseHighResolutionTimers( 393 /* [retval][out] */ BOOL* useHighResolutionTimers); 394 395 virtual HRESULT STDMETHODCALLTYPE setPluginAllowedRunTime( 396 /* [in] */ UINT allowedRunTime); 397 398 virtual HRESULT STDMETHODCALLTYPE pluginAllowedRunTime( 399 /* [retval][out] */ UINT* allowedRunTime); 400 401 virtual HRESULT STDMETHODCALLTYPE isFrameFlatteningEnabled( 402 /* [retval][out] */ BOOL* enabled); 403 404 virtual HRESULT STDMETHODCALLTYPE setFrameFlatteningEnabled( 405 /* [in] */ BOOL enabled); 406 407 virtual HRESULT STDMETHODCALLTYPE setPreferenceForTest( 408 /* [in] */ BSTR key, 409 /* [in] */ BSTR value); 410 411 virtual HRESULT STDMETHODCALLTYPE setAcceleratedCompositingEnabled(BOOL); 412 virtual HRESULT STDMETHODCALLTYPE acceleratedCompositingEnabled(BOOL*); 413 414 virtual HRESULT STDMETHODCALLTYPE setCustomDragCursorsEnabled(BOOL); 415 virtual HRESULT STDMETHODCALLTYPE customDragCursorsEnabled(BOOL*); 416 417 virtual HRESULT STDMETHODCALLTYPE setShowDebugBorders(BOOL); 418 virtual HRESULT STDMETHODCALLTYPE showDebugBorders(BOOL*); 419 420 virtual HRESULT STDMETHODCALLTYPE setShowRepaintCounter(BOOL); 421 virtual HRESULT STDMETHODCALLTYPE showRepaintCounter(BOOL*); 422 423 virtual HRESULT STDMETHODCALLTYPE setDNSPrefetchingEnabled(BOOL); 424 virtual HRESULT STDMETHODCALLTYPE isDNSPrefetchingEnabled(BOOL*); 425 426 virtual HRESULT STDMETHODCALLTYPE setMemoryInfoEnabled(BOOL); 427 virtual HRESULT STDMETHODCALLTYPE memoryInfoEnabled(BOOL*); 428 429 virtual HRESULT STDMETHODCALLTYPE hyperlinkAuditingEnabled(BOOL*); 430 virtual HRESULT STDMETHODCALLTYPE setHyperlinkAuditingEnabled(BOOL); 431 432 virtual HRESULT STDMETHODCALLTYPE loadsSiteIconsIgnoringImageLoadingPreference(BOOL*); 433 virtual HRESULT STDMETHODCALLTYPE setLoadsSiteIconsIgnoringImageLoadingPreference(BOOL); 434 435 // WebPreferences 436 437 // This method accesses a different preference key than developerExtrasEnabled. 438 // See <rdar://5343767> for the justification. 439 bool developerExtrasDisabledByOverride(); 440 441 static BSTR webPreferencesChangedNotification(); 442 static BSTR webPreferencesRemovedNotification(); 443 444 static void setInstance(WebPreferences* instance, BSTR identifier); 445 static void removeReferenceForIdentifier(BSTR identifier); 446 static WebPreferences* sharedStandardPreferences(); 447 448 // From WebHistory.h 449 HRESULT historyItemLimit(int* limit); 450 HRESULT setHistoryItemLimit(int limit); 451 HRESULT historyAgeInDaysLimit(int* limit); 452 HRESULT setHistoryAgeInDaysLimit(int limit); 453 454 void willAddToWebView(); 455 void didRemoveFromWebView(); 456 457 HRESULT postPreferencesChangesNotification(); 458 459 protected: 460 void setValueForKey(CFStringRef key, CFPropertyListRef value); 461 RetainPtr<CFPropertyListRef> valueForKey(CFStringRef key); 462 BSTR stringValueForKey(CFStringRef key); 463 int integerValueForKey(CFStringRef key); 464 BOOL boolValueForKey(CFStringRef key); 465 float floatValueForKey(CFStringRef key); 466 LONGLONG longlongValueForKey(CFStringRef key); 467 void setStringValue(CFStringRef key, LPCTSTR value); 468 void setIntegerValue(CFStringRef key, int value); 469 void setBoolValue(CFStringRef key, BOOL value); 470 void setFloatValue(CFStringRef key, float value); 471 void setLongLongValue(CFStringRef key, LONGLONG value); 472 static WebPreferences* getInstanceForIdentifier(BSTR identifier); 473 static void initializeDefaultSettings(); 474 void save(); 475 void load(); 476 void migrateWebKitPreferencesToCFPreferences(); 477 void copyWebKitPreferencesToCFPreferences(CFDictionaryRef); 478 479 protected: 480 ULONG m_refCount; 481 RetainPtr<CFMutableDictionaryRef> m_privatePrefs; 482 WebCore::BString m_identifier; 483 bool m_autoSaves; 484 bool m_automaticallyDetectsCacheModel; 485 unsigned m_numWebViews; 486 }; 487 488 #endif 489