1/* 2 * Copyright (C) 2006, 2007, 2008, 2009, 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 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#include "config.h" 27#include "WebKit.h" 28#include "WebKitDLL.h" 29#include "WebPreferences.h" 30 31#include "WebNotificationCenter.h" 32#include "WebPreferenceKeysPrivate.h" 33 34#include <CoreFoundation/CoreFoundation.h> 35#include <WebCore/CACFLayerTreeHost.h> 36#include <WebCore/COMPtr.h> 37#include <WebCore/FileSystem.h> 38#include <WebCore/Font.h> 39#include <WebCore/LocalizedStrings.h> 40#include <limits> 41#include <shlobj.h> 42#include <wchar.h> 43#include <wtf/HashMap.h> 44#include <wtf/OwnArrayPtr.h> 45#include <wtf/text/CString.h> 46#include <wtf/text/StringHash.h> 47#include <wtf/text/WTFString.h> 48 49#if USE(CG) 50#include <CoreGraphics/CoreGraphics.h> 51#include <WebKitSystemInterface/WebKitSystemInterface.h> 52#endif 53 54using namespace WebCore; 55using std::numeric_limits; 56 57static const String& oldPreferencesPath() 58{ 59 static String path = pathByAppendingComponent(roamingUserSpecificStorageDirectory(), "WebKitPreferences.plist"); 60 return path; 61} 62 63template<typename NumberType> struct CFNumberTraits { static const unsigned Type; }; 64template<> struct CFNumberTraits<int> { static const unsigned Type = kCFNumberSInt32Type; }; 65template<> struct CFNumberTraits<LONGLONG> { static const unsigned Type = kCFNumberLongLongType; }; 66template<> struct CFNumberTraits<float> { static const unsigned Type = kCFNumberFloat32Type; }; 67 68template<typename NumberType> 69static NumberType numberValueForPreferencesValue(CFPropertyListRef value) 70{ 71 if (!value) 72 return 0; 73 74 CFTypeID cfType = CFGetTypeID(value); 75 if (cfType == CFStringGetTypeID()) 76 return static_cast<NumberType>(CFStringGetIntValue(static_cast<CFStringRef>(value))); 77 else if (cfType == CFBooleanGetTypeID()) { 78 Boolean boolVal = CFBooleanGetValue(static_cast<CFBooleanRef>(value)); 79 return boolVal ? 1 : 0; 80 } else if (cfType == CFNumberGetTypeID()) { 81 NumberType val = 0; 82 CFNumberGetValue(static_cast<CFNumberRef>(value), CFNumberTraits<NumberType>::Type, &val); 83 return val; 84 } 85 86 return 0; 87} 88 89template<typename NumberType> 90static RetainPtr<CFNumberRef> cfNumber(NumberType value) 91{ 92 return adoptCF(CFNumberCreate(0, CFNumberTraits<NumberType>::Type, &value)); 93} 94 95static bool booleanValueForPreferencesValue(CFPropertyListRef value) 96{ 97 return numberValueForPreferencesValue<int>(value); 98} 99 100// WebPreferences ---------------------------------------------------------------- 101 102static CFDictionaryRef defaultSettings; 103 104static HashMap<WTF::String, COMPtr<WebPreferences> > webPreferencesInstances; 105 106WebPreferences* WebPreferences::sharedStandardPreferences() 107{ 108 static WebPreferences* standardPreferences; 109 if (!standardPreferences) { 110 standardPreferences = WebPreferences::createInstance(); 111 standardPreferences->setAutosaves(TRUE); 112 standardPreferences->load(); 113 } 114 115 return standardPreferences; 116} 117 118WebPreferences::WebPreferences() 119 : m_refCount(0) 120 , m_autoSaves(0) 121 , m_automaticallyDetectsCacheModel(true) 122 , m_numWebViews(0) 123{ 124 gClassCount++; 125 gClassNameCount.add("WebPreferences"); 126} 127 128WebPreferences::~WebPreferences() 129{ 130 gClassCount--; 131 gClassNameCount.remove("WebPreferences"); 132} 133 134WebPreferences* WebPreferences::createInstance() 135{ 136 WebPreferences* instance = new WebPreferences(); 137 instance->AddRef(); 138 return instance; 139} 140 141HRESULT WebPreferences::postPreferencesChangesNotification() 142{ 143 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal(); 144 HRESULT hr = nc->postNotificationName(webPreferencesChangedNotification(), static_cast<IWebPreferences*>(this), 0); 145 if (FAILED(hr)) 146 return hr; 147 148 return S_OK; 149} 150 151WebPreferences* WebPreferences::getInstanceForIdentifier(BSTR identifier) 152{ 153 if (!identifier) 154 return sharedStandardPreferences(); 155 156 WTF::String identifierString(identifier, SysStringLen(identifier)); 157 return webPreferencesInstances.get(identifierString).get(); 158} 159 160void WebPreferences::setInstance(WebPreferences* instance, BSTR identifier) 161{ 162 if (!identifier || !instance) 163 return; 164 WTF::String identifierString(identifier, SysStringLen(identifier)); 165 webPreferencesInstances.add(identifierString, instance); 166} 167 168void WebPreferences::removeReferenceForIdentifier(BSTR identifier) 169{ 170 if (!identifier || webPreferencesInstances.isEmpty()) 171 return; 172 173 WTF::String identifierString(identifier, SysStringLen(identifier)); 174 WebPreferences* webPreference = webPreferencesInstances.get(identifierString).get(); 175 if (webPreference && webPreference->m_refCount == 1) 176 webPreferencesInstances.remove(identifierString); 177} 178 179void WebPreferences::initializeDefaultSettings() 180{ 181 if (defaultSettings) 182 return; 183 184 CFMutableDictionaryRef defaults = CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 185 186 CFDictionaryAddValue(defaults, CFSTR(WebKitStandardFontPreferenceKey), CFSTR("Times New Roman")); 187 CFDictionaryAddValue(defaults, CFSTR(WebKitFixedFontPreferenceKey), CFSTR("Courier New")); 188 CFDictionaryAddValue(defaults, CFSTR(WebKitSerifFontPreferenceKey), CFSTR("Times New Roman")); 189 CFDictionaryAddValue(defaults, CFSTR(WebKitSansSerifFontPreferenceKey), CFSTR("Arial")); 190 CFDictionaryAddValue(defaults, CFSTR(WebKitCursiveFontPreferenceKey), CFSTR("Comic Sans MS")); 191 CFDictionaryAddValue(defaults, CFSTR(WebKitFantasyFontPreferenceKey), CFSTR("Comic Sans MS")); 192 CFDictionaryAddValue(defaults, CFSTR(WebKitPictographFontPreferenceKey), CFSTR("Times New Roman")); 193 CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumFontSizePreferenceKey), CFSTR("0")); 194 CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), CFSTR("9")); 195 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFontSizePreferenceKey), CFSTR("16")); 196 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFixedFontSizePreferenceKey), CFSTR("13")); 197 198 String defaultDefaultEncoding(WEB_UI_STRING("ISO-8859-1", "The default, default character encoding on Windows")); 199 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), defaultDefaultEncoding.createCFString().get()); 200 201 CFDictionaryAddValue(defaults, CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), kCFBooleanFalse); 202 CFDictionaryAddValue(defaults, CFSTR(WebKitUserStyleSheetLocationPreferenceKey), CFSTR("")); 203 CFDictionaryAddValue(defaults, CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), kCFBooleanFalse); 204 CFDictionaryAddValue(defaults, CFSTR(WebKitTextAreasAreResizablePreferenceKey), kCFBooleanFalse); 205 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaEnabledPreferenceKey), kCFBooleanTrue); 206 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptEnabledPreferenceKey), kCFBooleanTrue); 207 CFDictionaryAddValue(defaults, CFSTR(WebKitWebSecurityEnabledPreferenceKey), kCFBooleanTrue); 208 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowUniversalAccessFromFileURLsPreferenceKey), kCFBooleanFalse); 209 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowFileAccessFromFileURLsPreferenceKey), kCFBooleanTrue); 210 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptCanAccessClipboardPreferenceKey), kCFBooleanFalse); 211 CFDictionaryAddValue(defaults, CFSTR(WebKitXSSAuditorEnabledPreferenceKey), kCFBooleanTrue); 212 CFDictionaryAddValue(defaults, CFSTR(WebKitFrameFlatteningEnabledPreferenceKey), kCFBooleanFalse); 213 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), kCFBooleanTrue); 214 CFDictionaryAddValue(defaults, CFSTR(WebKitPluginsEnabledPreferenceKey), kCFBooleanTrue); 215 CFDictionaryAddValue(defaults, CFSTR(WebKitCSSRegionsEnabledPreferenceKey), kCFBooleanTrue); 216 CFDictionaryAddValue(defaults, CFSTR(WebKitDatabasesEnabledPreferenceKey), kCFBooleanTrue); 217 CFDictionaryAddValue(defaults, CFSTR(WebKitLocalStorageEnabledPreferenceKey), kCFBooleanTrue); 218 CFDictionaryAddValue(defaults, CFSTR(WebKitExperimentalNotificationsEnabledPreferenceKey), kCFBooleanFalse); 219 CFDictionaryAddValue(defaults, CFSTR(WebKitZoomsTextOnlyPreferenceKey), kCFBooleanTrue); 220 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImagesPreferenceKey), kCFBooleanTrue); 221 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), kCFBooleanTrue); 222 CFDictionaryAddValue(defaults, CFSTR(WebKitDisplayImagesKey), kCFBooleanTrue); 223 CFDictionaryAddValue(defaults, CFSTR(WebKitLoadSiteIconsKey), kCFBooleanFalse); 224 CFDictionaryAddValue(defaults, CFSTR(WebKitBackForwardCacheExpirationIntervalKey), CFSTR("1800")); 225 CFDictionaryAddValue(defaults, CFSTR(WebKitTabToLinksPreferenceKey), kCFBooleanFalse); 226 CFDictionaryAddValue(defaults, CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), kCFBooleanFalse); 227 CFDictionaryAddValue(defaults, CFSTR(WebKitRespectStandardStyleKeyEquivalentsPreferenceKey), kCFBooleanFalse); 228 CFDictionaryAddValue(defaults, CFSTR(WebKitShowsURLsInToolTipsPreferenceKey), kCFBooleanFalse); 229 CFDictionaryAddValue(defaults, CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey), kCFBooleanFalse); 230 CFDictionaryAddValue(defaults, CFSTR(WebKitPDFDisplayModePreferenceKey), CFSTR("1")); 231 CFDictionaryAddValue(defaults, CFSTR(WebKitPDFScaleFactorPreferenceKey), CFSTR("0")); 232 CFDictionaryAddValue(defaults, CFSTR(WebKitShouldDisplaySubtitlesPreferenceKey), kCFBooleanFalse); 233 CFDictionaryAddValue(defaults, CFSTR(WebKitShouldDisplayCaptionsPreferenceKey), kCFBooleanFalse); 234 CFDictionaryAddValue(defaults, CFSTR(WebKitShouldDisplayTextDescriptionsPreferenceKey), kCFBooleanFalse); 235 236 RetainPtr<CFStringRef> linkBehaviorStringRef = adoptCF(CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebKitEditableLinkDefaultBehavior)); 237 CFDictionaryAddValue(defaults, CFSTR(WebKitEditableLinkBehaviorPreferenceKey), linkBehaviorStringRef.get()); 238 239 CFDictionaryAddValue(defaults, CFSTR(WebKitHistoryItemLimitKey), CFSTR("1000")); 240 CFDictionaryAddValue(defaults, CFSTR(WebKitHistoryAgeInDaysLimitKey), CFSTR("7")); 241 CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseLocationKey), CFSTR("")); 242 CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseEnabledPreferenceKey), kCFBooleanTrue); 243 CFDictionaryAddValue(defaults, CFSTR(WebKitFontSmoothingTypePreferenceKey), CFSTR("2")); 244 CFDictionaryAddValue(defaults, CFSTR(WebKitFontSmoothingContrastPreferenceKey), CFSTR("2")); 245 CFDictionaryAddValue(defaults, CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), CFSTR("2")); 246 CFDictionaryAddValue(defaults, CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), kCFBooleanFalse); 247 CFDictionaryAddValue(defaults, CFSTR(WebGrammarCheckingEnabledPreferenceKey), kCFBooleanFalse); 248 CFDictionaryAddValue(defaults, CFSTR(AllowContinuousSpellCheckingPreferenceKey), kCFBooleanTrue); 249 CFDictionaryAddValue(defaults, CFSTR(WebKitUsesPageCachePreferenceKey), kCFBooleanTrue); 250 CFDictionaryAddValue(defaults, CFSTR(WebKitLocalStorageDatabasePathPreferenceKey), CFSTR("")); 251 252 RetainPtr<CFStringRef> cacheModelRef = adoptCF(CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebCacheModelDocumentViewer)); 253 CFDictionaryAddValue(defaults, CFSTR(WebKitCacheModelPreferenceKey), cacheModelRef.get()); 254 255 CFDictionaryAddValue(defaults, CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), kCFBooleanTrue); 256 CFDictionaryAddValue(defaults, CFSTR(WebKitApplicationChromeModePreferenceKey), kCFBooleanFalse); 257 258 CFDictionaryAddValue(defaults, CFSTR(WebKitOfflineWebApplicationCacheEnabledPreferenceKey), kCFBooleanFalse); 259 260 CFDictionaryAddValue(defaults, CFSTR(WebKitPaintNativeControlsPreferenceKey), kCFBooleanTrue); 261 262 CFDictionaryAddValue(defaults, CFSTR(WebKitUseHighResolutionTimersPreferenceKey), kCFBooleanTrue); 263 264#if USE(CG) 265 CFDictionaryAddValue(defaults, CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey), kCFBooleanTrue); 266#else 267 CFDictionaryAddValue(defaults, CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey), kCFBooleanFalse); 268#endif 269 270 CFDictionaryAddValue(defaults, CFSTR(WebKitShowDebugBordersPreferenceKey), kCFBooleanFalse); 271 272 CFDictionaryAddValue(defaults, CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey), kCFBooleanFalse); 273 274 CFDictionaryAddValue(defaults, CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey), kCFBooleanTrue); 275 276 CFDictionaryAddValue(defaults, CFSTR(WebKitMediaPlaybackRequiresUserGesturePreferenceKey), kCFBooleanFalse); 277 CFDictionaryAddValue(defaults, CFSTR(WebKitMediaPlaybackAllowsInlinePreferenceKey), kCFBooleanTrue); 278 279 CFDictionaryAddValue(defaults, CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey), kCFBooleanTrue); 280 281 CFDictionaryAddValue(defaults, CFSTR(WebKitFullScreenEnabledPreferenceKey), kCFBooleanFalse); 282 283 CFDictionaryAddValue(defaults, CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey), kCFBooleanFalse); 284 285 defaultSettings = defaults; 286} 287 288RetainPtr<CFPropertyListRef> WebPreferences::valueForKey(CFStringRef key) 289{ 290 RetainPtr<CFPropertyListRef> value = CFDictionaryGetValue(m_privatePrefs.get(), key); 291 if (value) 292 return value; 293 294 value = adoptCF(CFPreferencesCopyAppValue(key, kCFPreferencesCurrentApplication)); 295 if (value) 296 return value; 297 298 return CFDictionaryGetValue(defaultSettings, key); 299} 300 301void WebPreferences::setValueForKey(CFStringRef key, CFPropertyListRef value) 302{ 303 CFDictionarySetValue(m_privatePrefs.get(), key, value); 304 if (m_autoSaves) { 305 CFPreferencesSetAppValue(key, value, kCFPreferencesCurrentApplication); 306 save(); 307 } 308} 309 310BSTR WebPreferences::stringValueForKey(CFStringRef key) 311{ 312 RetainPtr<CFPropertyListRef> value = valueForKey(key); 313 314 if (!value || (CFGetTypeID(value.get()) != CFStringGetTypeID())) 315 return 0; 316 317 CFStringRef str = static_cast<CFStringRef>(value.get()); 318 319 CFIndex length = CFStringGetLength(str); 320 const UniChar* uniChars = CFStringGetCharactersPtr(str); 321 if (uniChars) 322 return SysAllocStringLen((LPCTSTR)uniChars, length); 323 324 BSTR bstr = SysAllocStringLen(0, length); 325 if (!bstr) 326 return 0; 327 328 if (!CFStringGetCString(str, (char*)bstr, (length+1)*sizeof(WCHAR), kCFStringEncodingUTF16)) { 329 SysFreeString(bstr); 330 return 0; 331 } 332 333 bstr[length] = 0; 334 return bstr; 335} 336 337int WebPreferences::integerValueForKey(CFStringRef key) 338{ 339 return numberValueForPreferencesValue<int>(valueForKey(key).get()); 340} 341 342BOOL WebPreferences::boolValueForKey(CFStringRef key) 343{ 344 return booleanValueForPreferencesValue(valueForKey(key).get()); 345} 346 347float WebPreferences::floatValueForKey(CFStringRef key) 348{ 349 return numberValueForPreferencesValue<float>(valueForKey(key).get()); 350} 351 352LONGLONG WebPreferences::longlongValueForKey(CFStringRef key) 353{ 354 return numberValueForPreferencesValue<LONGLONG>(valueForKey(key).get()); 355} 356 357void WebPreferences::setStringValue(CFStringRef key, LPCTSTR value) 358{ 359 BString val; 360 val.adoptBSTR(stringValueForKey(key)); 361 if (val && !wcscmp(val, value)) 362 return; 363 364 RetainPtr<CFStringRef> valueRef = adoptCF(CFStringCreateWithCharacters(0, reinterpret_cast<const UniChar*>(value), static_cast<CFIndex>(wcslen(value)))); 365 setValueForKey(key, valueRef.get()); 366 367 postPreferencesChangesNotification(); 368} 369 370void WebPreferences::setIntegerValue(CFStringRef key, int value) 371{ 372 if (integerValueForKey(key) == value) 373 return; 374 375 setValueForKey(key, cfNumber(value).get()); 376 377 postPreferencesChangesNotification(); 378} 379 380void WebPreferences::setFloatValue(CFStringRef key, float value) 381{ 382 if (floatValueForKey(key) == value) 383 return; 384 385 setValueForKey(key, cfNumber(value).get()); 386 387 postPreferencesChangesNotification(); 388} 389 390void WebPreferences::setBoolValue(CFStringRef key, BOOL value) 391{ 392 if (boolValueForKey(key) == value) 393 return; 394 395 setValueForKey(key, value ? kCFBooleanTrue : kCFBooleanFalse); 396 397 postPreferencesChangesNotification(); 398} 399 400void WebPreferences::setLongLongValue(CFStringRef key, LONGLONG value) 401{ 402 if (longlongValueForKey(key) == value) 403 return; 404 405 setValueForKey(key, cfNumber(value).get()); 406 407 postPreferencesChangesNotification(); 408} 409 410BSTR WebPreferences::webPreferencesChangedNotification() 411{ 412 static BSTR webPreferencesChangedNotification = SysAllocString(WebPreferencesChangedNotification); 413 return webPreferencesChangedNotification; 414} 415 416BSTR WebPreferences::webPreferencesRemovedNotification() 417{ 418 static BSTR webPreferencesRemovedNotification = SysAllocString(WebPreferencesRemovedNotification); 419 return webPreferencesRemovedNotification; 420} 421 422void WebPreferences::save() 423{ 424 CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication); 425} 426 427void WebPreferences::load() 428{ 429 initializeDefaultSettings(); 430 431 m_privatePrefs = adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); 432 433 migrateWebKitPreferencesToCFPreferences(); 434} 435 436void WebPreferences::migrateWebKitPreferencesToCFPreferences() 437{ 438 CFStringRef didMigrateKey = CFSTR(WebKitDidMigrateWebKitPreferencesToCFPreferencesPreferenceKey); 439 if (boolValueForKey(didMigrateKey)) 440 return; 441 bool oldValue = m_autoSaves; 442 m_autoSaves = true; 443 setBoolValue(didMigrateKey, TRUE); 444 m_autoSaves = oldValue; 445 446 WTF::CString path = oldPreferencesPath().utf8(); 447 448 RetainPtr<CFURLRef> urlRef = adoptCF(CFURLCreateFromFileSystemRepresentation(0, reinterpret_cast<const UInt8*>(path.data()), path.length(), false)); 449 if (!urlRef) 450 return; 451 452 RetainPtr<CFReadStreamRef> stream = adoptCF(CFReadStreamCreateWithFile(0, urlRef.get())); 453 if (!stream) 454 return; 455 456 if (!CFReadStreamOpen(stream.get())) 457 return; 458 459 CFPropertyListFormat format = kCFPropertyListBinaryFormat_v1_0 | kCFPropertyListXMLFormat_v1_0; 460 RetainPtr<CFPropertyListRef> plist = adoptCF(CFPropertyListCreateFromStream(0, stream.get(), 0, kCFPropertyListMutableContainersAndLeaves, &format, 0)); 461 CFReadStreamClose(stream.get()); 462 463 if (!plist || CFGetTypeID(plist.get()) != CFDictionaryGetTypeID()) 464 return; 465 466 copyWebKitPreferencesToCFPreferences(static_cast<CFDictionaryRef>(plist.get())); 467 468 deleteFile(oldPreferencesPath()); 469} 470 471void WebPreferences::copyWebKitPreferencesToCFPreferences(CFDictionaryRef dict) 472{ 473 ASSERT_ARG(dict, dict); 474 475 int count = CFDictionaryGetCount(dict); 476 if (count <= 0) 477 return; 478 479 CFStringRef didRemoveDefaultsKey = CFSTR(WebKitDidMigrateDefaultSettingsFromSafari3BetaPreferenceKey); 480 bool omitDefaults = !booleanValueForPreferencesValue(CFDictionaryGetValue(dict, didRemoveDefaultsKey)); 481 482 OwnArrayPtr<CFTypeRef> keys = adoptArrayPtr(new CFTypeRef[count]); 483 OwnArrayPtr<CFTypeRef> values = adoptArrayPtr(new CFTypeRef[count]); 484 CFDictionaryGetKeysAndValues(dict, keys.get(), values.get()); 485 486 for (int i = 0; i < count; ++i) { 487 if (!keys[i] || !values[i] || CFGetTypeID(keys[i]) != CFStringGetTypeID()) 488 continue; 489 490 if (omitDefaults) { 491 CFTypeRef defaultValue = CFDictionaryGetValue(defaultSettings, keys[i]); 492 if (defaultValue && CFEqual(defaultValue, values[i])) 493 continue; 494 } 495 496 setValueForKey(static_cast<CFStringRef>(keys[i]), values[i]); 497 } 498} 499 500// IUnknown ------------------------------------------------------------------- 501 502HRESULT STDMETHODCALLTYPE WebPreferences::QueryInterface(REFIID riid, void** ppvObject) 503{ 504 *ppvObject = 0; 505 if (IsEqualGUID(riid, IID_IUnknown)) 506 *ppvObject = static_cast<IWebPreferences*>(this); 507 else if (IsEqualGUID(riid, IID_IWebPreferences)) 508 *ppvObject = static_cast<IWebPreferences*>(this); 509 else if (IsEqualGUID(riid, IID_IWebPreferencesPrivate)) 510 *ppvObject = static_cast<IWebPreferencesPrivate*>(this); 511 else if (IsEqualGUID(riid, CLSID_WebPreferences)) 512 *ppvObject = this; 513 else 514 return E_NOINTERFACE; 515 516 AddRef(); 517 return S_OK; 518} 519 520ULONG STDMETHODCALLTYPE WebPreferences::AddRef(void) 521{ 522 return ++m_refCount; 523} 524 525ULONG STDMETHODCALLTYPE WebPreferences::Release(void) 526{ 527 ULONG newRef = --m_refCount; 528 if (!newRef) 529 delete(this); 530 531 return newRef; 532} 533 534// IWebPreferences ------------------------------------------------------------ 535 536HRESULT STDMETHODCALLTYPE WebPreferences::standardPreferences( 537 /* [retval][out] */ IWebPreferences** standardPreferences) 538{ 539 if (!standardPreferences) 540 return E_POINTER; 541 *standardPreferences = sharedStandardPreferences(); 542 (*standardPreferences)->AddRef(); 543 return S_OK; 544} 545 546HRESULT STDMETHODCALLTYPE WebPreferences::initWithIdentifier( 547 /* [in] */ BSTR anIdentifier, 548 /* [retval][out] */ IWebPreferences** preferences) 549{ 550 WebPreferences *instance = getInstanceForIdentifier(anIdentifier); 551 if (instance) { 552 *preferences = instance; 553 instance->AddRef(); 554 return S_OK; 555 } 556 557 load(); 558 559 *preferences = this; 560 AddRef(); 561 562 if (anIdentifier) { 563 m_identifier = anIdentifier; 564 setInstance(this, m_identifier); 565 } 566 567 this->postPreferencesChangesNotification(); 568 569 return S_OK; 570} 571 572HRESULT STDMETHODCALLTYPE WebPreferences::identifier( 573 /* [retval][out] */ BSTR* ident) 574{ 575 if (!ident) 576 return E_POINTER; 577 *ident = m_identifier ? SysAllocString(m_identifier) : 0; 578 return S_OK; 579} 580 581HRESULT STDMETHODCALLTYPE WebPreferences::standardFontFamily( 582 /* [retval][out] */ BSTR* family) 583{ 584 *family = stringValueForKey(CFSTR(WebKitStandardFontPreferenceKey)); 585 return (*family) ? S_OK : E_FAIL; 586} 587 588HRESULT STDMETHODCALLTYPE WebPreferences::setStandardFontFamily( 589 /* [in] */ BSTR family) 590{ 591 setStringValue(CFSTR(WebKitStandardFontPreferenceKey), family); 592 return S_OK; 593} 594 595HRESULT STDMETHODCALLTYPE WebPreferences::fixedFontFamily( 596 /* [retval][out] */ BSTR* family) 597{ 598 *family = stringValueForKey(CFSTR(WebKitFixedFontPreferenceKey)); 599 return (*family) ? S_OK : E_FAIL; 600} 601 602HRESULT STDMETHODCALLTYPE WebPreferences::setFixedFontFamily( 603 /* [in] */ BSTR family) 604{ 605 setStringValue(CFSTR(WebKitFixedFontPreferenceKey), family); 606 return S_OK; 607} 608 609HRESULT STDMETHODCALLTYPE WebPreferences::serifFontFamily( 610 /* [retval][out] */ BSTR* fontFamily) 611{ 612 *fontFamily = stringValueForKey(CFSTR(WebKitSerifFontPreferenceKey)); 613 return (*fontFamily) ? S_OK : E_FAIL; 614} 615 616HRESULT STDMETHODCALLTYPE WebPreferences::setSerifFontFamily( 617 /* [in] */ BSTR family) 618{ 619 setStringValue(CFSTR(WebKitSerifFontPreferenceKey), family); 620 return S_OK; 621} 622 623HRESULT STDMETHODCALLTYPE WebPreferences::sansSerifFontFamily( 624 /* [retval][out] */ BSTR* family) 625{ 626 *family = stringValueForKey(CFSTR(WebKitSansSerifFontPreferenceKey)); 627 return (*family) ? S_OK : E_FAIL; 628} 629 630HRESULT STDMETHODCALLTYPE WebPreferences::setSansSerifFontFamily( 631 /* [in] */ BSTR family) 632{ 633 setStringValue(CFSTR(WebKitSansSerifFontPreferenceKey), family); 634 return S_OK; 635} 636 637HRESULT STDMETHODCALLTYPE WebPreferences::cursiveFontFamily( 638 /* [retval][out] */ BSTR* family) 639{ 640 *family = stringValueForKey(CFSTR(WebKitCursiveFontPreferenceKey)); 641 return (*family) ? S_OK : E_FAIL; 642} 643 644HRESULT STDMETHODCALLTYPE WebPreferences::setCursiveFontFamily( 645 /* [in] */ BSTR family) 646{ 647 setStringValue(CFSTR(WebKitCursiveFontPreferenceKey), family); 648 return S_OK; 649} 650 651HRESULT STDMETHODCALLTYPE WebPreferences::fantasyFontFamily( 652 /* [retval][out] */ BSTR* family) 653{ 654 *family = stringValueForKey(CFSTR(WebKitFantasyFontPreferenceKey)); 655 return (*family) ? S_OK : E_FAIL; 656} 657 658HRESULT STDMETHODCALLTYPE WebPreferences::setFantasyFontFamily( 659 /* [in] */ BSTR family) 660{ 661 setStringValue(CFSTR(WebKitFantasyFontPreferenceKey), family); 662 return S_OK; 663} 664 665HRESULT STDMETHODCALLTYPE WebPreferences::pictographFontFamily( 666 /* [retval][out] */ BSTR* family) 667{ 668 *family = stringValueForKey(CFSTR(WebKitPictographFontPreferenceKey)); 669 return (*family) ? S_OK : E_FAIL; 670} 671 672HRESULT STDMETHODCALLTYPE WebPreferences::setPictographFontFamily( 673 /* [in] */ BSTR family) 674{ 675 setStringValue(CFSTR(WebKitPictographFontPreferenceKey), family); 676 return S_OK; 677} 678 679HRESULT STDMETHODCALLTYPE WebPreferences::defaultFontSize( 680 /* [retval][out] */ int* fontSize) 681{ 682 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFontSizePreferenceKey)); 683 return S_OK; 684} 685 686HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFontSize( 687 /* [in] */ int fontSize) 688{ 689 setIntegerValue(CFSTR(WebKitDefaultFontSizePreferenceKey), fontSize); 690 return S_OK; 691} 692 693HRESULT STDMETHODCALLTYPE WebPreferences::defaultFixedFontSize( 694 /* [retval][out] */ int* fontSize) 695{ 696 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFixedFontSizePreferenceKey)); 697 return S_OK; 698} 699 700HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFixedFontSize( 701 /* [in] */ int fontSize) 702{ 703 setIntegerValue(CFSTR(WebKitDefaultFixedFontSizePreferenceKey), fontSize); 704 return S_OK; 705} 706 707HRESULT STDMETHODCALLTYPE WebPreferences::minimumFontSize( 708 /* [retval][out] */ int* fontSize) 709{ 710 *fontSize = integerValueForKey(CFSTR(WebKitMinimumFontSizePreferenceKey)); 711 return S_OK; 712} 713 714HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumFontSize( 715 /* [in] */ int fontSize) 716{ 717 setIntegerValue(CFSTR(WebKitMinimumFontSizePreferenceKey), fontSize); 718 return S_OK; 719} 720 721HRESULT STDMETHODCALLTYPE WebPreferences::minimumLogicalFontSize( 722 /* [retval][out] */ int* fontSize) 723{ 724 *fontSize = integerValueForKey(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey)); 725 return S_OK; 726} 727 728HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumLogicalFontSize( 729 /* [in] */ int fontSize) 730{ 731 setIntegerValue(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), fontSize); 732 return S_OK; 733} 734 735HRESULT STDMETHODCALLTYPE WebPreferences::defaultTextEncodingName( 736 /* [retval][out] */ BSTR* name) 737{ 738 *name = stringValueForKey(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey)); 739 return (*name) ? S_OK : E_FAIL; 740} 741 742HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultTextEncodingName( 743 /* [in] */ BSTR name) 744{ 745 setStringValue(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), name); 746 return S_OK; 747} 748 749HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetEnabled( 750 /* [retval][out] */ BOOL* enabled) 751{ 752 *enabled = boolValueForKey(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey)); 753 return S_OK; 754} 755 756HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetEnabled( 757 /* [in] */ BOOL enabled) 758{ 759 setBoolValue(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), enabled); 760 return S_OK; 761} 762 763HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetLocation( 764 /* [retval][out] */ BSTR* location) 765{ 766 *location = stringValueForKey(CFSTR(WebKitUserStyleSheetLocationPreferenceKey)); 767 return (*location) ? S_OK : E_FAIL; 768} 769 770HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetLocation( 771 /* [in] */ BSTR location) 772{ 773 setStringValue(CFSTR(WebKitUserStyleSheetLocationPreferenceKey), location); 774 return S_OK; 775} 776 777HRESULT STDMETHODCALLTYPE WebPreferences::isJavaEnabled( 778 /* [retval][out] */ BOOL* enabled) 779{ 780 *enabled = boolValueForKey(CFSTR(WebKitJavaEnabledPreferenceKey)); 781 return S_OK; 782} 783 784HRESULT STDMETHODCALLTYPE WebPreferences::setJavaEnabled( 785 /* [in] */ BOOL enabled) 786{ 787 setBoolValue(CFSTR(WebKitJavaEnabledPreferenceKey), enabled); 788 return S_OK; 789} 790 791HRESULT STDMETHODCALLTYPE WebPreferences::isJavaScriptEnabled( 792 /* [retval][out] */ BOOL* enabled) 793{ 794 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptEnabledPreferenceKey)); 795 return S_OK; 796} 797 798HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptEnabled( 799 /* [in] */ BOOL enabled) 800{ 801 setBoolValue(CFSTR(WebKitJavaScriptEnabledPreferenceKey), enabled); 802 return S_OK; 803} 804 805HRESULT STDMETHODCALLTYPE WebPreferences::isWebSecurityEnabled( 806 /* [retval][out] */ BOOL* enabled) 807{ 808 *enabled = boolValueForKey(CFSTR(WebKitWebSecurityEnabledPreferenceKey)); 809 return S_OK; 810} 811 812HRESULT STDMETHODCALLTYPE WebPreferences::setWebSecurityEnabled( 813 /* [in] */ BOOL enabled) 814{ 815 setBoolValue(CFSTR(WebKitWebSecurityEnabledPreferenceKey), enabled); 816 return S_OK; 817} 818 819HRESULT STDMETHODCALLTYPE WebPreferences::allowUniversalAccessFromFileURLs( 820 /* [retval][out] */ BOOL* allowAccess) 821{ 822 *allowAccess = boolValueForKey(CFSTR(WebKitAllowUniversalAccessFromFileURLsPreferenceKey)); 823 return S_OK; 824} 825 826HRESULT STDMETHODCALLTYPE WebPreferences::setAllowUniversalAccessFromFileURLs( 827 /* [in] */ BOOL allowAccess) 828{ 829 setBoolValue(CFSTR(WebKitAllowUniversalAccessFromFileURLsPreferenceKey), allowAccess); 830 return S_OK; 831} 832 833HRESULT STDMETHODCALLTYPE WebPreferences::allowFileAccessFromFileURLs( 834 /* [retval][out] */ BOOL* allowAccess) 835{ 836 *allowAccess = boolValueForKey(CFSTR(WebKitAllowFileAccessFromFileURLsPreferenceKey)); 837 return S_OK; 838} 839 840HRESULT STDMETHODCALLTYPE WebPreferences::setAllowFileAccessFromFileURLs( 841 /* [in] */ BOOL allowAccess) 842{ 843 setBoolValue(CFSTR(WebKitAllowFileAccessFromFileURLsPreferenceKey), allowAccess); 844 return S_OK; 845} 846 847HRESULT STDMETHODCALLTYPE WebPreferences::javaScriptCanAccessClipboard( 848 /* [retval][out] */ BOOL* enabled) 849{ 850 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptCanAccessClipboardPreferenceKey)); 851 return S_OK; 852} 853 854HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptCanAccessClipboard( 855 /* [in] */ BOOL enabled) 856{ 857 setBoolValue(CFSTR(WebKitJavaScriptCanAccessClipboardPreferenceKey), enabled); 858 return S_OK; 859} 860 861HRESULT STDMETHODCALLTYPE WebPreferences::isXSSAuditorEnabled( 862 /* [retval][out] */ BOOL* enabled) 863{ 864 *enabled = boolValueForKey(CFSTR(WebKitXSSAuditorEnabledPreferenceKey)); 865 return S_OK; 866} 867 868HRESULT STDMETHODCALLTYPE WebPreferences::setXSSAuditorEnabled( 869 /* [in] */ BOOL enabled) 870{ 871 setBoolValue(CFSTR(WebKitXSSAuditorEnabledPreferenceKey), enabled); 872 return S_OK; 873} 874 875HRESULT STDMETHODCALLTYPE WebPreferences::isFrameFlatteningEnabled( 876 /* [retval][out] */ BOOL* enabled) 877{ 878 *enabled = boolValueForKey(CFSTR(WebKitFrameFlatteningEnabledPreferenceKey)); 879 return S_OK; 880} 881 882HRESULT STDMETHODCALLTYPE WebPreferences::setFrameFlatteningEnabled( 883 /* [in] */ BOOL enabled) 884{ 885 setBoolValue(CFSTR(WebKitFrameFlatteningEnabledPreferenceKey), enabled); 886 return S_OK; 887} 888 889HRESULT STDMETHODCALLTYPE WebPreferences::javaScriptCanOpenWindowsAutomatically( 890 /* [retval][out] */ BOOL* enabled) 891{ 892 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey)); 893 return S_OK; 894} 895 896HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptCanOpenWindowsAutomatically( 897 /* [in] */ BOOL enabled) 898{ 899 setBoolValue(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), enabled); 900 return S_OK; 901} 902 903HRESULT STDMETHODCALLTYPE WebPreferences::arePlugInsEnabled( 904 /* [retval][out] */ BOOL* enabled) 905{ 906 *enabled = boolValueForKey(CFSTR(WebKitPluginsEnabledPreferenceKey)); 907 return S_OK; 908} 909 910HRESULT STDMETHODCALLTYPE WebPreferences::setPlugInsEnabled( 911 /* [in] */ BOOL enabled) 912{ 913 setBoolValue(CFSTR(WebKitPluginsEnabledPreferenceKey), enabled); 914 return S_OK; 915} 916 917HRESULT STDMETHODCALLTYPE WebPreferences::isCSSRegionsEnabled( 918 /* [retval][out] */ BOOL* enabled) 919{ 920 *enabled = boolValueForKey(CFSTR(WebKitCSSRegionsEnabledPreferenceKey)); 921 return S_OK; 922} 923 924HRESULT STDMETHODCALLTYPE WebPreferences::setCSSRegionsEnabled( 925 /* [in] */ BOOL enabled) 926{ 927 setBoolValue(CFSTR(WebKitCSSRegionsEnabledPreferenceKey), enabled); 928 return S_OK; 929} 930 931HRESULT STDMETHODCALLTYPE WebPreferences::allowsAnimatedImages( 932 /* [retval][out] */ BOOL* enabled) 933{ 934 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImagesPreferenceKey)); 935 return S_OK; 936} 937 938HRESULT STDMETHODCALLTYPE WebPreferences::setAllowsAnimatedImages( 939 /* [in] */ BOOL enabled) 940{ 941 setBoolValue(CFSTR(WebKitAllowAnimatedImagesPreferenceKey), enabled); 942 return S_OK; 943} 944 945HRESULT STDMETHODCALLTYPE WebPreferences::allowAnimatedImageLooping( 946 /* [retval][out] */ BOOL* enabled) 947{ 948 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey)); 949 return S_OK; 950} 951 952HRESULT STDMETHODCALLTYPE WebPreferences::setAllowAnimatedImageLooping( 953 /* [in] */ BOOL enabled) 954{ 955 setBoolValue(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), enabled); 956 return S_OK; 957} 958 959HRESULT STDMETHODCALLTYPE WebPreferences::setLoadsImagesAutomatically( 960 /* [in] */ BOOL enabled) 961{ 962 setBoolValue(CFSTR(WebKitDisplayImagesKey), enabled); 963 return S_OK; 964} 965 966HRESULT STDMETHODCALLTYPE WebPreferences::loadsImagesAutomatically( 967 /* [retval][out] */ BOOL* enabled) 968{ 969 *enabled = boolValueForKey(CFSTR(WebKitDisplayImagesKey)); 970 return S_OK; 971} 972 973HRESULT STDMETHODCALLTYPE WebPreferences::setLoadsSiteIconsIgnoringImageLoadingPreference( 974 /* [in] */ BOOL enabled) 975{ 976 setBoolValue(CFSTR(WebKitLoadSiteIconsKey), enabled); 977 return S_OK; 978} 979 980HRESULT STDMETHODCALLTYPE WebPreferences::loadsSiteIconsIgnoringImageLoadingPreference( 981 /* [retval][out] */ BOOL* enabled) 982{ 983 *enabled = boolValueForKey(CFSTR(WebKitLoadSiteIconsKey)); 984 return S_OK; 985} 986 987HRESULT STDMETHODCALLTYPE WebPreferences::setHixie76WebSocketProtocolEnabled( 988 /* [in] */ BOOL enabled) 989{ 990 return S_OK; 991} 992 993HRESULT STDMETHODCALLTYPE WebPreferences::hixie76WebSocketProtocolEnabled( 994 /* [retval][out] */ BOOL* enabled) 995{ 996 *enabled = false; 997 return S_OK; 998} 999 1000HRESULT STDMETHODCALLTYPE WebPreferences::setMediaPlaybackRequiresUserGesture( 1001 /* [in] */ BOOL enabled) 1002{ 1003 setBoolValue(CFSTR(WebKitMediaPlaybackRequiresUserGesturePreferenceKey), enabled); 1004 return S_OK; 1005} 1006 1007HRESULT STDMETHODCALLTYPE WebPreferences::mediaPlaybackRequiresUserGesture( 1008 /* [retval][out] */ BOOL* enabled) 1009{ 1010 *enabled = boolValueForKey(CFSTR(WebKitMediaPlaybackRequiresUserGesturePreferenceKey)); 1011 return S_OK; 1012} 1013 1014HRESULT STDMETHODCALLTYPE WebPreferences::setMediaPlaybackAllowsInline( 1015 /* [in] */ BOOL enabled) 1016{ 1017 setBoolValue(CFSTR(WebKitMediaPlaybackAllowsInlinePreferenceKey), enabled); 1018 return S_OK; 1019} 1020 1021HRESULT STDMETHODCALLTYPE WebPreferences::mediaPlaybackAllowsInline( 1022 /* [retval][out] */ BOOL* enabled) 1023{ 1024 *enabled = boolValueForKey(CFSTR(WebKitMediaPlaybackAllowsInlinePreferenceKey)); 1025 return S_OK; 1026} 1027 1028HRESULT STDMETHODCALLTYPE WebPreferences::setAutosaves( 1029 /* [in] */ BOOL enabled) 1030{ 1031 m_autoSaves = !!enabled; 1032 return S_OK; 1033} 1034 1035HRESULT STDMETHODCALLTYPE WebPreferences::autosaves( 1036 /* [retval][out] */ BOOL* enabled) 1037{ 1038 *enabled = m_autoSaves ? TRUE : FALSE; 1039 return S_OK; 1040} 1041 1042HRESULT STDMETHODCALLTYPE WebPreferences::setShouldPrintBackgrounds( 1043 /* [in] */ BOOL enabled) 1044{ 1045 setBoolValue(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), enabled); 1046 return S_OK; 1047} 1048 1049HRESULT STDMETHODCALLTYPE WebPreferences::shouldPrintBackgrounds( 1050 /* [retval][out] */ BOOL* enabled) 1051{ 1052 *enabled = boolValueForKey(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey)); 1053 return S_OK; 1054} 1055 1056HRESULT STDMETHODCALLTYPE WebPreferences::setPrivateBrowsingEnabled( 1057 /* [in] */ BOOL enabled) 1058{ 1059 setBoolValue(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), enabled); 1060 return S_OK; 1061} 1062 1063HRESULT STDMETHODCALLTYPE WebPreferences::privateBrowsingEnabled( 1064 /* [retval][out] */ BOOL* enabled) 1065{ 1066 *enabled = boolValueForKey(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey)); 1067 return S_OK; 1068} 1069 1070HRESULT STDMETHODCALLTYPE WebPreferences::setTabsToLinks( 1071 /* [in] */ BOOL enabled) 1072{ 1073 setBoolValue(CFSTR(WebKitTabToLinksPreferenceKey), enabled); 1074 return S_OK; 1075} 1076 1077HRESULT STDMETHODCALLTYPE WebPreferences::tabsToLinks( 1078 /* [retval][out] */ BOOL* enabled) 1079{ 1080 *enabled = boolValueForKey(CFSTR(WebKitTabToLinksPreferenceKey)); 1081 return S_OK; 1082} 1083 1084HRESULT STDMETHODCALLTYPE WebPreferences::setUsesPageCache( 1085 /* [in] */ BOOL usesPageCache) 1086{ 1087 setBoolValue(CFSTR(WebKitUsesPageCachePreferenceKey), usesPageCache); 1088 return S_OK; 1089} 1090 1091HRESULT STDMETHODCALLTYPE WebPreferences::usesPageCache( 1092 /* [retval][out] */ BOOL* usesPageCache) 1093{ 1094 *usesPageCache = boolValueForKey(CFSTR(WebKitUsesPageCachePreferenceKey)); 1095 return S_OK; 1096} 1097 1098HRESULT STDMETHODCALLTYPE WebPreferences::textAreasAreResizable( 1099 /* [retval][out] */ BOOL* enabled) 1100{ 1101 *enabled = boolValueForKey(CFSTR(WebKitTextAreasAreResizablePreferenceKey)); 1102 return S_OK; 1103} 1104 1105HRESULT STDMETHODCALLTYPE WebPreferences::setTextAreasAreResizable( 1106 /* [in] */ BOOL enabled) 1107{ 1108 setBoolValue(CFSTR(WebKitTextAreasAreResizablePreferenceKey), enabled); 1109 return S_OK; 1110} 1111 1112HRESULT WebPreferences::historyItemLimit(int* limit) 1113{ 1114 *limit = integerValueForKey(CFSTR(WebKitHistoryItemLimitKey)); 1115 return S_OK; 1116} 1117 1118HRESULT WebPreferences::setHistoryItemLimit(int limit) 1119{ 1120 setIntegerValue(CFSTR(WebKitHistoryItemLimitKey), limit); 1121 return S_OK; 1122} 1123 1124HRESULT WebPreferences::historyAgeInDaysLimit(int* limit) 1125{ 1126 *limit = integerValueForKey(CFSTR(WebKitHistoryAgeInDaysLimitKey)); 1127 return S_OK; 1128} 1129 1130HRESULT WebPreferences::setHistoryAgeInDaysLimit(int limit) 1131{ 1132 setIntegerValue(CFSTR(WebKitHistoryAgeInDaysLimitKey), limit); 1133 return S_OK; 1134} 1135 1136HRESULT WebPreferences::unused1() 1137{ 1138 ASSERT_NOT_REACHED(); 1139 return E_FAIL; 1140} 1141 1142HRESULT WebPreferences::unused2() 1143{ 1144 ASSERT_NOT_REACHED(); 1145 return E_FAIL; 1146} 1147 1148HRESULT WebPreferences::iconDatabaseLocation( 1149 /* [out] */ BSTR* location) 1150{ 1151 *location = stringValueForKey(CFSTR(WebKitIconDatabaseLocationKey)); 1152 return (*location) ? S_OK : E_FAIL; 1153} 1154 1155HRESULT WebPreferences::setIconDatabaseLocation( 1156 /* [in] */ BSTR location) 1157{ 1158 setStringValue(CFSTR(WebKitIconDatabaseLocationKey), location); 1159 return S_OK; 1160} 1161 1162HRESULT WebPreferences::iconDatabaseEnabled(BOOL* enabled)//location) 1163{ 1164 *enabled = boolValueForKey(CFSTR(WebKitIconDatabaseEnabledPreferenceKey)); 1165 return S_OK; 1166} 1167 1168HRESULT WebPreferences::setIconDatabaseEnabled(BOOL enabled )//location) 1169{ 1170 setBoolValue(CFSTR(WebKitIconDatabaseEnabledPreferenceKey), enabled); 1171 return S_OK; 1172} 1173 1174HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothing( 1175 /* [retval][out] */ FontSmoothingType* smoothingType) 1176{ 1177 *smoothingType = (FontSmoothingType) integerValueForKey(CFSTR(WebKitFontSmoothingTypePreferenceKey)); 1178 return S_OK; 1179} 1180 1181HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothing( 1182 /* [in] */ FontSmoothingType smoothingType) 1183{ 1184 setIntegerValue(CFSTR(WebKitFontSmoothingTypePreferenceKey), smoothingType); 1185 if (smoothingType == FontSmoothingTypeWindows) 1186 smoothingType = FontSmoothingTypeMedium; 1187#if USE(CG) 1188 wkSetFontSmoothingLevel((int)smoothingType); 1189#endif 1190 return S_OK; 1191} 1192 1193HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothingContrast( 1194 /* [retval][out] */ float* contrast) 1195{ 1196 *contrast = floatValueForKey(CFSTR(WebKitFontSmoothingContrastPreferenceKey)); 1197 return S_OK; 1198} 1199 1200HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothingContrast( 1201 /* [in] */ float contrast) 1202{ 1203 setFloatValue(CFSTR(WebKitFontSmoothingContrastPreferenceKey), contrast); 1204#if USE(CG) 1205 wkSetFontSmoothingContrast(contrast); 1206#endif 1207 return S_OK; 1208} 1209 1210HRESULT STDMETHODCALLTYPE WebPreferences::editableLinkBehavior( 1211 /* [out, retval] */ WebKitEditableLinkBehavior* editableLinkBehavior) 1212{ 1213 WebKitEditableLinkBehavior value = (WebKitEditableLinkBehavior) integerValueForKey(CFSTR(WebKitEditableLinkBehaviorPreferenceKey)); 1214 switch (value) { 1215 case WebKitEditableLinkDefaultBehavior: 1216 case WebKitEditableLinkAlwaysLive: 1217 case WebKitEditableLinkOnlyLiveWithShiftKey: 1218 case WebKitEditableLinkLiveWhenNotFocused: 1219 case WebKitEditableLinkNeverLive: 1220 *editableLinkBehavior = value; 1221 break; 1222 default: // ensure that a valid result is returned 1223 *editableLinkBehavior = WebKitEditableLinkDefaultBehavior; 1224 break; 1225 } 1226 return S_OK; 1227} 1228 1229HRESULT STDMETHODCALLTYPE WebPreferences::setEditableLinkBehavior( 1230 /* [in] */ WebKitEditableLinkBehavior behavior) 1231{ 1232 setIntegerValue(CFSTR(WebKitEditableLinkBehaviorPreferenceKey), behavior); 1233 return S_OK; 1234} 1235 1236HRESULT WebPreferences::unused5() 1237{ 1238 ASSERT_NOT_REACHED(); 1239 return E_FAIL; 1240} 1241 1242HRESULT WebPreferences::unused6() 1243{ 1244 ASSERT_NOT_REACHED(); 1245 return E_FAIL; 1246} 1247 1248HRESULT STDMETHODCALLTYPE WebPreferences::hyperlinkAuditingEnabled( 1249 /* [in] */ BOOL* enabled) 1250{ 1251 *enabled = boolValueForKey(CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey)); 1252 return S_OK; 1253} 1254 1255HRESULT STDMETHODCALLTYPE WebPreferences::setHyperlinkAuditingEnabled( 1256 /* [retval][out] */ BOOL enabled) 1257{ 1258 setBoolValue(CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey), enabled); 1259 return S_OK; 1260} 1261 1262HRESULT STDMETHODCALLTYPE WebPreferences::cookieStorageAcceptPolicy( 1263 /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy ) 1264{ 1265 if (!acceptPolicy) 1266 return E_POINTER; 1267 1268 *acceptPolicy = (WebKitCookieStorageAcceptPolicy)integerValueForKey(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey)); 1269 return S_OK; 1270} 1271 1272HRESULT STDMETHODCALLTYPE WebPreferences::setCookieStorageAcceptPolicy( 1273 /* [in] */ WebKitCookieStorageAcceptPolicy acceptPolicy) 1274{ 1275 setIntegerValue(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), acceptPolicy); 1276 return S_OK; 1277} 1278 1279 1280HRESULT WebPreferences::continuousSpellCheckingEnabled(BOOL* enabled) 1281{ 1282 *enabled = boolValueForKey(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey)); 1283 return S_OK; 1284} 1285 1286HRESULT WebPreferences::setContinuousSpellCheckingEnabled(BOOL enabled) 1287{ 1288 setBoolValue(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), enabled); 1289 return S_OK; 1290} 1291 1292HRESULT WebPreferences::grammarCheckingEnabled(BOOL* enabled) 1293{ 1294 *enabled = boolValueForKey(CFSTR(WebGrammarCheckingEnabledPreferenceKey)); 1295 return S_OK; 1296} 1297 1298HRESULT WebPreferences::setGrammarCheckingEnabled(BOOL enabled) 1299{ 1300 setBoolValue(CFSTR(WebGrammarCheckingEnabledPreferenceKey), enabled); 1301 return S_OK; 1302} 1303 1304HRESULT WebPreferences::allowContinuousSpellChecking(BOOL* enabled) 1305{ 1306 *enabled = boolValueForKey(CFSTR(AllowContinuousSpellCheckingPreferenceKey)); 1307 return S_OK; 1308} 1309 1310HRESULT WebPreferences::setAllowContinuousSpellChecking(BOOL enabled) 1311{ 1312 setBoolValue(CFSTR(AllowContinuousSpellCheckingPreferenceKey), enabled); 1313 return S_OK; 1314} 1315 1316HRESULT WebPreferences::areSeamlessIFramesEnabled(BOOL* enabled) 1317{ 1318 *enabled = boolValueForKey(CFSTR(SeamlessIFramesPreferenceKey)); 1319 return S_OK; 1320} 1321 1322HRESULT WebPreferences::setSeamlessIFramesEnabled(BOOL enabled) 1323{ 1324 setBoolValue(CFSTR(SeamlessIFramesPreferenceKey), enabled); 1325 return S_OK; 1326} 1327 1328HRESULT WebPreferences::isDOMPasteAllowed(BOOL* enabled) 1329{ 1330 *enabled = boolValueForKey(CFSTR(WebKitDOMPasteAllowedPreferenceKey)); 1331 return S_OK; 1332} 1333 1334HRESULT WebPreferences::setDOMPasteAllowed(BOOL enabled) 1335{ 1336 setBoolValue(CFSTR(WebKitDOMPasteAllowedPreferenceKey), enabled); 1337 return S_OK; 1338} 1339 1340HRESULT WebPreferences::cacheModel(WebCacheModel* cacheModel) 1341{ 1342 if (!cacheModel) 1343 return E_POINTER; 1344 1345 *cacheModel = (WebCacheModel)integerValueForKey(CFSTR(WebKitCacheModelPreferenceKey)); 1346 return S_OK; 1347} 1348 1349HRESULT WebPreferences::setCacheModel(WebCacheModel cacheModel) 1350{ 1351 setIntegerValue(CFSTR(WebKitCacheModelPreferenceKey), cacheModel); 1352 return S_OK; 1353} 1354 1355HRESULT WebPreferences::unused3() 1356{ 1357 ASSERT_NOT_REACHED(); 1358 return E_FAIL; 1359} 1360 1361HRESULT WebPreferences::unused4() 1362{ 1363 ASSERT_NOT_REACHED(); 1364 return E_FAIL; 1365} 1366 1367HRESULT WebPreferences::shouldPaintNativeControls(BOOL* shouldPaint) 1368{ 1369 *shouldPaint = boolValueForKey(CFSTR(WebKitPaintNativeControlsPreferenceKey)); 1370 return S_OK; 1371} 1372 1373HRESULT WebPreferences::setShouldPaintNativeControls(BOOL shouldPaint) 1374{ 1375 setBoolValue(CFSTR(WebKitPaintNativeControlsPreferenceKey), shouldPaint); 1376 return S_OK; 1377} 1378 1379HRESULT WebPreferences::setDeveloperExtrasEnabled(BOOL enabled) 1380{ 1381 setBoolValue(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey), enabled); 1382 return S_OK; 1383} 1384 1385HRESULT WebPreferences::developerExtrasEnabled(BOOL* enabled) 1386{ 1387 if (!enabled) 1388 return E_POINTER; 1389 1390 *enabled = boolValueForKey(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey)); 1391 return S_OK; 1392} 1393 1394bool WebPreferences::developerExtrasDisabledByOverride() 1395{ 1396 return !!boolValueForKey(CFSTR(DisableWebKitDeveloperExtrasPreferenceKey)); 1397} 1398 1399HRESULT WebPreferences::setAutomaticallyDetectsCacheModel(BOOL automaticallyDetectsCacheModel) 1400{ 1401 m_automaticallyDetectsCacheModel = !!automaticallyDetectsCacheModel; 1402 return S_OK; 1403} 1404 1405HRESULT WebPreferences::automaticallyDetectsCacheModel(BOOL* automaticallyDetectsCacheModel) 1406{ 1407 if (!automaticallyDetectsCacheModel) 1408 return E_POINTER; 1409 1410 *automaticallyDetectsCacheModel = m_automaticallyDetectsCacheModel; 1411 return S_OK; 1412} 1413 1414HRESULT STDMETHODCALLTYPE WebPreferences::setAuthorAndUserStylesEnabled(BOOL enabled) 1415{ 1416 setBoolValue(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), enabled); 1417 return S_OK; 1418} 1419 1420HRESULT STDMETHODCALLTYPE WebPreferences::authorAndUserStylesEnabled(BOOL* enabled) 1421{ 1422 if (!enabled) 1423 return E_POINTER; 1424 1425 *enabled = boolValueForKey(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey)); 1426 return S_OK; 1427} 1428 1429HRESULT WebPreferences::inApplicationChromeMode(BOOL* enabled) 1430{ 1431 *enabled = boolValueForKey(CFSTR(WebKitApplicationChromeModePreferenceKey)); 1432 return S_OK; 1433} 1434 1435HRESULT WebPreferences::setApplicationChromeMode(BOOL enabled) 1436{ 1437 setBoolValue(CFSTR(WebKitApplicationChromeModePreferenceKey), enabled); 1438 return S_OK; 1439} 1440 1441HRESULT STDMETHODCALLTYPE WebPreferences::setOfflineWebApplicationCacheEnabled(BOOL enabled) 1442{ 1443 setBoolValue(CFSTR(WebKitOfflineWebApplicationCacheEnabledPreferenceKey), enabled); 1444 return S_OK; 1445} 1446 1447HRESULT STDMETHODCALLTYPE WebPreferences::offlineWebApplicationCacheEnabled(BOOL* enabled) 1448{ 1449 *enabled = boolValueForKey(CFSTR(WebKitOfflineWebApplicationCacheEnabledPreferenceKey)); 1450 return S_OK; 1451} 1452 1453HRESULT STDMETHODCALLTYPE WebPreferences::setDatabasesEnabled(BOOL enabled) 1454{ 1455 setBoolValue(CFSTR(WebKitDatabasesEnabledPreferenceKey), enabled); 1456 return S_OK; 1457} 1458 1459HRESULT STDMETHODCALLTYPE WebPreferences::databasesEnabled(BOOL* enabled) 1460{ 1461 *enabled = boolValueForKey(CFSTR(WebKitDatabasesEnabledPreferenceKey)); 1462 return S_OK; 1463} 1464 1465HRESULT STDMETHODCALLTYPE WebPreferences::setLocalStorageEnabled(BOOL enabled) 1466{ 1467 setBoolValue(CFSTR(WebKitLocalStorageEnabledPreferenceKey), enabled); 1468 return S_OK; 1469} 1470 1471HRESULT STDMETHODCALLTYPE WebPreferences::localStorageEnabled(BOOL* enabled) 1472{ 1473 *enabled = boolValueForKey(CFSTR(WebKitLocalStorageEnabledPreferenceKey)); 1474 return S_OK; 1475} 1476 1477HRESULT STDMETHODCALLTYPE WebPreferences::localStorageDatabasePath(BSTR* location) 1478{ 1479 *location = stringValueForKey(CFSTR(WebKitLocalStorageDatabasePathPreferenceKey)); 1480 return (*location) ? S_OK : E_FAIL; 1481} 1482 1483HRESULT STDMETHODCALLTYPE WebPreferences::setLocalStorageDatabasePath(BSTR location) 1484{ 1485 setStringValue(CFSTR(WebKitLocalStorageDatabasePathPreferenceKey), location); 1486 return S_OK; 1487} 1488 1489HRESULT STDMETHODCALLTYPE WebPreferences::setExperimentalNotificationsEnabled(BOOL enabled) 1490{ 1491 setBoolValue(CFSTR(WebKitExperimentalNotificationsEnabledPreferenceKey), enabled); 1492 return S_OK; 1493} 1494 1495HRESULT STDMETHODCALLTYPE WebPreferences::experimentalNotificationsEnabled(BOOL* enabled) 1496{ 1497 *enabled = boolValueForKey(CFSTR(WebKitExperimentalNotificationsEnabledPreferenceKey)); 1498 return S_OK; 1499} 1500 1501HRESULT WebPreferences::setZoomsTextOnly(BOOL zoomsTextOnly) 1502{ 1503 setBoolValue(CFSTR(WebKitZoomsTextOnlyPreferenceKey), zoomsTextOnly); 1504 return S_OK; 1505} 1506 1507HRESULT WebPreferences::zoomsTextOnly(BOOL* zoomsTextOnly) 1508{ 1509 *zoomsTextOnly = boolValueForKey(CFSTR(WebKitZoomsTextOnlyPreferenceKey)); 1510 return S_OK; 1511} 1512 1513HRESULT STDMETHODCALLTYPE WebPreferences::setShouldUseHighResolutionTimers(BOOL useHighResolutionTimers) 1514{ 1515 setBoolValue(CFSTR(WebKitUseHighResolutionTimersPreferenceKey), useHighResolutionTimers); 1516 return S_OK; 1517} 1518 1519HRESULT STDMETHODCALLTYPE WebPreferences::shouldUseHighResolutionTimers(BOOL* useHighResolutionTimers) 1520{ 1521 *useHighResolutionTimers = boolValueForKey(CFSTR(WebKitUseHighResolutionTimersPreferenceKey)); 1522 return S_OK; 1523} 1524 1525HRESULT WebPreferences::setPreferenceForTest(BSTR key, BSTR value) 1526{ 1527 if (!SysStringLen(key) || !SysStringLen(value)) 1528 return E_FAIL; 1529 RetainPtr<CFStringRef> keyString = adoptCF(CFStringCreateWithCharacters(0, reinterpret_cast<UniChar*>(key), SysStringLen(key))); 1530 RetainPtr<CFStringRef> valueString = adoptCF(CFStringCreateWithCharacters(0, reinterpret_cast<UniChar*>(value), SysStringLen(value))); 1531 setValueForKey(keyString.get(), valueString.get()); 1532 postPreferencesChangesNotification(); 1533 return S_OK; 1534} 1535 1536HRESULT WebPreferences::setAcceleratedCompositingEnabled(BOOL enabled) 1537{ 1538 setBoolValue(CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey), enabled); 1539 return S_OK; 1540} 1541 1542HRESULT WebPreferences::acceleratedCompositingEnabled(BOOL* enabled) 1543{ 1544#if USE(ACCELERATED_COMPOSITING) 1545 *enabled = CACFLayerTreeHost::acceleratedCompositingAvailable() && boolValueForKey(CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey)); 1546#else 1547 *enabled = FALSE; 1548#endif 1549 return S_OK; 1550} 1551 1552HRESULT WebPreferences::showDebugBorders(BOOL* enabled) 1553{ 1554 *enabled = boolValueForKey(CFSTR(WebKitShowDebugBordersPreferenceKey)); 1555 return S_OK; 1556} 1557 1558HRESULT WebPreferences::setShowDebugBorders(BOOL enabled) 1559{ 1560 setBoolValue(CFSTR(WebKitShowDebugBordersPreferenceKey), enabled); 1561 return S_OK; 1562} 1563 1564HRESULT WebPreferences::showRepaintCounter(BOOL* enabled) 1565{ 1566 *enabled = boolValueForKey(CFSTR(WebKitShowRepaintCounterPreferenceKey)); 1567 return S_OK; 1568} 1569 1570HRESULT WebPreferences::setShowRepaintCounter(BOOL enabled) 1571{ 1572 setBoolValue(CFSTR(WebKitShowRepaintCounterPreferenceKey), enabled); 1573 return S_OK; 1574} 1575 1576HRESULT WebPreferences::setCustomDragCursorsEnabled(BOOL enabled) 1577{ 1578 setBoolValue(CFSTR(WebKitCustomDragCursorsEnabledPreferenceKey), enabled); 1579 return S_OK; 1580} 1581 1582HRESULT WebPreferences::customDragCursorsEnabled(BOOL* enabled) 1583{ 1584 *enabled = boolValueForKey(CFSTR(WebKitCustomDragCursorsEnabledPreferenceKey)); 1585 return S_OK; 1586} 1587 1588HRESULT WebPreferences::setDNSPrefetchingEnabled(BOOL enabled) 1589{ 1590 setBoolValue(CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey), enabled); 1591 return S_OK; 1592} 1593 1594HRESULT WebPreferences::isDNSPrefetchingEnabled(BOOL* enabled) 1595{ 1596 *enabled = boolValueForKey(CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey)); 1597 return S_OK; 1598} 1599 1600HRESULT WebPreferences::isFullScreenEnabled(BOOL* enabled) 1601{ 1602#if ENABLE(FULLSCREEN_API) 1603 if (!enabled) 1604 return E_POINTER; 1605 1606 *enabled = boolValueForKey(CFSTR(WebKitFullScreenEnabledPreferenceKey)); 1607 return S_OK; 1608#else 1609 return E_NOTIMPL; 1610#endif 1611} 1612 1613HRESULT WebPreferences::setFullScreenEnabled(BOOL enabled) 1614{ 1615#if ENABLE(FULLSCREEN_API) 1616 setBoolValue(CFSTR(WebKitFullScreenEnabledPreferenceKey), enabled); 1617 return S_OK; 1618#else 1619 return E_NOTIMPL; 1620#endif 1621} 1622 1623HRESULT WebPreferences::avFoundationEnabled(BOOL* enabled) 1624{ 1625#if USE(AVFOUNDATION) 1626 if (!enabled) 1627 return E_POINTER; 1628 1629 *enabled = boolValueForKey(CFSTR(WebKitAVFoundationEnabledPreferenceKey)); 1630 return S_OK; 1631#else 1632 return E_NOTIMPL; 1633#endif 1634} 1635 1636HRESULT WebPreferences::setAVFoundationEnabled(BOOL enabled) 1637{ 1638#if USE(AVFOUNDATION) 1639 setBoolValue(CFSTR(WebKitAVFoundationEnabledPreferenceKey), enabled); 1640 return S_OK; 1641#else 1642 return E_NOTIMPL; 1643#endif 1644} 1645 1646HRESULT WebPreferences::showsToolTipOverTruncatedText(BOOL* showsToolTip) 1647{ 1648 if (!showsToolTip) 1649 return E_POINTER; 1650 1651 *showsToolTip = boolValueForKey(CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey)); 1652 return S_OK; 1653} 1654 1655HRESULT WebPreferences::setShowsToolTipOverTruncatedText(BOOL showsToolTip) 1656{ 1657 setBoolValue(CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey), showsToolTip); 1658 return S_OK; 1659} 1660 1661HRESULT WebPreferences::shouldInvertColors(BOOL* shouldInvertColors) 1662{ 1663 if (!shouldInvertColors) 1664 return E_POINTER; 1665 1666 *shouldInvertColors = boolValueForKey(CFSTR(WebKitShouldInvertColorsPreferenceKey)); 1667 return S_OK; 1668} 1669 1670HRESULT WebPreferences::setShouldInvertColors(BOOL shouldInvertColors) 1671{ 1672 setBoolValue(CFSTR(WebKitShouldInvertColorsPreferenceKey), shouldInvertColors); 1673 return S_OK; 1674} 1675 1676void WebPreferences::willAddToWebView() 1677{ 1678 ++m_numWebViews; 1679} 1680 1681void WebPreferences::didRemoveFromWebView() 1682{ 1683 ASSERT(m_numWebViews); 1684 if (--m_numWebViews == 0) { 1685 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal(); 1686 nc->postNotificationName(webPreferencesRemovedNotification(), static_cast<IWebPreferences*>(this), 0); 1687 } 1688} 1689 1690HRESULT WebPreferences::shouldDisplaySubtitles(BOOL* enabled) 1691{ 1692#if ENABLE(VIDEO_TRACK) 1693 if (!enabled) 1694 return E_POINTER; 1695 1696 *enabled = boolValueForKey(CFSTR(WebKitShouldDisplaySubtitlesPreferenceKey)); 1697 return S_OK; 1698#else 1699 return E_NOTIMPL; 1700#endif 1701} 1702 1703HRESULT WebPreferences::setShouldDisplaySubtitles(BOOL enabled) 1704{ 1705#if ENABLE(VIDEO_TRACK) 1706 setBoolValue(CFSTR(WebKitShouldDisplaySubtitlesPreferenceKey), enabled); 1707 return S_OK; 1708#else 1709 return E_NOTIMPL; 1710#endif 1711} 1712 1713HRESULT WebPreferences::shouldDisplayCaptions(BOOL* enabled) 1714{ 1715#if ENABLE(VIDEO_TRACK) 1716 if (!enabled) 1717 return E_POINTER; 1718 1719 *enabled = boolValueForKey(CFSTR(WebKitShouldDisplayCaptionsPreferenceKey)); 1720 return S_OK; 1721#else 1722 return E_NOTIMPL; 1723#endif 1724} 1725 1726HRESULT WebPreferences::setShouldDisplayCaptions(BOOL enabled) 1727{ 1728#if ENABLE(VIDEO_TRACK) 1729 setBoolValue(CFSTR(WebKitShouldDisplayCaptionsPreferenceKey), enabled); 1730 return S_OK; 1731#else 1732 return E_NOTIMPL; 1733#endif 1734} 1735 1736HRESULT WebPreferences::shouldDisplayTextDescriptions(BOOL* enabled) 1737{ 1738#if ENABLE(VIDEO_TRACK) 1739 if (!enabled) 1740 return E_POINTER; 1741 1742 *enabled = boolValueForKey(CFSTR(WebKitShouldDisplayTextDescriptionsPreferenceKey)); 1743 return S_OK; 1744#else 1745 return E_NOTIMPL; 1746#endif 1747} 1748 1749HRESULT WebPreferences::setShouldDisplayTextDescriptions(BOOL enabled) 1750{ 1751#if ENABLE(VIDEO_TRACK) 1752 setBoolValue(CFSTR(WebKitShouldDisplayTextDescriptionsPreferenceKey), enabled); 1753 return S_OK; 1754#else 1755 return E_NOTIMPL; 1756#endif 1757} 1758 1759HRESULT WebPreferences::setRequestAnimationFrameEnabled(BOOL enabled) 1760{ 1761 setBoolValue(CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey), enabled); 1762 return S_OK; 1763} 1764 1765HRESULT WebPreferences::requestAnimationFrameEnabled(BOOL* enabled) 1766{ 1767 *enabled = boolValueForKey(CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey)); 1768 return S_OK; 1769} 1770 1771HRESULT WebPreferences::isInheritURIQueryComponentEnabled(BOOL* enabled) 1772{ 1773 *enabled = boolValueForKey(CFSTR(WebKitEnableInheritURIQueryComponentPreferenceKey)); 1774 return S_OK; 1775} 1776 1777HRESULT WebPreferences::setEnableInheritURIQueryComponent(BOOL enabled) 1778{ 1779 setBoolValue(CFSTR(WebKitEnableInheritURIQueryComponentPreferenceKey), enabled); 1780 return S_OK; 1781} 1782