2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
28 #include "WebKitDLL.h"
29 #include "WebPreferences.h"
31 #include "WebNotificationCenter.h"
32 #include "WebPreferenceKeysPrivate.h"
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>
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>
50 #include <CoreGraphics/CoreGraphics.h>
51 #include <WebKitSystemInterface/WebKitSystemInterface.h>
54 using namespace WebCore;
55 using std::numeric_limits;
57 static const String& oldPreferencesPath()
59 static String path = pathByAppendingComponent(roamingUserSpecificStorageDirectory(), "WebKitPreferences.plist");
63 template<typename NumberType> struct CFNumberTraits { static const unsigned Type; };
64 template<> struct CFNumberTraits<int> { static const unsigned Type = kCFNumberSInt32Type; };
65 template<> struct CFNumberTraits<LONGLONG> { static const unsigned Type = kCFNumberLongLongType; };
66 template<> struct CFNumberTraits<float> { static const unsigned Type = kCFNumberFloat32Type; };
68 template<typename NumberType>
69 static NumberType numberValueForPreferencesValue(CFPropertyListRef value)
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()) {
82 CFNumberGetValue(static_cast<CFNumberRef>(value), CFNumberTraits<NumberType>::Type, &val);
89 template<typename NumberType>
90 static RetainPtr<CFNumberRef> cfNumber(NumberType value)
92 return RetainPtr<CFNumberRef>(AdoptCF, CFNumberCreate(0, CFNumberTraits<NumberType>::Type, &value));
95 static bool booleanValueForPreferencesValue(CFPropertyListRef value)
97 return numberValueForPreferencesValue<int>(value);
100 // WebPreferences ----------------------------------------------------------------
102 static CFDictionaryRef defaultSettings;
104 static HashMap<WTF::String, COMPtr<WebPreferences> > webPreferencesInstances;
106 WebPreferences* WebPreferences::sharedStandardPreferences()
108 static WebPreferences* standardPreferences;
109 if (!standardPreferences) {
110 standardPreferences = WebPreferences::createInstance();
111 standardPreferences->setAutosaves(TRUE);
112 standardPreferences->load();
115 return standardPreferences;
118 WebPreferences::WebPreferences()
121 , m_automaticallyDetectsCacheModel(true)
125 gClassNameCount.add("WebPreferences");
128 WebPreferences::~WebPreferences()
131 gClassNameCount.remove("WebPreferences");
134 WebPreferences* WebPreferences::createInstance()
136 WebPreferences* instance = new WebPreferences();
141 HRESULT WebPreferences::postPreferencesChangesNotification()
143 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal();
144 HRESULT hr = nc->postNotificationName(webPreferencesChangedNotification(), static_cast<IWebPreferences*>(this), 0);
151 WebPreferences* WebPreferences::getInstanceForIdentifier(BSTR identifier)
154 return sharedStandardPreferences();
156 WTF::String identifierString(identifier, SysStringLen(identifier));
157 return webPreferencesInstances.get(identifierString).get();
160 void WebPreferences::setInstance(WebPreferences* instance, BSTR identifier)
162 if (!identifier || !instance)
164 WTF::String identifierString(identifier, SysStringLen(identifier));
165 webPreferencesInstances.add(identifierString, instance);
168 void WebPreferences::removeReferenceForIdentifier(BSTR identifier)
170 if (!identifier || webPreferencesInstances.isEmpty())
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);
179 void WebPreferences::initializeDefaultSettings()
184 CFMutableDictionaryRef defaults = CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
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"));
198 String defaultDefaultEncoding(WEB_UI_STRING("ISO-8859-1", "The default, default character encoding"));
199 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), defaultDefaultEncoding.createCFString());
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);
236 RetainPtr<CFStringRef> linkBehaviorStringRef(AdoptCF, CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebKitEditableLinkDefaultBehavior));
237 CFDictionaryAddValue(defaults, CFSTR(WebKitEditableLinkBehaviorPreferenceKey), linkBehaviorStringRef.get());
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(""));
252 RetainPtr<CFStringRef> cacheModelRef(AdoptCF, CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebCacheModelDocumentViewer));
253 CFDictionaryAddValue(defaults, CFSTR(WebKitCacheModelPreferenceKey), cacheModelRef.get());
255 CFDictionaryAddValue(defaults, CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), kCFBooleanTrue);
256 CFDictionaryAddValue(defaults, CFSTR(WebKitApplicationChromeModePreferenceKey), kCFBooleanFalse);
258 CFDictionaryAddValue(defaults, CFSTR(WebKitOfflineWebApplicationCacheEnabledPreferenceKey), kCFBooleanFalse);
260 CFDictionaryAddValue(defaults, CFSTR(WebKitPaintNativeControlsPreferenceKey), kCFBooleanTrue);
262 CFDictionaryAddValue(defaults, CFSTR(WebKitUseHighResolutionTimersPreferenceKey), kCFBooleanTrue);
264 CFDictionaryAddValue(defaults, CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey), kCFBooleanFalse);
266 CFDictionaryAddValue(defaults, CFSTR(WebKitShowDebugBordersPreferenceKey), kCFBooleanFalse);
268 CFDictionaryAddValue(defaults, CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey), kCFBooleanFalse);
270 CFDictionaryAddValue(defaults, CFSTR(WebKitMemoryInfoEnabledPreferenceKey), kCFBooleanFalse);
271 CFDictionaryAddValue(defaults, CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey), kCFBooleanTrue);
273 CFDictionaryAddValue(defaults, CFSTR(WebKitMediaPlaybackRequiresUserGesturePreferenceKey), kCFBooleanFalse);
274 CFDictionaryAddValue(defaults, CFSTR(WebKitMediaPlaybackAllowsInlinePreferenceKey), kCFBooleanTrue);
276 CFDictionaryAddValue(defaults, CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey), kCFBooleanTrue);
278 defaultSettings = defaults;
281 RetainPtr<CFPropertyListRef> WebPreferences::valueForKey(CFStringRef key)
283 RetainPtr<CFPropertyListRef> value = CFDictionaryGetValue(m_privatePrefs.get(), key);
287 value.adoptCF(CFPreferencesCopyAppValue(key, kCFPreferencesCurrentApplication));
291 return CFDictionaryGetValue(defaultSettings, key);
294 void WebPreferences::setValueForKey(CFStringRef key, CFPropertyListRef value)
296 CFDictionarySetValue(m_privatePrefs.get(), key, value);
298 CFPreferencesSetAppValue(key, value, kCFPreferencesCurrentApplication);
303 BSTR WebPreferences::stringValueForKey(CFStringRef key)
305 RetainPtr<CFPropertyListRef> value = valueForKey(key);
307 if (!value || (CFGetTypeID(value.get()) != CFStringGetTypeID()))
310 CFStringRef str = static_cast<CFStringRef>(value.get());
312 CFIndex length = CFStringGetLength(str);
313 const UniChar* uniChars = CFStringGetCharactersPtr(str);
315 return SysAllocStringLen((LPCTSTR)uniChars, length);
317 BSTR bstr = SysAllocStringLen(0, length);
321 if (!CFStringGetCString(str, (char*)bstr, (length+1)*sizeof(WCHAR), kCFStringEncodingUTF16)) {
330 int WebPreferences::integerValueForKey(CFStringRef key)
332 return numberValueForPreferencesValue<int>(valueForKey(key).get());
335 BOOL WebPreferences::boolValueForKey(CFStringRef key)
337 return booleanValueForPreferencesValue(valueForKey(key).get());
340 float WebPreferences::floatValueForKey(CFStringRef key)
342 return numberValueForPreferencesValue<float>(valueForKey(key).get());
345 LONGLONG WebPreferences::longlongValueForKey(CFStringRef key)
347 return numberValueForPreferencesValue<LONGLONG>(valueForKey(key).get());
350 void WebPreferences::setStringValue(CFStringRef key, LPCTSTR value)
352 BSTR val = stringValueForKey(key);
353 if (val && !wcscmp(val, value))
357 RetainPtr<CFStringRef> valueRef(AdoptCF,
358 CFStringCreateWithCharactersNoCopy(0, (UniChar*)_wcsdup(value), (CFIndex)wcslen(value), kCFAllocatorMalloc));
359 setValueForKey(key, valueRef.get());
361 postPreferencesChangesNotification();
364 void WebPreferences::setIntegerValue(CFStringRef key, int value)
366 if (integerValueForKey(key) == value)
369 setValueForKey(key, cfNumber(value).get());
371 postPreferencesChangesNotification();
374 void WebPreferences::setFloatValue(CFStringRef key, float value)
376 if (floatValueForKey(key) == value)
379 setValueForKey(key, cfNumber(value).get());
381 postPreferencesChangesNotification();
384 void WebPreferences::setBoolValue(CFStringRef key, BOOL value)
386 if (boolValueForKey(key) == value)
389 setValueForKey(key, value ? kCFBooleanTrue : kCFBooleanFalse);
391 postPreferencesChangesNotification();
394 void WebPreferences::setLongLongValue(CFStringRef key, LONGLONG value)
396 if (longlongValueForKey(key) == value)
399 setValueForKey(key, cfNumber(value).get());
401 postPreferencesChangesNotification();
404 BSTR WebPreferences::webPreferencesChangedNotification()
406 static BSTR webPreferencesChangedNotification = SysAllocString(WebPreferencesChangedNotification);
407 return webPreferencesChangedNotification;
410 BSTR WebPreferences::webPreferencesRemovedNotification()
412 static BSTR webPreferencesRemovedNotification = SysAllocString(WebPreferencesRemovedNotification);
413 return webPreferencesRemovedNotification;
416 void WebPreferences::save()
418 CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
421 void WebPreferences::load()
423 initializeDefaultSettings();
425 m_privatePrefs.adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
427 migrateWebKitPreferencesToCFPreferences();
430 void WebPreferences::migrateWebKitPreferencesToCFPreferences()
432 CFStringRef didMigrateKey = CFSTR(WebKitDidMigrateWebKitPreferencesToCFPreferencesPreferenceKey);
433 if (boolValueForKey(didMigrateKey))
435 bool oldValue = m_autoSaves;
437 setBoolValue(didMigrateKey, TRUE);
438 m_autoSaves = oldValue;
440 WTF::CString path = oldPreferencesPath().utf8();
442 RetainPtr<CFURLRef> urlRef(AdoptCF, CFURLCreateFromFileSystemRepresentation(0, reinterpret_cast<const UInt8*>(path.data()), path.length(), false));
446 RetainPtr<CFReadStreamRef> stream(AdoptCF, CFReadStreamCreateWithFile(0, urlRef.get()));
450 if (!CFReadStreamOpen(stream.get()))
453 CFPropertyListFormat format = kCFPropertyListBinaryFormat_v1_0 | kCFPropertyListXMLFormat_v1_0;
454 RetainPtr<CFPropertyListRef> plist(AdoptCF, CFPropertyListCreateFromStream(0, stream.get(), 0, kCFPropertyListMutableContainersAndLeaves, &format, 0));
455 CFReadStreamClose(stream.get());
457 if (!plist || CFGetTypeID(plist.get()) != CFDictionaryGetTypeID())
460 copyWebKitPreferencesToCFPreferences(static_cast<CFDictionaryRef>(plist.get()));
462 deleteFile(oldPreferencesPath());
465 void WebPreferences::copyWebKitPreferencesToCFPreferences(CFDictionaryRef dict)
467 ASSERT_ARG(dict, dict);
469 int count = CFDictionaryGetCount(dict);
473 CFStringRef didRemoveDefaultsKey = CFSTR(WebKitDidMigrateDefaultSettingsFromSafari3BetaPreferenceKey);
474 bool omitDefaults = !booleanValueForPreferencesValue(CFDictionaryGetValue(dict, didRemoveDefaultsKey));
476 OwnArrayPtr<CFTypeRef> keys = adoptArrayPtr(new CFTypeRef[count]);
477 OwnArrayPtr<CFTypeRef> values = adoptArrayPtr(new CFTypeRef[count]);
478 CFDictionaryGetKeysAndValues(dict, keys.get(), values.get());
480 for (int i = 0; i < count; ++i) {
481 if (!keys[i] || !values[i] || CFGetTypeID(keys[i]) != CFStringGetTypeID())
485 CFTypeRef defaultValue = CFDictionaryGetValue(defaultSettings, keys[i]);
486 if (defaultValue && CFEqual(defaultValue, values[i]))
490 setValueForKey(static_cast<CFStringRef>(keys[i]), values[i]);
494 // IUnknown -------------------------------------------------------------------
496 HRESULT STDMETHODCALLTYPE WebPreferences::QueryInterface(REFIID riid, void** ppvObject)
499 if (IsEqualGUID(riid, IID_IUnknown))
500 *ppvObject = static_cast<IWebPreferences*>(this);
501 else if (IsEqualGUID(riid, IID_IWebPreferences))
502 *ppvObject = static_cast<IWebPreferences*>(this);
503 else if (IsEqualGUID(riid, IID_IWebPreferencesPrivate))
504 *ppvObject = static_cast<IWebPreferencesPrivate*>(this);
505 else if (IsEqualGUID(riid, CLSID_WebPreferences))
508 return E_NOINTERFACE;
514 ULONG STDMETHODCALLTYPE WebPreferences::AddRef(void)
519 ULONG STDMETHODCALLTYPE WebPreferences::Release(void)
521 ULONG newRef = --m_refCount;
528 // IWebPreferences ------------------------------------------------------------
530 HRESULT STDMETHODCALLTYPE WebPreferences::standardPreferences(
531 /* [retval][out] */ IWebPreferences** standardPreferences)
533 if (!standardPreferences)
535 *standardPreferences = sharedStandardPreferences();
536 (*standardPreferences)->AddRef();
540 HRESULT STDMETHODCALLTYPE WebPreferences::initWithIdentifier(
541 /* [in] */ BSTR anIdentifier,
542 /* [retval][out] */ IWebPreferences** preferences)
544 WebPreferences *instance = getInstanceForIdentifier(anIdentifier);
546 *preferences = instance;
557 m_identifier = anIdentifier;
558 setInstance(this, m_identifier);
561 this->postPreferencesChangesNotification();
566 HRESULT STDMETHODCALLTYPE WebPreferences::identifier(
567 /* [retval][out] */ BSTR* ident)
571 *ident = m_identifier ? SysAllocString(m_identifier) : 0;
575 HRESULT STDMETHODCALLTYPE WebPreferences::standardFontFamily(
576 /* [retval][out] */ BSTR* family)
578 *family = stringValueForKey(CFSTR(WebKitStandardFontPreferenceKey));
579 return (*family) ? S_OK : E_FAIL;
582 HRESULT STDMETHODCALLTYPE WebPreferences::setStandardFontFamily(
583 /* [in] */ BSTR family)
585 setStringValue(CFSTR(WebKitStandardFontPreferenceKey), family);
589 HRESULT STDMETHODCALLTYPE WebPreferences::fixedFontFamily(
590 /* [retval][out] */ BSTR* family)
592 *family = stringValueForKey(CFSTR(WebKitFixedFontPreferenceKey));
593 return (*family) ? S_OK : E_FAIL;
596 HRESULT STDMETHODCALLTYPE WebPreferences::setFixedFontFamily(
597 /* [in] */ BSTR family)
599 setStringValue(CFSTR(WebKitFixedFontPreferenceKey), family);
603 HRESULT STDMETHODCALLTYPE WebPreferences::serifFontFamily(
604 /* [retval][out] */ BSTR* fontFamily)
606 *fontFamily = stringValueForKey(CFSTR(WebKitSerifFontPreferenceKey));
607 return (*fontFamily) ? S_OK : E_FAIL;
610 HRESULT STDMETHODCALLTYPE WebPreferences::setSerifFontFamily(
611 /* [in] */ BSTR family)
613 setStringValue(CFSTR(WebKitSerifFontPreferenceKey), family);
617 HRESULT STDMETHODCALLTYPE WebPreferences::sansSerifFontFamily(
618 /* [retval][out] */ BSTR* family)
620 *family = stringValueForKey(CFSTR(WebKitSansSerifFontPreferenceKey));
621 return (*family) ? S_OK : E_FAIL;
624 HRESULT STDMETHODCALLTYPE WebPreferences::setSansSerifFontFamily(
625 /* [in] */ BSTR family)
627 setStringValue(CFSTR(WebKitSansSerifFontPreferenceKey), family);
631 HRESULT STDMETHODCALLTYPE WebPreferences::cursiveFontFamily(
632 /* [retval][out] */ BSTR* family)
634 *family = stringValueForKey(CFSTR(WebKitCursiveFontPreferenceKey));
635 return (*family) ? S_OK : E_FAIL;
638 HRESULT STDMETHODCALLTYPE WebPreferences::setCursiveFontFamily(
639 /* [in] */ BSTR family)
641 setStringValue(CFSTR(WebKitCursiveFontPreferenceKey), family);
645 HRESULT STDMETHODCALLTYPE WebPreferences::fantasyFontFamily(
646 /* [retval][out] */ BSTR* family)
648 *family = stringValueForKey(CFSTR(WebKitFantasyFontPreferenceKey));
649 return (*family) ? S_OK : E_FAIL;
652 HRESULT STDMETHODCALLTYPE WebPreferences::setFantasyFontFamily(
653 /* [in] */ BSTR family)
655 setStringValue(CFSTR(WebKitFantasyFontPreferenceKey), family);
659 HRESULT STDMETHODCALLTYPE WebPreferences::pictographFontFamily(
660 /* [retval][out] */ BSTR* family)
662 *family = stringValueForKey(CFSTR(WebKitPictographFontPreferenceKey));
663 return (*family) ? S_OK : E_FAIL;
666 HRESULT STDMETHODCALLTYPE WebPreferences::setPictographFontFamily(
667 /* [in] */ BSTR family)
669 setStringValue(CFSTR(WebKitPictographFontPreferenceKey), family);
673 HRESULT STDMETHODCALLTYPE WebPreferences::defaultFontSize(
674 /* [retval][out] */ int* fontSize)
676 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFontSizePreferenceKey));
680 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFontSize(
681 /* [in] */ int fontSize)
683 setIntegerValue(CFSTR(WebKitDefaultFontSizePreferenceKey), fontSize);
687 HRESULT STDMETHODCALLTYPE WebPreferences::defaultFixedFontSize(
688 /* [retval][out] */ int* fontSize)
690 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFixedFontSizePreferenceKey));
694 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFixedFontSize(
695 /* [in] */ int fontSize)
697 setIntegerValue(CFSTR(WebKitDefaultFixedFontSizePreferenceKey), fontSize);
701 HRESULT STDMETHODCALLTYPE WebPreferences::minimumFontSize(
702 /* [retval][out] */ int* fontSize)
704 *fontSize = integerValueForKey(CFSTR(WebKitMinimumFontSizePreferenceKey));
708 HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumFontSize(
709 /* [in] */ int fontSize)
711 setIntegerValue(CFSTR(WebKitMinimumFontSizePreferenceKey), fontSize);
715 HRESULT STDMETHODCALLTYPE WebPreferences::minimumLogicalFontSize(
716 /* [retval][out] */ int* fontSize)
718 *fontSize = integerValueForKey(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey));
722 HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumLogicalFontSize(
723 /* [in] */ int fontSize)
725 setIntegerValue(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), fontSize);
729 HRESULT STDMETHODCALLTYPE WebPreferences::defaultTextEncodingName(
730 /* [retval][out] */ BSTR* name)
732 *name = stringValueForKey(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey));
733 return (*name) ? S_OK : E_FAIL;
736 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultTextEncodingName(
737 /* [in] */ BSTR name)
739 setStringValue(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), name);
743 HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetEnabled(
744 /* [retval][out] */ BOOL* enabled)
746 *enabled = boolValueForKey(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey));
750 HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetEnabled(
751 /* [in] */ BOOL enabled)
753 setBoolValue(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), enabled);
757 HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetLocation(
758 /* [retval][out] */ BSTR* location)
760 *location = stringValueForKey(CFSTR(WebKitUserStyleSheetLocationPreferenceKey));
761 return (*location) ? S_OK : E_FAIL;
764 HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetLocation(
765 /* [in] */ BSTR location)
767 setStringValue(CFSTR(WebKitUserStyleSheetLocationPreferenceKey), location);
771 HRESULT STDMETHODCALLTYPE WebPreferences::isJavaEnabled(
772 /* [retval][out] */ BOOL* enabled)
774 *enabled = boolValueForKey(CFSTR(WebKitJavaEnabledPreferenceKey));
778 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaEnabled(
779 /* [in] */ BOOL enabled)
781 setBoolValue(CFSTR(WebKitJavaEnabledPreferenceKey), enabled);
785 HRESULT STDMETHODCALLTYPE WebPreferences::isJavaScriptEnabled(
786 /* [retval][out] */ BOOL* enabled)
788 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptEnabledPreferenceKey));
792 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptEnabled(
793 /* [in] */ BOOL enabled)
795 setBoolValue(CFSTR(WebKitJavaScriptEnabledPreferenceKey), enabled);
799 HRESULT STDMETHODCALLTYPE WebPreferences::isWebSecurityEnabled(
800 /* [retval][out] */ BOOL* enabled)
802 *enabled = boolValueForKey(CFSTR(WebKitWebSecurityEnabledPreferenceKey));
806 HRESULT STDMETHODCALLTYPE WebPreferences::setWebSecurityEnabled(
807 /* [in] */ BOOL enabled)
809 setBoolValue(CFSTR(WebKitWebSecurityEnabledPreferenceKey), enabled);
813 HRESULT STDMETHODCALLTYPE WebPreferences::allowUniversalAccessFromFileURLs(
814 /* [retval][out] */ BOOL* allowAccess)
816 *allowAccess = boolValueForKey(CFSTR(WebKitAllowUniversalAccessFromFileURLsPreferenceKey));
820 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowUniversalAccessFromFileURLs(
821 /* [in] */ BOOL allowAccess)
823 setBoolValue(CFSTR(WebKitAllowUniversalAccessFromFileURLsPreferenceKey), allowAccess);
827 HRESULT STDMETHODCALLTYPE WebPreferences::allowFileAccessFromFileURLs(
828 /* [retval][out] */ BOOL* allowAccess)
830 *allowAccess = boolValueForKey(CFSTR(WebKitAllowFileAccessFromFileURLsPreferenceKey));
834 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowFileAccessFromFileURLs(
835 /* [in] */ BOOL allowAccess)
837 setBoolValue(CFSTR(WebKitAllowFileAccessFromFileURLsPreferenceKey), allowAccess);
841 HRESULT STDMETHODCALLTYPE WebPreferences::javaScriptCanAccessClipboard(
842 /* [retval][out] */ BOOL* enabled)
844 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptCanAccessClipboardPreferenceKey));
848 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptCanAccessClipboard(
849 /* [in] */ BOOL enabled)
851 setBoolValue(CFSTR(WebKitJavaScriptCanAccessClipboardPreferenceKey), enabled);
855 HRESULT STDMETHODCALLTYPE WebPreferences::isXSSAuditorEnabled(
856 /* [retval][out] */ BOOL* enabled)
858 *enabled = boolValueForKey(CFSTR(WebKitXSSAuditorEnabledPreferenceKey));
862 HRESULT STDMETHODCALLTYPE WebPreferences::setXSSAuditorEnabled(
863 /* [in] */ BOOL enabled)
865 setBoolValue(CFSTR(WebKitXSSAuditorEnabledPreferenceKey), enabled);
869 HRESULT STDMETHODCALLTYPE WebPreferences::isFrameFlatteningEnabled(
870 /* [retval][out] */ BOOL* enabled)
872 *enabled = boolValueForKey(CFSTR(WebKitFrameFlatteningEnabledPreferenceKey));
876 HRESULT STDMETHODCALLTYPE WebPreferences::setFrameFlatteningEnabled(
877 /* [in] */ BOOL enabled)
879 setBoolValue(CFSTR(WebKitFrameFlatteningEnabledPreferenceKey), enabled);
883 HRESULT STDMETHODCALLTYPE WebPreferences::javaScriptCanOpenWindowsAutomatically(
884 /* [retval][out] */ BOOL* enabled)
886 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey));
890 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptCanOpenWindowsAutomatically(
891 /* [in] */ BOOL enabled)
893 setBoolValue(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), enabled);
897 HRESULT STDMETHODCALLTYPE WebPreferences::arePlugInsEnabled(
898 /* [retval][out] */ BOOL* enabled)
900 *enabled = boolValueForKey(CFSTR(WebKitPluginsEnabledPreferenceKey));
904 HRESULT STDMETHODCALLTYPE WebPreferences::setPlugInsEnabled(
905 /* [in] */ BOOL enabled)
907 setBoolValue(CFSTR(WebKitPluginsEnabledPreferenceKey), enabled);
911 HRESULT STDMETHODCALLTYPE WebPreferences::isCSSRegionsEnabled(
912 /* [retval][out] */ BOOL* enabled)
914 *enabled = boolValueForKey(CFSTR(WebKitCSSRegionsEnabledPreferenceKey));
918 HRESULT STDMETHODCALLTYPE WebPreferences::setCSSRegionsEnabled(
919 /* [in] */ BOOL enabled)
921 setBoolValue(CFSTR(WebKitCSSRegionsEnabledPreferenceKey), enabled);
925 HRESULT STDMETHODCALLTYPE WebPreferences::allowsAnimatedImages(
926 /* [retval][out] */ BOOL* enabled)
928 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImagesPreferenceKey));
932 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowsAnimatedImages(
933 /* [in] */ BOOL enabled)
935 setBoolValue(CFSTR(WebKitAllowAnimatedImagesPreferenceKey), enabled);
939 HRESULT STDMETHODCALLTYPE WebPreferences::allowAnimatedImageLooping(
940 /* [retval][out] */ BOOL* enabled)
942 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey));
946 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowAnimatedImageLooping(
947 /* [in] */ BOOL enabled)
949 setBoolValue(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), enabled);
953 HRESULT STDMETHODCALLTYPE WebPreferences::setLoadsImagesAutomatically(
954 /* [in] */ BOOL enabled)
956 setBoolValue(CFSTR(WebKitDisplayImagesKey), enabled);
960 HRESULT STDMETHODCALLTYPE WebPreferences::loadsImagesAutomatically(
961 /* [retval][out] */ BOOL* enabled)
963 *enabled = boolValueForKey(CFSTR(WebKitDisplayImagesKey));
967 HRESULT STDMETHODCALLTYPE WebPreferences::setLoadsSiteIconsIgnoringImageLoadingPreference(
968 /* [in] */ BOOL enabled)
970 setBoolValue(CFSTR(WebKitLoadSiteIconsKey), enabled);
974 HRESULT STDMETHODCALLTYPE WebPreferences::loadsSiteIconsIgnoringImageLoadingPreference(
975 /* [retval][out] */ BOOL* enabled)
977 *enabled = boolValueForKey(CFSTR(WebKitLoadSiteIconsKey));
981 HRESULT STDMETHODCALLTYPE WebPreferences::setHixie76WebSocketProtocolEnabled(
982 /* [in] */ BOOL enabled)
987 HRESULT STDMETHODCALLTYPE WebPreferences::hixie76WebSocketProtocolEnabled(
988 /* [retval][out] */ BOOL* enabled)
994 HRESULT STDMETHODCALLTYPE WebPreferences::setMediaPlaybackRequiresUserGesture(
995 /* [in] */ BOOL enabled)
997 setBoolValue(CFSTR(WebKitMediaPlaybackRequiresUserGesturePreferenceKey), enabled);
1001 HRESULT STDMETHODCALLTYPE WebPreferences::mediaPlaybackRequiresUserGesture(
1002 /* [retval][out] */ BOOL* enabled)
1004 *enabled = boolValueForKey(CFSTR(WebKitMediaPlaybackRequiresUserGesturePreferenceKey));
1008 HRESULT STDMETHODCALLTYPE WebPreferences::setMediaPlaybackAllowsInline(
1009 /* [in] */ BOOL enabled)
1011 setBoolValue(CFSTR(WebKitMediaPlaybackAllowsInlinePreferenceKey), enabled);
1015 HRESULT STDMETHODCALLTYPE WebPreferences::mediaPlaybackAllowsInline(
1016 /* [retval][out] */ BOOL* enabled)
1018 *enabled = boolValueForKey(CFSTR(WebKitMediaPlaybackAllowsInlinePreferenceKey));
1022 HRESULT STDMETHODCALLTYPE WebPreferences::setAutosaves(
1023 /* [in] */ BOOL enabled)
1025 m_autoSaves = !!enabled;
1029 HRESULT STDMETHODCALLTYPE WebPreferences::autosaves(
1030 /* [retval][out] */ BOOL* enabled)
1032 *enabled = m_autoSaves ? TRUE : FALSE;
1036 HRESULT STDMETHODCALLTYPE WebPreferences::setShouldPrintBackgrounds(
1037 /* [in] */ BOOL enabled)
1039 setBoolValue(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), enabled);
1043 HRESULT STDMETHODCALLTYPE WebPreferences::shouldPrintBackgrounds(
1044 /* [retval][out] */ BOOL* enabled)
1046 *enabled = boolValueForKey(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey));
1050 HRESULT STDMETHODCALLTYPE WebPreferences::setPrivateBrowsingEnabled(
1051 /* [in] */ BOOL enabled)
1053 setBoolValue(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), enabled);
1057 HRESULT STDMETHODCALLTYPE WebPreferences::privateBrowsingEnabled(
1058 /* [retval][out] */ BOOL* enabled)
1060 *enabled = boolValueForKey(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey));
1064 HRESULT STDMETHODCALLTYPE WebPreferences::setTabsToLinks(
1065 /* [in] */ BOOL enabled)
1067 setBoolValue(CFSTR(WebKitTabToLinksPreferenceKey), enabled);
1071 HRESULT STDMETHODCALLTYPE WebPreferences::tabsToLinks(
1072 /* [retval][out] */ BOOL* enabled)
1074 *enabled = boolValueForKey(CFSTR(WebKitTabToLinksPreferenceKey));
1078 HRESULT STDMETHODCALLTYPE WebPreferences::setUsesPageCache(
1079 /* [in] */ BOOL usesPageCache)
1081 setBoolValue(CFSTR(WebKitUsesPageCachePreferenceKey), usesPageCache);
1085 HRESULT STDMETHODCALLTYPE WebPreferences::usesPageCache(
1086 /* [retval][out] */ BOOL* usesPageCache)
1088 *usesPageCache = boolValueForKey(CFSTR(WebKitUsesPageCachePreferenceKey));
1092 HRESULT STDMETHODCALLTYPE WebPreferences::textAreasAreResizable(
1093 /* [retval][out] */ BOOL* enabled)
1095 *enabled = boolValueForKey(CFSTR(WebKitTextAreasAreResizablePreferenceKey));
1099 HRESULT STDMETHODCALLTYPE WebPreferences::setTextAreasAreResizable(
1100 /* [in] */ BOOL enabled)
1102 setBoolValue(CFSTR(WebKitTextAreasAreResizablePreferenceKey), enabled);
1106 HRESULT WebPreferences::historyItemLimit(int* limit)
1108 *limit = integerValueForKey(CFSTR(WebKitHistoryItemLimitKey));
1112 HRESULT WebPreferences::setHistoryItemLimit(int limit)
1114 setIntegerValue(CFSTR(WebKitHistoryItemLimitKey), limit);
1118 HRESULT WebPreferences::historyAgeInDaysLimit(int* limit)
1120 *limit = integerValueForKey(CFSTR(WebKitHistoryAgeInDaysLimitKey));
1124 HRESULT WebPreferences::setHistoryAgeInDaysLimit(int limit)
1126 setIntegerValue(CFSTR(WebKitHistoryAgeInDaysLimitKey), limit);
1130 HRESULT WebPreferences::unused1()
1132 ASSERT_NOT_REACHED();
1136 HRESULT WebPreferences::unused2()
1138 ASSERT_NOT_REACHED();
1142 HRESULT WebPreferences::iconDatabaseLocation(
1143 /* [out] */ BSTR* location)
1145 *location = stringValueForKey(CFSTR(WebKitIconDatabaseLocationKey));
1146 return (*location) ? S_OK : E_FAIL;
1149 HRESULT WebPreferences::setIconDatabaseLocation(
1150 /* [in] */ BSTR location)
1152 setStringValue(CFSTR(WebKitIconDatabaseLocationKey), location);
1156 HRESULT WebPreferences::iconDatabaseEnabled(BOOL* enabled)//location)
1158 *enabled = boolValueForKey(CFSTR(WebKitIconDatabaseEnabledPreferenceKey));
1162 HRESULT WebPreferences::setIconDatabaseEnabled(BOOL enabled )//location)
1164 setBoolValue(CFSTR(WebKitIconDatabaseEnabledPreferenceKey), enabled);
1168 HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothing(
1169 /* [retval][out] */ FontSmoothingType* smoothingType)
1171 *smoothingType = (FontSmoothingType) integerValueForKey(CFSTR(WebKitFontSmoothingTypePreferenceKey));
1175 HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothing(
1176 /* [in] */ FontSmoothingType smoothingType)
1178 setIntegerValue(CFSTR(WebKitFontSmoothingTypePreferenceKey), smoothingType);
1179 if (smoothingType == FontSmoothingTypeWindows)
1180 smoothingType = FontSmoothingTypeMedium;
1182 wkSetFontSmoothingLevel((int)smoothingType);
1187 HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothingContrast(
1188 /* [retval][out] */ float* contrast)
1190 *contrast = floatValueForKey(CFSTR(WebKitFontSmoothingContrastPreferenceKey));
1194 HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothingContrast(
1195 /* [in] */ float contrast)
1197 setFloatValue(CFSTR(WebKitFontSmoothingContrastPreferenceKey), contrast);
1199 wkSetFontSmoothingContrast(contrast);
1204 HRESULT STDMETHODCALLTYPE WebPreferences::editableLinkBehavior(
1205 /* [out, retval] */ WebKitEditableLinkBehavior* editableLinkBehavior)
1207 WebKitEditableLinkBehavior value = (WebKitEditableLinkBehavior) integerValueForKey(CFSTR(WebKitEditableLinkBehaviorPreferenceKey));
1209 case WebKitEditableLinkDefaultBehavior:
1210 case WebKitEditableLinkAlwaysLive:
1211 case WebKitEditableLinkOnlyLiveWithShiftKey:
1212 case WebKitEditableLinkLiveWhenNotFocused:
1213 case WebKitEditableLinkNeverLive:
1214 *editableLinkBehavior = value;
1216 default: // ensure that a valid result is returned
1217 *editableLinkBehavior = WebKitEditableLinkDefaultBehavior;
1223 HRESULT STDMETHODCALLTYPE WebPreferences::setEditableLinkBehavior(
1224 /* [in] */ WebKitEditableLinkBehavior behavior)
1226 setIntegerValue(CFSTR(WebKitEditableLinkBehaviorPreferenceKey), behavior);
1230 HRESULT WebPreferences::unused5()
1232 ASSERT_NOT_REACHED();
1236 HRESULT WebPreferences::unused6()
1238 ASSERT_NOT_REACHED();
1242 HRESULT STDMETHODCALLTYPE WebPreferences::hyperlinkAuditingEnabled(
1243 /* [in] */ BOOL* enabled)
1245 *enabled = boolValueForKey(CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey));
1249 HRESULT STDMETHODCALLTYPE WebPreferences::setHyperlinkAuditingEnabled(
1250 /* [retval][out] */ BOOL enabled)
1252 setBoolValue(CFSTR(WebKitHyperlinkAuditingEnabledPreferenceKey), enabled);
1256 HRESULT STDMETHODCALLTYPE WebPreferences::cookieStorageAcceptPolicy(
1257 /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy )
1262 *acceptPolicy = (WebKitCookieStorageAcceptPolicy)integerValueForKey(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey));
1266 HRESULT STDMETHODCALLTYPE WebPreferences::setCookieStorageAcceptPolicy(
1267 /* [in] */ WebKitCookieStorageAcceptPolicy acceptPolicy)
1269 setIntegerValue(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), acceptPolicy);
1274 HRESULT WebPreferences::continuousSpellCheckingEnabled(BOOL* enabled)
1276 *enabled = boolValueForKey(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey));
1280 HRESULT WebPreferences::setContinuousSpellCheckingEnabled(BOOL enabled)
1282 setBoolValue(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), enabled);
1286 HRESULT WebPreferences::grammarCheckingEnabled(BOOL* enabled)
1288 *enabled = boolValueForKey(CFSTR(WebGrammarCheckingEnabledPreferenceKey));
1292 HRESULT WebPreferences::setGrammarCheckingEnabled(BOOL enabled)
1294 setBoolValue(CFSTR(WebGrammarCheckingEnabledPreferenceKey), enabled);
1298 HRESULT WebPreferences::allowContinuousSpellChecking(BOOL* enabled)
1300 *enabled = boolValueForKey(CFSTR(AllowContinuousSpellCheckingPreferenceKey));
1304 HRESULT WebPreferences::setAllowContinuousSpellChecking(BOOL enabled)
1306 setBoolValue(CFSTR(AllowContinuousSpellCheckingPreferenceKey), enabled);
1310 HRESULT WebPreferences::isDOMPasteAllowed(BOOL* enabled)
1312 *enabled = boolValueForKey(CFSTR(WebKitDOMPasteAllowedPreferenceKey));
1316 HRESULT WebPreferences::setDOMPasteAllowed(BOOL enabled)
1318 setBoolValue(CFSTR(WebKitDOMPasteAllowedPreferenceKey), enabled);
1322 HRESULT WebPreferences::cacheModel(WebCacheModel* cacheModel)
1327 *cacheModel = (WebCacheModel)integerValueForKey(CFSTR(WebKitCacheModelPreferenceKey));
1331 HRESULT WebPreferences::setCacheModel(WebCacheModel cacheModel)
1333 setIntegerValue(CFSTR(WebKitCacheModelPreferenceKey), cacheModel);
1337 HRESULT WebPreferences::unused3()
1339 ASSERT_NOT_REACHED();
1343 HRESULT WebPreferences::unused4()
1345 ASSERT_NOT_REACHED();
1349 HRESULT WebPreferences::shouldPaintNativeControls(BOOL* shouldPaint)
1351 *shouldPaint = boolValueForKey(CFSTR(WebKitPaintNativeControlsPreferenceKey));
1355 HRESULT WebPreferences::setShouldPaintNativeControls(BOOL shouldPaint)
1357 setBoolValue(CFSTR(WebKitPaintNativeControlsPreferenceKey), shouldPaint);
1361 HRESULT WebPreferences::setDeveloperExtrasEnabled(BOOL enabled)
1363 setBoolValue(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey), enabled);
1367 HRESULT WebPreferences::developerExtrasEnabled(BOOL* enabled)
1372 *enabled = boolValueForKey(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey));
1376 bool WebPreferences::developerExtrasDisabledByOverride()
1378 return !!boolValueForKey(CFSTR(DisableWebKitDeveloperExtrasPreferenceKey));
1381 HRESULT WebPreferences::setAutomaticallyDetectsCacheModel(BOOL automaticallyDetectsCacheModel)
1383 m_automaticallyDetectsCacheModel = !!automaticallyDetectsCacheModel;
1387 HRESULT WebPreferences::automaticallyDetectsCacheModel(BOOL* automaticallyDetectsCacheModel)
1389 if (!automaticallyDetectsCacheModel)
1392 *automaticallyDetectsCacheModel = m_automaticallyDetectsCacheModel;
1396 HRESULT STDMETHODCALLTYPE WebPreferences::setAuthorAndUserStylesEnabled(BOOL enabled)
1398 setBoolValue(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), enabled);
1402 HRESULT STDMETHODCALLTYPE WebPreferences::authorAndUserStylesEnabled(BOOL* enabled)
1407 *enabled = boolValueForKey(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey));
1411 HRESULT WebPreferences::inApplicationChromeMode(BOOL* enabled)
1413 *enabled = boolValueForKey(CFSTR(WebKitApplicationChromeModePreferenceKey));
1417 HRESULT WebPreferences::setApplicationChromeMode(BOOL enabled)
1419 setBoolValue(CFSTR(WebKitApplicationChromeModePreferenceKey), enabled);
1423 HRESULT STDMETHODCALLTYPE WebPreferences::setOfflineWebApplicationCacheEnabled(BOOL enabled)
1425 setBoolValue(CFSTR(WebKitOfflineWebApplicationCacheEnabledPreferenceKey), enabled);
1429 HRESULT STDMETHODCALLTYPE WebPreferences::offlineWebApplicationCacheEnabled(BOOL* enabled)
1431 *enabled = boolValueForKey(CFSTR(WebKitOfflineWebApplicationCacheEnabledPreferenceKey));
1435 HRESULT STDMETHODCALLTYPE WebPreferences::setDatabasesEnabled(BOOL enabled)
1437 setBoolValue(CFSTR(WebKitDatabasesEnabledPreferenceKey), enabled);
1441 HRESULT STDMETHODCALLTYPE WebPreferences::databasesEnabled(BOOL* enabled)
1443 *enabled = boolValueForKey(CFSTR(WebKitDatabasesEnabledPreferenceKey));
1447 HRESULT STDMETHODCALLTYPE WebPreferences::setLocalStorageEnabled(BOOL enabled)
1449 setBoolValue(CFSTR(WebKitLocalStorageEnabledPreferenceKey), enabled);
1453 HRESULT STDMETHODCALLTYPE WebPreferences::localStorageEnabled(BOOL* enabled)
1455 *enabled = boolValueForKey(CFSTR(WebKitLocalStorageEnabledPreferenceKey));
1459 HRESULT STDMETHODCALLTYPE WebPreferences::localStorageDatabasePath(BSTR* location)
1461 *location = stringValueForKey(CFSTR(WebKitLocalStorageDatabasePathPreferenceKey));
1462 return (*location) ? S_OK : E_FAIL;
1465 HRESULT STDMETHODCALLTYPE WebPreferences::setLocalStorageDatabasePath(BSTR location)
1467 setStringValue(CFSTR(WebKitLocalStorageDatabasePathPreferenceKey), location);
1471 HRESULT STDMETHODCALLTYPE WebPreferences::setExperimentalNotificationsEnabled(BOOL enabled)
1473 setBoolValue(CFSTR(WebKitExperimentalNotificationsEnabledPreferenceKey), enabled);
1477 HRESULT STDMETHODCALLTYPE WebPreferences::experimentalNotificationsEnabled(BOOL* enabled)
1479 *enabled = boolValueForKey(CFSTR(WebKitExperimentalNotificationsEnabledPreferenceKey));
1483 HRESULT WebPreferences::setZoomsTextOnly(BOOL zoomsTextOnly)
1485 setBoolValue(CFSTR(WebKitZoomsTextOnlyPreferenceKey), zoomsTextOnly);
1489 HRESULT WebPreferences::zoomsTextOnly(BOOL* zoomsTextOnly)
1491 *zoomsTextOnly = boolValueForKey(CFSTR(WebKitZoomsTextOnlyPreferenceKey));
1495 HRESULT STDMETHODCALLTYPE WebPreferences::setShouldUseHighResolutionTimers(BOOL useHighResolutionTimers)
1497 setBoolValue(CFSTR(WebKitUseHighResolutionTimersPreferenceKey), useHighResolutionTimers);
1501 HRESULT STDMETHODCALLTYPE WebPreferences::shouldUseHighResolutionTimers(BOOL* useHighResolutionTimers)
1503 *useHighResolutionTimers = boolValueForKey(CFSTR(WebKitUseHighResolutionTimersPreferenceKey));
1507 HRESULT WebPreferences::setPreferenceForTest(BSTR key, BSTR value)
1509 if (!SysStringLen(key) || !SysStringLen(value))
1511 RetainPtr<CFStringRef> keyString(AdoptCF, CFStringCreateWithCharacters(0, reinterpret_cast<UniChar*>(key), SysStringLen(key)));
1512 RetainPtr<CFStringRef> valueString(AdoptCF, CFStringCreateWithCharacters(0, reinterpret_cast<UniChar*>(value), SysStringLen(value)));
1513 setValueForKey(keyString.get(), valueString.get());
1514 postPreferencesChangesNotification();
1518 HRESULT WebPreferences::setAcceleratedCompositingEnabled(BOOL enabled)
1520 setBoolValue(CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey), enabled);
1524 HRESULT WebPreferences::acceleratedCompositingEnabled(BOOL* enabled)
1526 #if USE(ACCELERATED_COMPOSITING)
1527 *enabled = CACFLayerTreeHost::acceleratedCompositingAvailable() && boolValueForKey(CFSTR(WebKitAcceleratedCompositingEnabledPreferenceKey));
1534 HRESULT WebPreferences::showDebugBorders(BOOL* enabled)
1536 *enabled = boolValueForKey(CFSTR(WebKitShowDebugBordersPreferenceKey));
1540 HRESULT WebPreferences::setShowDebugBorders(BOOL enabled)
1542 setBoolValue(CFSTR(WebKitShowDebugBordersPreferenceKey), enabled);
1546 HRESULT WebPreferences::showRepaintCounter(BOOL* enabled)
1548 *enabled = boolValueForKey(CFSTR(WebKitShowRepaintCounterPreferenceKey));
1552 HRESULT WebPreferences::setShowRepaintCounter(BOOL enabled)
1554 setBoolValue(CFSTR(WebKitShowRepaintCounterPreferenceKey), enabled);
1558 HRESULT WebPreferences::setCustomDragCursorsEnabled(BOOL enabled)
1560 setBoolValue(CFSTR(WebKitCustomDragCursorsEnabledPreferenceKey), enabled);
1564 HRESULT WebPreferences::customDragCursorsEnabled(BOOL* enabled)
1566 *enabled = boolValueForKey(CFSTR(WebKitCustomDragCursorsEnabledPreferenceKey));
1570 HRESULT WebPreferences::setDNSPrefetchingEnabled(BOOL enabled)
1572 setBoolValue(CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey), enabled);
1576 HRESULT WebPreferences::isDNSPrefetchingEnabled(BOOL* enabled)
1578 *enabled = boolValueForKey(CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey));
1582 HRESULT WebPreferences::memoryInfoEnabled(BOOL* enabled)
1584 *enabled = boolValueForKey(CFSTR(WebKitMemoryInfoEnabledPreferenceKey));
1588 HRESULT WebPreferences::setMemoryInfoEnabled(BOOL enabled)
1590 setBoolValue(CFSTR(WebKitMemoryInfoEnabledPreferenceKey), enabled);
1594 HRESULT WebPreferences::isFullScreenEnabled(BOOL* enabled)
1596 #if ENABLE(FULLSCREEN_API)
1600 *enabled = boolValueForKey(CFSTR(WebKitFullScreenEnabledPreferenceKey));
1607 HRESULT WebPreferences::setFullScreenEnabled(BOOL enabled)
1609 #if ENABLE(FULLSCREEN_API)
1610 setBoolValue(CFSTR(WebKitFullScreenEnabledPreferenceKey), enabled);
1617 HRESULT WebPreferences::avFoundationEnabled(BOOL* enabled)
1619 #if USE(AVFOUNDATION)
1623 *enabled = boolValueForKey(CFSTR(WebKitAVFoundationEnabledPreferenceKey));
1630 HRESULT WebPreferences::setAVFoundationEnabled(BOOL enabled)
1632 #if USE(AVFOUNDATION)
1633 setBoolValue(CFSTR(WebKitAVFoundationEnabledPreferenceKey), enabled);
1640 HRESULT WebPreferences::showsToolTipOverTruncatedText(BOOL* showsToolTip)
1645 *showsToolTip = boolValueForKey(CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey));
1649 HRESULT WebPreferences::setShowsToolTipOverTruncatedText(BOOL showsToolTip)
1651 setBoolValue(CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey), showsToolTip);
1655 HRESULT WebPreferences::shouldInvertColors(BOOL* shouldInvertColors)
1657 if (!shouldInvertColors)
1660 *shouldInvertColors = boolValueForKey(CFSTR(WebKitShouldInvertColorsPreferenceKey));
1664 HRESULT WebPreferences::setShouldInvertColors(BOOL shouldInvertColors)
1666 setBoolValue(CFSTR(WebKitShouldInvertColorsPreferenceKey), shouldInvertColors);
1670 void WebPreferences::willAddToWebView()
1675 void WebPreferences::didRemoveFromWebView()
1677 ASSERT(m_numWebViews);
1678 if (--m_numWebViews == 0) {
1679 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal();
1680 nc->postNotificationName(webPreferencesRemovedNotification(), static_cast<IWebPreferences*>(this), 0);
1684 HRESULT WebPreferences::shouldDisplaySubtitles(BOOL* enabled)
1686 #if ENABLE(VIDEO_TRACK)
1690 *enabled = boolValueForKey(CFSTR(WebKitShouldDisplaySubtitlesPreferenceKey));
1697 HRESULT WebPreferences::setShouldDisplaySubtitles(BOOL enabled)
1699 #if ENABLE(VIDEO_TRACK)
1700 setBoolValue(CFSTR(WebKitShouldDisplaySubtitlesPreferenceKey), enabled);
1707 HRESULT WebPreferences::shouldDisplayCaptions(BOOL* enabled)
1709 #if ENABLE(VIDEO_TRACK)
1713 *enabled = boolValueForKey(CFSTR(WebKitShouldDisplayCaptionsPreferenceKey));
1720 HRESULT WebPreferences::setShouldDisplayCaptions(BOOL enabled)
1722 #if ENABLE(VIDEO_TRACK)
1723 setBoolValue(CFSTR(WebKitShouldDisplayCaptionsPreferenceKey), enabled);
1730 HRESULT WebPreferences::shouldDisplayTextDescriptions(BOOL* enabled)
1732 #if ENABLE(VIDEO_TRACK)
1736 *enabled = boolValueForKey(CFSTR(WebKitShouldDisplayTextDescriptionsPreferenceKey));
1743 HRESULT WebPreferences::setShouldDisplayTextDescriptions(BOOL enabled)
1745 #if ENABLE(VIDEO_TRACK)
1746 setBoolValue(CFSTR(WebKitShouldDisplayTextDescriptionsPreferenceKey), enabled);
1753 HRESULT WebPreferences::setRequestAnimationFrameEnabled(BOOL enabled)
1755 setBoolValue(CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey), enabled);
1759 HRESULT WebPreferences::requestAnimationFrameEnabled(BOOL* enabled)
1761 *enabled = boolValueForKey(CFSTR(WebKitRequestAnimationFrameEnabledPreferenceKey));