Add support of setPasswordEchoEnabled and setPasswordEchoDuration for password echo...
[WebKit-https.git] / Source / WebCore / page / Settings.cpp
1 /*
2  * Copyright (C) 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "config.h"
27 #include "Settings.h"
28
29 #include "BackForwardController.h"
30 #include "CachedResourceLoader.h"
31 #include "CookieStorage.h"
32 #include "DOMTimer.h"
33 #include "Database.h"
34 #include "Document.h"
35 #include "Frame.h"
36 #include "FrameTree.h"
37 #include "FrameView.h"
38 #include "HistoryItem.h"
39 #include "Page.h"
40 #include "PageCache.h"
41 #include "ResourceHandle.h"
42 #include "StorageMap.h"
43 #include <limits>
44
45 using namespace std;
46
47 namespace WebCore {
48
49 static void setLoadsImagesAutomaticallyInAllFrames(Page* page)
50 {
51     for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext())
52         frame->document()->cachedResourceLoader()->setAutoLoadImages(page->settings()->loadsImagesAutomatically());
53 }
54
55 static inline void setGenericFontFamilyMap(ScriptFontFamilyMap& fontMap, const AtomicString& family, UScriptCode script, Page* page)
56 {
57     ScriptFontFamilyMap::iterator it = fontMap.find(static_cast<int>(script));
58     if (it != fontMap.end() && it->second == family)
59         return;
60     fontMap.set(static_cast<int>(script), family);
61     page->setNeedsRecalcStyleInAllFrames();
62 }
63
64 static inline const AtomicString& getGenericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script)
65 {
66     ScriptFontFamilyMap::const_iterator it = fontMap.find(static_cast<int>(script));
67     if (it != fontMap.end())
68         return it->second;
69     if (script != USCRIPT_COMMON)
70         return getGenericFontFamilyForScript(fontMap, USCRIPT_COMMON);
71     return emptyAtom;
72 }
73
74 #if USE(SAFARI_THEME)
75 bool Settings::gShouldPaintNativeControls = true;
76 #endif
77
78 #if USE(AVFOUNDATION)
79 bool Settings::gAVFoundationEnabled(false);
80 #endif
81
82 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
83 bool Settings::gShouldUseHighResolutionTimers = true;
84 #endif
85
86 // NOTEs
87 //  1) EditingMacBehavior comprises Tiger, Leopard, SnowLeopard and iOS builds, as well QtWebKit and Chromium when built on Mac;
88 //  2) EditingWindowsBehavior comprises Win32 and WinCE builds, as well as QtWebKit and Chromium when built on Windows;
89 //  3) EditingUnixBehavior comprises all unix-based systems, but Darwin/MacOS (and then abusing the terminology);
90 // 99) MacEditingBehavior is used a fallback.
91 static EditingBehaviorType editingBehaviorTypeForPlatform()
92 {
93     return
94 #if OS(DARWIN)
95     EditingMacBehavior
96 #elif OS(WINDOWS)
97     EditingWindowsBehavior
98 #elif OS(UNIX)
99     EditingUnixBehavior
100 #else
101     // Fallback
102     EditingMacBehavior
103 #endif
104     ;
105 }
106
107 Settings::Settings(Page* page)
108     : m_page(page)
109     , m_editableLinkBehavior(EditableLinkDefaultBehavior)
110     , m_textDirectionSubmenuInclusionBehavior(TextDirectionSubmenuAutomaticallyIncluded)
111     , m_passwordEchoDurationInSeconds(1)
112     , m_minimumFontSize(0)
113     , m_minimumLogicalFontSize(0)
114     , m_defaultFontSize(0)
115     , m_defaultFixedFontSize(0)
116     , m_validationMessageTimerMagnification(50)
117     , m_minimumAccelerated2dCanvasSize(128 * 128)
118     , m_layoutFallbackWidth(980)
119     , m_deviceDPI(240)
120     , m_maximumDecodedImageSize(numeric_limits<size_t>::max())
121     , m_deviceWidth(480)
122     , m_deviceHeight(854)
123 #if ENABLE(DOM_STORAGE)
124     , m_sessionStorageQuota(StorageMap::noQuota)
125 #endif
126     , m_editingBehaviorType(editingBehaviorTypeForPlatform())
127     , m_maximumHTMLParserDOMTreeDepth(defaultMaximumHTMLParserDOMTreeDepth)
128     , m_isSpatialNavigationEnabled(false)
129     , m_isJavaEnabled(false)
130     , m_loadsImagesAutomatically(false)
131     , m_loadsSiteIconsIgnoringImageLoadingSetting(false)
132     , m_privateBrowsingEnabled(false)
133     , m_caretBrowsingEnabled(false)
134     , m_areImagesEnabled(true)
135     , m_isMediaEnabled(true)
136     , m_arePluginsEnabled(false)
137     , m_localStorageEnabled(false)
138     , m_isJavaScriptEnabled(false)
139     , m_isWebSecurityEnabled(true)
140     , m_allowUniversalAccessFromFileURLs(true)
141     , m_allowFileAccessFromFileURLs(true)
142     , m_javaScriptCanOpenWindowsAutomatically(false)
143     , m_javaScriptCanAccessClipboard(false)
144     , m_shouldPrintBackgrounds(false)
145     , m_textAreasAreResizable(false)
146 #if ENABLE(DASHBOARD_SUPPORT)
147     , m_usesDashboardBackwardCompatibilityMode(false)
148 #endif
149     , m_needsAdobeFrameReloadingQuirk(false)
150     , m_needsKeyboardEventDisambiguationQuirks(false)
151     , m_treatsAnyTextCSSLinkAsStylesheet(false)
152     , m_needsLeopardMailQuirks(false)
153     , m_isDOMPasteAllowed(false)
154     , m_shrinksStandaloneImagesToFit(true)
155     , m_usesPageCache(false)
156     , m_showsURLsInToolTips(false)
157     , m_showsToolTipOverTruncatedText(false)
158     , m_forceFTPDirectoryListings(false)
159     , m_developerExtrasEnabled(false)
160     , m_authorAndUserStylesEnabled(true)
161     , m_needsSiteSpecificQuirks(false)
162     , m_fontRenderingMode(0)
163     , m_frameFlatteningEnabled(false)
164     , m_webArchiveDebugModeEnabled(false)
165     , m_localFileContentSniffingEnabled(false)
166     , m_inApplicationChromeMode(false)
167     , m_offlineWebApplicationCacheEnabled(false)
168     , m_shouldPaintCustomScrollbars(false)
169     , m_enforceCSSMIMETypeInNoQuirksMode(true)
170     , m_usesEncodingDetector(false)
171     , m_allowScriptsToCloseWindows(false)
172     , m_canvasUsesAcceleratedDrawing(false)
173     , m_acceleratedDrawingEnabled(false)
174     // FIXME: This should really be disabled by default as it makes platforms that don't support the feature download files
175     // they can't use by. Leaving enabled for now to not change existing behavior.
176     , m_downloadableBinaryFontsEnabled(true)
177     , m_xssAuditorEnabled(false)
178     , m_acceleratedCompositingEnabled(true)
179     , m_acceleratedCompositingFor3DTransformsEnabled(true)
180     , m_acceleratedCompositingForVideoEnabled(true)
181     , m_acceleratedCompositingForPluginsEnabled(true)
182     , m_acceleratedCompositingForCanvasEnabled(true)
183     , m_acceleratedCompositingForAnimationEnabled(true)
184     , m_showDebugBorders(false)
185     , m_showRepaintCounter(false)
186     , m_experimentalNotificationsEnabled(false)
187     , m_webGLEnabled(false)
188     , m_openGLMultisamplingEnabled(true)
189     , m_webAudioEnabled(false)
190     , m_acceleratedCanvas2dEnabled(false)
191     , m_legacyAcceleratedCanvas2dEnabled(false)
192     , m_loadDeferringEnabled(true)
193     , m_tiledBackingStoreEnabled(false)
194     , m_paginateDuringLayoutEnabled(false)
195     , m_dnsPrefetchingEnabled(false)
196 #if ENABLE(FULLSCREEN_API)
197     , m_fullScreenAPIEnabled(false)
198 #endif
199     , m_asynchronousSpellCheckingEnabled(false)
200     , m_memoryInfoEnabled(false)
201     , m_interactiveFormValidation(false)
202     , m_usePreHTML5ParserQuirks(false)
203     , m_hyperlinkAuditingEnabled(false)
204     , m_crossOriginCheckInGetMatchedCSSRulesDisabled(false)
205     , m_forceCompositingMode(false)
206     , m_shouldInjectUserScriptsInInitialEmptyDocument(false)
207     , m_allowDisplayOfInsecureContent(true)
208     , m_allowRunningOfInsecureContent(true)
209 #if ENABLE(SMOOTH_SCROLLING)
210     , m_scrollAnimatorEnabled(false)
211 #endif
212 #if ENABLE(WEB_SOCKETS)
213     , m_useHixie76WebSocketProtocol(true)
214 #endif
215     , m_mediaPlaybackRequiresUserGesture(false)
216     , m_mediaPlaybackAllowsInline(true)
217     , m_passwordEchoEnabled(false)
218     , m_loadsImagesAutomaticallyTimer(this, &Settings::loadsImagesAutomaticallyTimerFired)
219 {
220     // A Frame may not have been created yet, so we initialize the AtomicString 
221     // hash before trying to use it.
222     AtomicString::init();
223 }
224
225 const AtomicString& Settings::standardFontFamily(UScriptCode script) const
226 {
227     return getGenericFontFamilyForScript(m_standardFontFamilyMap, script);
228 }
229
230 void Settings::setStandardFontFamily(const AtomicString& family, UScriptCode script)
231 {
232     setGenericFontFamilyMap(m_standardFontFamilyMap, family, script, m_page);
233 }
234
235 const AtomicString& Settings::fixedFontFamily(UScriptCode script) const
236 {
237     return getGenericFontFamilyForScript(m_fixedFontFamilyMap, script);
238 }
239
240 void Settings::setFixedFontFamily(const AtomicString& family, UScriptCode script)
241 {
242     setGenericFontFamilyMap(m_fixedFontFamilyMap, family, script, m_page);
243 }
244
245 const AtomicString& Settings::serifFontFamily(UScriptCode script) const
246 {
247     return getGenericFontFamilyForScript(m_serifFontFamilyMap, script);
248 }
249
250 void Settings::setSerifFontFamily(const AtomicString& family, UScriptCode script)
251 {
252      setGenericFontFamilyMap(m_serifFontFamilyMap, family, script, m_page);
253 }
254
255 const AtomicString& Settings::sansSerifFontFamily(UScriptCode script) const
256 {
257     return getGenericFontFamilyForScript(m_sansSerifFontFamilyMap, script);
258 }
259
260 void Settings::setSansSerifFontFamily(const AtomicString& family, UScriptCode script)
261 {
262     setGenericFontFamilyMap(m_sansSerifFontFamilyMap, family, script, m_page);
263 }
264
265 const AtomicString& Settings::cursiveFontFamily(UScriptCode script) const
266 {
267     return getGenericFontFamilyForScript(m_cursiveFontFamilyMap, script);
268 }
269
270 void Settings::setCursiveFontFamily(const AtomicString& family, UScriptCode script)
271 {
272     setGenericFontFamilyMap(m_cursiveFontFamilyMap, family, script, m_page);
273 }
274
275 const AtomicString& Settings::fantasyFontFamily(UScriptCode script) const
276 {
277     return getGenericFontFamilyForScript(m_fantasyFontFamilyMap, script);
278 }
279
280 void Settings::setFantasyFontFamily(const AtomicString& family, UScriptCode script)
281 {
282     setGenericFontFamilyMap(m_fantasyFontFamilyMap, family, script, m_page);
283 }
284
285 const AtomicString& Settings::pictographFontFamily(UScriptCode script) const
286 {
287     return getGenericFontFamilyForScript(m_pictographFontFamilyMap, script);
288 }
289
290 void Settings::setPictographFontFamily(const AtomicString& family, UScriptCode script)
291 {
292     setGenericFontFamilyMap(m_pictographFontFamilyMap, family, script, m_page);
293 }
294
295 void Settings::setMinimumFontSize(int minimumFontSize)
296 {
297     if (m_minimumFontSize == minimumFontSize)
298         return;
299
300     m_minimumFontSize = minimumFontSize;
301     m_page->setNeedsRecalcStyleInAllFrames();
302 }
303
304 void Settings::setMinimumLogicalFontSize(int minimumLogicalFontSize)
305 {
306     if (m_minimumLogicalFontSize == minimumLogicalFontSize)
307         return;
308
309     m_minimumLogicalFontSize = minimumLogicalFontSize;
310     m_page->setNeedsRecalcStyleInAllFrames();
311 }
312
313 void Settings::setDefaultFontSize(int defaultFontSize)
314 {
315     if (m_defaultFontSize == defaultFontSize)
316         return;
317
318     m_defaultFontSize = defaultFontSize;
319     m_page->setNeedsRecalcStyleInAllFrames();
320 }
321
322 void Settings::setDefaultFixedFontSize(int defaultFontSize)
323 {
324     if (m_defaultFixedFontSize == defaultFontSize)
325         return;
326
327     m_defaultFixedFontSize = defaultFontSize;
328     m_page->setNeedsRecalcStyleInAllFrames();
329 }
330
331 void Settings::setLoadsImagesAutomatically(bool loadsImagesAutomatically)
332 {
333     m_loadsImagesAutomatically = loadsImagesAutomatically;
334     
335     // Changing this setting to true might immediately start new loads for images that had previously had loading disabled.
336     // If this happens while a WebView is being dealloc'ed, and we don't know the WebView is being dealloc'ed, these new loads
337     // can cause crashes downstream when the WebView memory has actually been free'd.
338     // One example where this can happen is in Mac apps that subclass WebView then do work in their overridden dealloc methods.
339     // Starting these loads synchronously is not important.  By putting it on a 0-delay, properly closing the Page cancels them
340     // before they have a chance to really start.
341     // See http://webkit.org/b/60572 for more discussion.
342     m_loadsImagesAutomaticallyTimer.startOneShot(0);
343 }
344
345 void Settings::loadsImagesAutomaticallyTimerFired(Timer<Settings>*)
346 {
347     setLoadsImagesAutomaticallyInAllFrames(m_page);
348 }
349
350 void Settings::setLoadsSiteIconsIgnoringImageLoadingSetting(bool loadsSiteIcons)
351 {
352     m_loadsSiteIconsIgnoringImageLoadingSetting = loadsSiteIcons;
353 }
354
355 void Settings::setJavaScriptEnabled(bool isJavaScriptEnabled)
356 {
357     m_isJavaScriptEnabled = isJavaScriptEnabled;
358 }
359
360 void Settings::setWebSecurityEnabled(bool isWebSecurityEnabled)
361 {
362     m_isWebSecurityEnabled = isWebSecurityEnabled;
363 }
364
365 void Settings::setAllowUniversalAccessFromFileURLs(bool allowUniversalAccessFromFileURLs)
366 {
367     m_allowUniversalAccessFromFileURLs = allowUniversalAccessFromFileURLs;
368 }
369
370 void Settings::setAllowFileAccessFromFileURLs(bool allowFileAccessFromFileURLs)
371 {
372     m_allowFileAccessFromFileURLs = allowFileAccessFromFileURLs;
373 }
374
375 void Settings::setSpatialNavigationEnabled(bool isSpatialNavigationEnabled)
376 {
377     m_isSpatialNavigationEnabled = isSpatialNavigationEnabled;
378 }
379
380 void Settings::setJavaEnabled(bool isJavaEnabled)
381 {
382     m_isJavaEnabled = isJavaEnabled;
383 }
384
385 void Settings::setImagesEnabled(bool areImagesEnabled)
386 {
387     m_areImagesEnabled = areImagesEnabled;
388 }
389
390 void Settings::setMediaEnabled(bool isMediaEnabled)
391 {
392     m_isMediaEnabled = isMediaEnabled;
393 }
394
395 void Settings::setPluginsEnabled(bool arePluginsEnabled)
396 {
397     m_arePluginsEnabled = arePluginsEnabled;
398 }
399
400 void Settings::setLocalStorageEnabled(bool localStorageEnabled)
401 {
402     m_localStorageEnabled = localStorageEnabled;
403 }
404
405 #if ENABLE(DOM_STORAGE)
406 void Settings::setSessionStorageQuota(unsigned sessionStorageQuota)
407 {
408     m_sessionStorageQuota = sessionStorageQuota;
409 }
410 #endif
411
412 void Settings::setPrivateBrowsingEnabled(bool privateBrowsingEnabled)
413 {
414     if (m_privateBrowsingEnabled == privateBrowsingEnabled)
415         return;
416
417 #if USE(CFURLSTORAGESESSIONS)
418     ResourceHandle::setPrivateBrowsingEnabled(privateBrowsingEnabled);
419 #endif
420
421     // FIXME: We can only enable cookie private browsing mode globally, so it's misleading to have it as a per-page setting.
422     setCookieStoragePrivateBrowsingEnabled(privateBrowsingEnabled);
423
424     m_privateBrowsingEnabled = privateBrowsingEnabled;
425     m_page->privateBrowsingStateChanged();
426 }
427
428 void Settings::setJavaScriptCanOpenWindowsAutomatically(bool javaScriptCanOpenWindowsAutomatically)
429 {
430     m_javaScriptCanOpenWindowsAutomatically = javaScriptCanOpenWindowsAutomatically;
431 }
432
433 void Settings::setJavaScriptCanAccessClipboard(bool javaScriptCanAccessClipboard)
434 {
435     m_javaScriptCanAccessClipboard = javaScriptCanAccessClipboard;
436 }
437
438 void Settings::setDefaultTextEncodingName(const String& defaultTextEncodingName)
439 {
440     m_defaultTextEncodingName = defaultTextEncodingName;
441 }
442
443 void Settings::setUserStyleSheetLocation(const KURL& userStyleSheetLocation)
444 {
445     if (m_userStyleSheetLocation == userStyleSheetLocation)
446         return;
447
448     m_userStyleSheetLocation = userStyleSheetLocation;
449
450     m_page->userStyleSheetLocationChanged();
451 }
452
453 void Settings::setShouldPrintBackgrounds(bool shouldPrintBackgrounds)
454 {
455     m_shouldPrintBackgrounds = shouldPrintBackgrounds;
456 }
457
458 void Settings::setTextAreasAreResizable(bool textAreasAreResizable)
459 {
460     if (m_textAreasAreResizable == textAreasAreResizable)
461         return;
462
463     m_textAreasAreResizable = textAreasAreResizable;
464     m_page->setNeedsRecalcStyleInAllFrames();
465 }
466
467 void Settings::setEditableLinkBehavior(EditableLinkBehavior editableLinkBehavior)
468 {
469     m_editableLinkBehavior = editableLinkBehavior;
470 }
471
472 void Settings::setTextDirectionSubmenuInclusionBehavior(TextDirectionSubmenuInclusionBehavior behavior)
473 {
474     m_textDirectionSubmenuInclusionBehavior = behavior;
475 }
476
477 #if ENABLE(DASHBOARD_SUPPORT)
478 void Settings::setUsesDashboardBackwardCompatibilityMode(bool usesDashboardBackwardCompatibilityMode)
479 {
480     m_usesDashboardBackwardCompatibilityMode = usesDashboardBackwardCompatibilityMode;
481 }
482 #endif
483
484 // FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need to phase it out once Adobe
485 // can fix the bug from their end.
486 void Settings::setNeedsAdobeFrameReloadingQuirk(bool shouldNotReloadIFramesForUnchangedSRC)
487 {
488     m_needsAdobeFrameReloadingQuirk = shouldNotReloadIFramesForUnchangedSRC;
489 }
490
491 // This is a quirk we are pro-actively applying to old applications. It changes keyboard event dispatching,
492 // making keyIdentifier available on keypress events, making charCode available on keydown/keyup events,
493 // and getting keypress dispatched in more cases.
494 void Settings::setNeedsKeyboardEventDisambiguationQuirks(bool needsQuirks)
495 {
496     m_needsKeyboardEventDisambiguationQuirks = needsQuirks;
497 }
498
499 void Settings::setTreatsAnyTextCSSLinkAsStylesheet(bool treatsAnyTextCSSLinkAsStylesheet)
500 {
501     m_treatsAnyTextCSSLinkAsStylesheet = treatsAnyTextCSSLinkAsStylesheet;
502 }
503
504 void Settings::setNeedsLeopardMailQuirks(bool needsQuirks)
505 {
506     m_needsLeopardMailQuirks = needsQuirks;
507 }
508
509 void Settings::setDOMPasteAllowed(bool DOMPasteAllowed)
510 {
511     m_isDOMPasteAllowed = DOMPasteAllowed;
512 }
513
514 void Settings::setDefaultMinDOMTimerInterval(double interval)
515 {
516     DOMTimer::setDefaultMinTimerInterval(interval);
517 }
518
519 double Settings::defaultMinDOMTimerInterval()
520 {
521     return DOMTimer::defaultMinTimerInterval();
522 }
523
524 void Settings::setMinDOMTimerInterval(double interval)
525 {
526     m_page->setMinimumTimerInterval(interval);
527 }
528
529 double Settings::minDOMTimerInterval()
530 {
531     return m_page->minimumTimerInterval();
532 }
533
534 void Settings::setUsesPageCache(bool usesPageCache)
535 {
536     if (m_usesPageCache == usesPageCache)
537         return;
538         
539     m_usesPageCache = usesPageCache;
540     if (!m_usesPageCache) {
541         int first = -m_page->backForward()->backCount();
542         int last = m_page->backForward()->forwardCount();
543         for (int i = first; i <= last; i++)
544             pageCache()->remove(m_page->backForward()->itemAtIndex(i));
545         pageCache()->releaseAutoreleasedPagesNow();
546     }
547 }
548
549 void Settings::setShrinksStandaloneImagesToFit(bool shrinksStandaloneImagesToFit)
550 {
551     m_shrinksStandaloneImagesToFit = shrinksStandaloneImagesToFit;
552 }
553
554 void Settings::setShowsURLsInToolTips(bool showsURLsInToolTips)
555 {
556     m_showsURLsInToolTips = showsURLsInToolTips;
557 }
558
559 void Settings::setShowsToolTipOverTruncatedText(bool showsToolTipForTruncatedText)
560 {
561     m_showsToolTipOverTruncatedText = showsToolTipForTruncatedText;
562 }
563
564 void Settings::setFTPDirectoryTemplatePath(const String& path)
565 {
566     m_ftpDirectoryTemplatePath = path;
567 }
568
569 void Settings::setForceFTPDirectoryListings(bool force)
570 {
571     m_forceFTPDirectoryListings = force;
572 }
573
574 void Settings::setDeveloperExtrasEnabled(bool developerExtrasEnabled)
575 {
576     m_developerExtrasEnabled = developerExtrasEnabled;
577 }
578
579 void Settings::setAuthorAndUserStylesEnabled(bool authorAndUserStylesEnabled)
580 {
581     if (m_authorAndUserStylesEnabled == authorAndUserStylesEnabled)
582         return;
583
584     m_authorAndUserStylesEnabled = authorAndUserStylesEnabled;
585     m_page->setNeedsRecalcStyleInAllFrames();
586 }
587
588 void Settings::setFontRenderingMode(FontRenderingMode mode)
589 {
590     if (fontRenderingMode() == mode)
591         return;
592     m_fontRenderingMode = mode;
593     m_page->setNeedsRecalcStyleInAllFrames();
594 }
595
596 FontRenderingMode Settings::fontRenderingMode() const
597 {
598     return static_cast<FontRenderingMode>(m_fontRenderingMode);
599 }
600
601 void Settings::setNeedsSiteSpecificQuirks(bool needsQuirks)
602 {
603     m_needsSiteSpecificQuirks = needsQuirks;
604 }
605
606 void Settings::setFrameFlatteningEnabled(bool frameFlatteningEnabled)
607 {
608     m_frameFlatteningEnabled = frameFlatteningEnabled;
609 }
610
611 #if ENABLE(WEB_ARCHIVE)
612 void Settings::setWebArchiveDebugModeEnabled(bool enabled)
613 {
614     m_webArchiveDebugModeEnabled = enabled;
615 }
616 #endif
617
618 void Settings::setLocalFileContentSniffingEnabled(bool enabled)
619 {
620     m_localFileContentSniffingEnabled = enabled;
621 }
622
623 void Settings::setLocalStorageDatabasePath(const String& path)
624 {
625     m_localStorageDatabasePath = path;
626 }
627
628 void Settings::setApplicationChromeMode(bool mode)
629 {
630     m_inApplicationChromeMode = mode;
631 }
632
633 void Settings::setOfflineWebApplicationCacheEnabled(bool enabled)
634 {
635     m_offlineWebApplicationCacheEnabled = enabled;
636 }
637
638 void Settings::setShouldPaintCustomScrollbars(bool shouldPaintCustomScrollbars)
639 {
640     m_shouldPaintCustomScrollbars = shouldPaintCustomScrollbars;
641 }
642
643 void Settings::setEnforceCSSMIMETypeInNoQuirksMode(bool enforceCSSMIMETypeInNoQuirksMode)
644 {
645     m_enforceCSSMIMETypeInNoQuirksMode = enforceCSSMIMETypeInNoQuirksMode;
646 }
647
648 #if USE(SAFARI_THEME)
649 void Settings::setShouldPaintNativeControls(bool shouldPaintNativeControls)
650 {
651     gShouldPaintNativeControls = shouldPaintNativeControls;
652 }
653 #endif
654
655 void Settings::setUsesEncodingDetector(bool usesEncodingDetector)
656 {
657     m_usesEncodingDetector = usesEncodingDetector;
658 }
659
660 void Settings::setDNSPrefetchingEnabled(bool dnsPrefetchingEnabled)
661 {
662     if (m_dnsPrefetchingEnabled == dnsPrefetchingEnabled)
663         return;
664
665     m_dnsPrefetchingEnabled = dnsPrefetchingEnabled;
666     m_page->dnsPrefetchingStateChanged();
667 }
668
669 void Settings::setAllowScriptsToCloseWindows(bool allowScriptsToCloseWindows)
670 {
671     m_allowScriptsToCloseWindows = allowScriptsToCloseWindows;
672 }
673
674 void Settings::setCaretBrowsingEnabled(bool caretBrowsingEnabled)
675 {
676     m_caretBrowsingEnabled = caretBrowsingEnabled;
677 }
678
679 void Settings::setDownloadableBinaryFontsEnabled(bool downloadableBinaryFontsEnabled)
680 {
681     m_downloadableBinaryFontsEnabled = downloadableBinaryFontsEnabled;
682 }
683
684 void Settings::setXSSAuditorEnabled(bool xssAuditorEnabled)
685 {
686     m_xssAuditorEnabled = xssAuditorEnabled;
687 }
688
689 void Settings::setAcceleratedCompositingEnabled(bool enabled)
690 {
691     if (m_acceleratedCompositingEnabled == enabled)
692         return;
693         
694     m_acceleratedCompositingEnabled = enabled;
695     m_page->setNeedsRecalcStyleInAllFrames();
696 }
697
698 void Settings::setCanvasUsesAcceleratedDrawing(bool enabled)
699 {
700     m_canvasUsesAcceleratedDrawing = enabled;
701 }
702
703 void Settings::setAcceleratedDrawingEnabled(bool enabled)
704 {
705     m_acceleratedDrawingEnabled = enabled;
706 }
707
708 void Settings::setAcceleratedCompositingFor3DTransformsEnabled(bool enabled)
709 {
710     m_acceleratedCompositingFor3DTransformsEnabled = enabled;
711 }
712
713 void Settings::setAcceleratedCompositingForVideoEnabled(bool enabled)
714 {
715     m_acceleratedCompositingForVideoEnabled = enabled;
716 }
717
718 void Settings::setAcceleratedCompositingForPluginsEnabled(bool enabled)
719 {
720     m_acceleratedCompositingForPluginsEnabled = enabled;
721 }
722
723 void Settings::setAcceleratedCompositingForCanvasEnabled(bool enabled)
724 {
725     m_acceleratedCompositingForCanvasEnabled = enabled;
726 }
727
728 void Settings::setAcceleratedCompositingForAnimationEnabled(bool enabled)
729 {
730     m_acceleratedCompositingForAnimationEnabled = enabled;
731 }
732
733 void Settings::setShowDebugBorders(bool enabled)
734 {
735     if (m_showDebugBorders == enabled)
736         return;
737         
738     m_showDebugBorders = enabled;
739     m_page->setNeedsRecalcStyleInAllFrames();
740 }
741
742 void Settings::setShowRepaintCounter(bool enabled)
743 {
744     if (m_showRepaintCounter == enabled)
745         return;
746         
747     m_showRepaintCounter = enabled;
748     m_page->setNeedsRecalcStyleInAllFrames();
749 }
750
751 void Settings::setExperimentalNotificationsEnabled(bool enabled)
752 {
753     m_experimentalNotificationsEnabled = enabled;
754 }
755
756 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
757 void Settings::setShouldUseHighResolutionTimers(bool shouldUseHighResolutionTimers)
758 {
759     gShouldUseHighResolutionTimers = shouldUseHighResolutionTimers;
760 }
761 #endif
762
763 void Settings::setWebAudioEnabled(bool enabled)
764 {
765     m_webAudioEnabled = enabled;
766 }
767
768 void Settings::setWebGLEnabled(bool enabled)
769 {
770     m_webGLEnabled = enabled;
771 }
772
773 void Settings::setOpenGLMultisamplingEnabled(bool enabled)
774 {
775     m_openGLMultisamplingEnabled = enabled;
776 }
777
778 void Settings::setAccelerated2dCanvasEnabled(bool enabled)
779 {
780     m_acceleratedCanvas2dEnabled = enabled;
781 }
782
783 void Settings::setLegacyAccelerated2dCanvasEnabled(bool enabled)
784 {
785     m_legacyAcceleratedCanvas2dEnabled = enabled;
786 }
787
788 void Settings::setMinimumAccelerated2dCanvasSize(int numPixels)
789 {
790     m_minimumAccelerated2dCanvasSize = numPixels;
791 }
792
793 void Settings::setLoadDeferringEnabled(bool enabled)
794 {
795     m_loadDeferringEnabled = enabled;
796 }
797
798 void Settings::setTiledBackingStoreEnabled(bool enabled)
799 {
800     m_tiledBackingStoreEnabled = enabled;
801 #if ENABLE(TILED_BACKING_STORE)
802     if (m_page->mainFrame())
803         m_page->mainFrame()->setTiledBackingStoreEnabled(enabled);
804 #endif
805 }
806
807 } // namespace WebCore