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/OwnArrayPtr.h>
53 using namespace WebCore;
55 static const String& oldPreferencesPath()
57 static String path = pathByAppendingComponent(roamingUserSpecificStorageDirectory(), "WebKitPreferences.plist");
61 template<typename NumberType> struct CFNumberTraits { static const unsigned Type; };
62 template<> struct CFNumberTraits<int> { static const unsigned Type = kCFNumberSInt32Type; };
63 template<> struct CFNumberTraits<LONGLONG> { static const unsigned Type = kCFNumberLongLongType; };
64 template<> struct CFNumberTraits<float> { static const unsigned Type = kCFNumberFloat32Type; };
66 template<typename NumberType>
67 static NumberType numberValueForPreferencesValue(CFPropertyListRef value)
72 CFTypeID cfType = CFGetTypeID(value);
73 if (cfType == CFStringGetTypeID())
74 return static_cast<NumberType>(CFStringGetIntValue(static_cast<CFStringRef>(value)));
75 else if (cfType == CFBooleanGetTypeID()) {
76 Boolean boolVal = CFBooleanGetValue(static_cast<CFBooleanRef>(value));
77 return boolVal ? 1 : 0;
78 } else if (cfType == CFNumberGetTypeID()) {
80 CFNumberGetValue(static_cast<CFNumberRef>(value), CFNumberTraits<NumberType>::Type, &val);
87 template<typename NumberType>
88 static RetainPtr<CFNumberRef> cfNumber(NumberType value)
90 return RetainPtr<CFNumberRef>(AdoptCF, CFNumberCreate(0, CFNumberTraits<NumberType>::Type, &value));
93 static bool booleanValueForPreferencesValue(CFPropertyListRef value)
95 return numberValueForPreferencesValue<int>(value);
98 // WebPreferences ----------------------------------------------------------------
100 static CFDictionaryRef defaultSettings;
102 static HashMap<WebCore::String, WebPreferences*> webPreferencesInstances;
104 WebPreferences* WebPreferences::sharedStandardPreferences()
106 static WebPreferences* standardPreferences;
107 if (!standardPreferences) {
108 standardPreferences = WebPreferences::createInstance();
109 standardPreferences->setAutosaves(TRUE);
110 standardPreferences->load();
113 return standardPreferences;
116 WebPreferences::WebPreferences()
119 , m_automaticallyDetectsCacheModel(true)
125 WebPreferences::~WebPreferences()
130 WebPreferences* WebPreferences::createInstance()
132 WebPreferences* instance = new WebPreferences();
137 HRESULT WebPreferences::postPreferencesChangesNotification()
139 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal();
140 HRESULT hr = nc->postNotificationName(webPreferencesChangedNotification(), static_cast<IWebPreferences*>(this), 0);
147 WebPreferences* WebPreferences::getInstanceForIdentifier(BSTR identifier)
150 return sharedStandardPreferences();
152 WebCore::String identifierString(identifier, SysStringLen(identifier));
153 return webPreferencesInstances.get(identifierString);
156 void WebPreferences::setInstance(WebPreferences* instance, BSTR identifier)
158 if (!identifier || !instance)
160 WebCore::String identifierString(identifier, SysStringLen(identifier));
161 webPreferencesInstances.add(identifierString, instance);
164 void WebPreferences::removeReferenceForIdentifier(BSTR identifier)
166 if (!identifier || webPreferencesInstances.isEmpty())
169 WebCore::String identifierString(identifier, SysStringLen(identifier));
170 WebPreferences* webPreference = webPreferencesInstances.get(identifierString);
171 if (webPreference && webPreference->m_refCount == 1)
172 webPreferencesInstances.remove(identifierString);
175 void WebPreferences::initializeDefaultSettings()
180 CFMutableDictionaryRef defaults = CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
182 CFDictionaryAddValue(defaults, CFSTR(WebKitStandardFontPreferenceKey), CFSTR("Times New Roman"));
183 CFDictionaryAddValue(defaults, CFSTR(WebKitFixedFontPreferenceKey), CFSTR("Courier New"));
184 CFDictionaryAddValue(defaults, CFSTR(WebKitSerifFontPreferenceKey), CFSTR("Times New Roman"));
185 CFDictionaryAddValue(defaults, CFSTR(WebKitSansSerifFontPreferenceKey), CFSTR("Arial"));
186 CFDictionaryAddValue(defaults, CFSTR(WebKitCursiveFontPreferenceKey), CFSTR("Comic Sans MS"));
187 CFDictionaryAddValue(defaults, CFSTR(WebKitFantasyFontPreferenceKey), CFSTR("Comic Sans MS"));
188 CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumFontSizePreferenceKey), CFSTR("1"));
189 CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), CFSTR("9"));
190 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFontSizePreferenceKey), CFSTR("16"));
191 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFixedFontSizePreferenceKey), CFSTR("13"));
192 WebCore::String defaultDefaultEncoding(LPCTSTR_UI_STRING("ISO-8859-1", "The default, default character encoding"));
193 CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), defaultDefaultEncoding.createCFString());
195 CFDictionaryAddValue(defaults, CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), kCFBooleanFalse);
196 CFDictionaryAddValue(defaults, CFSTR(WebKitUserStyleSheetLocationPreferenceKey), CFSTR(""));
197 CFDictionaryAddValue(defaults, CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), kCFBooleanFalse);
198 CFDictionaryAddValue(defaults, CFSTR(WebKitTextAreasAreResizablePreferenceKey), kCFBooleanFalse);
199 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaEnabledPreferenceKey), kCFBooleanTrue);
200 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptEnabledPreferenceKey), kCFBooleanTrue);
201 CFDictionaryAddValue(defaults, CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), kCFBooleanTrue);
202 CFDictionaryAddValue(defaults, CFSTR(WebKitPluginsEnabledPreferenceKey), kCFBooleanTrue);
203 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImagesPreferenceKey), kCFBooleanTrue);
204 CFDictionaryAddValue(defaults, CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), kCFBooleanTrue);
205 CFDictionaryAddValue(defaults, CFSTR(WebKitDisplayImagesKey), kCFBooleanTrue);
206 CFDictionaryAddValue(defaults, CFSTR(WebKitBackForwardCacheExpirationIntervalKey), CFSTR("1800"));
207 CFDictionaryAddValue(defaults, CFSTR(WebKitTabToLinksPreferenceKey), kCFBooleanFalse);
208 CFDictionaryAddValue(defaults, CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), kCFBooleanFalse);
209 CFDictionaryAddValue(defaults, CFSTR(WebKitRespectStandardStyleKeyEquivalentsPreferenceKey), kCFBooleanFalse);
210 CFDictionaryAddValue(defaults, CFSTR(WebKitShowsURLsInToolTipsPreferenceKey), kCFBooleanFalse);
211 CFDictionaryAddValue(defaults, CFSTR(WebKitPDFDisplayModePreferenceKey), CFSTR("1"));
212 CFDictionaryAddValue(defaults, CFSTR(WebKitPDFScaleFactorPreferenceKey), CFSTR("0"));
214 RetainPtr<CFStringRef> linkBehaviorStringRef(AdoptCF, CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebKitEditableLinkDefaultBehavior));
215 CFDictionaryAddValue(defaults, CFSTR(WebKitEditableLinkBehaviorPreferenceKey), linkBehaviorStringRef.get());
217 CFDictionaryAddValue(defaults, CFSTR(WebKitHistoryItemLimitKey), CFSTR("1000"));
218 CFDictionaryAddValue(defaults, CFSTR(WebKitHistoryAgeInDaysLimitKey), CFSTR("7"));
219 CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseLocationKey), CFSTR(""));
220 CFDictionaryAddValue(defaults, CFSTR(WebKitIconDatabaseEnabledPreferenceKey), kCFBooleanTrue);
221 CFDictionaryAddValue(defaults, CFSTR(WebKitFontSmoothingTypePreferenceKey), CFSTR("2"));
222 CFDictionaryAddValue(defaults, CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), CFSTR("2"));
223 CFDictionaryAddValue(defaults, CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), kCFBooleanFalse);
224 CFDictionaryAddValue(defaults, CFSTR(WebGrammarCheckingEnabledPreferenceKey), kCFBooleanFalse);
225 CFDictionaryAddValue(defaults, CFSTR(AllowContinuousSpellCheckingPreferenceKey), kCFBooleanTrue);
226 CFDictionaryAddValue(defaults, CFSTR(WebKitUsesPageCachePreferenceKey), kCFBooleanTrue);
228 RetainPtr<CFStringRef> cacheModelRef(AdoptCF, CFStringCreateWithFormat(0, 0, CFSTR("%d"), WebCacheModelDocumentViewer));
229 CFDictionaryAddValue(defaults, CFSTR(WebKitCacheModelPreferenceKey), cacheModelRef.get());
231 CFDictionaryAddValue(defaults, CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), kCFBooleanTrue);
233 defaultSettings = defaults;
236 RetainPtr<CFPropertyListRef> WebPreferences::valueForKey(CFStringRef key)
238 RetainPtr<CFPropertyListRef> value = CFDictionaryGetValue(m_privatePrefs.get(), key);
242 value.adoptCF(CFPreferencesCopyAppValue(key, kCFPreferencesCurrentApplication));
246 return CFDictionaryGetValue(defaultSettings, key);
249 void WebPreferences::setValueForKey(CFStringRef key, CFPropertyListRef value)
251 CFDictionarySetValue(m_privatePrefs.get(), key, value);
253 CFPreferencesSetAppValue(key, value, kCFPreferencesCurrentApplication);
258 BSTR WebPreferences::stringValueForKey(CFStringRef key)
260 RetainPtr<CFPropertyListRef> value = valueForKey(key);
262 if (!value || (CFGetTypeID(value.get()) != CFStringGetTypeID()))
265 CFStringRef str = static_cast<CFStringRef>(value.get());
267 CFIndex length = CFStringGetLength(str);
268 const UniChar* uniChars = CFStringGetCharactersPtr(str);
270 return SysAllocStringLen((LPCTSTR)uniChars, length);
272 BSTR bstr = SysAllocStringLen(0, length);
276 if (!CFStringGetCString(str, (char*)bstr, (length+1)*sizeof(WCHAR), kCFStringEncodingUTF16)) {
285 int WebPreferences::integerValueForKey(CFStringRef key)
287 return numberValueForPreferencesValue<int>(valueForKey(key).get());
290 BOOL WebPreferences::boolValueForKey(CFStringRef key)
292 return booleanValueForPreferencesValue(valueForKey(key).get());
295 float WebPreferences::floatValueForKey(CFStringRef key)
297 return numberValueForPreferencesValue<float>(valueForKey(key).get());
300 LONGLONG WebPreferences::longlongValueForKey(CFStringRef key)
302 return numberValueForPreferencesValue<LONGLONG>(valueForKey(key).get());
305 void WebPreferences::setStringValue(CFStringRef key, LPCTSTR value)
307 BSTR val = stringValueForKey(key);
308 if (val && !_tcscmp(val, value))
312 RetainPtr<CFStringRef> valueRef(AdoptCF,
313 CFStringCreateWithCharactersNoCopy(0, (UniChar*)_wcsdup(value), (CFIndex)_tcslen(value), kCFAllocatorMalloc));
314 setValueForKey(key, valueRef.get());
316 postPreferencesChangesNotification();
319 void WebPreferences::setIntegerValue(CFStringRef key, int value)
321 if (integerValueForKey(key) == value)
324 setValueForKey(key, cfNumber(value).get());
326 postPreferencesChangesNotification();
329 void WebPreferences::setBoolValue(CFStringRef key, BOOL value)
331 if (boolValueForKey(key) == value)
334 setValueForKey(key, value ? kCFBooleanTrue : kCFBooleanFalse);
336 postPreferencesChangesNotification();
339 void WebPreferences::setLongLongValue(CFStringRef key, LONGLONG value)
341 if (longlongValueForKey(key) == value)
344 setValueForKey(key, cfNumber(value).get());
346 postPreferencesChangesNotification();
349 BSTR WebPreferences::webPreferencesChangedNotification()
351 static BSTR webPreferencesChangedNotification = SysAllocString(WebPreferencesChangedNotification);
352 return webPreferencesChangedNotification;
355 BSTR WebPreferences::webPreferencesRemovedNotification()
357 static BSTR webPreferencesRemovedNotification = SysAllocString(WebPreferencesRemovedNotification);
358 return webPreferencesRemovedNotification;
361 void WebPreferences::save()
363 CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
366 void WebPreferences::load()
368 initializeDefaultSettings();
370 m_privatePrefs.adoptCF(CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
372 migrateWebKitPreferencesToCFPreferences();
375 void WebPreferences::migrateWebKitPreferencesToCFPreferences()
377 CFStringRef didMigrateKey = CFSTR(WebKitDidMigrateWebKitPreferencesToCFPreferencesPreferenceKey);
378 if (boolValueForKey(didMigrateKey))
380 bool oldValue = m_autoSaves;
382 setBoolValue(didMigrateKey, TRUE);
383 m_autoSaves = oldValue;
385 CString path = oldPreferencesPath().utf8();
387 RetainPtr<CFURLRef> urlRef(AdoptCF, CFURLCreateFromFileSystemRepresentation(0, reinterpret_cast<const UInt8*>(path.data()), path.length(), false));
391 RetainPtr<CFReadStreamRef> stream(AdoptCF, CFReadStreamCreateWithFile(0, urlRef.get()));
395 if (!CFReadStreamOpen(stream.get()))
398 CFPropertyListFormat format = kCFPropertyListBinaryFormat_v1_0 | kCFPropertyListXMLFormat_v1_0;
399 RetainPtr<CFPropertyListRef> plist(AdoptCF, CFPropertyListCreateFromStream(0, stream.get(), 0, kCFPropertyListMutableContainersAndLeaves, &format, 0));
400 CFReadStreamClose(stream.get());
402 if (!plist || CFGetTypeID(plist.get()) != CFDictionaryGetTypeID())
405 copyWebKitPreferencesToCFPreferences(static_cast<CFDictionaryRef>(plist.get()));
407 deleteFile(oldPreferencesPath());
410 void WebPreferences::copyWebKitPreferencesToCFPreferences(CFDictionaryRef dict)
412 ASSERT_ARG(dict, dict);
414 int count = CFDictionaryGetCount(dict);
418 CFStringRef didRemoveDefaultsKey = CFSTR(WebKitDidMigrateDefaultSettingsFromSafari3BetaPreferenceKey);
419 bool omitDefaults = !booleanValueForPreferencesValue(CFDictionaryGetValue(dict, didRemoveDefaultsKey));
421 OwnArrayPtr<CFTypeRef> keys(new CFTypeRef[count]);
422 OwnArrayPtr<CFTypeRef> values(new CFTypeRef[count]);
423 CFDictionaryGetKeysAndValues(dict, keys.get(), values.get());
425 for (int i = 0; i < count; ++i) {
426 if (!keys[i] || !values[i] || CFGetTypeID(keys[i]) != CFStringGetTypeID())
430 CFTypeRef defaultValue = CFDictionaryGetValue(defaultSettings, keys[i]);
431 if (defaultValue && CFEqual(defaultValue, values[i]))
435 setValueForKey(static_cast<CFStringRef>(keys[i]), values[i]);
439 // IUnknown -------------------------------------------------------------------
441 HRESULT STDMETHODCALLTYPE WebPreferences::QueryInterface(REFIID riid, void** ppvObject)
444 if (IsEqualGUID(riid, IID_IUnknown))
445 *ppvObject = static_cast<IWebPreferences*>(this);
446 else if (IsEqualGUID(riid, IID_IWebPreferences))
447 *ppvObject = static_cast<IWebPreferences*>(this);
448 else if (IsEqualGUID(riid, IID_IWebPreferencesPrivate))
449 *ppvObject = static_cast<IWebPreferencesPrivate*>(this);
450 else if (IsEqualGUID(riid, CLSID_WebPreferences))
453 return E_NOINTERFACE;
459 ULONG STDMETHODCALLTYPE WebPreferences::AddRef(void)
464 ULONG STDMETHODCALLTYPE WebPreferences::Release(void)
466 ULONG newRef = --m_refCount;
473 // IWebPreferences ------------------------------------------------------------
475 HRESULT STDMETHODCALLTYPE WebPreferences::standardPreferences(
476 /* [retval][out] */ IWebPreferences** standardPreferences)
478 if (!standardPreferences)
480 *standardPreferences = sharedStandardPreferences();
481 (*standardPreferences)->AddRef();
485 HRESULT STDMETHODCALLTYPE WebPreferences::initWithIdentifier(
486 /* [in] */ BSTR anIdentifier,
487 /* [retval][out] */ IWebPreferences** preferences)
489 WebPreferences *instance = getInstanceForIdentifier(anIdentifier);
491 *preferences = instance;
502 m_identifier = anIdentifier;
503 setInstance(this, m_identifier);
506 this->postPreferencesChangesNotification();
511 HRESULT STDMETHODCALLTYPE WebPreferences::identifier(
512 /* [retval][out] */ BSTR* ident)
516 *ident = m_identifier ? SysAllocString(m_identifier) : 0;
520 HRESULT STDMETHODCALLTYPE WebPreferences::standardFontFamily(
521 /* [retval][out] */ BSTR* family)
523 *family = stringValueForKey(CFSTR(WebKitStandardFontPreferenceKey));
524 return (*family) ? S_OK : E_FAIL;
527 HRESULT STDMETHODCALLTYPE WebPreferences::setStandardFontFamily(
528 /* [in] */ BSTR family)
530 setStringValue(CFSTR(WebKitStandardFontPreferenceKey), family);
534 HRESULT STDMETHODCALLTYPE WebPreferences::fixedFontFamily(
535 /* [retval][out] */ BSTR* family)
537 *family = stringValueForKey(CFSTR(WebKitFixedFontPreferenceKey));
538 return (*family) ? S_OK : E_FAIL;
541 HRESULT STDMETHODCALLTYPE WebPreferences::setFixedFontFamily(
542 /* [in] */ BSTR family)
544 setStringValue(CFSTR(WebKitFixedFontPreferenceKey), family);
548 HRESULT STDMETHODCALLTYPE WebPreferences::serifFontFamily(
549 /* [retval][out] */ BSTR* fontFamily)
551 *fontFamily = stringValueForKey(CFSTR(WebKitSerifFontPreferenceKey));
552 return (*fontFamily) ? S_OK : E_FAIL;
555 HRESULT STDMETHODCALLTYPE WebPreferences::setSerifFontFamily(
556 /* [in] */ BSTR family)
558 setStringValue(CFSTR(WebKitSerifFontPreferenceKey), family);
562 HRESULT STDMETHODCALLTYPE WebPreferences::sansSerifFontFamily(
563 /* [retval][out] */ BSTR* family)
565 *family = stringValueForKey(CFSTR(WebKitSansSerifFontPreferenceKey));
566 return (*family) ? S_OK : E_FAIL;
569 HRESULT STDMETHODCALLTYPE WebPreferences::setSansSerifFontFamily(
570 /* [in] */ BSTR family)
572 setStringValue(CFSTR(WebKitSansSerifFontPreferenceKey), family);
576 HRESULT STDMETHODCALLTYPE WebPreferences::cursiveFontFamily(
577 /* [retval][out] */ BSTR* family)
579 *family = stringValueForKey(CFSTR(WebKitCursiveFontPreferenceKey));
580 return (*family) ? S_OK : E_FAIL;
583 HRESULT STDMETHODCALLTYPE WebPreferences::setCursiveFontFamily(
584 /* [in] */ BSTR family)
586 setStringValue(CFSTR(WebKitCursiveFontPreferenceKey), family);
590 HRESULT STDMETHODCALLTYPE WebPreferences::fantasyFontFamily(
591 /* [retval][out] */ BSTR* family)
593 *family = stringValueForKey(CFSTR(WebKitFantasyFontPreferenceKey));
594 return (*family) ? S_OK : E_FAIL;
597 HRESULT STDMETHODCALLTYPE WebPreferences::setFantasyFontFamily(
598 /* [in] */ BSTR family)
600 setStringValue(CFSTR(WebKitFantasyFontPreferenceKey), family);
604 HRESULT STDMETHODCALLTYPE WebPreferences::defaultFontSize(
605 /* [retval][out] */ int* fontSize)
607 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFontSizePreferenceKey));
611 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFontSize(
612 /* [in] */ int fontSize)
614 setIntegerValue(CFSTR(WebKitDefaultFontSizePreferenceKey), fontSize);
618 HRESULT STDMETHODCALLTYPE WebPreferences::defaultFixedFontSize(
619 /* [retval][out] */ int* fontSize)
621 *fontSize = integerValueForKey(CFSTR(WebKitDefaultFixedFontSizePreferenceKey));
625 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultFixedFontSize(
626 /* [in] */ int fontSize)
628 setIntegerValue(CFSTR(WebKitDefaultFixedFontSizePreferenceKey), fontSize);
632 HRESULT STDMETHODCALLTYPE WebPreferences::minimumFontSize(
633 /* [retval][out] */ int* fontSize)
635 *fontSize = integerValueForKey(CFSTR(WebKitMinimumFontSizePreferenceKey));
639 HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumFontSize(
640 /* [in] */ int fontSize)
642 setIntegerValue(CFSTR(WebKitMinimumFontSizePreferenceKey), fontSize);
646 HRESULT STDMETHODCALLTYPE WebPreferences::minimumLogicalFontSize(
647 /* [retval][out] */ int* fontSize)
649 *fontSize = integerValueForKey(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey));
653 HRESULT STDMETHODCALLTYPE WebPreferences::setMinimumLogicalFontSize(
654 /* [in] */ int fontSize)
656 setIntegerValue(CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), fontSize);
660 HRESULT STDMETHODCALLTYPE WebPreferences::defaultTextEncodingName(
661 /* [retval][out] */ BSTR* name)
663 *name = stringValueForKey(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey));
664 return (*name) ? S_OK : E_FAIL;
667 HRESULT STDMETHODCALLTYPE WebPreferences::setDefaultTextEncodingName(
668 /* [in] */ BSTR name)
670 setStringValue(CFSTR(WebKitDefaultTextEncodingNamePreferenceKey), name);
674 HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetEnabled(
675 /* [retval][out] */ BOOL* enabled)
677 *enabled = boolValueForKey(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey));
681 HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetEnabled(
682 /* [in] */ BOOL enabled)
684 setBoolValue(CFSTR(WebKitUserStyleSheetEnabledPreferenceKey), enabled);
688 HRESULT STDMETHODCALLTYPE WebPreferences::userStyleSheetLocation(
689 /* [retval][out] */ BSTR* location)
691 *location = stringValueForKey(CFSTR(WebKitUserStyleSheetLocationPreferenceKey));
692 return (*location) ? S_OK : E_FAIL;
695 HRESULT STDMETHODCALLTYPE WebPreferences::setUserStyleSheetLocation(
696 /* [in] */ BSTR location)
698 setStringValue(CFSTR(WebKitUserStyleSheetLocationPreferenceKey), location);
702 HRESULT STDMETHODCALLTYPE WebPreferences::isJavaEnabled(
703 /* [retval][out] */ BOOL* enabled)
705 *enabled = boolValueForKey(CFSTR(WebKitJavaEnabledPreferenceKey));
709 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaEnabled(
710 /* [in] */ BOOL enabled)
712 setBoolValue(CFSTR(WebKitJavaEnabledPreferenceKey), enabled);
716 HRESULT STDMETHODCALLTYPE WebPreferences::isJavaScriptEnabled(
717 /* [retval][out] */ BOOL* enabled)
719 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptEnabledPreferenceKey));
723 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptEnabled(
724 /* [in] */ BOOL enabled)
726 setBoolValue(CFSTR(WebKitJavaScriptEnabledPreferenceKey), enabled);
730 HRESULT STDMETHODCALLTYPE WebPreferences::javaScriptCanOpenWindowsAutomatically(
731 /* [retval][out] */ BOOL* enabled)
733 *enabled = boolValueForKey(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey));
737 HRESULT STDMETHODCALLTYPE WebPreferences::setJavaScriptCanOpenWindowsAutomatically(
738 /* [in] */ BOOL enabled)
740 setBoolValue(CFSTR(WebKitJavaScriptCanOpenWindowsAutomaticallyPreferenceKey), enabled);
744 HRESULT STDMETHODCALLTYPE WebPreferences::arePlugInsEnabled(
745 /* [retval][out] */ BOOL* enabled)
747 *enabled = boolValueForKey(CFSTR(WebKitPluginsEnabledPreferenceKey));
751 HRESULT STDMETHODCALLTYPE WebPreferences::setPlugInsEnabled(
752 /* [in] */ BOOL enabled)
754 setBoolValue(CFSTR(WebKitPluginsEnabledPreferenceKey), enabled);
758 HRESULT STDMETHODCALLTYPE WebPreferences::allowsAnimatedImages(
759 /* [retval][out] */ BOOL* enabled)
761 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImagesPreferenceKey));
765 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowsAnimatedImages(
766 /* [in] */ BOOL enabled)
768 setBoolValue(CFSTR(WebKitAllowAnimatedImagesPreferenceKey), enabled);
772 HRESULT STDMETHODCALLTYPE WebPreferences::allowAnimatedImageLooping(
773 /* [retval][out] */ BOOL* enabled)
775 *enabled = boolValueForKey(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey));
779 HRESULT STDMETHODCALLTYPE WebPreferences::setAllowAnimatedImageLooping(
780 /* [in] */ BOOL enabled)
782 setBoolValue(CFSTR(WebKitAllowAnimatedImageLoopingPreferenceKey), enabled);
786 HRESULT STDMETHODCALLTYPE WebPreferences::setLoadsImagesAutomatically(
787 /* [in] */ BOOL enabled)
789 setBoolValue(CFSTR(WebKitDisplayImagesKey), enabled);
793 HRESULT STDMETHODCALLTYPE WebPreferences::loadsImagesAutomatically(
794 /* [retval][out] */ BOOL* enabled)
796 *enabled = boolValueForKey(CFSTR(WebKitDisplayImagesKey));
800 HRESULT STDMETHODCALLTYPE WebPreferences::setAutosaves(
801 /* [in] */ BOOL enabled)
803 m_autoSaves = !!enabled;
807 HRESULT STDMETHODCALLTYPE WebPreferences::autosaves(
808 /* [retval][out] */ BOOL* enabled)
810 *enabled = m_autoSaves ? TRUE : FALSE;
814 HRESULT STDMETHODCALLTYPE WebPreferences::setShouldPrintBackgrounds(
815 /* [in] */ BOOL enabled)
817 setBoolValue(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey), enabled);
821 HRESULT STDMETHODCALLTYPE WebPreferences::shouldPrintBackgrounds(
822 /* [retval][out] */ BOOL* enabled)
824 *enabled = boolValueForKey(CFSTR(WebKitShouldPrintBackgroundsPreferenceKey));
828 HRESULT STDMETHODCALLTYPE WebPreferences::setPrivateBrowsingEnabled(
829 /* [in] */ BOOL enabled)
831 setBoolValue(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), enabled);
835 HRESULT STDMETHODCALLTYPE WebPreferences::privateBrowsingEnabled(
836 /* [retval][out] */ BOOL* enabled)
838 *enabled = boolValueForKey(CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey));
842 HRESULT STDMETHODCALLTYPE WebPreferences::setTabsToLinks(
843 /* [in] */ BOOL enabled)
845 setBoolValue(CFSTR(WebKitTabToLinksPreferenceKey), enabled);
849 HRESULT STDMETHODCALLTYPE WebPreferences::tabsToLinks(
850 /* [retval][out] */ BOOL* enabled)
852 *enabled = boolValueForKey(CFSTR(WebKitTabToLinksPreferenceKey));
856 HRESULT STDMETHODCALLTYPE WebPreferences::setUsesPageCache(
857 /* [in] */ BOOL usesPageCache)
859 setBoolValue(CFSTR(WebKitUsesPageCachePreferenceKey), usesPageCache);
863 HRESULT STDMETHODCALLTYPE WebPreferences::usesPageCache(
864 /* [retval][out] */ BOOL* usesPageCache)
866 *usesPageCache = boolValueForKey(CFSTR(WebKitUsesPageCachePreferenceKey));
870 HRESULT STDMETHODCALLTYPE WebPreferences::textAreasAreResizable(
871 /* [retval][out] */ BOOL* enabled)
873 *enabled = boolValueForKey(CFSTR(WebKitTextAreasAreResizablePreferenceKey));
877 HRESULT STDMETHODCALLTYPE WebPreferences::setTextAreasAreResizable(
878 /* [in] */ BOOL enabled)
880 setBoolValue(CFSTR(WebKitTextAreasAreResizablePreferenceKey), enabled);
884 HRESULT WebPreferences::historyItemLimit(int* limit)
886 *limit = integerValueForKey(CFSTR(WebKitHistoryItemLimitKey));
890 HRESULT WebPreferences::setHistoryItemLimit(int limit)
892 setIntegerValue(CFSTR(WebKitHistoryItemLimitKey), limit);
896 HRESULT WebPreferences::historyAgeInDaysLimit(int* limit)
898 *limit = integerValueForKey(CFSTR(WebKitHistoryAgeInDaysLimitKey));
902 HRESULT WebPreferences::setHistoryAgeInDaysLimit(int limit)
904 setIntegerValue(CFSTR(WebKitHistoryAgeInDaysLimitKey), limit);
908 HRESULT WebPreferences::unused1()
910 ASSERT_NOT_REACHED();
914 HRESULT WebPreferences::unused2()
916 ASSERT_NOT_REACHED();
920 HRESULT WebPreferences::iconDatabaseLocation(
921 /* [out] */ BSTR* location)
923 *location = stringValueForKey(CFSTR(WebKitIconDatabaseLocationKey));
924 return (*location) ? S_OK : E_FAIL;
927 HRESULT WebPreferences::setIconDatabaseLocation(
928 /* [in] */ BSTR location)
930 setStringValue(CFSTR(WebKitIconDatabaseLocationKey), location);
934 HRESULT WebPreferences::iconDatabaseEnabled(BOOL* enabled)//location)
936 *enabled = boolValueForKey(CFSTR(WebKitIconDatabaseEnabledPreferenceKey));
940 HRESULT WebPreferences::setIconDatabaseEnabled(BOOL enabled )//location)
942 setBoolValue(CFSTR(WebKitIconDatabaseEnabledPreferenceKey), enabled);
946 HRESULT STDMETHODCALLTYPE WebPreferences::fontSmoothing(
947 /* [retval][out] */ FontSmoothingType* smoothingType)
949 *smoothingType = (FontSmoothingType) integerValueForKey(CFSTR(WebKitFontSmoothingTypePreferenceKey));
953 HRESULT STDMETHODCALLTYPE WebPreferences::setFontSmoothing(
954 /* [in] */ FontSmoothingType smoothingType)
956 setIntegerValue(CFSTR(WebKitFontSmoothingTypePreferenceKey), smoothingType);
957 if (smoothingType == FontSmoothingTypeWindows)
958 smoothingType = FontSmoothingTypeStandard;
959 wkSetFontSmoothingLevel((int)smoothingType);
963 HRESULT STDMETHODCALLTYPE WebPreferences::editableLinkBehavior(
964 /* [out, retval] */ WebKitEditableLinkBehavior* editableLinkBehavior)
966 WebKitEditableLinkBehavior value = (WebKitEditableLinkBehavior) integerValueForKey(CFSTR(WebKitEditableLinkBehaviorPreferenceKey));
968 case WebKitEditableLinkDefaultBehavior:
969 case WebKitEditableLinkAlwaysLive:
970 case WebKitEditableLinkOnlyLiveWithShiftKey:
971 case WebKitEditableLinkLiveWhenNotFocused:
972 case WebKitEditableLinkNeverLive:
973 *editableLinkBehavior = value;
975 default: // ensure that a valid result is returned
976 *editableLinkBehavior = WebKitEditableLinkDefaultBehavior;
982 HRESULT STDMETHODCALLTYPE WebPreferences::setEditableLinkBehavior(
983 /* [in] */ WebKitEditableLinkBehavior behavior)
985 setIntegerValue(CFSTR(WebKitEditableLinkBehaviorPreferenceKey), behavior);
989 HRESULT STDMETHODCALLTYPE WebPreferences::cookieStorageAcceptPolicy(
990 /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy )
995 *acceptPolicy = (WebKitCookieStorageAcceptPolicy)integerValueForKey(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey));
999 HRESULT STDMETHODCALLTYPE WebPreferences::setCookieStorageAcceptPolicy(
1000 /* [in] */ WebKitCookieStorageAcceptPolicy acceptPolicy)
1002 setIntegerValue(CFSTR(WebKitCookieStorageAcceptPolicyPreferenceKey), acceptPolicy);
1007 HRESULT WebPreferences::continuousSpellCheckingEnabled(BOOL* enabled)
1009 *enabled = boolValueForKey(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey));
1013 HRESULT WebPreferences::setContinuousSpellCheckingEnabled(BOOL enabled)
1015 setBoolValue(CFSTR(WebContinuousSpellCheckingEnabledPreferenceKey), enabled);
1019 HRESULT WebPreferences::grammarCheckingEnabled(BOOL* enabled)
1021 *enabled = boolValueForKey(CFSTR(WebGrammarCheckingEnabledPreferenceKey));
1025 HRESULT WebPreferences::setGrammarCheckingEnabled(BOOL enabled)
1027 setBoolValue(CFSTR(WebGrammarCheckingEnabledPreferenceKey), enabled);
1031 HRESULT WebPreferences::allowContinuousSpellChecking(BOOL* enabled)
1033 *enabled = boolValueForKey(CFSTR(AllowContinuousSpellCheckingPreferenceKey));
1037 HRESULT WebPreferences::setAllowContinuousSpellChecking(BOOL enabled)
1039 setBoolValue(CFSTR(AllowContinuousSpellCheckingPreferenceKey), enabled);
1043 HRESULT WebPreferences::isDOMPasteAllowed(BOOL* enabled)
1045 *enabled = boolValueForKey(CFSTR(WebKitDOMPasteAllowedPreferenceKey));
1049 HRESULT WebPreferences::setDOMPasteAllowed(BOOL enabled)
1051 setBoolValue(CFSTR(WebKitDOMPasteAllowedPreferenceKey), enabled);
1055 HRESULT WebPreferences::cacheModel(WebCacheModel* cacheModel)
1060 *cacheModel = (WebCacheModel)integerValueForKey(CFSTR(WebKitCacheModelPreferenceKey));
1064 HRESULT WebPreferences::setCacheModel(WebCacheModel cacheModel)
1066 setIntegerValue(CFSTR(WebKitCacheModelPreferenceKey), cacheModel);
1070 HRESULT WebPreferences::setDeveloperExtrasEnabled(BOOL enabled)
1072 setBoolValue(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey), enabled);
1076 HRESULT WebPreferences::developerExtrasEnabled(BOOL* enabled)
1081 *enabled = boolValueForKey(CFSTR(WebKitDeveloperExtrasEnabledPreferenceKey));
1085 bool WebPreferences::developerExtrasDisabledByOverride()
1087 return !!boolValueForKey(CFSTR(DisableWebKitDeveloperExtrasPreferenceKey));
1090 HRESULT WebPreferences::setAutomaticallyDetectsCacheModel(BOOL automaticallyDetectsCacheModel)
1092 m_automaticallyDetectsCacheModel = !!automaticallyDetectsCacheModel;
1096 HRESULT WebPreferences::automaticallyDetectsCacheModel(BOOL* automaticallyDetectsCacheModel)
1098 if (!automaticallyDetectsCacheModel)
1101 *automaticallyDetectsCacheModel = m_automaticallyDetectsCacheModel;
1105 HRESULT STDMETHODCALLTYPE WebPreferences::setAuthorAndUserStylesEnabled(BOOL enabled)
1107 setBoolValue(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey), enabled);
1111 HRESULT STDMETHODCALLTYPE WebPreferences::authorAndUserStylesEnabled(BOOL* enabled)
1116 *enabled = boolValueForKey(CFSTR(WebKitAuthorAndUserStylesEnabledPreferenceKey));
1120 void WebPreferences::willAddToWebView()
1125 void WebPreferences::didRemoveFromWebView()
1127 ASSERT(m_numWebViews);
1128 if (--m_numWebViews == 0) {
1129 IWebNotificationCenter* nc = WebNotificationCenter::defaultCenterInternal();
1130 nc->postNotificationName(webPreferencesRemovedNotification(), static_cast<IWebPreferences*>(this), 0);