1 | /* |
2 | * Copyright (C) 2012 Google Inc. All rights reserved. |
3 | * Copyright (C) 2013-2016 Apple Inc. All rights reserved. |
4 | * |
5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions |
7 | * are met: |
8 | * |
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. |
14 | * |
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. |
25 | */ |
26 | |
27 | #pragma once |
28 | |
29 | // FIXME (121927): This include should not be needed. |
30 | #include <wtf/text/AtomicStringHash.h> |
31 | |
32 | #include "EditingBehaviorTypes.h" |
33 | #include "ExceptionOr.h" |
34 | #include "FontGenericFamilies.h" |
35 | #include "IntSize.h" |
36 | #include "InternalSettingsGenerated.h" |
37 | #include "SecurityOrigin.h" |
38 | #include "Settings.h" |
39 | #include "WritingMode.h" |
40 | |
41 | namespace WebCore { |
42 | |
43 | class Page; |
44 | class Settings; |
45 | |
46 | class InternalSettings : public InternalSettingsGenerated { |
47 | public: |
48 | static Ref<InternalSettings> create(Page*); |
49 | static InternalSettings* from(Page*); |
50 | void hostDestroyed(); |
51 | void resetToConsistentState(); |
52 | |
53 | ExceptionOr<void> setUsesOverlayScrollbars(bool); |
54 | ExceptionOr<void> setTouchEventEmulationEnabled(bool); |
55 | ExceptionOr<void> setStandardFontFamily(const String& family, const String& script); |
56 | ExceptionOr<void> setSerifFontFamily(const String& family, const String& script); |
57 | ExceptionOr<void> setSansSerifFontFamily(const String& family, const String& script); |
58 | ExceptionOr<void> setFixedFontFamily(const String& family, const String& script); |
59 | ExceptionOr<void> setCursiveFontFamily(const String& family, const String& script); |
60 | ExceptionOr<void> setFantasyFontFamily(const String& family, const String& script); |
61 | ExceptionOr<void> setPictographFontFamily(const String& family, const String& script); |
62 | ExceptionOr<void> setTextAutosizingEnabled(bool); |
63 | ExceptionOr<void> setTextAutosizingWindowSizeOverride(int width, int height); |
64 | ExceptionOr<void> setTextAutosizingUsesIdempotentMode(bool); |
65 | ExceptionOr<void> setTextAutosizingFontScaleFactor(float); |
66 | ExceptionOr<void> setMediaTypeOverride(const String&); |
67 | ExceptionOr<void> setCanStartMedia(bool); |
68 | ExceptionOr<void> setAllowsAirPlayForMediaPlayback(bool); |
69 | ExceptionOr<void> setMediaCaptureRequiresSecureConnection(bool); |
70 | |
71 | ExceptionOr<void> setEditingBehavior(const String&); |
72 | ExceptionOr<void> setPreferMIMETypeForImages(bool); |
73 | ExceptionOr<void> setPDFImageCachingPolicy(const String&); |
74 | ExceptionOr<void> setShouldDisplayTrackKind(const String& kind, bool enabled); |
75 | ExceptionOr<bool> shouldDisplayTrackKind(const String& kind); |
76 | ExceptionOr<void> setUseDarkAppearance(bool); |
77 | ExceptionOr<void> setStorageBlockingPolicy(const String&); |
78 | ExceptionOr<void> setImagesEnabled(bool); |
79 | ExceptionOr<void> setMinimumTimerInterval(double intervalInSeconds); |
80 | ExceptionOr<void> setDefaultVideoPosterURL(const String&); |
81 | ExceptionOr<void> setForcePendingWebGLPolicy(bool); |
82 | ExceptionOr<void> setTimeWithoutMouseMovementBeforeHidingControls(double); |
83 | ExceptionOr<void> setUseLegacyBackgroundSizeShorthandBehavior(bool); |
84 | ExceptionOr<void> setAutoscrollForDragAndDropEnabled(bool); |
85 | ExceptionOr<void> setFontFallbackPrefersPictographs(bool); |
86 | enum class FontLoadTimingOverride { Block, Swap, Failure }; |
87 | ExceptionOr<void> setFontLoadTimingOverride(const FontLoadTimingOverride&); |
88 | ExceptionOr<void> setShouldIgnoreFontLoadCompletions(bool); |
89 | ExceptionOr<void> setQuickTimePluginReplacementEnabled(bool); |
90 | ExceptionOr<void> setYouTubeFlashPluginReplacementEnabled(bool); |
91 | ExceptionOr<void> setBackgroundShouldExtendBeyondPage(bool); |
92 | ExceptionOr<void> setShouldConvertPositionStyleOnCopy(bool); |
93 | ExceptionOr<void> setScrollingTreeIncludesFrames(bool); |
94 | ExceptionOr<void> setAllowUnclampedScrollPosition(bool); |
95 | ExceptionOr<void> setAllowsInlineMediaPlayback(bool); |
96 | ExceptionOr<void> setAllowsInlineMediaPlaybackAfterFullscreen(bool); |
97 | ExceptionOr<void> setInlineMediaPlaybackRequiresPlaysInlineAttribute(bool); |
98 | ExceptionOr<String> userInterfaceDirectionPolicy(); |
99 | ExceptionOr<void> setUserInterfaceDirectionPolicy(const String&); |
100 | ExceptionOr<String> systemLayoutDirection(); |
101 | ExceptionOr<void> setSystemLayoutDirection(const String&); |
102 | ExceptionOr<void> setShouldMockBoldSystemFontForAccessibility(bool); |
103 | ExceptionOr<void> setShouldManageAudioSessionCategory(bool); |
104 | ExceptionOr<void> setCustomPasteboardDataEnabled(bool); |
105 | ExceptionOr<void> setIncompleteImageBorderEnabled(bool); |
106 | ExceptionOr<void> setShouldDispatchSyntheticMouseEventsWhenModifyingSelection(bool); |
107 | |
108 | using FrameFlatteningValue = FrameFlattening; |
109 | ExceptionOr<void> setFrameFlattening(FrameFlatteningValue); |
110 | |
111 | static void setAllowsAnySSLCertificate(bool); |
112 | |
113 | ExceptionOr<bool> deferredCSSParserEnabled(); |
114 | ExceptionOr<void> setDeferredCSSParserEnabled(bool); |
115 | |
116 | enum class ForcedAccessibilityValue { System, On, Off }; |
117 | ForcedAccessibilityValue forcedColorsAreInvertedAccessibilityValue() const; |
118 | void setForcedColorsAreInvertedAccessibilityValue(ForcedAccessibilityValue); |
119 | ForcedAccessibilityValue forcedDisplayIsMonochromeAccessibilityValue() const; |
120 | void setForcedDisplayIsMonochromeAccessibilityValue(ForcedAccessibilityValue); |
121 | ForcedAccessibilityValue forcedPrefersReducedMotionAccessibilityValue() const; |
122 | void setForcedPrefersReducedMotionAccessibilityValue(ForcedAccessibilityValue); |
123 | |
124 | // RuntimeEnabledFeatures. |
125 | static void setIndexedDBWorkersEnabled(bool); |
126 | static void setWebGL2Enabled(bool); |
127 | static void setWebGPUEnabled(bool); |
128 | static void setWebVREnabled(bool); |
129 | static void setScreenCaptureEnabled(bool); |
130 | |
131 | static bool webAnimationsCSSIntegrationEnabled(); |
132 | |
133 | void setShouldDeactivateAudioSession(bool); |
134 | |
135 | private: |
136 | explicit InternalSettings(Page*); |
137 | |
138 | Settings& settings() const; |
139 | static const char* supplementName(); |
140 | |
141 | void setUseDarkAppearanceInternal(bool); |
142 | |
143 | class Backup { |
144 | public: |
145 | explicit Backup(Settings&); |
146 | void restoreTo(Settings&); |
147 | |
148 | EditingBehaviorType m_originalEditingBehavior; |
149 | |
150 | // Initially empty, only used if changed by a test. |
151 | ScriptFontFamilyMap m_standardFontFamilies; |
152 | ScriptFontFamilyMap m_fixedFontFamilies; |
153 | ScriptFontFamilyMap m_serifFontFamilies; |
154 | ScriptFontFamilyMap m_sansSerifFontFamilies; |
155 | ScriptFontFamilyMap m_cursiveFontFamilies; |
156 | ScriptFontFamilyMap m_fantasyFontFamilies; |
157 | ScriptFontFamilyMap m_pictographFontFamilies; |
158 | |
159 | #if ENABLE(TEXT_AUTOSIZING) |
160 | bool m_originalTextAutosizingEnabled; |
161 | IntSize m_originalTextAutosizingWindowSizeOverride; |
162 | bool m_originalTextAutosizingUsesIdempotentMode; |
163 | #endif |
164 | |
165 | String m_originalMediaTypeOverride; |
166 | bool m_originalCanvasUsesAcceleratedDrawing; |
167 | bool m_originalMockScrollbarsEnabled; |
168 | bool m_originalUsesOverlayScrollbars; |
169 | bool m_imagesEnabled; |
170 | bool m_preferMIMETypeForImages; |
171 | Seconds m_minimumDOMTimerInterval; |
172 | #if ENABLE(VIDEO_TRACK) |
173 | bool m_shouldDisplaySubtitles; |
174 | bool m_shouldDisplayCaptions; |
175 | bool m_shouldDisplayTextDescriptions; |
176 | #endif |
177 | String m_defaultVideoPosterURL; |
178 | bool m_forcePendingWebGLPolicy; |
179 | Seconds m_originalTimeWithoutMouseMovementBeforeHidingControls; |
180 | bool m_useLegacyBackgroundSizeShorthandBehavior; |
181 | bool m_autoscrollForDragAndDropEnabled; |
182 | bool m_quickTimePluginReplacementEnabled; |
183 | bool m_youTubeFlashPluginReplacementEnabled; |
184 | bool m_shouldConvertPositionStyleOnCopy; |
185 | bool m_fontFallbackPrefersPictographs; |
186 | bool m_shouldIgnoreFontLoadCompletions; |
187 | bool m_backgroundShouldExtendBeyondPage; |
188 | SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy; |
189 | bool m_scrollingTreeIncludesFrames; |
190 | #if ENABLE(TOUCH_EVENTS) |
191 | bool m_touchEventEmulationEnabled; |
192 | #endif |
193 | #if ENABLE(WIRELESS_PLAYBACK_TARGET) |
194 | bool m_allowsAirPlayForMediaPlayback; |
195 | #endif |
196 | bool m_allowsInlineMediaPlayback; |
197 | bool m_allowsInlineMediaPlaybackAfterFullscreen; |
198 | bool m_inlineMediaPlaybackRequiresPlaysInlineAttribute; |
199 | bool m_deferredCSSParserEnabled; |
200 | bool m_inputEventsEnabled; |
201 | bool m_incompleteImageBorderEnabled; |
202 | bool m_shouldDispatchSyntheticMouseEventsWhenModifyingSelection; |
203 | bool m_shouldDeactivateAudioSession; |
204 | UserInterfaceDirectionPolicy m_userInterfaceDirectionPolicy; |
205 | TextDirection m_systemLayoutDirection; |
206 | PDFImageCachingPolicy m_pdfImageCachingPolicy; |
207 | Settings::ForcedAccessibilityValue m_forcedColorsAreInvertedAccessibilityValue; |
208 | Settings::ForcedAccessibilityValue m_forcedDisplayIsMonochromeAccessibilityValue; |
209 | Settings::ForcedAccessibilityValue m_forcedPrefersReducedMotionAccessibilityValue; |
210 | Settings::FontLoadTimingOverride m_fontLoadTimingOverride; |
211 | FrameFlattening m_frameFlattening; |
212 | |
213 | // Runtime enabled settings. |
214 | bool m_indexedDBWorkersEnabled; |
215 | bool m_webGL2Enabled; |
216 | bool m_webVREnabled; |
217 | bool m_setScreenCaptureEnabled; |
218 | |
219 | bool m_shouldMockBoldSystemFontForAccessibility; |
220 | #if USE(AUDIO_SESSION) |
221 | bool m_shouldManageAudioSessionCategory; |
222 | #endif |
223 | bool m_customPasteboardDataEnabled; |
224 | }; |
225 | |
226 | Page* m_page; |
227 | Backup m_backup; |
228 | }; |
229 | |
230 | } // namespace WebCore |
231 | |