Fix incorrect assertion in operationRegExpExecNonGlobalOrSticky().
[WebKit-https.git] / Source / WebCore / testing / InternalSettings.h
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/AtomStringHash.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     ExceptionOr<void> setShouldDispatchSyntheticMouseOutAfterSyntheticClick(bool);
108     ExceptionOr<void> setAnimatedImageDebugCanvasDrawingEnabled(bool);
109
110     using FrameFlatteningValue = FrameFlattening;
111     ExceptionOr<void> setFrameFlattening(FrameFlatteningValue);
112     
113     static void setAllowsAnySSLCertificate(bool);
114
115     ExceptionOr<bool> deferredCSSParserEnabled();
116     ExceptionOr<void> setDeferredCSSParserEnabled(bool);
117
118     enum class ForcedAccessibilityValue { System, On, Off };
119     ForcedAccessibilityValue forcedColorsAreInvertedAccessibilityValue() const;
120     void setForcedColorsAreInvertedAccessibilityValue(ForcedAccessibilityValue);
121     ForcedAccessibilityValue forcedDisplayIsMonochromeAccessibilityValue() const;
122     void setForcedDisplayIsMonochromeAccessibilityValue(ForcedAccessibilityValue);
123     ForcedAccessibilityValue forcedPrefersReducedMotionAccessibilityValue() const;
124     void setForcedPrefersReducedMotionAccessibilityValue(ForcedAccessibilityValue);
125
126     // RuntimeEnabledFeatures.
127     static void setIndexedDBWorkersEnabled(bool);
128     static void setWebGL2Enabled(bool);
129     static void setWebGPUEnabled(bool);
130     static void setWebVREnabled(bool);
131     static void setPictureInPictureAPIEnabled(bool);
132     static void setScreenCaptureEnabled(bool);
133
134     static bool webAnimationsCSSIntegrationEnabled();
135
136     void setShouldDeactivateAudioSession(bool);
137
138 private:
139     explicit InternalSettings(Page*);
140
141     Settings& settings() const;
142     static const char* supplementName();
143
144     void setUseDarkAppearanceInternal(bool);
145
146     class Backup {
147     public:
148         explicit Backup(Settings&);
149         void restoreTo(Settings&);
150
151         EditingBehaviorType m_originalEditingBehavior;
152
153         // Initially empty, only used if changed by a test.
154         ScriptFontFamilyMap m_standardFontFamilies;
155         ScriptFontFamilyMap m_fixedFontFamilies;
156         ScriptFontFamilyMap m_serifFontFamilies;
157         ScriptFontFamilyMap m_sansSerifFontFamilies;
158         ScriptFontFamilyMap m_cursiveFontFamilies;
159         ScriptFontFamilyMap m_fantasyFontFamilies;
160         ScriptFontFamilyMap m_pictographFontFamilies;
161
162 #if ENABLE(TEXT_AUTOSIZING)
163         bool m_originalTextAutosizingEnabled;
164         IntSize m_originalTextAutosizingWindowSizeOverride;
165         bool m_originalTextAutosizingUsesIdempotentMode;
166 #endif
167
168         String m_originalMediaTypeOverride;
169         bool m_originalCanvasUsesAcceleratedDrawing;
170         bool m_originalMockScrollbarsEnabled;
171         bool m_originalUsesOverlayScrollbars;
172         bool m_imagesEnabled;
173         bool m_preferMIMETypeForImages;
174         Seconds m_minimumDOMTimerInterval;
175 #if ENABLE(VIDEO_TRACK)
176         bool m_shouldDisplaySubtitles;
177         bool m_shouldDisplayCaptions;
178         bool m_shouldDisplayTextDescriptions;
179 #endif
180         String m_defaultVideoPosterURL;
181         bool m_forcePendingWebGLPolicy;
182         Seconds m_originalTimeWithoutMouseMovementBeforeHidingControls;
183         bool m_useLegacyBackgroundSizeShorthandBehavior;
184         bool m_autoscrollForDragAndDropEnabled;
185         bool m_quickTimePluginReplacementEnabled;
186         bool m_youTubeFlashPluginReplacementEnabled;
187         bool m_shouldConvertPositionStyleOnCopy;
188         bool m_fontFallbackPrefersPictographs;
189         bool m_shouldIgnoreFontLoadCompletions;
190         bool m_backgroundShouldExtendBeyondPage;
191         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
192         bool m_scrollingTreeIncludesFrames;
193 #if ENABLE(TOUCH_EVENTS)
194         bool m_touchEventEmulationEnabled;
195 #endif
196 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
197         bool m_allowsAirPlayForMediaPlayback;
198 #endif
199         bool m_allowsInlineMediaPlayback;
200         bool m_allowsInlineMediaPlaybackAfterFullscreen;
201         bool m_inlineMediaPlaybackRequiresPlaysInlineAttribute;
202         bool m_deferredCSSParserEnabled;
203         bool m_inputEventsEnabled;
204         bool m_incompleteImageBorderEnabled;
205         bool m_shouldDispatchSyntheticMouseEventsWhenModifyingSelection;
206         bool m_shouldDispatchSyntheticMouseOutAfterSyntheticClick { false };
207         bool m_shouldDeactivateAudioSession;
208         bool m_animatedImageDebugCanvasDrawingEnabled;
209         UserInterfaceDirectionPolicy m_userInterfaceDirectionPolicy;
210         TextDirection m_systemLayoutDirection;
211         PDFImageCachingPolicy m_pdfImageCachingPolicy;
212         Settings::ForcedAccessibilityValue m_forcedColorsAreInvertedAccessibilityValue;
213         Settings::ForcedAccessibilityValue m_forcedDisplayIsMonochromeAccessibilityValue;
214         Settings::ForcedAccessibilityValue m_forcedPrefersReducedMotionAccessibilityValue;
215         Settings::FontLoadTimingOverride m_fontLoadTimingOverride;
216         FrameFlattening m_frameFlattening;
217
218         // Runtime enabled settings.
219         bool m_indexedDBWorkersEnabled;
220         bool m_webGL2Enabled;
221         bool m_webVREnabled;
222         bool m_setScreenCaptureEnabled;
223         
224         bool m_shouldMockBoldSystemFontForAccessibility;
225 #if USE(AUDIO_SESSION)
226         bool m_shouldManageAudioSessionCategory;
227 #endif
228         bool m_customPasteboardDataEnabled;
229     };
230
231     Page* m_page;
232     Backup m_backup;
233 };
234
235 } // namespace WebCore