3966c2ed1ba734e12ce94578f62aa23a3d228ad3
[WebKit-https.git] / WebKit / win / WebPreferences.h
1 /*
2  * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef WebPreferences_H
27 #define WebPreferences_H
28
29 #include "IWebPreferences.h"
30 #include "IWebPreferencesPrivate.h"
31 #include <CoreFoundation/CoreFoundation.h>
32 #include <WebCore/BString.h>
33 #include <wtf/RetainPtr.h>
34
35 class WebPreferences : public IWebPreferences, public IWebPreferencesPrivate {
36 public:
37     static WebPreferences* createInstance();
38 protected:
39     WebPreferences();
40     ~WebPreferences();
41
42 public:
43     // IUnknown
44     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
45     virtual ULONG STDMETHODCALLTYPE AddRef(void);
46     virtual ULONG STDMETHODCALLTYPE Release(void);
47
48     // IWebPreferences
49     virtual HRESULT STDMETHODCALLTYPE standardPreferences( 
50         /* [retval][out] */ IWebPreferences** standardPreferences);
51     
52     virtual HRESULT STDMETHODCALLTYPE initWithIdentifier( 
53         /* [in] */ BSTR anIdentifier,
54         /* [retval][out] */ IWebPreferences** preferences);
55     
56     virtual HRESULT STDMETHODCALLTYPE identifier( 
57         /* [retval][out] */ BSTR* ident);
58     
59     virtual HRESULT STDMETHODCALLTYPE standardFontFamily( 
60         /* [retval][out] */ BSTR* family);
61     
62     virtual HRESULT STDMETHODCALLTYPE setStandardFontFamily( 
63         /* [in] */ BSTR family);
64     
65     virtual HRESULT STDMETHODCALLTYPE fixedFontFamily( 
66         /* [retval][out] */ BSTR* family);
67     
68     virtual HRESULT STDMETHODCALLTYPE setFixedFontFamily( 
69         /* [in] */ BSTR family);
70     
71     virtual HRESULT STDMETHODCALLTYPE serifFontFamily( 
72         /* [retval][out] */ BSTR* fontFamily);
73     
74     virtual HRESULT STDMETHODCALLTYPE setSerifFontFamily( 
75         /* [in] */ BSTR family);
76     
77     virtual HRESULT STDMETHODCALLTYPE sansSerifFontFamily( 
78         /* [retval][out] */ BSTR* family);
79     
80     virtual HRESULT STDMETHODCALLTYPE setSansSerifFontFamily( 
81         /* [in] */ BSTR family);
82     
83     virtual HRESULT STDMETHODCALLTYPE cursiveFontFamily( 
84         /* [retval][out] */ BSTR* family);
85     
86     virtual HRESULT STDMETHODCALLTYPE setCursiveFontFamily( 
87         /* [in] */ BSTR family);
88     
89     virtual HRESULT STDMETHODCALLTYPE fantasyFontFamily( 
90         /* [retval][out] */ BSTR* family);
91     
92     virtual HRESULT STDMETHODCALLTYPE setFantasyFontFamily( 
93         /* [in] */ BSTR family);
94     
95     virtual HRESULT STDMETHODCALLTYPE defaultFontSize( 
96         /* [retval][out] */ int* fontSize);
97     
98     virtual HRESULT STDMETHODCALLTYPE setDefaultFontSize( 
99         /* [in] */ int fontSize);
100     
101     virtual HRESULT STDMETHODCALLTYPE defaultFixedFontSize( 
102         /* [retval][out] */ int* fontSize);
103     
104     virtual HRESULT STDMETHODCALLTYPE setDefaultFixedFontSize( 
105         /* [in] */ int fontSize);
106     
107     virtual HRESULT STDMETHODCALLTYPE minimumFontSize( 
108         /* [retval][out] */ int* fontSize);
109     
110     virtual HRESULT STDMETHODCALLTYPE setMinimumFontSize( 
111         /* [in] */ int fontSize);
112     
113     virtual HRESULT STDMETHODCALLTYPE minimumLogicalFontSize( 
114         /* [retval][out] */ int* fontSize);
115     
116     virtual HRESULT STDMETHODCALLTYPE setMinimumLogicalFontSize( 
117         /* [in] */ int fontSize);
118     
119     virtual HRESULT STDMETHODCALLTYPE defaultTextEncodingName( 
120         /* [retval][out] */ BSTR* name);
121     
122     virtual HRESULT STDMETHODCALLTYPE setDefaultTextEncodingName( 
123         /* [in] */ BSTR name);
124     
125     virtual HRESULT STDMETHODCALLTYPE userStyleSheetEnabled( 
126         /* [retval][out] */ BOOL* enabled);
127     
128     virtual HRESULT STDMETHODCALLTYPE setUserStyleSheetEnabled( 
129         /* [in] */ BOOL enabled);
130     
131     virtual HRESULT STDMETHODCALLTYPE userStyleSheetLocation( 
132         /* [retval][out] */ BSTR* location);
133     
134     virtual HRESULT STDMETHODCALLTYPE setUserStyleSheetLocation( 
135         /* [in] */ BSTR location);
136     
137     virtual HRESULT STDMETHODCALLTYPE isJavaEnabled( 
138         /* [retval][out] */ BOOL* enabled);
139     
140     virtual HRESULT STDMETHODCALLTYPE setJavaEnabled( 
141         /* [in] */ BOOL enabled);
142     
143     virtual HRESULT STDMETHODCALLTYPE isJavaScriptEnabled( 
144         /* [retval][out] */ BOOL* enabled);
145     
146     virtual HRESULT STDMETHODCALLTYPE setJavaScriptEnabled( 
147         /* [in] */ BOOL enabled);
148     
149     virtual HRESULT STDMETHODCALLTYPE javaScriptCanOpenWindowsAutomatically( 
150         /* [retval][out] */ BOOL* enabled);
151     
152     virtual HRESULT STDMETHODCALLTYPE setJavaScriptCanOpenWindowsAutomatically( 
153         /* [in] */ BOOL enabled);
154     
155     virtual HRESULT STDMETHODCALLTYPE arePlugInsEnabled( 
156         /* [retval][out] */ BOOL* enabled);
157     
158     virtual HRESULT STDMETHODCALLTYPE setPlugInsEnabled( 
159         /* [in] */ BOOL enabled);
160     
161     virtual HRESULT STDMETHODCALLTYPE allowsAnimatedImages( 
162         /* [retval][out] */ BOOL* enabled);
163     
164     virtual HRESULT STDMETHODCALLTYPE setAllowsAnimatedImages( 
165         /* [in] */ BOOL enabled);
166     
167     virtual HRESULT STDMETHODCALLTYPE allowAnimatedImageLooping( 
168         /* [retval][out] */ BOOL* enabled);
169     
170     virtual HRESULT STDMETHODCALLTYPE setAllowAnimatedImageLooping( 
171         /* [in] */ BOOL enabled);
172     
173     virtual HRESULT STDMETHODCALLTYPE setLoadsImagesAutomatically( 
174         /* [in] */ BOOL enabled);
175     
176     virtual HRESULT STDMETHODCALLTYPE loadsImagesAutomatically( 
177         /* [retval][out] */ BOOL* enabled);
178     
179     virtual HRESULT STDMETHODCALLTYPE setAutosaves( 
180         /* [in] */ BOOL enabled);
181     
182     virtual HRESULT STDMETHODCALLTYPE autosaves( 
183         /* [retval][out] */ BOOL* enabled);
184     
185     virtual HRESULT STDMETHODCALLTYPE setShouldPrintBackgrounds( 
186         /* [in] */ BOOL enabled);
187     
188     virtual HRESULT STDMETHODCALLTYPE shouldPrintBackgrounds( 
189         /* [retval][out] */ BOOL* enabled);
190     
191     virtual HRESULT STDMETHODCALLTYPE setPrivateBrowsingEnabled( 
192         /* [in] */ BOOL enabled);
193     
194     virtual HRESULT STDMETHODCALLTYPE privateBrowsingEnabled( 
195         /* [retval][out] */ BOOL* enabled);
196     
197     virtual HRESULT STDMETHODCALLTYPE setTabsToLinks( 
198         /* [in] */ BOOL enabled);
199     
200     virtual HRESULT STDMETHODCALLTYPE tabsToLinks( 
201         /* [retval][out] */ BOOL* enabled);
202
203     virtual HRESULT STDMETHODCALLTYPE textAreasAreResizable( 
204         /* [retval][out] */ BOOL *enabled);
205     
206     virtual HRESULT STDMETHODCALLTYPE setTextAreasAreResizable( 
207         /* [in] */ BOOL enabled);
208
209     virtual HRESULT STDMETHODCALLTYPE usesPageCache( 
210         /* [retval][out] */ BOOL *usesPageCache);
211
212     virtual HRESULT STDMETHODCALLTYPE setUsesPageCache( 
213         /* [in] */ BOOL usesPageCache);
214
215     virtual HRESULT STDMETHODCALLTYPE pageCacheSize( 
216         /* [retval][out] */ unsigned int *limit);
217
218     virtual HRESULT STDMETHODCALLTYPE objectCacheSize( 
219         /* [retval][out] */ unsigned int *limit);
220     
221     virtual HRESULT STDMETHODCALLTYPE iconDatabaseLocation(
222         /* [retval][out] */ BSTR* location);
223
224     virtual HRESULT STDMETHODCALLTYPE setIconDatabaseLocation(
225         /* [in] */ BSTR location);
226
227     virtual HRESULT STDMETHODCALLTYPE iconDatabaseEnabled(
228         /* [retval][out] */ BOOL* enabled);
229
230     virtual HRESULT STDMETHODCALLTYPE setIconDatabaseEnabled(
231         /* [in] */ BOOL enabled);
232
233     virtual HRESULT STDMETHODCALLTYPE fontSmoothing( 
234         /* [retval][out] */ FontSmoothingType* smoothingType);
235     
236     virtual HRESULT STDMETHODCALLTYPE setFontSmoothing( 
237         /* [in] */ FontSmoothingType smoothingType);
238
239     virtual HRESULT STDMETHODCALLTYPE editableLinkBehavior( 
240         /* [retval][out] */ WebKitEditableLinkBehavior* behavior);
241     
242     virtual HRESULT STDMETHODCALLTYPE setEditableLinkBehavior( 
243         /* [in] */ WebKitEditableLinkBehavior behavior);
244
245     virtual HRESULT STDMETHODCALLTYPE cookieStorageAcceptPolicy( 
246         /* [retval][out] */ WebKitCookieStorageAcceptPolicy *acceptPolicy);
247         
248     virtual HRESULT STDMETHODCALLTYPE setCookieStorageAcceptPolicy( 
249         /* [in] */ WebKitCookieStorageAcceptPolicy acceptPolicy);
250
251     virtual HRESULT STDMETHODCALLTYPE continuousSpellCheckingEnabled( 
252         /* [retval][out] */ BOOL *enabled);
253     
254     virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled( 
255         /* [in] */ BOOL enabled);
256     
257     virtual HRESULT STDMETHODCALLTYPE grammarCheckingEnabled( 
258         /* [retval][out] */ BOOL *enabled);
259     
260     virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled( 
261         /* [in] */ BOOL enabled);
262
263     virtual HRESULT STDMETHODCALLTYPE allowContinuousSpellChecking( 
264         /* [retval][out] */ BOOL *enabled);
265     
266     virtual HRESULT STDMETHODCALLTYPE setAllowContinuousSpellChecking( 
267         /* [in] */ BOOL enabled);
268
269     virtual HRESULT STDMETHODCALLTYPE isDOMPasteAllowed( 
270         /* [retval][out] */ BOOL *enabled);
271     
272     virtual HRESULT STDMETHODCALLTYPE setDOMPasteAllowed( 
273         /* [in] */ BOOL enabled);
274
275     // IWebPreferencesPrivate
276     virtual HRESULT STDMETHODCALLTYPE setDeveloperExtrasEnabled(
277         /* [in] */ BOOL);
278
279     virtual HRESULT STDMETHODCALLTYPE developerExtrasEnabled(
280         /* [retval][out] */ BOOL*);
281
282
283     // WebPreferences
284
285     // This method accesses a different preference key than developerExtrasEnabled.
286     // See <rdar://5343767> for the justification.
287     bool developerExtrasDisabledByOverride();
288
289     static BSTR webPreferencesChangedNotification();
290     static void setInstance(WebPreferences* instance, BSTR identifier);
291     static void removeReferenceForIdentifier(BSTR identifier);
292     static WebPreferences* sharedStandardPreferences();
293
294     // From WebHistory.h
295     HRESULT historyItemLimit(int* limit);
296     HRESULT setHistoryItemLimit(int limit);
297     HRESULT historyAgeInDaysLimit(int* limit);
298     HRESULT setHistoryAgeInDaysLimit(int limit);
299
300 protected:
301     HRESULT postPreferencesChangesNotification();
302     const void* valueForKey(CFStringRef key);
303     BSTR stringValueForKey(CFStringRef key);
304     int integerValueForKey(CFStringRef key);
305     BOOL boolValueForKey(CFStringRef key);
306     float floatValueForKey(CFStringRef key);
307     void setStringValue(CFStringRef key, LPCTSTR value);
308     void setIntegerValue(CFStringRef key, int value);
309     void setBoolValue(CFStringRef key, BOOL value);
310     static WebPreferences* getInstanceForIdentifier(BSTR identifier);
311     static void initializeDefaultSettings();
312     void save();
313     void load();
314     void migrateDefaultSettingsFromSafari3Beta();
315     void removeValuesMatchingDefaultSettings();
316     static HRESULT preferencesPath(LPTSTR path, size_t cchPath);
317     static HRESULT safeCreateFileWithData(LPCTSTR path, void* data, size_t length);
318
319 protected:
320     ULONG m_refCount;
321     RetainPtr<CFMutableDictionaryRef> m_privatePrefs;
322     bool m_autoSaves;
323     WebCore::BString m_identifier;
324     static CFDictionaryRef s_defaultSettings;
325     static WebPreferences* s_standardPreferences;
326 };
327
328 #endif