diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/testing/InternalSettings.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/testing/InternalSettings.cpp')
-rw-r--r-- | Source/WebCore/testing/InternalSettings.cpp | 808 |
1 files changed, 559 insertions, 249 deletions
diff --git a/Source/WebCore/testing/InternalSettings.cpp b/Source/WebCore/testing/InternalSettings.cpp index dc7da1e92..fadddbf56 100644 --- a/Source/WebCore/testing/InternalSettings.cpp +++ b/Source/WebCore/testing/InternalSettings.cpp @@ -45,129 +45,160 @@ #include "ColorChooser.h" #endif -#define InternalSettingsGuardForSettingsReturn(returnValue) \ - if (!settings()) { \ - ec = INVALID_ACCESS_ERR; \ - return returnValue; \ - } - -#define InternalSettingsGuardForSettings() \ - if (!settings()) { \ - ec = INVALID_ACCESS_ERR; \ - return; \ - } - -#define InternalSettingsGuardForPage() \ - if (!page()) { \ - ec = INVALID_ACCESS_ERR; \ - return; \ - } +#if USE(SOUP) +#include "SoupNetworkSession.h" +#endif namespace WebCore { InternalSettings::Backup::Backup(Settings& settings) - : m_originalCSSExclusionsEnabled(RuntimeEnabledFeatures::sharedFeatures().cssExclusionsEnabled()) - , m_originalCSSShapesEnabled(RuntimeEnabledFeatures::sharedFeatures().cssShapesEnabled()) -#if ENABLE(SHADOW_DOM) - , m_originalShadowDOMEnabled(RuntimeEnabledFeatures::sharedFeatures().shadowDOMEnabled()) - , m_originalAuthorShadowDOMForAnyElementEnabled(RuntimeEnabledFeatures::sharedFeatures().authorShadowDOMForAnyElementEnabled()) -#endif - , m_originalEditingBehavior(settings.editingBehaviorType()) + : m_originalEditingBehavior(settings.editingBehaviorType()) #if ENABLE(TEXT_AUTOSIZING) , m_originalTextAutosizingEnabled(settings.textAutosizingEnabled()) , m_originalTextAutosizingWindowSizeOverride(settings.textAutosizingWindowSizeOverride()) - , m_originalTextAutosizingFontScaleFactor(settings.textAutosizingFontScaleFactor()) #endif , m_originalMediaTypeOverride(settings.mediaTypeOverride()) , m_originalCanvasUsesAcceleratedDrawing(settings.canvasUsesAcceleratedDrawing()) , m_originalMockScrollbarsEnabled(settings.mockScrollbarsEnabled()) - , m_langAttributeAwareFormControlUIEnabled(RuntimeEnabledFeatures::sharedFeatures().langAttributeAwareFormControlUIEnabled()) , m_imagesEnabled(settings.areImagesEnabled()) - , m_minimumTimerInterval(settings.minDOMTimerInterval()) + , m_preferMIMETypeForImages(settings.preferMIMETypeForImages()) + , m_minimumTimerInterval(settings.minimumDOMTimerInterval()) #if ENABLE(VIDEO_TRACK) , m_shouldDisplaySubtitles(settings.shouldDisplaySubtitles()) , m_shouldDisplayCaptions(settings.shouldDisplayCaptions()) , m_shouldDisplayTextDescriptions(settings.shouldDisplayTextDescriptions()) #endif , m_defaultVideoPosterURL(settings.defaultVideoPosterURL()) + , m_forcePendingWebGLPolicy(settings.isForcePendingWebGLPolicy()) , m_originalTimeWithoutMouseMovementBeforeHidingControls(settings.timeWithoutMouseMovementBeforeHidingControls()) , m_useLegacyBackgroundSizeShorthandBehavior(settings.useLegacyBackgroundSizeShorthandBehavior()) , m_autoscrollForDragAndDropEnabled(settings.autoscrollForDragAndDropEnabled()) - , m_pluginReplacementEnabled(RuntimeEnabledFeatures::sharedFeatures().pluginReplacementEnabled()) + , m_quickTimePluginReplacementEnabled(settings.quickTimePluginReplacementEnabled()) + , m_youTubeFlashPluginReplacementEnabled(settings.youTubeFlashPluginReplacementEnabled()) + , m_shouldConvertPositionStyleOnCopy(settings.shouldConvertPositionStyleOnCopy()) + , m_fontFallbackPrefersPictographs(settings.fontFallbackPrefersPictographs()) + , m_webFontsAlwaysFallBack(settings.webFontsAlwaysFallBack()) + , m_backgroundShouldExtendBeyondPage(settings.backgroundShouldExtendBeyondPage()) + , m_storageBlockingPolicy(settings.storageBlockingPolicy()) + , m_scrollingTreeIncludesFrames(settings.scrollingTreeIncludesFrames()) +#if ENABLE(TOUCH_EVENTS) + , m_touchEventEmulationEnabled(settings.isTouchEventEmulationEnabled()) +#endif +#if ENABLE(WIRELESS_PLAYBACK_TARGET) + , m_allowsAirPlayForMediaPlayback(settings.allowsAirPlayForMediaPlayback()) +#endif + , m_allowsInlineMediaPlayback(settings.allowsInlineMediaPlayback()) + , m_allowsInlineMediaPlaybackAfterFullscreen(settings.allowsInlineMediaPlaybackAfterFullscreen()) + , m_inlineMediaPlaybackRequiresPlaysInlineAttribute(settings.inlineMediaPlaybackRequiresPlaysInlineAttribute()) + , m_deferredCSSParserEnabled(settings.deferredCSSParserEnabled()) + , m_inputEventsEnabled(settings.inputEventsEnabled()) + , m_userInterfaceDirectionPolicy(settings.userInterfaceDirectionPolicy()) + , m_systemLayoutDirection(settings.systemLayoutDirection()) + , m_pdfImageCachingPolicy(settings.pdfImageCachingPolicy()) + , m_forcedColorsAreInvertedAccessibilityValue(settings.forcedColorsAreInvertedAccessibilityValue()) + , m_forcedDisplayIsMonochromeAccessibilityValue(settings.forcedDisplayIsMonochromeAccessibilityValue()) + , m_forcedPrefersReducedMotionAccessibilityValue(settings.forcedPrefersReducedMotionAccessibilityValue()) +#if ENABLE(INDEXED_DATABASE_IN_WORKERS) + , m_indexedDBWorkersEnabled(RuntimeEnabledFeatures::sharedFeatures().indexedDBWorkersEnabled()) +#endif + , m_cssGridLayoutEnabled(RuntimeEnabledFeatures::sharedFeatures().isCSSGridLayoutEnabled()) +#if ENABLE(WEBGL2) + , m_webGL2Enabled(RuntimeEnabledFeatures::sharedFeatures().webGL2Enabled()) +#endif { } void InternalSettings::Backup::restoreTo(Settings& settings) { - RuntimeEnabledFeatures::sharedFeatures().setCSSExclusionsEnabled(m_originalCSSExclusionsEnabled); - RuntimeEnabledFeatures::sharedFeatures().setCSSShapesEnabled(m_originalCSSShapesEnabled); -#if ENABLE(SHADOW_DOM) - RuntimeEnabledFeatures::sharedFeatures().setShadowDOMEnabled(m_originalShadowDOMEnabled); - RuntimeEnabledFeatures::sharedFeatures().setAuthorShadowDOMForAnyElementEnabled(m_originalAuthorShadowDOMForAnyElementEnabled); -#endif settings.setEditingBehaviorType(m_originalEditingBehavior); - for (auto iter = m_standardFontFamilies.begin(); iter != m_standardFontFamilies.end(); ++iter) - settings.setStandardFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& standardFont : m_standardFontFamilies) + settings.setStandardFontFamily(standardFont.value, static_cast<UScriptCode>(standardFont.key)); m_standardFontFamilies.clear(); - for (auto iter = m_fixedFontFamilies.begin(); iter != m_fixedFontFamilies.end(); ++iter) - settings.setFixedFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& fixedFont : m_fixedFontFamilies) + settings.setFixedFontFamily(fixedFont.value, static_cast<UScriptCode>(fixedFont.key)); m_fixedFontFamilies.clear(); - for (auto iter = m_serifFontFamilies.begin(); iter != m_serifFontFamilies.end(); ++iter) - settings.setSerifFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& serifFont : m_serifFontFamilies) + settings.setSerifFontFamily(serifFont.value, static_cast<UScriptCode>(serifFont.key)); m_serifFontFamilies.clear(); - for (auto iter = m_sansSerifFontFamilies.begin(); iter != m_sansSerifFontFamilies.end(); ++iter) - settings.setSansSerifFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& sansSerifFont : m_sansSerifFontFamilies) + settings.setSansSerifFontFamily(sansSerifFont.value, static_cast<UScriptCode>(sansSerifFont.key)); m_sansSerifFontFamilies.clear(); - for (auto iter = m_cursiveFontFamilies.begin(); iter != m_cursiveFontFamilies.end(); ++iter) - settings.setCursiveFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& cursiveFont : m_cursiveFontFamilies) + settings.setCursiveFontFamily(cursiveFont.value, static_cast<UScriptCode>(cursiveFont.key)); m_cursiveFontFamilies.clear(); - for (auto iter = m_fantasyFontFamilies.begin(); iter != m_fantasyFontFamilies.end(); ++iter) - settings.setFantasyFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& fantasyFont : m_fantasyFontFamilies) + settings.setFantasyFontFamily(fantasyFont.value, static_cast<UScriptCode>(fantasyFont.key)); m_fantasyFontFamilies.clear(); - for (auto iter = m_pictographFontFamilies.begin(); iter != m_pictographFontFamilies.end(); ++iter) - settings.setPictographFontFamily(iter->value, static_cast<UScriptCode>(iter->key)); + for (const auto& pictographFont : m_pictographFontFamilies) + settings.setPictographFontFamily(pictographFont.value, static_cast<UScriptCode>(pictographFont.key)); m_pictographFontFamilies.clear(); #if ENABLE(TEXT_AUTOSIZING) settings.setTextAutosizingEnabled(m_originalTextAutosizingEnabled); settings.setTextAutosizingWindowSizeOverride(m_originalTextAutosizingWindowSizeOverride); - settings.setTextAutosizingFontScaleFactor(m_originalTextAutosizingFontScaleFactor); #endif settings.setMediaTypeOverride(m_originalMediaTypeOverride); settings.setCanvasUsesAcceleratedDrawing(m_originalCanvasUsesAcceleratedDrawing); - settings.setMockScrollbarsEnabled(m_originalMockScrollbarsEnabled); - RuntimeEnabledFeatures::sharedFeatures().setLangAttributeAwareFormControlUIEnabled(m_langAttributeAwareFormControlUIEnabled); settings.setImagesEnabled(m_imagesEnabled); - settings.setMinDOMTimerInterval(m_minimumTimerInterval); + settings.setPreferMIMETypeForImages(m_preferMIMETypeForImages); + settings.setMinimumDOMTimerInterval(m_minimumTimerInterval); #if ENABLE(VIDEO_TRACK) settings.setShouldDisplaySubtitles(m_shouldDisplaySubtitles); settings.setShouldDisplayCaptions(m_shouldDisplayCaptions); settings.setShouldDisplayTextDescriptions(m_shouldDisplayTextDescriptions); #endif settings.setDefaultVideoPosterURL(m_defaultVideoPosterURL); + settings.setForcePendingWebGLPolicy(m_forcePendingWebGLPolicy); settings.setTimeWithoutMouseMovementBeforeHidingControls(m_originalTimeWithoutMouseMovementBeforeHidingControls); settings.setUseLegacyBackgroundSizeShorthandBehavior(m_useLegacyBackgroundSizeShorthandBehavior); settings.setAutoscrollForDragAndDropEnabled(m_autoscrollForDragAndDropEnabled); - RuntimeEnabledFeatures::sharedFeatures().setPluginReplacementEnabled(m_pluginReplacementEnabled); + settings.setShouldConvertPositionStyleOnCopy(m_shouldConvertPositionStyleOnCopy); + settings.setFontFallbackPrefersPictographs(m_fontFallbackPrefersPictographs); + settings.setWebFontsAlwaysFallBack(m_webFontsAlwaysFallBack); + settings.setBackgroundShouldExtendBeyondPage(m_backgroundShouldExtendBeyondPage); + settings.setStorageBlockingPolicy(m_storageBlockingPolicy); + settings.setScrollingTreeIncludesFrames(m_scrollingTreeIncludesFrames); +#if ENABLE(TOUCH_EVENTS) + settings.setTouchEventEmulationEnabled(m_touchEventEmulationEnabled); +#endif + settings.setAllowsInlineMediaPlayback(m_allowsInlineMediaPlayback); + settings.setAllowsInlineMediaPlaybackAfterFullscreen(m_allowsInlineMediaPlaybackAfterFullscreen); + settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(m_inlineMediaPlaybackRequiresPlaysInlineAttribute); + settings.setQuickTimePluginReplacementEnabled(m_quickTimePluginReplacementEnabled); + settings.setYouTubeFlashPluginReplacementEnabled(m_youTubeFlashPluginReplacementEnabled); + settings.setDeferredCSSParserEnabled(m_deferredCSSParserEnabled); + settings.setInputEventsEnabled(m_inputEventsEnabled); + settings.setUserInterfaceDirectionPolicy(m_userInterfaceDirectionPolicy); + settings.setSystemLayoutDirection(m_systemLayoutDirection); + settings.setPdfImageCachingPolicy(m_pdfImageCachingPolicy); + settings.setForcedColorsAreInvertedAccessibilityValue(m_forcedColorsAreInvertedAccessibilityValue); + settings.setForcedDisplayIsMonochromeAccessibilityValue(m_forcedDisplayIsMonochromeAccessibilityValue); + settings.setForcedPrefersReducedMotionAccessibilityValue(m_forcedPrefersReducedMotionAccessibilityValue); + Settings::setAllowsAnySSLCertificate(false); + +#if ENABLE(INDEXED_DATABASE_IN_WORKERS) + RuntimeEnabledFeatures::sharedFeatures().setIndexedDBWorkersEnabled(m_indexedDBWorkersEnabled); +#endif + RuntimeEnabledFeatures::sharedFeatures().setCSSGridLayoutEnabled(m_cssGridLayoutEnabled); +#if ENABLE(WEBGL2) + RuntimeEnabledFeatures::sharedFeatures().setWebGL2Enabled(m_webGL2Enabled); +#endif } -// We can't use RefCountedSupplement because that would try to make InternalSettings RefCounted -// and InternalSettings is already RefCounted via its base class, InternalSettingsGenerated. -// Instead, we manually make InternalSettings supplement Page. class InternalSettingsWrapper : public Supplement<Page> { public: explicit InternalSettingsWrapper(Page* page) : m_internalSettings(InternalSettings::create(page)) { } virtual ~InternalSettingsWrapper() { m_internalSettings->hostDestroyed(); } #if !ASSERT_DISABLED - virtual bool isRefCountedWrapper() const override { return true; } + bool isRefCountedWrapper() const override { return true; } #endif InternalSettings* internalSettings() const { return m_internalSettings.get(); } @@ -183,12 +214,13 @@ const char* InternalSettings::supplementName() InternalSettings* InternalSettings::from(Page* page) { if (!Supplement<Page>::from(page, supplementName())) - Supplement<Page>::provideTo(page, supplementName(), adoptPtr(new InternalSettingsWrapper(page))); + Supplement<Page>::provideTo(page, supplementName(), std::make_unique<InternalSettingsWrapper>(page)); return static_cast<InternalSettingsWrapper*>(Supplement<Page>::from(page, supplementName()))->internalSettings(); } -InternalSettings::~InternalSettings() +void InternalSettings::hostDestroyed() { + m_page = nullptr; } InternalSettings::InternalSettings(Page* page) @@ -196,335 +228,613 @@ InternalSettings::InternalSettings(Page* page) , m_page(page) , m_backup(page->settings()) { +#if ENABLE(WIRELESS_PLAYBACK_TARGET) + setAllowsAirPlayForMediaPlayback(false); +#endif +#if ENABLE(MEDIA_STREAM) + setMediaCaptureRequiresSecureConnection(false); +#endif } -void InternalSettings::resetToConsistentState() -{ - page()->setPageScaleFactor(1, IntPoint(0, 0)); - page()->setCanStartMedia(true); - - m_backup.restoreTo(*settings()); - m_backup = Backup(*settings()); - - InternalSettingsGenerated::resetToConsistentState(); -} - -Settings* InternalSettings::settings() const +Ref<InternalSettings> InternalSettings::create(Page* page) { - if (!page()) - return 0; - return &page()->settings(); + return adoptRef(*new InternalSettings(page)); } -void InternalSettings::setMockScrollbarsEnabled(bool enabled, ExceptionCode& ec) +void InternalSettings::resetToConsistentState() { - InternalSettingsGuardForSettings(); - settings()->setMockScrollbarsEnabled(enabled); -} + m_page->setPageScaleFactor(1, { 0, 0 }); + m_page->mainFrame().setPageAndTextZoomFactors(1, 1); + m_page->setCanStartMedia(true); -static bool urlIsWhitelistedForSetShadowDOMEnabled(const String& url) -{ - // This check is just for preventing fuzzers from crashing because of unintended API calls. - // You can list your test if needed. - return notFound != url.find("fast/dom/shadow/content-shadow-unknown.html") - || notFound != url.find("fast/dom/shadow/insertion-points-with-shadow-disabled.html"); -} + settings().setForcePendingWebGLPolicy(false); +#if ENABLE(WIRELESS_PLAYBACK_TARGET) + settings().setAllowsAirPlayForMediaPlayback(false); +#endif +#if ENABLE(MEDIA_STREAM) + setMediaCaptureRequiresSecureConnection(false); +#endif -void InternalSettings::setShadowDOMEnabled(bool enabled, ExceptionCode& ec) -{ - if (!urlIsWhitelistedForSetShadowDOMEnabled(page()->mainFrame().document()->url().string())) { - ec = INVALID_ACCESS_ERR; - return; - } + m_backup.restoreTo(settings()); + m_backup = Backup { settings() }; -#if ENABLE(SHADOW_DOM) - RuntimeEnabledFeatures::sharedFeatures().setShadowDOMEnabled(enabled); -#else - // Even SHADOW_DOM is off, InternalSettings allows setShadowDOMEnabled(false) to - // have broader test coverage. But it cannot be setShadowDOMEnabled(true). - if (enabled) - ec = INVALID_ACCESS_ERR; -#endif + InternalSettingsGenerated::resetToConsistentState(); } -void InternalSettings::setAuthorShadowDOMForAnyElementEnabled(bool isEnabled) +Settings& InternalSettings::settings() const { -#if ENABLE(SHADOW_DOM) - RuntimeEnabledFeatures::sharedFeatures().setAuthorShadowDOMForAnyElementEnabled(isEnabled); -#else - UNUSED_PARAM(isEnabled); -#endif + ASSERT(m_page); + return m_page->settings(); } -void InternalSettings::setTouchEventEmulationEnabled(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setTouchEventEmulationEnabled(bool enabled) { + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; #if ENABLE(TOUCH_EVENTS) - InternalSettingsGuardForSettings(); - settings()->setTouchEventEmulationEnabled(enabled); + settings().setTouchEventEmulationEnabled(enabled); #else UNUSED_PARAM(enabled); - UNUSED_PARAM(ec); #endif + return { }; } -void InternalSettings::setStandardFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setStandardFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_standardFontFamilies.add(code, settings()->standardFontFamily(code)); - settings()->setStandardFontFamily(family, code); + return { }; + m_backup.m_standardFontFamilies.add(code, settings().standardFontFamily(code)); + settings().setStandardFontFamily(family, code); + return { }; } -void InternalSettings::setSerifFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setSerifFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_serifFontFamilies.add(code, settings()->serifFontFamily(code)); - settings()->setSerifFontFamily(family, code); + return { }; + m_backup.m_serifFontFamilies.add(code, settings().serifFontFamily(code)); + settings().setSerifFontFamily(family, code); + return { }; } -void InternalSettings::setSansSerifFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setSansSerifFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_sansSerifFontFamilies.add(code, settings()->sansSerifFontFamily(code)); - settings()->setSansSerifFontFamily(family, code); + return { }; + m_backup.m_sansSerifFontFamilies.add(code, settings().sansSerifFontFamily(code)); + settings().setSansSerifFontFamily(family, code); + return { }; } -void InternalSettings::setFixedFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setFixedFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_fixedFontFamilies.add(code, settings()->fixedFontFamily(code)); - settings()->setFixedFontFamily(family, code); + return { }; + m_backup.m_fixedFontFamilies.add(code, settings().fixedFontFamily(code)); + settings().setFixedFontFamily(family, code); + return { }; } -void InternalSettings::setCursiveFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setCursiveFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_cursiveFontFamilies.add(code, settings()->cursiveFontFamily(code)); - settings()->setCursiveFontFamily(family, code); + return { }; + m_backup.m_cursiveFontFamilies.add(code, settings().cursiveFontFamily(code)); + settings().setCursiveFontFamily(family, code); + return { }; } -void InternalSettings::setFantasyFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setFantasyFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_fantasyFontFamilies.add(code, settings()->fantasyFontFamily(code)); - settings()->setFantasyFontFamily(family, code); + return { }; + m_backup.m_fantasyFontFamilies.add(code, settings().fantasyFontFamily(code)); + settings().setFantasyFontFamily(family, code); + return { }; } -void InternalSettings::setPictographFontFamily(const String& family, const String& script, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setPictographFontFamily(const String& family, const String& script) { - InternalSettingsGuardForSettings(); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; UScriptCode code = scriptNameToCode(script); if (code == USCRIPT_INVALID_CODE) - return; - m_backup.m_pictographFontFamilies.add(code, settings()->pictographFontFamily(code)); - settings()->setPictographFontFamily(family, code); + return { }; + m_backup.m_pictographFontFamilies.add(code, settings().pictographFontFamily(code)); + settings().setPictographFontFamily(family, code); + return { }; } -void InternalSettings::setTextAutosizingEnabled(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setTextAutosizingEnabled(bool enabled) { + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; #if ENABLE(TEXT_AUTOSIZING) - InternalSettingsGuardForSettings(); - settings()->setTextAutosizingEnabled(enabled); + settings().setTextAutosizingEnabled(enabled); #else UNUSED_PARAM(enabled); - UNUSED_PARAM(ec); #endif + return { }; } -void InternalSettings::setTextAutosizingWindowSizeOverride(int width, int height, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setTextAutosizingWindowSizeOverride(int width, int height) { + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; #if ENABLE(TEXT_AUTOSIZING) - InternalSettingsGuardForSettings(); - settings()->setTextAutosizingWindowSizeOverride(IntSize(width, height)); + settings().setTextAutosizingWindowSizeOverride(IntSize(width, height)); #else UNUSED_PARAM(width); UNUSED_PARAM(height); - UNUSED_PARAM(ec); #endif + return { }; } -void InternalSettings::setMediaTypeOverride(const String& mediaType, ExceptionCode& ec) -{ - InternalSettingsGuardForSettings(); - settings()->setMediaTypeOverride(mediaType); -} - -void InternalSettings::setTextAutosizingFontScaleFactor(float fontScaleFactor, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setMediaTypeOverride(const String& mediaType) { -#if ENABLE(TEXT_AUTOSIZING) - InternalSettingsGuardForSettings(); - settings()->setTextAutosizingFontScaleFactor(fontScaleFactor); -#else - UNUSED_PARAM(fontScaleFactor); - UNUSED_PARAM(ec); -#endif + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setMediaTypeOverride(mediaType); + return { }; } -void InternalSettings::setCSSExclusionsEnabled(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setCanStartMedia(bool enabled) { - UNUSED_PARAM(ec); - RuntimeEnabledFeatures::sharedFeatures().setCSSExclusionsEnabled(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + m_page->setCanStartMedia(enabled); + return { }; } -void InternalSettings::setCSSShapesEnabled(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setAllowsAirPlayForMediaPlayback(bool allows) { - UNUSED_PARAM(ec); - RuntimeEnabledFeatures::sharedFeatures().setCSSShapesEnabled(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; +#if ENABLE(WIRELESS_PLAYBACK_TARGET) + settings().setAllowsAirPlayForMediaPlayback(allows); +#else + UNUSED_PARAM(allows); +#endif + return { }; } -void InternalSettings::setCanStartMedia(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setMediaCaptureRequiresSecureConnection(bool requires) { - InternalSettingsGuardForSettings(); - m_page->setCanStartMedia(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; +#if ENABLE(MEDIA_STREAM) + settings().setMediaCaptureRequiresSecureConnection(requires); +#else + UNUSED_PARAM(requires); +#endif + return { }; } -void InternalSettings::setEditingBehavior(const String& editingBehavior, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setEditingBehavior(const String& editingBehavior) { - InternalSettingsGuardForSettings(); - if (equalIgnoringCase(editingBehavior, "win")) - settings()->setEditingBehaviorType(EditingWindowsBehavior); - else if (equalIgnoringCase(editingBehavior, "mac")) - settings()->setEditingBehaviorType(EditingMacBehavior); - else if (equalIgnoringCase(editingBehavior, "unix")) - settings()->setEditingBehaviorType(EditingUnixBehavior); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + if (equalLettersIgnoringASCIICase(editingBehavior, "win")) + settings().setEditingBehaviorType(EditingWindowsBehavior); + else if (equalLettersIgnoringASCIICase(editingBehavior, "mac")) + settings().setEditingBehaviorType(EditingMacBehavior); + else if (equalLettersIgnoringASCIICase(editingBehavior, "unix")) + settings().setEditingBehaviorType(EditingUnixBehavior); + else if (equalLettersIgnoringASCIICase(editingBehavior, "ios")) + settings().setEditingBehaviorType(EditingIOSBehavior); else - ec = SYNTAX_ERR; + return Exception { SYNTAX_ERR }; + return { }; } -void InternalSettings::setShouldDisplayTrackKind(const String& kind, bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setShouldDisplayTrackKind(const String& kind, bool enabled) { - InternalSettingsGuardForSettings(); - + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; #if ENABLE(VIDEO_TRACK) - if (!page()) - return; - CaptionUserPreferences* captionPreferences = page()->group().captionPreferences(); - - if (equalIgnoringCase(kind, "Subtitles")) - captionPreferences->setUserPrefersSubtitles(enabled); - else if (equalIgnoringCase(kind, "Captions")) - captionPreferences->setUserPrefersCaptions(enabled); - else if (equalIgnoringCase(kind, "TextDescriptions")) - captionPreferences->setUserPrefersTextDescriptions(enabled); + auto& captionPreferences = m_page->group().captionPreferences(); + if (equalLettersIgnoringASCIICase(kind, "subtitles")) + captionPreferences.setUserPrefersSubtitles(enabled); + else if (equalLettersIgnoringASCIICase(kind, "captions")) + captionPreferences.setUserPrefersCaptions(enabled); + else if (equalLettersIgnoringASCIICase(kind, "textdescriptions")) + captionPreferences.setUserPrefersTextDescriptions(enabled); else - ec = SYNTAX_ERR; + return Exception { SYNTAX_ERR }; #else UNUSED_PARAM(kind); UNUSED_PARAM(enabled); #endif + return { }; } -bool InternalSettings::shouldDisplayTrackKind(const String& kind, ExceptionCode& ec) +ExceptionOr<bool> InternalSettings::shouldDisplayTrackKind(const String& kind) { - InternalSettingsGuardForSettingsReturn(false); - + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; #if ENABLE(VIDEO_TRACK) - if (!page()) - return false; - CaptionUserPreferences* captionPreferences = page()->group().captionPreferences(); - - if (equalIgnoringCase(kind, "Subtitles")) - return captionPreferences->userPrefersSubtitles(); - if (equalIgnoringCase(kind, "Captions")) - return captionPreferences->userPrefersCaptions(); - if (equalIgnoringCase(kind, "TextDescriptions")) - return captionPreferences->userPrefersTextDescriptions(); - - ec = SYNTAX_ERR; - return false; + auto& captionPreferences = m_page->group().captionPreferences(); + if (equalLettersIgnoringASCIICase(kind, "subtitles")) + return captionPreferences.userPrefersSubtitles(); + if (equalLettersIgnoringASCIICase(kind, "captions")) + return captionPreferences.userPrefersCaptions(); + if (equalLettersIgnoringASCIICase(kind, "textdescriptions")) + return captionPreferences.userPrefersTextDescriptions(); + + return Exception { SYNTAX_ERR }; #else UNUSED_PARAM(kind); return false; #endif } -void InternalSettings::setStorageBlockingPolicy(const String& mode, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setStorageBlockingPolicy(const String& mode) { - InternalSettingsGuardForSettings(); - + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; if (mode == "AllowAll") - settings()->setStorageBlockingPolicy(SecurityOrigin::AllowAllStorage); + settings().setStorageBlockingPolicy(SecurityOrigin::AllowAllStorage); else if (mode == "BlockThirdParty") - settings()->setStorageBlockingPolicy(SecurityOrigin::BlockThirdPartyStorage); + settings().setStorageBlockingPolicy(SecurityOrigin::BlockThirdPartyStorage); else if (mode == "BlockAll") - settings()->setStorageBlockingPolicy(SecurityOrigin::BlockAllStorage); + settings().setStorageBlockingPolicy(SecurityOrigin::BlockAllStorage); + else + return Exception { SYNTAX_ERR }; + return { }; +} + +ExceptionOr<void> InternalSettings::setPreferMIMETypeForImages(bool preferMIMETypeForImages) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setPreferMIMETypeForImages(preferMIMETypeForImages); + return { }; +} + +ExceptionOr<void> InternalSettings::setImagesEnabled(bool enabled) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setImagesEnabled(enabled); + return { }; +} + +ExceptionOr<void> InternalSettings::setPDFImageCachingPolicy(const String& policy) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + if (equalLettersIgnoringASCIICase(policy, "disabled")) + settings().setPdfImageCachingPolicy(PDFImageCachingDisabled); + else if (equalLettersIgnoringASCIICase(policy, "belowmemorylimit")) + settings().setPdfImageCachingPolicy(PDFImageCachingBelowMemoryLimit); + else if (equalLettersIgnoringASCIICase(policy, "clipboundsonly")) + settings().setPdfImageCachingPolicy(PDFImageCachingClipBoundsOnly); + else if (equalLettersIgnoringASCIICase(policy, "enabled")) + settings().setPdfImageCachingPolicy(PDFImageCachingEnabled); else - ec = SYNTAX_ERR; + return Exception { SYNTAX_ERR }; + return { }; +} + +ExceptionOr<void> InternalSettings::setMinimumTimerInterval(double intervalInSeconds) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setMinimumDOMTimerInterval(std::chrono::milliseconds((std::chrono::milliseconds::rep)(intervalInSeconds * 1000))); + return { }; +} + +ExceptionOr<void> InternalSettings::setDefaultVideoPosterURL(const String& url) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setDefaultVideoPosterURL(url); + return { }; +} + +ExceptionOr<void> InternalSettings::setForcePendingWebGLPolicy(bool forced) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setForcePendingWebGLPolicy(forced); + return { }; +} + +ExceptionOr<void> InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls(double time) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setTimeWithoutMouseMovementBeforeHidingControls(time); + return { }; } -void InternalSettings::setLangAttributeAwareFormControlUIEnabled(bool enabled) +ExceptionOr<void> InternalSettings::setUseLegacyBackgroundSizeShorthandBehavior(bool enabled) { - RuntimeEnabledFeatures::sharedFeatures().setLangAttributeAwareFormControlUIEnabled(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setUseLegacyBackgroundSizeShorthandBehavior(enabled); + return { }; } -void InternalSettings::setImagesEnabled(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setAutoscrollForDragAndDropEnabled(bool enabled) { - InternalSettingsGuardForSettings(); - settings()->setImagesEnabled(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setAutoscrollForDragAndDropEnabled(enabled); + return { }; } -void InternalSettings::setMinimumTimerInterval(double intervalInSeconds, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setFontFallbackPrefersPictographs(bool preferPictographs) { - InternalSettingsGuardForSettings(); - settings()->setMinDOMTimerInterval(intervalInSeconds); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setFontFallbackPrefersPictographs(preferPictographs); + return { }; } -void InternalSettings::setDefaultVideoPosterURL(const String& url, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setWebFontsAlwaysFallBack(bool enable) { - InternalSettingsGuardForSettings(); - settings()->setDefaultVideoPosterURL(url); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setWebFontsAlwaysFallBack(enable); + return { }; } -void InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls(double time, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setQuickTimePluginReplacementEnabled(bool enabled) { - InternalSettingsGuardForSettings(); - settings()->setTimeWithoutMouseMovementBeforeHidingControls(time); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setQuickTimePluginReplacementEnabled(enabled); + return { }; } -void InternalSettings::setUseLegacyBackgroundSizeShorthandBehavior(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setYouTubeFlashPluginReplacementEnabled(bool enabled) { - InternalSettingsGuardForSettings(); - settings()->setUseLegacyBackgroundSizeShorthandBehavior(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setYouTubeFlashPluginReplacementEnabled(enabled); + return { }; } -void InternalSettings::setAutoscrollForDragAndDropEnabled(bool enabled, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setBackgroundShouldExtendBeyondPage(bool hasExtendedBackground) { - InternalSettingsGuardForSettings(); - settings()->setAutoscrollForDragAndDropEnabled(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setBackgroundShouldExtendBeyondPage(hasExtendedBackground); + return { }; } -void InternalSettings::setFontFallbackPrefersPictographs(bool preferPictographs, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setShouldConvertPositionStyleOnCopy(bool convert) { - InternalSettingsGuardForSettings(); - settings()->setFontFallbackPrefersPictographs(preferPictographs); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setShouldConvertPositionStyleOnCopy(convert); + return { }; } -void InternalSettings::setPluginReplacementEnabled(bool enabled) +ExceptionOr<void> InternalSettings::setScrollingTreeIncludesFrames(bool enabled) { - RuntimeEnabledFeatures::sharedFeatures().setPluginReplacementEnabled(enabled); + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setScrollingTreeIncludesFrames(enabled); + return { }; } -void InternalSettings::setBackgroundShouldExtendBeyondPage(bool hasExtendedBackground, ExceptionCode& ec) +ExceptionOr<void> InternalSettings::setAllowUnclampedScrollPosition(bool allowUnclamped) { - InternalSettingsGuardForSettings(); - settings()->setBackgroundShouldExtendBeyondPage(hasExtendedBackground); + if (!m_page || !m_page->mainFrame().view()) + return Exception { INVALID_ACCESS_ERR }; + + m_page->mainFrame().view()->setAllowsUnclampedScrollPositionForTesting(allowUnclamped); + return { }; } +ExceptionOr<void> InternalSettings::setAllowsInlineMediaPlayback(bool allows) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setAllowsInlineMediaPlayback(allows); + return { }; +} + +ExceptionOr<void> InternalSettings::setAllowsInlineMediaPlaybackAfterFullscreen(bool allows) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setAllowsInlineMediaPlaybackAfterFullscreen(allows); + return { }; +} + +ExceptionOr<void> InternalSettings::setInlineMediaPlaybackRequiresPlaysInlineAttribute(bool requires) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setInlineMediaPlaybackRequiresPlaysInlineAttribute(requires); + return { }; +} + +void InternalSettings::setIndexedDBWorkersEnabled(bool enabled) +{ +#if ENABLE(INDEXED_DATABASE_IN_WORKERS) + RuntimeEnabledFeatures::sharedFeatures().setIndexedDBWorkersEnabled(enabled); +#else + UNUSED_PARAM(enabled); +#endif +} + +void InternalSettings::setCSSGridLayoutEnabled(bool enabled) +{ + RuntimeEnabledFeatures::sharedFeatures().setCSSGridLayoutEnabled(enabled); +} + +void InternalSettings::setWebGL2Enabled(bool enabled) +{ +#if ENABLE(WEBGL2) + RuntimeEnabledFeatures::sharedFeatures().setWebGL2Enabled(enabled); +#else + UNUSED_PARAM(enabled); +#endif +} + +ExceptionOr<String> InternalSettings::userInterfaceDirectionPolicy() +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + switch (settings().userInterfaceDirectionPolicy()) { + case UserInterfaceDirectionPolicy::Content: + return String { ASCIILiteral { "Content" } }; + case UserInterfaceDirectionPolicy::System: + return String { ASCIILiteral { "View" } }; + } + ASSERT_NOT_REACHED(); + return Exception { INVALID_ACCESS_ERR }; +} + +ExceptionOr<void> InternalSettings::setUserInterfaceDirectionPolicy(const String& policy) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + if (equalLettersIgnoringASCIICase(policy, "content")) { + settings().setUserInterfaceDirectionPolicy(UserInterfaceDirectionPolicy::Content); + return { }; + } + if (equalLettersIgnoringASCIICase(policy, "view")) { + settings().setUserInterfaceDirectionPolicy(UserInterfaceDirectionPolicy::System); + return { }; + } + return Exception { INVALID_ACCESS_ERR }; +} + +ExceptionOr<String> InternalSettings::systemLayoutDirection() +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + switch (settings().systemLayoutDirection()) { + case LTR: + return String { ASCIILiteral { "LTR" } }; + case RTL: + return String { ASCIILiteral { "RTL" } }; + } + ASSERT_NOT_REACHED(); + return Exception { INVALID_ACCESS_ERR }; +} + +ExceptionOr<void> InternalSettings::setSystemLayoutDirection(const String& direction) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + if (equalLettersIgnoringASCIICase(direction, "ltr")) { + settings().setSystemLayoutDirection(LTR); + return { }; + } + if (equalLettersIgnoringASCIICase(direction, "rtl")) { + settings().setSystemLayoutDirection(RTL); + return { }; + } + return Exception { INVALID_ACCESS_ERR }; +} + +void InternalSettings::setAllowsAnySSLCertificate(bool allowsAnyCertificate) +{ + Settings::setAllowsAnySSLCertificate(allowsAnyCertificate); +#if USE(SOUP) + SoupNetworkSession::setShouldIgnoreTLSErrors(allowsAnyCertificate); +#endif +} + +ExceptionOr<bool> InternalSettings::deferredCSSParserEnabled() +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + return settings().deferredCSSParserEnabled(); +} + +ExceptionOr<void> InternalSettings::setDeferredCSSParserEnabled(bool enabled) +{ + if (!m_page) + return Exception { INVALID_ACCESS_ERR }; + settings().setDeferredCSSParserEnabled(enabled); + return { }; +} + +static InternalSettings::ForcedAccessibilityValue settingsToInternalSettingsValue(Settings::ForcedAccessibilityValue value) +{ + switch (value) { + case Settings::ForcedAccessibilityValue::System: + return InternalSettings::ForcedAccessibilityValue::System; + case Settings::ForcedAccessibilityValue::On: + return InternalSettings::ForcedAccessibilityValue::On; + case Settings::ForcedAccessibilityValue::Off: + return InternalSettings::ForcedAccessibilityValue::Off; + } + + ASSERT_NOT_REACHED(); + return InternalSettings::ForcedAccessibilityValue::Off; +} + +static Settings::ForcedAccessibilityValue internalSettingsToSettingsValue(InternalSettings::ForcedAccessibilityValue value) +{ + switch (value) { + case InternalSettings::ForcedAccessibilityValue::System: + return Settings::ForcedAccessibilityValue::System; + case InternalSettings::ForcedAccessibilityValue::On: + return Settings::ForcedAccessibilityValue::On; + case InternalSettings::ForcedAccessibilityValue::Off: + return Settings::ForcedAccessibilityValue::Off; + } + + ASSERT_NOT_REACHED(); + return Settings::ForcedAccessibilityValue::Off; +} + +InternalSettings::ForcedAccessibilityValue InternalSettings::forcedColorsAreInvertedAccessibilityValue() const +{ + return settingsToInternalSettingsValue(settings().forcedColorsAreInvertedAccessibilityValue()); +} + +void InternalSettings::setForcedColorsAreInvertedAccessibilityValue(InternalSettings::ForcedAccessibilityValue value) +{ + settings().setForcedColorsAreInvertedAccessibilityValue(internalSettingsToSettingsValue(value)); +} + +InternalSettings::ForcedAccessibilityValue InternalSettings::forcedDisplayIsMonochromeAccessibilityValue() const +{ + return settingsToInternalSettingsValue(settings().forcedDisplayIsMonochromeAccessibilityValue()); +} + +void InternalSettings::setForcedDisplayIsMonochromeAccessibilityValue(InternalSettings::ForcedAccessibilityValue value) +{ + settings().setForcedDisplayIsMonochromeAccessibilityValue(internalSettingsToSettingsValue(value)); +} + +InternalSettings::ForcedAccessibilityValue InternalSettings::forcedPrefersReducedMotionAccessibilityValue() const +{ + return settingsToInternalSettingsValue(settings().forcedPrefersReducedMotionAccessibilityValue()); +} + +void InternalSettings::setForcedPrefersReducedMotionAccessibilityValue(InternalSettings::ForcedAccessibilityValue value) +{ + settings().setForcedPrefersReducedMotionAccessibilityValue(internalSettingsToSettingsValue(value)); +} + +// If you add to this class, make sure that you update the Backup class for test reproducability! + } |