2 * Copyright (C) 2006, 2007 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"
32 #include "WebNotificationCenter.h"
33 #include "WebPreferenceKeysPrivate.h"
35 #pragma warning( push, 0 )
36 #include <WebCore/CString.h>
37 #include <WebCore/FileSystem.h>
38 #include <WebCore/Font.h>
39 #include <WebCore/PlatformString.h>
40 #include <WebCore/StringHash.h>
41 #include "WebLocalizableStrings.h"
42 #pragma warning( pop )
44 #include <CoreFoundation/CoreFoundation.h>
45 #include <CoreGraphics/CoreGraphics.h>
49 #include <WebKitSystemInterface/WebKitSystemInterface.h>
50 #include <wtf/HashMap.h>
51 #include <wtf/OwnPtr.h>
52 #include <wtf/Vector.h>
54 using namespace WebCore;
56 static const String& preferencesPath()
58 static String path = pathByAppendingComponent(roamingUserSpecificStorageDirectory(), "WebKitPreferences.plist");
62 template<typename NumberType> struct CFNumberTraits { static const unsigned Type; };
63 template<> struct CFNumberTraits<int> { static const unsigned Type = kCFNumberSInt32Type; };
64 template<> struct CFNumberTraits<LONGLONG> { static const unsigned Type = kCFNumberLongLongType; };
65 template<> struct CFNumberTraits<float> { static const unsigned Type = kCFNumberFloat32Type; };
67 template<typename NumberType>
68 static NumberType numberValueForPreferencesValue(CFPropertyListRef value)
73 CFTypeID cfType = CFGetTypeID(value);
74 if (cfType == CFStringGetTypeID())
75 return static_cast<NumberType>(CFStringGetIntValue(static_cast<CFStringRef>(value)));
76 else if (cfType == CFBooleanGetTypeID()) {
77 Boolean boolVal = CFBooleanGetValue(static_cast<CFBooleanRef>(value));
78 return boolVal ? 1 : 0;
79 } else if (cfType == CFNumberGetTypeID()) {
81 CFNumberGetValue(static_cast<CFNumberRef>(value), CFNumberTraits<NumberType>::Type, &val);
88 template<typename NumberType>
89 static RetainPtr<CFNumberRef> cfNumber(NumberType value)
91 return RetainPtr<CFNumberRef>(AdoptCF, CFNumberCreate(0, CFNumberTraits<NumberType>::Type, &value));
94 static bool booleanValueForPreferencesValue(CFPropertyListRef value)
96 return numberValueForPreferencesValue<int>(value);
99 // WebPreferences ----------------------------------------------------------------
101 static CFDictionaryRef defaultSettings;
103 static HashMap<WebCore::String, WebPreferences*> webPreferencesInstances;
105 WebPreferences* WebPreferences::sharedStandardPreferences()
107 static WebPreferences* standardPreferences;
108 if (!standardPreferences) {
109 standardPreferences = WebPreferences::createInstance();
110 standardPreferences->load();
111 standardPreferences->setAutosaves(TRUE);
114 return standardPreferences;
117 WebPreferences::WebPreferences()
120 , m_automaticallyDetectsCacheModel(true)
126 WebPreferences::~WebPreferences()
131 WebPreferences* WebPreferences::createInstance()
133 WebPreferences* instance = new WebPreferences();
138 HRESULT WebPreferences::postPreferencesChangesNotification()
140 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal();
141 HRESULT hr = nc->postNotificationName(webPreferencesChangedNotification(), static_cast<IWebPreferences*>(this), 0);
148 WebPreferences* WebPreferences::getInstanceForIdentifier(BSTR identifier)
151 return sharedStandardPreferences();
153 WebCore::String identifierString(identifier, SysStringLen(identifier));
154 return webPreferencesInstances.get(identifierString);
157 void WebPreferences::setInstance(WebPreferences* instance, BSTR identifier)
159 if (!identifier || !instance)
161 WebCore::String identifierString(identifier, SysStringLen(identifier));
162 webPreferencesInstances.add(identifierString, instance);
165 void WebPreferences::removeReferenceForIdentifier(BSTR identifier)
167 if (!identifier || webPreferencesInstances.isEmpty())
170 WebCore::String identifierString(identifier, SysStringLen(identifier));
171 WebPreferences* webPreference = webPreferencesInstances.get(identifierString);
172 if (webPreference && webPreference->m_refCount == 1)
173 webPreferencesInstances.remove(identifierString);
176 void WebPreferences::initializeDefaultSettings()
181 CFMutableDictionaryRef defaults = CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
183 CFDictionaryAddValue(defaults, CFSTR(WebKitStandardFontPreferenceKey), CFSTR("Times New Roman"));
184 CFDictionaryAddValue(defaults, CFSTR(WebKitFixedFontPreferenceKey), CFSTR("Courier New"));
185 CFDictionaryAddValue(defaults, CFSTR(WebKitSerifFontPreferenceKey), CFSTR("Times New Roman"));
186 CFDictionaryAddValue(defaults, CFSTR(WebKitSansSerifFontPreferenceKey), CFSTR("Arial"));
187 CFDictionaryAddValue(defaults, CFSTR(WebKitCursiveFontPreferenceKey), CFSTR("Comic Sans MS"));
188 CFDictionaryAddValue(defaults, CFSTR(WebKitFantasyFontPreferenceKey), CFSTR("Comic Sans MS"));
189 CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumFontSizePreferenceKey), CFSTR("1"));
190 CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), CFSTR("9"));
191 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFontSizePreferenceKey), CFSTR("16"));
192 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFixedFontSizePreferenceKey), CFSTR("13"));
193 WebCore::String defaultDefaultEncoding(LPCTSTR_UI_STRING("ISO-8859-1", "The default, default character encoding"));
194 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), defaultDefaultEncoding.createCFString());
196 CFDictionaryAddValue(defaults, CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), kCFBooleanFalse);
197 CFDictionaryAddValue(defaults, CFSTR(WebKitUserStyleSheetLocationPreferenceKey), CFSTR(""));
198 CFDictionaryAddValue(defaults, CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), kCFBooleanFalse);
199 CFDictionaryAddValue(defaults, CFSTR(WebKitTextAreasAreResizablePreferenceKey), kCFBooleanFalse);
200 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaEnabledPreferenceKey), kCFBooleanTrue);
201 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptEnabledPreferenceKey), kCFBooleanTrue);
202 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), kCFBooleanTrue);
203 CFDictionaryAddValue(defaults, CFSTR(WebKitPluginsEnabledPreferenceKey), kCFBooleanTrue);
204 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImagesPreferenceKey), kCFBooleanTrue);
205 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), kCFBooleanTrue);
206 CFDictionaryAddValue(defaults, CFSTR(WebKitDisplayImagesKey), kCFBooleanTrue);
207 CFDictionaryAddValue(defaults, CFSTR(WebKitBackForwardCacheExpirationIntervalKey), CFSTR("1800"));
208 CFDictionaryAddValue(defaults, CFSTR(WebKitTabToLinksPreferenceKey), kCFBooleanFalse);
209 CFDictionaryAddValue(defaults, CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), kCFBooleanFalse);
210 CFDictionaryAddValue(defaults, CFSTR(WebKitRespectStandardStyleKeyEquivalentsPreferenceKey), kCFBooleanFalse);
211 CFDictionaryAddValue(defaults, CFSTR(WebKitShowsURLsInToolTipsPreferenceKey), kCFBooleanFalse);
212 CFDictionaryAddValue(defaults, CFSTR(WebKitPDFDisplayModePreferenceKey), CFSTR("1"));
213 CFDictionaryAddValue(defaults, CFSTR(WebKitPDFScaleFactorPreferenceKey), CFSTR("0"));
215 RetainPtr<CFStringRef> linkBehaviorStringRef(AdoptCF, CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebKitEditableLinkDefaultBehavior));
216 CFDictionaryAddValue(defaults, CFSTR(WebKitEditableLinkBehaviorPreferenceKey), linkBehaviorStringRef.get());
218 CFDictionaryAddValue(defaults, CFSTR(WebKitHistoryItemLimitKey), CFSTR("1000"));
219 CFDictionaryAddValue(defaults, CFSTR(WebKitHistoryAgeInDaysLimitKey), CFSTR("7"));
220 CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseLocationKey), CFSTR(""));
221 CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseEnabledPreferenceKey), kCFBooleanTrue);
222 CFDictionaryAddValue(defaults, CFSTR(WebKitFontSmoothingTypePreferenceKey), CFSTR("2"));
223 CFDictionaryAddValue(defaults, CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), CFSTR("2"));
224 CFDictionaryAddValue(defaults, CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), kCFBooleanFalse);
225 CFDictionaryAddValue(defaults, CFSTR(WebGrammarCheckingEnabledPreferenceKey), kCFBooleanFalse);
226 CFDictionaryAddValue(defaults, CFSTR(AllowContinuousSpellCheckingPreferenceKey), kCFBooleanTrue);
227 CFDictionaryAddValue(defaults, CFSTR(WebKitUsesPageCachePreferenceKey), kCFBooleanTrue);
229 RetainPtr<CFStringRef> cacheModelRef(AdoptCF, CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebCacheModelDocumentViewer));
230 CFDictionaryAddValue(defaults, CFSTR(WebKitCacheModelPreferenceKey), cacheModelRef.get());
232 CFDictionaryAddValue(defaults, CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), kCFBooleanTrue);
234 defaultSettings = defaults;
237 const void* WebPreferences::valueForKey(CFStringRef key)
239 const void* value = CFDictionaryGetValue(m_privatePrefs.get(), key);
241 value = CFDictionaryGetValue(defaultSettings, key);
246 void WebPreferences::setValueForKey(CFStringRef key, CFPropertyListRef value)
248 CFDictionarySetValue(m_privatePrefs.get(), key, value);
253 BSTR WebPreferences::stringValueForKey(CFStringRef key)
255 CFStringRef str = (CFStringRef)valueForKey(key);
257 if (!str || (CFGetTypeID(str) != CFStringGetTypeID()))
260 CFIndex length = CFStringGetLength(str);
261 const UniChar* uniChars = CFStringGetCharactersPtr(str);
263 return SysAllocStringLen((LPCTSTR)uniChars, length);
265 BSTR bstr = SysAllocStringLen(0, length);
269 if (!CFStringGetCString(str, (char*)bstr, (length+1)*sizeof(WCHAR), kCFStringEncodingUTF16)) {
278 int WebPreferences::integerValueForKey(CFStringRef key)
280 return numberValueForPreferencesValue<int>(valueForKey(key));
283 BOOL WebPreferences::boolValueForKey(CFStringRef key)
285 return booleanValueForPreferencesValue(valueForKey(key));
288 float WebPreferences::floatValueForKey(CFStringRef key)
290 return numberValueForPreferencesValue<float>(valueForKey(key));
293 LONGLONG WebPreferences::longlongValueForKey(CFStringRef key)
295 return numberValueForPreferencesValue<LONGLONG>(valueForKey(key));
298 void WebPreferences::setStringValue(CFStringRef key, LPCTSTR value)
300 BSTR val = stringValueForKey(key);
301 if (val && !_tcscmp(val, value))
305 RetainPtr<CFStringRef> valueRef(AdoptCF,
306 CFStringCreateWithCharactersNoCopy(0, (UniChar*)_wcsdup(value), (CFIndex)_tcslen(value), kCFAllocatorMalloc));
307 setValueForKey(key, valueRef.get());
309 postPreferencesChangesNotification();
312 void WebPreferences::setIntegerValue(CFStringRef key, int value)
314 if (integerValueForKey(key) == value)
317 setValueForKey(key, cfNumber(value).get());
319 postPreferencesChangesNotification();
322 void WebPreferences::setBoolValue(CFStringRef key, BOOL value)
324 if (boolValueForKey(key) == value)
327 setValueForKey(key, value ? kCFBooleanTrue : kCFBooleanFalse);
329 postPreferencesChangesNotification();
332 void WebPreferences::setLongLongValue(CFStringRef key, LONGLONG value)
334 if (longlongValueForKey(key) == value)
337 setValueForKey(key, cfNumber(value).get());
339 postPreferencesChangesNotification();
342 BSTR WebPreferences::webPreferencesChangedNotification()
344 static BSTR webPreferencesChangedNotification = SysAllocString(WebPreferencesChangedNotification);
345 return webPreferencesChangedNotification;
348 BSTR WebPreferences::webPreferencesRemovedNotification()
350 static BSTR webPreferencesRemovedNotification = SysAllocString(WebPreferencesRemovedNotification);
351 return webPreferencesRemovedNotification;
353 void WebPreferences::save()
355 RetainPtr<CFWriteStreamRef> stream(AdoptCF,
356 CFWriteStreamCreateWithAllocatedBuffers(kCFAllocatorDefault, kCFAllocatorDefault));
360 if (!CFWriteStreamOpen(stream.get()))
363 if (!CFPropertyListWriteToStream(m_privatePrefs.get(), stream.get(), kCFPropertyListXMLFormat_v1_0, 0)) {
364 CFWriteStreamClose(stream.get());
367 CFWriteStreamClose(stream.get());
369 RetainPtr<CFDataRef> dataRef(AdoptCF,
370 (CFDataRef)CFWriteStreamCopyProperty(stream.get(), kCFStreamPropertyDataWritten));
374 safeCreateFile(preferencesPath(), dataRef.get());
377 void WebPreferences::load()
379 initializeDefaultSettings();
381 CString path = preferencesPath().utf8();
383 RetainPtr<CFURLRef> urlRef(AdoptCF, CFURLCreateFromFileSystemRepresentation(0, reinterpret_cast<const UInt8*>(path.data()), path.length(), false));
387 RetainPtr<CFReadStreamRef> stream(AdoptCF, CFReadStreamCreateWithFile(0, urlRef.get()));
391 if (CFReadStreamOpen(stream.get())) {
392 CFPropertyListFormat format = kCFPropertyListBinaryFormat_v1_0 | kCFPropertyListXMLFormat_v1_0;
393 RetainPtr<CFPropertyListRef> plist(AdoptCF, CFPropertyListCreateFromStream(0, stream.get(), 0, kCFPropertyListMutableContainersAndLeaves, &format, 0));
394 CFReadStreamClose(stream.get());
396 if (CFGetTypeID(plist.get()) == CFDictionaryGetTypeID())
397 m_privatePrefs.adoptCF(const_cast<CFMutableDictionaryRef>(reinterpret_cast<CFDictionaryRef>(plist.releaseRef())));
401 m_privatePrefs.adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
403 migrateDefaultSettingsFromSafari3Beta();
406 void WebPreferences::migrateDefaultSettingsFromSafari3Beta()
408 // The "migration" happening here is a one-time removal of any default values
409 // that were stored in the user's preferences due to <rdar://problem/5214504>.
411 ASSERT(defaultSettings);
415 CFStringRef didMigrateKey = CFSTR(WebKitDidMigrateDefaultSettingsFromSafari3BetaPreferenceKey);
416 if (boolValueForKey(didMigrateKey))
419 removeValuesMatchingDefaultSettings();
421 bool oldValue = m_autoSaves;
423 setBoolValue(didMigrateKey, TRUE);
424 m_autoSaves = oldValue;
427 void WebPreferences::removeValuesMatchingDefaultSettings()
429 ASSERT(m_privatePrefs);
431 int count = CFDictionaryGetCount(m_privatePrefs.get());
435 Vector<CFTypeRef> keys(count);
436 Vector<CFTypeRef> values(count);
437 CFDictionaryGetKeysAndValues(m_privatePrefs.get(), keys.data(), values.data());
439 for (int i = 0; i < count; ++i) {
443 CFTypeRef defaultValue = CFDictionaryGetValue(defaultSettings, keys[i]);
447 if (CFEqual(values[i], defaultValue))
448 CFDictionaryRemoveValue(m_privatePrefs.get(), keys[i]);
452 // IUnknown -------------------------------------------------------------------
454 HRESULT STDMETHODCALLTYPE WebPreferences::QueryInterface(REFIID riid, void** ppvObject)
457 if (IsEqualGUID(riid, IID_IUnknown))
458 *ppvObject = static_cast<IWebPreferences*>(this);
459 else if (IsEqualGUID(riid, IID_IWebPreferences))
460 *ppvObject = static_cast<IWebPreferences*>(this);
461 else if (IsEqualGUID(riid, IID_IWebPreferencesPrivate))
462 *ppvObject = static_cast<IWebPreferencesPrivate*>(this);
463 else if (IsEqualGUID(riid, CLSID_WebPreferences))
466 return E_NOINTERFACE;
472 ULONG STDMETHODCALLTYPE WebPreferences::AddRef(void)
477 ULONG STDMETHODCALLTYPE WebPreferences::Release(void)
479 ULONG newRef = --m_refCount;
486 // IWebPreferences ------------------------------------------------------------
488 HRESULT STDMETHODCALLTYPE WebPreferences::standardPreferences(
489 /* [retval][out] */ IWebPreferences** standardPreferences)
491 if (!standardPreferences)
493 *standardPreferences = sharedStandardPreferences();
494 (*standardPreferences)->AddRef();
498 HRESULT STDMETHODCALLTYPE WebPreferences::initWithIdentifier(
499 /* [in] */ BSTR anIdentifier,
500 /* [retval][out] */ IWebPreferences** preferences)
502 WebPreferences *instance = getInstanceForIdentifier(anIdentifier);
504 *preferences = instance;
515 m_identifier = anIdentifier;
516 setInstance(this, m_identifier);
519 this->postPreferencesChangesNotification();
524 HRESULT STDMETHODCALLTYPE WebPreferences::identifier(
525 /* [retval][out] */ BSTR* ident)
529 *ident = m_identifier ? SysAllocString(m_identifier) : 0;
533 HRESULT STDMETHODCALLTYPE WebPreferences::standardFontFamily(
534 /* [retval][out] */ BSTR* family)
536 *family = stringValueForKey(CFSTR(WebKitStandardFontPreferenceKey));
537 return (*family) ? S_OK : E_FAIL;
540 HRESULT STDMETHODCALLTYPE WebPreferences::setStandardFontFamily(
541 /* [in] */ BSTR family)
543 setStringValue(CFSTR(WebKitStandardFontPreferenceKey), family);
547 HRESULT STDMETHODCALLTYPE WebPreferences::fixedFontFamily(
548 /* [retval][out] */ BSTR* family)
550 *family = stringValueForKey(CFSTR(WebKitFixedFontPreferenceKey));
551 return (*family) ? S_OK : E_FAIL;
554 HRESULT STDMETHODCALLTYPE WebPreferences::setFixedFontFamily(
555 /* [in] */ BSTR family)
557 setStringValue(CFSTR(WebKitFixedFontPreferenceKey), family);
561 HRESULT STDMETHODCALLTYPE WebPreferences::serifFontFamily(
562 /* [retval][out] */ BSTR* fontFamily)
564 *fontFamily = stringValueForKey(CFSTR(WebKitSerifFontPreferenceKey));
565 return (*fontFamily) ? S_OK : E_FAIL;
568 HRESULT STDMETHODCALLTYPE WebPreferences::setSerifFontFamily(
569 /* [in] */ BSTR family)
571 setStringValue(CFSTR(WebKitSerifFontPreferenceKey), family);
575 HRESULT STDMETHODCALLTYPE WebPreferences::sansSerifFontFamily(
576 /* [retval][out] */ BSTR* family)
578 *family = stringValueForKey(CFSTR(WebKitSansSerifFontPreferenceKey));
579 return (*family) ? S_OK : E_FAIL;
582 HRESULT STDMETHODCALLTYPE WebPreferences::setSansSerifFontFamily(
583 /* [in] */ BSTR family)
585 setStringValue(CFSTR(WebKitSansSerifFontPreferenceKey), family);
589 HRESULT STDMETHODCALLTYPE WebPreferences::cursiveFontFamily(
590 /* [retval][out] */ BSTR* family)
592 *family = stringValueForKey(CFSTR(WebKitCursiveFontPreferenceKey));
593 return (*family) ? S_OK : E_FAIL;
596 HRESULT STDMETHODCALLTYPE WebPreferences::setCursiveFontFamily(
597 /* [in] */ BSTR family)
599 setStringValue(CFSTR(WebKitCursiveFontPreferenceKey), family);
603 HRESULT STDMETHODCALLTYPE WebPreferences::fantasyFontFamily(
604 /* [retval][out] */ BSTR* family)
606 *family = stringValueForKey(CFSTR(WebKitFantasyFontPreferenceKey));
607 return (*family) ? S_OK : E_FAIL;
610 HRESULT STDMETHODCALLTYPE WebPreferences::setFantasyFontFamily(
611 /* [in] */ BSTR family)
613 setStringValue(CFSTR(WebKitFantasyFontPreferenceKey), family);
617 HRESULT STDMETHODCALLTYPE WebPreferences::defaultFontSize(
618 /* [retval][out] */ int* fontSize)
620 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFontSizePreferenceKey));
624 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFontSize(
625 /* [in] */ int fontSize)
627 setIntegerValue(CFSTR(WebKitDefaultFontSizePreferenceKey), fontSize);
631 HRESULT STDMETHODCALLTYPE WebPreferences::defaultFixedFontSize(
632 /* [retval][out] */ int* fontSize)
634 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFixedFontSizePreferenceKey));
638 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFixedFontSize(
639 /* [in] */ int fontSize)
641 setIntegerValue(CFSTR(WebKitDefaultFixedFontSizePreferenceKey), fontSize);
645 HRESULT STDMETHODCALLTYPE WebPreferences::minimumFontSize(
646 /* [retval][out] */ int* fontSize)
648 *fontSize = integerValueForKey(CFSTR(WebKitMinimumFontSizePreferenceKey));
652 HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumFontSize(
653 /* [in] */ int fontSize)
655 setIntegerValue(CFSTR(WebKitMinimumFontSizePreferenceKey), fontSize);
659 HRESULT STDMETHODCALLTYPE WebPreferences::minimumLogicalFontSize(
660 /* [retval][out] */ int* fontSize)
662 *fontSize = integerValueForKey(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey));
666 HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumLogicalFontSize(
667 /* [in] */ int fontSize)
669 setIntegerValue(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), fontSize);
673 HRESULT STDMETHODCALLTYPE WebPreferences::defaultTextEncodingName(
674 /* [retval][out] */ BSTR* name)
676 *name = stringValueForKey(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey));
677 return (*name) ? S_OK : E_FAIL;
680 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultTextEncodingName(
681 /* [in] */ BSTR name)
683 setStringValue(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), name);
687 HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetEnabled(
688 /* [retval][out] */ BOOL* enabled)
690 *enabled = boolValueForKey(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey));
694 HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetEnabled(
695 /* [in] */ BOOL enabled)
697 setBoolValue(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), enabled);
701 HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetLocation(
702 /* [retval][out] */ BSTR* location)
704 *location = stringValueForKey(CFSTR(WebKitUserStyleSheetLocationPreferenceKey));
705 return (*location) ? S_OK : E_FAIL;
708 HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetLocation(
709 /* [in] */ BSTR location)
711 setStringValue(CFSTR(WebKitUserStyleSheetLocationPreferenceKey), location);
715 HRESULT STDMETHODCALLTYPE WebPreferences::isJavaEnabled(
716 /* [retval][out] */ BOOL* enabled)
718 *enabled = boolValueForKey(CFSTR(WebKitJavaEnabledPreferenceKey));
722 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaEnabled(
723 /* [in] */ BOOL enabled)
725 setBoolValue(CFSTR(WebKitJavaEnabledPreferenceKey), enabled);
729 HRESULT STDMETHODCALLTYPE WebPreferences::isJavaScriptEnabled(
730 /* [retval][out] */ BOOL* enabled)
732 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptEnabledPreferenceKey));
736 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptEnabled(
737 /* [in] */ BOOL enabled)
739 setBoolValue(CFSTR(WebKitJavaScriptEnabledPreferenceKey), enabled);
743 HRESULT STDMETHODCALLTYPE WebPreferences::javaScriptCanOpenWindowsAutomatically(
744 /* [retval][out] */ BOOL* enabled)
746 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey));
750 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptCanOpenWindowsAutomatically(
751 /* [in] */ BOOL enabled)
753 setBoolValue(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), enabled);
757 HRESULT STDMETHODCALLTYPE WebPreferences::arePlugInsEnabled(
758 /* [retval][out] */ BOOL* enabled)
760 *enabled = boolValueForKey(CFSTR(WebKitPluginsEnabledPreferenceKey));
764 HRESULT STDMETHODCALLTYPE WebPreferences::setPlugInsEnabled(
765 /* [in] */ BOOL enabled)
767 setBoolValue(CFSTR(WebKitPluginsEnabledPreferenceKey), enabled);
771 HRESULT STDMETHODCALLTYPE WebPreferences::allowsAnimatedImages(
772 /* [retval][out] */ BOOL* enabled)
774 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImagesPreferenceKey));
778 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowsAnimatedImages(
779 /* [in] */ BOOL enabled)
781 setBoolValue(CFSTR(WebKitAllowAnimatedImagesPreferenceKey), enabled);
785 HRESULT STDMETHODCALLTYPE WebPreferences::allowAnimatedImageLooping(
786 /* [retval][out] */ BOOL* enabled)
788 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey));
792 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowAnimatedImageLooping(
793 /* [in] */ BOOL enabled)
795 setBoolValue(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), enabled);
799 HRESULT STDMETHODCALLTYPE WebPreferences::setLoadsImagesAutomatically(
800 /* [in] */ BOOL enabled)
802 setBoolValue(CFSTR(WebKitDisplayImagesKey), enabled);
806 HRESULT STDMETHODCALLTYPE WebPreferences::loadsImagesAutomatically(
807 /* [retval][out] */ BOOL* enabled)
809 *enabled = boolValueForKey(CFSTR(WebKitDisplayImagesKey));
813 HRESULT STDMETHODCALLTYPE WebPreferences::setAutosaves(
814 /* [in] */ BOOL enabled)
816 m_autoSaves = !!enabled;
820 HRESULT STDMETHODCALLTYPE WebPreferences::autosaves(
821 /* [retval][out] */ BOOL* enabled)
823 *enabled = m_autoSaves ? TRUE : FALSE;
827 HRESULT STDMETHODCALLTYPE WebPreferences::setShouldPrintBackgrounds(
828 /* [in] */ BOOL enabled)
830 setBoolValue(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), enabled);
834 HRESULT STDMETHODCALLTYPE WebPreferences::shouldPrintBackgrounds(
835 /* [retval][out] */ BOOL* enabled)
837 *enabled = boolValueForKey(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey));
841 HRESULT STDMETHODCALLTYPE WebPreferences::setPrivateBrowsingEnabled(
842 /* [in] */ BOOL enabled)
844 setBoolValue(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), enabled);
848 HRESULT STDMETHODCALLTYPE WebPreferences::privateBrowsingEnabled(
849 /* [retval][out] */ BOOL* enabled)
851 *enabled = boolValueForKey(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey));
855 HRESULT STDMETHODCALLTYPE WebPreferences::setTabsToLinks(
856 /* [in] */ BOOL enabled)
858 setBoolValue(CFSTR(WebKitTabToLinksPreferenceKey), enabled);
862 HRESULT STDMETHODCALLTYPE WebPreferences::tabsToLinks(
863 /* [retval][out] */ BOOL* enabled)
865 *enabled = boolValueForKey(CFSTR(WebKitTabToLinksPreferenceKey));
869 HRESULT STDMETHODCALLTYPE WebPreferences::setUsesPageCache(
870 /* [in] */ BOOL usesPageCache)
872 setBoolValue(CFSTR(WebKitUsesPageCachePreferenceKey), usesPageCache);
876 HRESULT STDMETHODCALLTYPE WebPreferences::usesPageCache(
877 /* [retval][out] */ BOOL* usesPageCache)
879 *usesPageCache = boolValueForKey(CFSTR(WebKitUsesPageCachePreferenceKey));
883 HRESULT STDMETHODCALLTYPE WebPreferences::textAreasAreResizable(
884 /* [retval][out] */ BOOL* enabled)
886 *enabled = boolValueForKey(CFSTR(WebKitTextAreasAreResizablePreferenceKey));
890 HRESULT STDMETHODCALLTYPE WebPreferences::setTextAreasAreResizable(
891 /* [in] */ BOOL enabled)
893 setBoolValue(CFSTR(WebKitTextAreasAreResizablePreferenceKey), enabled);
897 HRESULT WebPreferences::historyItemLimit(int* limit)
899 *limit = integerValueForKey(CFSTR(WebKitHistoryItemLimitKey));
903 HRESULT WebPreferences::setHistoryItemLimit(int limit)
905 setIntegerValue(CFSTR(WebKitHistoryItemLimitKey), limit);
909 HRESULT WebPreferences::historyAgeInDaysLimit(int* limit)
911 *limit = integerValueForKey(CFSTR(WebKitHistoryAgeInDaysLimitKey));
915 HRESULT WebPreferences::setHistoryAgeInDaysLimit(int limit)
917 setIntegerValue(CFSTR(WebKitHistoryAgeInDaysLimitKey), limit);
921 HRESULT WebPreferences::unused1()
923 ASSERT_NOT_REACHED();
927 HRESULT WebPreferences::unused2()
929 ASSERT_NOT_REACHED();
933 HRESULT WebPreferences::iconDatabaseLocation(
934 /* [out] */ BSTR* location)
936 *location = stringValueForKey(CFSTR(WebKitIconDatabaseLocationKey));
937 return (*location) ? S_OK : E_FAIL;
940 HRESULT WebPreferences::setIconDatabaseLocation(
941 /* [in] */ BSTR location)
943 setStringValue(CFSTR(WebKitIconDatabaseLocationKey), location);
947 HRESULT WebPreferences::iconDatabaseEnabled(BOOL* enabled)//location)
949 *enabled = boolValueForKey(CFSTR(WebKitIconDatabaseEnabledPreferenceKey));
953 HRESULT WebPreferences::setIconDatabaseEnabled(BOOL enabled )//location)
955 setBoolValue(CFSTR(WebKitIconDatabaseEnabledPreferenceKey), enabled);
959 HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothing(
960 /* [retval][out] */ FontSmoothingType* smoothingType)
962 *smoothingType = (FontSmoothingType) integerValueForKey(CFSTR(WebKitFontSmoothingTypePreferenceKey));
966 HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothing(
967 /* [in] */ FontSmoothingType smoothingType)
969 setIntegerValue(CFSTR(WebKitFontSmoothingTypePreferenceKey), smoothingType);
970 if (smoothingType == FontSmoothingTypeWindows)
971 smoothingType = FontSmoothingTypeStandard;
972 wkSetFontSmoothingLevel((int)smoothingType);
976 HRESULT STDMETHODCALLTYPE WebPreferences::editableLinkBehavior(
977 /* [out, retval] */ WebKitEditableLinkBehavior* editableLinkBehavior)
979 WebKitEditableLinkBehavior value = (WebKitEditableLinkBehavior) integerValueForKey(CFSTR(WebKitEditableLinkBehaviorPreferenceKey));
981 case WebKitEditableLinkDefaultBehavior:
982 case WebKitEditableLinkAlwaysLive:
983 case WebKitEditableLinkOnlyLiveWithShiftKey:
984 case WebKitEditableLinkLiveWhenNotFocused:
985 case WebKitEditableLinkNeverLive:
986 *editableLinkBehavior = value;
988 default: // ensure that a valid result is returned
989 *editableLinkBehavior = WebKitEditableLinkDefaultBehavior;
995 HRESULT STDMETHODCALLTYPE WebPreferences::setEditableLinkBehavior(
996 /* [in] */ WebKitEditableLinkBehavior behavior)
998 setIntegerValue(CFSTR(WebKitEditableLinkBehaviorPreferenceKey), behavior);
1002 HRESULT STDMETHODCALLTYPE WebPreferences::cookieStorageAcceptPolicy(
1003 /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy )
1008 *acceptPolicy = (WebKitCookieStorageAcceptPolicy)integerValueForKey(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey));
1012 HRESULT STDMETHODCALLTYPE WebPreferences::setCookieStorageAcceptPolicy(
1013 /* [in] */ WebKitCookieStorageAcceptPolicy acceptPolicy)
1015 setIntegerValue(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), acceptPolicy);
1020 HRESULT WebPreferences::continuousSpellCheckingEnabled(BOOL* enabled)
1022 *enabled = boolValueForKey(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey));
1026 HRESULT WebPreferences::setContinuousSpellCheckingEnabled(BOOL enabled)
1028 setBoolValue(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), enabled);
1032 HRESULT WebPreferences::grammarCheckingEnabled(BOOL* enabled)
1034 *enabled = boolValueForKey(CFSTR(WebGrammarCheckingEnabledPreferenceKey));
1038 HRESULT WebPreferences::setGrammarCheckingEnabled(BOOL enabled)
1040 setBoolValue(CFSTR(WebGrammarCheckingEnabledPreferenceKey), enabled);
1044 HRESULT WebPreferences::allowContinuousSpellChecking(BOOL* enabled)
1046 *enabled = boolValueForKey(CFSTR(AllowContinuousSpellCheckingPreferenceKey));
1050 HRESULT WebPreferences::setAllowContinuousSpellChecking(BOOL enabled)
1052 setBoolValue(CFSTR(AllowContinuousSpellCheckingPreferenceKey), enabled);
1056 HRESULT WebPreferences::isDOMPasteAllowed(BOOL* enabled)
1058 *enabled = boolValueForKey(CFSTR(WebKitDOMPasteAllowedPreferenceKey));
1062 HRESULT WebPreferences::setDOMPasteAllowed(BOOL enabled)
1064 setBoolValue(CFSTR(WebKitDOMPasteAllowedPreferenceKey), enabled);
1068 HRESULT WebPreferences::cacheModel(WebCacheModel* cacheModel)
1073 *cacheModel = (WebCacheModel)integerValueForKey(CFSTR(WebKitCacheModelPreferenceKey));
1077 HRESULT WebPreferences::setCacheModel(WebCacheModel cacheModel)
1079 setIntegerValue(CFSTR(WebKitCacheModelPreferenceKey), cacheModel);
1083 HRESULT WebPreferences::setDeveloperExtrasEnabled(BOOL enabled)
1085 setBoolValue(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey), enabled);
1089 HRESULT WebPreferences::developerExtrasEnabled(BOOL* enabled)
1094 *enabled = boolValueForKey(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey));
1098 bool WebPreferences::developerExtrasDisabledByOverride()
1100 return !!boolValueForKey(CFSTR(DisableWebKitDeveloperExtrasPreferenceKey));
1103 HRESULT WebPreferences::setAutomaticallyDetectsCacheModel(BOOL automaticallyDetectsCacheModel)
1105 m_automaticallyDetectsCacheModel = !!automaticallyDetectsCacheModel;
1109 HRESULT WebPreferences::automaticallyDetectsCacheModel(BOOL* automaticallyDetectsCacheModel)
1111 if (!automaticallyDetectsCacheModel)
1114 *automaticallyDetectsCacheModel = m_automaticallyDetectsCacheModel;
1118 HRESULT STDMETHODCALLTYPE WebPreferences::setAuthorAndUserStylesEnabled(BOOL enabled)
1120 setBoolValue(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), enabled);
1124 HRESULT STDMETHODCALLTYPE WebPreferences::authorAndUserStylesEnabled(BOOL* enabled)
1129 *enabled = boolValueForKey(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey));
1133 void WebPreferences::willAddToWebView()
1138 void WebPreferences::didRemoveFromWebView()
1140 ASSERT(m_numWebViews);
1141 if (--m_numWebViews == 0) {
1142 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal();
1143 nc->postNotificationName(webPreferencesRemovedNotification(), static_cast<IWebPreferences*>(this), 0);