/* * Copyright (C) 2006, 2007 Apple Computer, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include "Settings.h" #include "DatabaseTracker.h" #include "Frame.h" #include "FrameTree.h" #include "Page.h" #include "PageCache.h" #include "HistoryItem.h" namespace WebCore { static void setNeedsReapplyStylesInAllFrames(Page* page) { for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) frame->setNeedsReapplyStyles(); } Settings::Settings(Page* page) : m_page(page) , m_editableLinkBehavior(EditableLinkDefaultBehavior) , m_minimumFontSize(0) , m_minimumLogicalFontSize(0) , m_defaultFontSize(0) , m_defaultFixedFontSize(0) , m_isJavaEnabled(false) , m_loadsImagesAutomatically(false) , m_privateBrowsingEnabled(false) , m_arePluginsEnabled(false) , m_isJavaScriptEnabled(false) , m_javaScriptCanOpenWindowsAutomatically(false) , m_shouldPrintBackgrounds(false) , m_textAreasAreResizable(false) , m_usesDashboardBackwardCompatibilityMode(false) , m_needsAdobeFrameReloadingQuirk(false) , m_isDOMPasteAllowed(false) , m_shrinksStandaloneImagesToFit(true) , m_usesPageCache(false) , m_showsURLsInToolTips(false) , m_forceFTPDirectoryListings(false) , m_developerExtrasEnabled(false) , m_authorAndUserStylesEnabled(true) { // A Frame may not have been created yet, so we initialize the AtomicString // hash before trying to use it. AtomicString::init(); } void Settings::setStandardFontFamily(const AtomicString& standardFontFamily) { if (standardFontFamily == m_standardFontFamily) return; m_standardFontFamily = standardFontFamily; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setFixedFontFamily(const AtomicString& fixedFontFamily) { if (m_fixedFontFamily == fixedFontFamily) return; m_fixedFontFamily = fixedFontFamily; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setSerifFontFamily(const AtomicString& serifFontFamily) { if (m_serifFontFamily == serifFontFamily) return; m_serifFontFamily = serifFontFamily; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setSansSerifFontFamily(const AtomicString& sansSerifFontFamily) { if (m_sansSerifFontFamily == sansSerifFontFamily) return; m_sansSerifFontFamily = sansSerifFontFamily; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setCursiveFontFamily(const AtomicString& cursiveFontFamily) { if (m_cursiveFontFamily == cursiveFontFamily) return; m_cursiveFontFamily = cursiveFontFamily; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setFantasyFontFamily(const AtomicString& fantasyFontFamily) { if (m_fantasyFontFamily == fantasyFontFamily) return; m_fantasyFontFamily = fantasyFontFamily; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setMinimumFontSize(int minimumFontSize) { if (m_minimumFontSize == minimumFontSize) return; m_minimumFontSize = minimumFontSize; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setMinimumLogicalFontSize(int minimumLogicalFontSize) { if (m_minimumLogicalFontSize == minimumLogicalFontSize) return; m_minimumLogicalFontSize = minimumLogicalFontSize; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setDefaultFontSize(int defaultFontSize) { if (m_defaultFontSize == defaultFontSize) return; m_defaultFontSize = defaultFontSize; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setDefaultFixedFontSize(int defaultFontSize) { if (m_defaultFixedFontSize == defaultFontSize) return; m_defaultFixedFontSize = defaultFontSize; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setLoadsImagesAutomatically(bool loadsImagesAutomatically) { m_loadsImagesAutomatically = loadsImagesAutomatically; } void Settings::setJavaScriptEnabled(bool isJavaScriptEnabled) { m_isJavaScriptEnabled = isJavaScriptEnabled; } void Settings::setJavaEnabled(bool isJavaEnabled) { m_isJavaEnabled = isJavaEnabled; } void Settings::setPluginsEnabled(bool arePluginsEnabled) { m_arePluginsEnabled = arePluginsEnabled; } void Settings::setPrivateBrowsingEnabled(bool privateBrowsingEnabled) { m_privateBrowsingEnabled = privateBrowsingEnabled; } void Settings::setJavaScriptCanOpenWindowsAutomatically(bool javaScriptCanOpenWindowsAutomatically) { m_javaScriptCanOpenWindowsAutomatically = javaScriptCanOpenWindowsAutomatically; } void Settings::setDefaultTextEncodingName(const String& defaultTextEncodingName) { m_defaultTextEncodingName = defaultTextEncodingName; } void Settings::setUserStyleSheetLocation(const KURL& userStyleSheetLocation) { if (m_userStyleSheetLocation == userStyleSheetLocation) return; m_userStyleSheetLocation = userStyleSheetLocation; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setShouldPrintBackgrounds(bool shouldPrintBackgrounds) { m_shouldPrintBackgrounds = shouldPrintBackgrounds; } void Settings::setTextAreasAreResizable(bool textAreasAreResizable) { if (m_textAreasAreResizable == textAreasAreResizable) return; m_textAreasAreResizable = textAreasAreResizable; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setEditableLinkBehavior(EditableLinkBehavior editableLinkBehavior) { m_editableLinkBehavior = editableLinkBehavior; } void Settings::setUsesDashboardBackwardCompatibilityMode(bool usesDashboardBackwardCompatibilityMode) { m_usesDashboardBackwardCompatibilityMode = usesDashboardBackwardCompatibilityMode; } // FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need to phase it out once Adobe // can fix the bug from their end. void Settings::setNeedsAdobeFrameReloadingQuirk(bool shouldNotReloadIFramesForUnchangedSRC) { m_needsAdobeFrameReloadingQuirk = shouldNotReloadIFramesForUnchangedSRC; } void Settings::setDOMPasteAllowed(bool DOMPasteAllowed) { m_isDOMPasteAllowed = DOMPasteAllowed; } void Settings::setUsesPageCache(bool usesPageCache) { if (m_usesPageCache == usesPageCache) return; m_usesPageCache = usesPageCache; if (!m_usesPageCache) { HistoryItemVector& historyItems = m_page->backForwardList()->entries(); for (unsigned i = 0; i < historyItems.size(); i++) pageCache()->remove(historyItems[i].get()); pageCache()->releaseAutoreleasedPagesNow(); } } void Settings::setShrinksStandaloneImagesToFit(bool shrinksStandaloneImagesToFit) { m_shrinksStandaloneImagesToFit = shrinksStandaloneImagesToFit; } void Settings::setShowsURLsInToolTips(bool showsURLsInToolTips) { m_showsURLsInToolTips = showsURLsInToolTips; } void Settings::setFTPDirectoryTemplatePath(const String& path) { m_ftpDirectoryTemplatePath = path; } void Settings::setForceFTPDirectoryListings(bool force) { m_forceFTPDirectoryListings = force; } void Settings::setDeveloperExtrasEnabled(bool developerExtrasEnabled) { m_developerExtrasEnabled = developerExtrasEnabled; } void Settings::setAuthorAndUserStylesEnabled(bool authorAndUserStylesEnabled) { if (m_authorAndUserStylesEnabled == authorAndUserStylesEnabled) return; m_authorAndUserStylesEnabled = authorAndUserStylesEnabled; setNeedsReapplyStylesInAllFrames(m_page); } void Settings::setDefaultDatabaseOriginQuota(unsigned long long quota) { #if ENABLE(DATABASE) DatabaseTracker::tracker().setDefaultOriginQuota(quota); #endif } unsigned long long Settings::defaultDatabaseOriginQuota() const { #if ENABLE(DATABASE) return DatabaseTracker::tracker().defaultOriginQuota(); #else return 0; #endif } } // namespace WebCore