2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2013 Apple Inc. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #include "InternalSettings.h"
30 #include "CaptionUserPreferences.h"
32 #include "FontCache.h"
33 #include "FrameView.h"
34 #include "LocaleToScriptMapping.h"
35 #include "MainFrame.h"
37 #include "PageGroup.h"
38 #include "RenderTheme.h"
39 #include "RuntimeEnabledFeatures.h"
41 #include "Supplementable.h"
42 #include <wtf/Language.h>
44 #if ENABLE(INPUT_TYPE_COLOR)
45 #include "ColorChooser.h"
49 #include "SoupNetworkSession.h"
54 InternalSettings::Backup::Backup(Settings& settings)
55 : m_originalEditingBehavior(settings.editingBehaviorType())
56 #if ENABLE(TEXT_AUTOSIZING)
57 , m_originalTextAutosizingEnabled(settings.textAutosizingEnabled())
58 , m_originalTextAutosizingWindowSizeOverride(settings.textAutosizingWindowSizeOverride())
60 , m_originalMediaTypeOverride(settings.mediaTypeOverride())
61 , m_originalCanvasUsesAcceleratedDrawing(settings.canvasUsesAcceleratedDrawing())
62 , m_originalMockScrollbarsEnabled(settings.mockScrollbarsEnabled())
63 , m_imagesEnabled(settings.areImagesEnabled())
64 , m_preferMIMETypeForImages(settings.preferMIMETypeForImages())
65 , m_minimumDOMTimerInterval(settings.minimumDOMTimerInterval())
66 #if ENABLE(VIDEO_TRACK)
67 , m_shouldDisplaySubtitles(settings.shouldDisplaySubtitles())
68 , m_shouldDisplayCaptions(settings.shouldDisplayCaptions())
69 , m_shouldDisplayTextDescriptions(settings.shouldDisplayTextDescriptions())
71 , m_defaultVideoPosterURL(settings.defaultVideoPosterURL())
72 , m_forcePendingWebGLPolicy(settings.isForcePendingWebGLPolicy())
73 , m_originalTimeWithoutMouseMovementBeforeHidingControls(settings.timeWithoutMouseMovementBeforeHidingControls())
74 , m_useLegacyBackgroundSizeShorthandBehavior(settings.useLegacyBackgroundSizeShorthandBehavior())
75 , m_autoscrollForDragAndDropEnabled(settings.autoscrollForDragAndDropEnabled())
76 , m_quickTimePluginReplacementEnabled(settings.quickTimePluginReplacementEnabled())
77 , m_youTubeFlashPluginReplacementEnabled(settings.youTubeFlashPluginReplacementEnabled())
78 , m_shouldConvertPositionStyleOnCopy(settings.shouldConvertPositionStyleOnCopy())
79 , m_fontFallbackPrefersPictographs(settings.fontFallbackPrefersPictographs())
80 , m_shouldIgnoreFontLoadCompletions(settings.shouldIgnoreFontLoadCompletions())
81 , m_backgroundShouldExtendBeyondPage(settings.backgroundShouldExtendBeyondPage())
82 , m_storageBlockingPolicy(settings.storageBlockingPolicy())
83 , m_scrollingTreeIncludesFrames(settings.scrollingTreeIncludesFrames())
84 #if ENABLE(TOUCH_EVENTS)
85 , m_touchEventEmulationEnabled(settings.isTouchEventEmulationEnabled())
87 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
88 , m_allowsAirPlayForMediaPlayback(settings.allowsAirPlayForMediaPlayback())
90 , m_allowsInlineMediaPlayback(settings.allowsInlineMediaPlayback())
91 , m_allowsInlineMediaPlaybackAfterFullscreen(settings.allowsInlineMediaPlaybackAfterFullscreen())
92 , m_inlineMediaPlaybackRequiresPlaysInlineAttribute(settings.inlineMediaPlaybackRequiresPlaysInlineAttribute())
93 , m_deferredCSSParserEnabled(settings.deferredCSSParserEnabled())
94 , m_inputEventsEnabled(settings.inputEventsEnabled())
95 , m_userInterfaceDirectionPolicy(settings.userInterfaceDirectionPolicy())
96 , m_systemLayoutDirection(settings.systemLayoutDirection())
97 , m_pdfImageCachingPolicy(settings.pdfImageCachingPolicy())
98 , m_forcedColorsAreInvertedAccessibilityValue(settings.forcedColorsAreInvertedAccessibilityValue())
99 , m_forcedDisplayIsMonochromeAccessibilityValue(settings.forcedDisplayIsMonochromeAccessibilityValue())
100 , m_forcedPrefersReducedMotionAccessibilityValue(settings.forcedPrefersReducedMotionAccessibilityValue())
101 , m_fontLoadTimingOverride(settings.fontLoadTimingOverride())
102 , m_frameFlattening(settings.frameFlattening())
103 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
104 , m_indexedDBWorkersEnabled(RuntimeEnabledFeatures::sharedFeatures().indexedDBWorkersEnabled())
106 , m_cssGridLayoutEnabled(RuntimeEnabledFeatures::sharedFeatures().isCSSGridLayoutEnabled())
108 , m_webGL2Enabled(RuntimeEnabledFeatures::sharedFeatures().webGL2Enabled())
111 , m_webGPUEnabled(RuntimeEnabledFeatures::sharedFeatures().webGPUEnabled())
113 , m_webVREnabled(RuntimeEnabledFeatures::sharedFeatures().webVREnabled())
114 , m_shouldMockBoldSystemFontForAccessibility(RenderTheme::singleton().shouldMockBoldSystemFontForAccessibility())
115 #if USE(AUDIO_SESSION)
116 , m_shouldManageAudioSessionCategory(Settings::shouldManageAudioSessionCategory())
118 , m_customPasteboardDataEnabled(Settings::customPasteboardDataEnabled())
122 void InternalSettings::Backup::restoreTo(Settings& settings)
124 settings.setEditingBehaviorType(m_originalEditingBehavior);
126 for (const auto& standardFont : m_standardFontFamilies)
127 settings.setStandardFontFamily(standardFont.value, static_cast<UScriptCode>(standardFont.key));
128 m_standardFontFamilies.clear();
130 for (const auto& fixedFont : m_fixedFontFamilies)
131 settings.setFixedFontFamily(fixedFont.value, static_cast<UScriptCode>(fixedFont.key));
132 m_fixedFontFamilies.clear();
134 for (const auto& serifFont : m_serifFontFamilies)
135 settings.setSerifFontFamily(serifFont.value, static_cast<UScriptCode>(serifFont.key));
136 m_serifFontFamilies.clear();
138 for (const auto& sansSerifFont : m_sansSerifFontFamilies)
139 settings.setSansSerifFontFamily(sansSerifFont.value, static_cast<UScriptCode>(sansSerifFont.key));
140 m_sansSerifFontFamilies.clear();
142 for (const auto& cursiveFont : m_cursiveFontFamilies)
143 settings.setCursiveFontFamily(cursiveFont.value, static_cast<UScriptCode>(cursiveFont.key));
144 m_cursiveFontFamilies.clear();
146 for (const auto& fantasyFont : m_fantasyFontFamilies)
147 settings.setFantasyFontFamily(fantasyFont.value, static_cast<UScriptCode>(fantasyFont.key));
148 m_fantasyFontFamilies.clear();
150 for (const auto& pictographFont : m_pictographFontFamilies)
151 settings.setPictographFontFamily(pictographFont.value, static_cast<UScriptCode>(pictographFont.key));
152 m_pictographFontFamilies.clear();
154 #if ENABLE(TEXT_AUTOSIZING)
155 settings.setTextAutosizingEnabled(m_originalTextAutosizingEnabled);
156 settings.setTextAutosizingWindowSizeOverride(m_originalTextAutosizingWindowSizeOverride);
158 settings.setMediaTypeOverride(m_originalMediaTypeOverride);
159 settings.setCanvasUsesAcceleratedDrawing(m_originalCanvasUsesAcceleratedDrawing);
160 settings.setImagesEnabled(m_imagesEnabled);
161 settings.setPreferMIMETypeForImages(m_preferMIMETypeForImages);
162 settings.setMinimumDOMTimerInterval(m_minimumDOMTimerInterval);
163 #if ENABLE(VIDEO_TRACK)
164 settings.setShouldDisplaySubtitles(m_shouldDisplaySubtitles);
165 settings.setShouldDisplayCaptions(m_shouldDisplayCaptions);
166 settings.setShouldDisplayTextDescriptions(m_shouldDisplayTextDescriptions);
168 settings.setDefaultVideoPosterURL(m_defaultVideoPosterURL);
169 settings.setForcePendingWebGLPolicy(m_forcePendingWebGLPolicy);
170 settings.setTimeWithoutMouseMovementBeforeHidingControls(m_originalTimeWithoutMouseMovementBeforeHidingControls);
171 settings.setUseLegacyBackgroundSizeShorthandBehavior(m_useLegacyBackgroundSizeShorthandBehavior);
172 settings.setAutoscrollForDragAndDropEnabled(m_autoscrollForDragAndDropEnabled);
173 settings.setShouldConvertPositionStyleOnCopy(m_shouldConvertPositionStyleOnCopy);
174 settings.setFontFallbackPrefersPictographs(m_fontFallbackPrefersPictographs);
175 settings.setShouldIgnoreFontLoadCompletions(m_shouldIgnoreFontLoadCompletions);
176 settings.setBackgroundShouldExtendBeyondPage(m_backgroundShouldExtendBeyondPage);
177 settings.setStorageBlockingPolicy(m_storageBlockingPolicy);
178 settings.setScrollingTreeIncludesFrames(m_scrollingTreeIncludesFrames);
179 #if ENABLE(TOUCH_EVENTS)
180 settings.setTouchEventEmulationEnabled(m_touchEventEmulationEnabled);
182 settings.setAllowsInlineMediaPlayback(m_allowsInlineMediaPlayback);
183 settings.setAllowsInlineMediaPlaybackAfterFullscreen(m_allowsInlineMediaPlaybackAfterFullscreen);
184 settings.setInlineMediaPlaybackRequiresPlaysInlineAttribute(m_inlineMediaPlaybackRequiresPlaysInlineAttribute);
185 settings.setQuickTimePluginReplacementEnabled(m_quickTimePluginReplacementEnabled);
186 settings.setYouTubeFlashPluginReplacementEnabled(m_youTubeFlashPluginReplacementEnabled);
187 settings.setDeferredCSSParserEnabled(m_deferredCSSParserEnabled);
188 settings.setInputEventsEnabled(m_inputEventsEnabled);
189 settings.setUserInterfaceDirectionPolicy(m_userInterfaceDirectionPolicy);
190 settings.setSystemLayoutDirection(m_systemLayoutDirection);
191 settings.setPdfImageCachingPolicy(m_pdfImageCachingPolicy);
192 settings.setForcedColorsAreInvertedAccessibilityValue(m_forcedColorsAreInvertedAccessibilityValue);
193 settings.setForcedDisplayIsMonochromeAccessibilityValue(m_forcedDisplayIsMonochromeAccessibilityValue);
194 settings.setForcedPrefersReducedMotionAccessibilityValue(m_forcedPrefersReducedMotionAccessibilityValue);
195 settings.setFontLoadTimingOverride(m_fontLoadTimingOverride);
196 Settings::setAllowsAnySSLCertificate(false);
197 RenderTheme::singleton().setShouldMockBoldSystemFontForAccessibility(m_shouldMockBoldSystemFontForAccessibility);
198 FontCache::singleton().setShouldMockBoldSystemFontForAccessibility(m_shouldMockBoldSystemFontForAccessibility);
199 settings.setFrameFlattening(m_frameFlattening);
201 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
202 RuntimeEnabledFeatures::sharedFeatures().setIndexedDBWorkersEnabled(m_indexedDBWorkersEnabled);
204 RuntimeEnabledFeatures::sharedFeatures().setCSSGridLayoutEnabled(m_cssGridLayoutEnabled);
206 RuntimeEnabledFeatures::sharedFeatures().setWebGL2Enabled(m_webGL2Enabled);
209 RuntimeEnabledFeatures::sharedFeatures().setWebGPUEnabled(m_webGPUEnabled);
211 RuntimeEnabledFeatures::sharedFeatures().setWebVREnabled(m_webVREnabled);
213 #if USE(AUDIO_SESSION)
214 Settings::setShouldManageAudioSessionCategory(m_shouldManageAudioSessionCategory);
216 Settings::setCustomPasteboardDataEnabled(m_customPasteboardDataEnabled);
219 class InternalSettingsWrapper : public Supplement<Page> {
221 explicit InternalSettingsWrapper(Page* page)
222 : m_internalSettings(InternalSettings::create(page)) { }
223 virtual ~InternalSettingsWrapper() { m_internalSettings->hostDestroyed(); }
225 bool isRefCountedWrapper() const override { return true; }
227 InternalSettings* internalSettings() const { return m_internalSettings.get(); }
230 RefPtr<InternalSettings> m_internalSettings;
233 const char* InternalSettings::supplementName()
235 return "InternalSettings";
238 InternalSettings* InternalSettings::from(Page* page)
240 if (!Supplement<Page>::from(page, supplementName()))
241 Supplement<Page>::provideTo(page, supplementName(), std::make_unique<InternalSettingsWrapper>(page));
242 return static_cast<InternalSettingsWrapper*>(Supplement<Page>::from(page, supplementName()))->internalSettings();
245 void InternalSettings::hostDestroyed()
250 InternalSettings::InternalSettings(Page* page)
251 : InternalSettingsGenerated(page)
253 , m_backup(page->settings())
255 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
256 setAllowsAirPlayForMediaPlayback(false);
258 #if ENABLE(MEDIA_STREAM)
259 setMediaCaptureRequiresSecureConnection(false);
263 Ref<InternalSettings> InternalSettings::create(Page* page)
265 return adoptRef(*new InternalSettings(page));
268 void InternalSettings::resetToConsistentState()
270 m_page->setPageScaleFactor(1, { 0, 0 });
271 m_page->mainFrame().setPageAndTextZoomFactors(1, 1);
272 m_page->setCanStartMedia(true);
274 settings().setForcePendingWebGLPolicy(false);
275 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
276 settings().setAllowsAirPlayForMediaPlayback(false);
278 #if ENABLE(MEDIA_STREAM)
279 setMediaCaptureRequiresSecureConnection(false);
282 m_backup.restoreTo(settings());
283 m_backup = Backup { settings() };
285 InternalSettingsGenerated::resetToConsistentState();
288 Settings& InternalSettings::settings() const
291 return m_page->settings();
294 ExceptionOr<void> InternalSettings::setTouchEventEmulationEnabled(bool enabled)
297 return Exception { InvalidAccessError };
298 #if ENABLE(TOUCH_EVENTS)
299 settings().setTouchEventEmulationEnabled(enabled);
301 UNUSED_PARAM(enabled);
306 ExceptionOr<void> InternalSettings::setStandardFontFamily(const String& family, const String& script)
309 return Exception { InvalidAccessError };
310 UScriptCode code = scriptNameToCode(script);
311 if (code == USCRIPT_INVALID_CODE)
313 m_backup.m_standardFontFamilies.add(code, settings().standardFontFamily(code));
314 settings().setStandardFontFamily(family, code);
318 ExceptionOr<void> InternalSettings::setSerifFontFamily(const String& family, const String& script)
321 return Exception { InvalidAccessError };
322 UScriptCode code = scriptNameToCode(script);
323 if (code == USCRIPT_INVALID_CODE)
325 m_backup.m_serifFontFamilies.add(code, settings().serifFontFamily(code));
326 settings().setSerifFontFamily(family, code);
330 ExceptionOr<void> InternalSettings::setSansSerifFontFamily(const String& family, const String& script)
333 return Exception { InvalidAccessError };
334 UScriptCode code = scriptNameToCode(script);
335 if (code == USCRIPT_INVALID_CODE)
337 m_backup.m_sansSerifFontFamilies.add(code, settings().sansSerifFontFamily(code));
338 settings().setSansSerifFontFamily(family, code);
342 ExceptionOr<void> InternalSettings::setFixedFontFamily(const String& family, const String& script)
345 return Exception { InvalidAccessError };
346 UScriptCode code = scriptNameToCode(script);
347 if (code == USCRIPT_INVALID_CODE)
349 m_backup.m_fixedFontFamilies.add(code, settings().fixedFontFamily(code));
350 settings().setFixedFontFamily(family, code);
354 ExceptionOr<void> InternalSettings::setCursiveFontFamily(const String& family, const String& script)
357 return Exception { InvalidAccessError };
358 UScriptCode code = scriptNameToCode(script);
359 if (code == USCRIPT_INVALID_CODE)
361 m_backup.m_cursiveFontFamilies.add(code, settings().cursiveFontFamily(code));
362 settings().setCursiveFontFamily(family, code);
366 ExceptionOr<void> InternalSettings::setFantasyFontFamily(const String& family, const String& script)
369 return Exception { InvalidAccessError };
370 UScriptCode code = scriptNameToCode(script);
371 if (code == USCRIPT_INVALID_CODE)
373 m_backup.m_fantasyFontFamilies.add(code, settings().fantasyFontFamily(code));
374 settings().setFantasyFontFamily(family, code);
378 ExceptionOr<void> InternalSettings::setPictographFontFamily(const String& family, const String& script)
381 return Exception { InvalidAccessError };
382 UScriptCode code = scriptNameToCode(script);
383 if (code == USCRIPT_INVALID_CODE)
385 m_backup.m_pictographFontFamilies.add(code, settings().pictographFontFamily(code));
386 settings().setPictographFontFamily(family, code);
390 ExceptionOr<void> InternalSettings::setTextAutosizingEnabled(bool enabled)
393 return Exception { InvalidAccessError };
394 #if ENABLE(TEXT_AUTOSIZING)
395 settings().setTextAutosizingEnabled(enabled);
397 UNUSED_PARAM(enabled);
402 ExceptionOr<void> InternalSettings::setTextAutosizingWindowSizeOverride(int width, int height)
405 return Exception { InvalidAccessError };
406 #if ENABLE(TEXT_AUTOSIZING)
407 settings().setTextAutosizingWindowSizeOverride(IntSize(width, height));
410 UNUSED_PARAM(height);
415 ExceptionOr<void> InternalSettings::setMediaTypeOverride(const String& mediaType)
418 return Exception { InvalidAccessError };
419 settings().setMediaTypeOverride(mediaType);
423 ExceptionOr<void> InternalSettings::setCanStartMedia(bool enabled)
426 return Exception { InvalidAccessError };
427 m_page->setCanStartMedia(enabled);
431 ExceptionOr<void> InternalSettings::setAllowsAirPlayForMediaPlayback(bool allows)
434 return Exception { InvalidAccessError };
435 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
436 settings().setAllowsAirPlayForMediaPlayback(allows);
438 UNUSED_PARAM(allows);
443 ExceptionOr<void> InternalSettings::setMediaCaptureRequiresSecureConnection(bool requires)
446 return Exception { InvalidAccessError };
447 #if ENABLE(MEDIA_STREAM)
448 settings().setMediaCaptureRequiresSecureConnection(requires);
450 UNUSED_PARAM(requires);
455 ExceptionOr<void> InternalSettings::setEditingBehavior(const String& editingBehavior)
458 return Exception { InvalidAccessError };
459 if (equalLettersIgnoringASCIICase(editingBehavior, "win"))
460 settings().setEditingBehaviorType(EditingWindowsBehavior);
461 else if (equalLettersIgnoringASCIICase(editingBehavior, "mac"))
462 settings().setEditingBehaviorType(EditingMacBehavior);
463 else if (equalLettersIgnoringASCIICase(editingBehavior, "unix"))
464 settings().setEditingBehaviorType(EditingUnixBehavior);
465 else if (equalLettersIgnoringASCIICase(editingBehavior, "ios"))
466 settings().setEditingBehaviorType(EditingIOSBehavior);
468 return Exception { SyntaxError };
472 ExceptionOr<void> InternalSettings::setShouldDisplayTrackKind(const String& kind, bool enabled)
475 return Exception { InvalidAccessError };
476 #if ENABLE(VIDEO_TRACK)
477 auto& captionPreferences = m_page->group().captionPreferences();
478 if (equalLettersIgnoringASCIICase(kind, "subtitles"))
479 captionPreferences.setUserPrefersSubtitles(enabled);
480 else if (equalLettersIgnoringASCIICase(kind, "captions"))
481 captionPreferences.setUserPrefersCaptions(enabled);
482 else if (equalLettersIgnoringASCIICase(kind, "textdescriptions"))
483 captionPreferences.setUserPrefersTextDescriptions(enabled);
485 return Exception { SyntaxError };
488 UNUSED_PARAM(enabled);
493 ExceptionOr<bool> InternalSettings::shouldDisplayTrackKind(const String& kind)
496 return Exception { InvalidAccessError };
497 #if ENABLE(VIDEO_TRACK)
498 auto& captionPreferences = m_page->group().captionPreferences();
499 if (equalLettersIgnoringASCIICase(kind, "subtitles"))
500 return captionPreferences.userPrefersSubtitles();
501 if (equalLettersIgnoringASCIICase(kind, "captions"))
502 return captionPreferences.userPrefersCaptions();
503 if (equalLettersIgnoringASCIICase(kind, "textdescriptions"))
504 return captionPreferences.userPrefersTextDescriptions();
506 return Exception { SyntaxError };
513 ExceptionOr<void> InternalSettings::setStorageBlockingPolicy(const String& mode)
516 return Exception { InvalidAccessError };
517 if (mode == "AllowAll")
518 settings().setStorageBlockingPolicy(SecurityOrigin::AllowAllStorage);
519 else if (mode == "BlockThirdParty")
520 settings().setStorageBlockingPolicy(SecurityOrigin::BlockThirdPartyStorage);
521 else if (mode == "BlockAll")
522 settings().setStorageBlockingPolicy(SecurityOrigin::BlockAllStorage);
524 return Exception { SyntaxError };
528 ExceptionOr<void> InternalSettings::setPreferMIMETypeForImages(bool preferMIMETypeForImages)
531 return Exception { InvalidAccessError };
532 settings().setPreferMIMETypeForImages(preferMIMETypeForImages);
536 ExceptionOr<void> InternalSettings::setImagesEnabled(bool enabled)
539 return Exception { InvalidAccessError };
540 settings().setImagesEnabled(enabled);
544 ExceptionOr<void> InternalSettings::setPDFImageCachingPolicy(const String& policy)
547 return Exception { InvalidAccessError };
548 if (equalLettersIgnoringASCIICase(policy, "disabled"))
549 settings().setPdfImageCachingPolicy(PDFImageCachingDisabled);
550 else if (equalLettersIgnoringASCIICase(policy, "belowmemorylimit"))
551 settings().setPdfImageCachingPolicy(PDFImageCachingBelowMemoryLimit);
552 else if (equalLettersIgnoringASCIICase(policy, "clipboundsonly"))
553 settings().setPdfImageCachingPolicy(PDFImageCachingClipBoundsOnly);
554 else if (equalLettersIgnoringASCIICase(policy, "enabled"))
555 settings().setPdfImageCachingPolicy(PDFImageCachingEnabled);
557 return Exception { SyntaxError };
561 ExceptionOr<void> InternalSettings::setMinimumTimerInterval(double intervalInSeconds)
564 return Exception { InvalidAccessError };
565 settings().setMinimumDOMTimerInterval(Seconds { intervalInSeconds });
569 ExceptionOr<void> InternalSettings::setDefaultVideoPosterURL(const String& url)
572 return Exception { InvalidAccessError };
573 settings().setDefaultVideoPosterURL(url);
577 ExceptionOr<void> InternalSettings::setForcePendingWebGLPolicy(bool forced)
580 return Exception { InvalidAccessError };
581 settings().setForcePendingWebGLPolicy(forced);
585 ExceptionOr<void> InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls(double time)
588 return Exception { InvalidAccessError };
589 settings().setTimeWithoutMouseMovementBeforeHidingControls(Seconds { time });
593 ExceptionOr<void> InternalSettings::setUseLegacyBackgroundSizeShorthandBehavior(bool enabled)
596 return Exception { InvalidAccessError };
597 settings().setUseLegacyBackgroundSizeShorthandBehavior(enabled);
601 ExceptionOr<void> InternalSettings::setAutoscrollForDragAndDropEnabled(bool enabled)
604 return Exception { InvalidAccessError };
605 settings().setAutoscrollForDragAndDropEnabled(enabled);
609 ExceptionOr<void> InternalSettings::setFontFallbackPrefersPictographs(bool preferPictographs)
612 return Exception { InvalidAccessError };
613 settings().setFontFallbackPrefersPictographs(preferPictographs);
617 ExceptionOr<void> InternalSettings::setFontLoadTimingOverride(const FontLoadTimingOverride& fontLoadTimingOverride)
620 return Exception { InvalidAccessError };
621 auto policy = Settings::FontLoadTimingOverride::None;
622 switch (fontLoadTimingOverride) {
623 case FontLoadTimingOverride::Block:
624 policy = Settings::FontLoadTimingOverride::Block;
626 case FontLoadTimingOverride::Swap:
627 policy = Settings::FontLoadTimingOverride::Swap;
629 case FontLoadTimingOverride::Failure:
630 policy = Settings::FontLoadTimingOverride::Failure;
633 settings().setFontLoadTimingOverride(policy);
637 ExceptionOr<void> InternalSettings::setShouldIgnoreFontLoadCompletions(bool ignore)
640 return Exception { InvalidAccessError };
641 settings().setShouldIgnoreFontLoadCompletions(ignore);
645 ExceptionOr<void> InternalSettings::setQuickTimePluginReplacementEnabled(bool enabled)
648 return Exception { InvalidAccessError };
649 settings().setQuickTimePluginReplacementEnabled(enabled);
653 ExceptionOr<void> InternalSettings::setYouTubeFlashPluginReplacementEnabled(bool enabled)
656 return Exception { InvalidAccessError };
657 settings().setYouTubeFlashPluginReplacementEnabled(enabled);
661 ExceptionOr<void> InternalSettings::setBackgroundShouldExtendBeyondPage(bool hasExtendedBackground)
664 return Exception { InvalidAccessError };
665 settings().setBackgroundShouldExtendBeyondPage(hasExtendedBackground);
669 ExceptionOr<void> InternalSettings::setShouldConvertPositionStyleOnCopy(bool convert)
672 return Exception { InvalidAccessError };
673 settings().setShouldConvertPositionStyleOnCopy(convert);
677 ExceptionOr<void> InternalSettings::setScrollingTreeIncludesFrames(bool enabled)
680 return Exception { InvalidAccessError };
681 settings().setScrollingTreeIncludesFrames(enabled);
685 ExceptionOr<void> InternalSettings::setAllowUnclampedScrollPosition(bool allowUnclamped)
687 if (!m_page || !m_page->mainFrame().view())
688 return Exception { InvalidAccessError };
690 m_page->mainFrame().view()->setAllowsUnclampedScrollPositionForTesting(allowUnclamped);
694 ExceptionOr<void> InternalSettings::setAllowsInlineMediaPlayback(bool allows)
697 return Exception { InvalidAccessError };
698 settings().setAllowsInlineMediaPlayback(allows);
702 ExceptionOr<void> InternalSettings::setAllowsInlineMediaPlaybackAfterFullscreen(bool allows)
705 return Exception { InvalidAccessError };
706 settings().setAllowsInlineMediaPlaybackAfterFullscreen(allows);
710 ExceptionOr<void> InternalSettings::setInlineMediaPlaybackRequiresPlaysInlineAttribute(bool requires)
713 return Exception { InvalidAccessError };
714 settings().setInlineMediaPlaybackRequiresPlaysInlineAttribute(requires);
718 ExceptionOr<void> InternalSettings::setShouldMockBoldSystemFontForAccessibility(bool requires)
721 return Exception { InvalidAccessError };
722 RenderTheme::singleton().setShouldMockBoldSystemFontForAccessibility(requires);
723 FontCache::singleton().setShouldMockBoldSystemFontForAccessibility(requires);
727 void InternalSettings::setIndexedDBWorkersEnabled(bool enabled)
729 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
730 RuntimeEnabledFeatures::sharedFeatures().setIndexedDBWorkersEnabled(enabled);
732 UNUSED_PARAM(enabled);
736 void InternalSettings::setCSSGridLayoutEnabled(bool enabled)
738 RuntimeEnabledFeatures::sharedFeatures().setCSSGridLayoutEnabled(enabled);
741 void InternalSettings::setWebGL2Enabled(bool enabled)
744 RuntimeEnabledFeatures::sharedFeatures().setWebGL2Enabled(enabled);
746 UNUSED_PARAM(enabled);
750 void InternalSettings::setWebGPUEnabled(bool enabled)
753 RuntimeEnabledFeatures::sharedFeatures().setWebGPUEnabled(enabled);
755 UNUSED_PARAM(enabled);
759 void InternalSettings::setWebVREnabled(bool enabled)
761 RuntimeEnabledFeatures::sharedFeatures().setWebVREnabled(enabled);
764 ExceptionOr<String> InternalSettings::userInterfaceDirectionPolicy()
767 return Exception { InvalidAccessError };
768 switch (settings().userInterfaceDirectionPolicy()) {
769 case UserInterfaceDirectionPolicy::Content:
770 return String { ASCIILiteral { "Content" } };
771 case UserInterfaceDirectionPolicy::System:
772 return String { ASCIILiteral { "View" } };
774 ASSERT_NOT_REACHED();
775 return Exception { InvalidAccessError };
778 ExceptionOr<void> InternalSettings::setUserInterfaceDirectionPolicy(const String& policy)
781 return Exception { InvalidAccessError };
782 if (equalLettersIgnoringASCIICase(policy, "content")) {
783 settings().setUserInterfaceDirectionPolicy(UserInterfaceDirectionPolicy::Content);
786 if (equalLettersIgnoringASCIICase(policy, "view")) {
787 settings().setUserInterfaceDirectionPolicy(UserInterfaceDirectionPolicy::System);
790 return Exception { InvalidAccessError };
793 ExceptionOr<String> InternalSettings::systemLayoutDirection()
796 return Exception { InvalidAccessError };
797 switch (settings().systemLayoutDirection()) {
799 return String { ASCIILiteral { "LTR" } };
801 return String { ASCIILiteral { "RTL" } };
803 ASSERT_NOT_REACHED();
804 return Exception { InvalidAccessError };
807 ExceptionOr<void> InternalSettings::setSystemLayoutDirection(const String& direction)
810 return Exception { InvalidAccessError };
811 if (equalLettersIgnoringASCIICase(direction, "ltr")) {
812 settings().setSystemLayoutDirection(LTR);
815 if (equalLettersIgnoringASCIICase(direction, "rtl")) {
816 settings().setSystemLayoutDirection(RTL);
819 return Exception { InvalidAccessError };
822 static FrameFlattening internalSettingsToWebCoreValue(InternalSettings::FrameFlatteningValue value)
825 case InternalSettings::FrameFlatteningValue::Disabled:
826 return FrameFlatteningDisabled;
827 case InternalSettings::FrameFlatteningValue::EnabledForNonFullScreenIFrames:
828 return FrameFlatteningEnabledForNonFullScreenIFrames;
829 case InternalSettings::FrameFlatteningValue::FullyEnabled:
830 return FrameFlatteningFullyEnabled;
833 ASSERT_NOT_REACHED();
834 return FrameFlatteningDisabled;
837 ExceptionOr<void> InternalSettings::setFrameFlattening(const FrameFlatteningValue& frameFlattening)
840 return Exception { InvalidAccessError };
841 settings().setFrameFlattening(internalSettingsToWebCoreValue(frameFlattening));
845 void InternalSettings::setAllowsAnySSLCertificate(bool allowsAnyCertificate)
847 Settings::setAllowsAnySSLCertificate(allowsAnyCertificate);
849 SoupNetworkSession::setShouldIgnoreTLSErrors(allowsAnyCertificate);
853 ExceptionOr<bool> InternalSettings::deferredCSSParserEnabled()
856 return Exception { InvalidAccessError };
857 return settings().deferredCSSParserEnabled();
860 ExceptionOr<void> InternalSettings::setDeferredCSSParserEnabled(bool enabled)
863 return Exception { InvalidAccessError };
864 settings().setDeferredCSSParserEnabled(enabled);
868 ExceptionOr<void> InternalSettings::setShouldManageAudioSessionCategory(bool should)
870 #if USE(AUDIO_SESSION)
871 Settings::setShouldManageAudioSessionCategory(should);
874 UNUSED_PARAM(should);
875 return Exception { InvalidAccessError };
879 ExceptionOr<void> InternalSettings::setCustomPasteboardDataEnabled(bool enabled)
881 Settings::setCustomPasteboardDataEnabled(enabled);
885 static InternalSettings::ForcedAccessibilityValue settingsToInternalSettingsValue(Settings::ForcedAccessibilityValue value)
888 case Settings::ForcedAccessibilityValue::System:
889 return InternalSettings::ForcedAccessibilityValue::System;
890 case Settings::ForcedAccessibilityValue::On:
891 return InternalSettings::ForcedAccessibilityValue::On;
892 case Settings::ForcedAccessibilityValue::Off:
893 return InternalSettings::ForcedAccessibilityValue::Off;
896 ASSERT_NOT_REACHED();
897 return InternalSettings::ForcedAccessibilityValue::Off;
900 static Settings::ForcedAccessibilityValue internalSettingsToSettingsValue(InternalSettings::ForcedAccessibilityValue value)
903 case InternalSettings::ForcedAccessibilityValue::System:
904 return Settings::ForcedAccessibilityValue::System;
905 case InternalSettings::ForcedAccessibilityValue::On:
906 return Settings::ForcedAccessibilityValue::On;
907 case InternalSettings::ForcedAccessibilityValue::Off:
908 return Settings::ForcedAccessibilityValue::Off;
911 ASSERT_NOT_REACHED();
912 return Settings::ForcedAccessibilityValue::Off;
915 InternalSettings::ForcedAccessibilityValue InternalSettings::forcedColorsAreInvertedAccessibilityValue() const
917 return settingsToInternalSettingsValue(settings().forcedColorsAreInvertedAccessibilityValue());
920 void InternalSettings::setForcedColorsAreInvertedAccessibilityValue(InternalSettings::ForcedAccessibilityValue value)
922 settings().setForcedColorsAreInvertedAccessibilityValue(internalSettingsToSettingsValue(value));
925 InternalSettings::ForcedAccessibilityValue InternalSettings::forcedDisplayIsMonochromeAccessibilityValue() const
927 return settingsToInternalSettingsValue(settings().forcedDisplayIsMonochromeAccessibilityValue());
930 void InternalSettings::setForcedDisplayIsMonochromeAccessibilityValue(InternalSettings::ForcedAccessibilityValue value)
932 settings().setForcedDisplayIsMonochromeAccessibilityValue(internalSettingsToSettingsValue(value));
935 InternalSettings::ForcedAccessibilityValue InternalSettings::forcedPrefersReducedMotionAccessibilityValue() const
937 return settingsToInternalSettingsValue(settings().forcedPrefersReducedMotionAccessibilityValue());
940 void InternalSettings::setForcedPrefersReducedMotionAccessibilityValue(InternalSettings::ForcedAccessibilityValue value)
942 settings().setForcedPrefersReducedMotionAccessibilityValue(internalSettingsToSettingsValue(value));
945 // If you add to this class, make sure that you update the Backup class for test reproducability!