Don't invert text color for selections in light mode.
[WebKit-https.git] / Source / WebCore / rendering / RenderTheme.h
1 /*
2  * Copyright (C) 2005-2017 Apple Inc. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #pragma once
22
23 #include "ColorHash.h"
24 #include "ControlStates.h"
25 #include "PaintInfo.h"
26 #include "PopupMenuStyle.h"
27 #include "ScrollTypes.h"
28 #include "StyleColor.h"
29 #include "ThemeTypes.h"
30 #include <wtf/HashMap.h>
31
32 namespace WebCore {
33
34 class BorderData;
35 class Element;
36 class FileList;
37 class FillLayer;
38 class HTMLInputElement;
39 class Icon;
40 class RenderAttachment;
41 class RenderBox;
42 class RenderMeter;
43 class RenderObject;
44 class RenderProgress;
45 class RenderStyle;
46 class StyleResolver;
47
48 class RenderTheme {
49 protected:
50     RenderTheme();
51
52     virtual ~RenderTheme() = default;
53
54 public:
55     // This function is to be implemented in platform-specific theme implementations to hand back the
56     // appropriate platform theme.
57     WEBCORE_EXPORT static RenderTheme& singleton();
58
59     virtual void purgeCaches();
60
61     // This method is called whenever style has been computed for an element and the appearance
62     // property has been set to a value other than "none".  The theme should map in all of the appropriate
63     // metrics and defaults given the contents of the style.  This includes sophisticated operations like
64     // selection of control size based off the font, the disabling of appearance when certain other properties like
65     // "border" are set, or if the appearance is not supported by the theme.
66     void adjustStyle(StyleResolver&, RenderStyle&, const Element*,  bool UAHasAppearance, const BorderData&, const FillLayer&, const Color& backgroundColor);
67
68     // This method is called to paint the widget as a background of the RenderObject.  A widget's foreground, e.g., the
69     // text of a button, is always rendered by the engine itself.  The boolean return value indicates
70     // whether the CSS border/background should also be painted.
71     bool paint(const RenderBox&, ControlStates&, const PaintInfo&, const LayoutRect&);
72     bool paintBorderOnly(const RenderBox&, const PaintInfo&, const LayoutRect&);
73     bool paintDecorations(const RenderBox&, const PaintInfo&, const LayoutRect&);
74
75     // The remaining methods should be implemented by the platform-specific portion of the theme, e.g.,
76     // RenderThemeMac.cpp for Mac OS X.
77
78     // These methods return the theme's extra style sheets rules, to let each platform
79     // adjust the default CSS rules in html.css, quirks.css, mediaControls.css, or plugIns.css
80     virtual String extraDefaultStyleSheet() { return String(); }
81     virtual String extraQuirksStyleSheet() { return String(); }
82     virtual String extraPlugInsStyleSheet() { return String(); }
83 #if ENABLE(VIDEO)
84     virtual String mediaControlsStyleSheet() { return String(); }
85     virtual String modernMediaControlsStyleSheet() { return String(); }
86     virtual String extraMediaControlsStyleSheet() { return String(); }
87     virtual String mediaControlsScript() { return String(); }
88     virtual String mediaControlsBase64StringForIconNameAndType(const String&, const String&) { return String(); }
89     virtual String mediaControlsFormattedStringForDuration(double) { return String(); }
90 #endif
91 #if ENABLE(FULLSCREEN_API)
92     virtual String extraFullScreenStyleSheet() { return String(); }
93 #endif
94 #if ENABLE(SERVICE_CONTROLS)
95     virtual String imageControlsStyleSheet() const { return String(); }
96 #endif
97
98     // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
99     // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
100     // controls that need to do this.
101     virtual int baselinePosition(const RenderBox&) const;
102
103     // A method for asking if a control is a container or not.  Leaf controls have to have some special behavior (like
104     // the baseline position API above).
105     bool isControlContainer(ControlPart) const;
106
107     // A method asking if the control changes its tint when the window has focus or not.
108     virtual bool controlSupportsTints(const RenderObject&) const { return false; }
109
110     // Whether or not the control has been styled enough by the author to disable the native appearance.
111     virtual bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer&, const Color& backgroundColor) const;
112
113     // A general method asking if any control tinting is supported at all.
114     virtual bool supportsControlTints() const { return false; }
115
116     // Some controls may spill out of their containers (e.g., the check on an OS X checkbox).  When these controls repaint,
117     // the theme needs to communicate this inflated rect to the engine so that it can invalidate the whole control.
118     virtual void adjustRepaintRect(const RenderObject&, FloatRect&);
119
120     // This method is called whenever a relevant state changes on a particular themed object, e.g., the mouse becomes pressed
121     // or a control becomes disabled.
122     virtual bool stateChanged(const RenderObject&, ControlStates::States) const;
123
124     // This method is called whenever the theme changes on the system in order to flush cached resources from the
125     // old theme.
126     virtual void themeChanged() { }
127
128     // A method asking if the theme is able to draw the focus ring.
129     virtual bool supportsFocusRing(const RenderStyle&) const;
130
131     // A method asking if the theme's controls actually care about redrawing when hovered.
132     virtual bool supportsHover(const RenderStyle&) const { return false; }
133
134     // A method asking if the platform is able to show datalist suggestions for a given input type.
135     virtual bool supportsDataListUI(const AtomicString&) const { return false; }
136
137     // Text selection colors.
138     Color activeSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
139     Color inactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
140     Color activeSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
141     Color inactiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
142
143     // List box selection colors
144     Color activeListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
145     Color activeListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
146     Color inactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
147     Color inactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
148
149     // Highlighting colors for search matches.
150     Color activeTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
151     Color inactiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
152
153     virtual Color disabledTextColor(const Color& textColor, const Color& backgroundColor) const;
154
155     static Color focusRingColor(OptionSet<StyleColor::Options>);
156     virtual Color platformFocusRingColor(OptionSet<StyleColor::Options>) const { return Color(0, 0, 0); }
157     static void setCustomFocusRingColor(const Color&);
158     static float platformFocusRingWidth() { return 3; }
159     static float platformFocusRingOffset(float outlineWidth) { return std::max<float>(outlineWidth - platformFocusRingWidth(), 0); }
160 #if ENABLE(TOUCH_EVENTS)
161     static Color tapHighlightColor();
162     virtual Color platformTapHighlightColor() const;
163 #endif
164     virtual void platformColorsDidChange();
165
166     virtual Seconds caretBlinkInterval() const { return 500_ms; }
167
168     // System fonts and colors for CSS.
169     void systemFont(CSSValueID, FontCascadeDescription&) const;
170     virtual Color systemColor(CSSValueID, OptionSet<StyleColor::Options>) const;
171
172     virtual int minimumMenuListSize(const RenderStyle&) const { return 0; }
173
174     virtual void adjustSliderThumbSize(RenderStyle&, const Element*) const;
175
176     virtual LengthBox popupInternalPaddingBox(const RenderStyle&) const { return { 0, 0, 0, 0 }; }
177     virtual bool popupOptionSupportsTextIndent() const { return false; }
178     virtual PopupMenuStyle::PopupMenuSize popupMenuSize(const RenderStyle&, IntRect&) const { return PopupMenuStyle::PopupMenuSizeNormal; }
179
180     virtual ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) { return RegularScrollbar; }
181
182     // Returns the repeat interval of the animation for the progress bar.
183     virtual Seconds animationRepeatIntervalForProgressBar(RenderProgress&) const;
184     // Returns the duration of the animation for the progress bar.
185     virtual Seconds animationDurationForProgressBar(RenderProgress&) const;
186     virtual IntRect progressBarRectForBounds(const RenderObject&, const IntRect&) const;
187
188 #if ENABLE(VIDEO)
189     // Media controls
190     virtual bool supportsClosedCaptioning() const { return false; }
191     virtual bool hasOwnDisabledStateHandlingFor(ControlPart) const { return false; }
192     virtual bool usesMediaControlStatusDisplay() { return false; }
193     virtual bool usesMediaControlVolumeSlider() const { return true; }
194     virtual bool usesVerticalVolumeSlider() const { return true; }
195     virtual double mediaControlsFadeInDuration() { return 0.1; }
196     virtual Seconds mediaControlsFadeOutDuration() { return 300_ms; }
197     virtual String formatMediaControlsTime(float time) const;
198     virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
199     virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const;
200     
201     // Returns the media volume slider container's offset from the mute button.
202     virtual LayoutPoint volumeSliderOffsetFromMuteButton(const RenderBox&, const LayoutSize&) const;
203 #endif
204
205 #if ENABLE(METER_ELEMENT)
206     virtual IntSize meterSizeForBounds(const RenderMeter&, const IntRect&) const;
207     virtual bool supportsMeter(ControlPart) const;
208 #endif
209
210 #if ENABLE(DATALIST_ELEMENT)
211     // Returns the threshold distance for snapping to a slider tick mark.
212     virtual LayoutUnit sliderTickSnappingThreshold() const;
213     // Returns size of one slider tick mark for a horizontal track.
214     // For vertical tracks we rotate it and use it. i.e. Width is always length along the track.
215     virtual IntSize sliderTickSize() const = 0;
216     // Returns the distance of slider tick origin from the slider track center.
217     virtual int sliderTickOffsetFromTrackCenter() const = 0;
218     void paintSliderTicks(const RenderObject&, const PaintInfo&, const IntRect&);
219 #endif
220
221     virtual bool shouldHaveSpinButton(const HTMLInputElement&) const;
222     virtual bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const;
223
224     // Functions for <select> elements.
225     virtual bool delegatesMenuListRendering() const { return false; }
226     virtual bool popsMenuByArrowKeys() const { return false; }
227     virtual bool popsMenuBySpaceOrReturn() const { return false; }
228
229     virtual String fileListDefaultLabel(bool multipleFilesAllowed) const;
230     virtual String fileListNameForWidth(const FileList*, const FontCascade&, int width, bool multipleFilesAllowed) const;
231
232     enum FileUploadDecorations { SingleFile, MultipleFiles };
233     virtual bool paintFileUploadIconDecorations(const RenderObject& /*inputRenderer*/, const RenderObject& /*buttonRenderer*/, const PaintInfo&, const IntRect&, Icon*, FileUploadDecorations) { return true; }
234
235 #if ENABLE(SERVICE_CONTROLS)
236     virtual IntSize imageControlsButtonSize(const RenderObject&) const { return IntSize(); }
237     virtual IntSize imageControlsButtonPositionOffset() const { return IntSize(); }
238 #endif
239
240 #if ENABLE(ATTACHMENT_ELEMENT)
241     virtual LayoutSize attachmentIntrinsicSize(const RenderAttachment&) const { return LayoutSize(); }
242     virtual int attachmentBaseline(const RenderAttachment&) const { return -1; }
243 #endif
244
245     enum class InnerSpinButtonLayout { Vertical, HorizontalUpLeft, HorizontalUpRight };
246     virtual InnerSpinButtonLayout innerSpinButtonLayout(const RenderObject&) const { return InnerSpinButtonLayout::Vertical; }
247
248     virtual bool shouldMockBoldSystemFontForAccessibility() const { return false; }
249     virtual void setShouldMockBoldSystemFontForAccessibility(bool) { }
250
251 #if USE(SYSTEM_PREVIEW)
252     virtual void paintSystemPreviewBadge(Image&, const PaintInfo&, const FloatRect&);
253 #endif
254
255 protected:
256     virtual FontCascadeDescription& cachedSystemFontDescription(CSSValueID systemFontID) const;
257     virtual void updateCachedSystemFontDescription(CSSValueID systemFontID, FontCascadeDescription&) const = 0;
258
259     // The platform selection color.
260     virtual Color platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
261     virtual Color platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
262     virtual Color platformActiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
263     virtual Color platformInactiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
264
265     virtual Color platformActiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
266     virtual Color platformInactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
267     virtual Color platformActiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
268     virtual Color platformInactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
269
270     // The platform highlighting colors for search matches.
271     virtual Color platformActiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
272     virtual Color platformInactiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
273
274     virtual bool supportsSelectionForegroundColors(OptionSet<StyleColor::Options>) const { return true; }
275     virtual bool supportsListBoxSelectionForegroundColors(OptionSet<StyleColor::Options>) const { return true; }
276
277 #if !USE(NEW_THEME)
278     // Methods for each appearance value.
279     virtual void adjustCheckboxStyle(StyleResolver&, RenderStyle&, const Element*) const;
280     virtual bool paintCheckbox(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
281     virtual void setCheckboxSize(RenderStyle&) const { }
282
283     virtual void adjustRadioStyle(StyleResolver&, RenderStyle&, const Element*) const;
284     virtual bool paintRadio(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
285     virtual void setRadioSize(RenderStyle&) const { }
286
287     virtual void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
288     virtual bool paintButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
289     virtual void setButtonSize(RenderStyle&) const { }
290
291     virtual void adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
292     virtual bool paintInnerSpinButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
293 #endif
294
295     virtual bool paintCheckboxDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
296     virtual bool paintRadioDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
297     virtual bool paintButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
298
299     virtual void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const;
300     virtual bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
301     virtual bool paintTextFieldDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
302
303     virtual void adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const;
304     virtual bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
305     virtual bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
306
307     virtual void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const;
308     virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
309     virtual bool paintMenuListDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
310
311     virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
312     virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) { return true; }
313
314     virtual bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
315     virtual bool paintSquareButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
316
317 #if ENABLE(METER_ELEMENT)
318     virtual void adjustMeterStyle(StyleResolver&, RenderStyle&, const Element*) const;
319     virtual bool paintMeter(const RenderObject&, const PaintInfo&, const IntRect&);
320 #endif
321
322     virtual void adjustCapsLockIndicatorStyle(StyleResolver&, RenderStyle&, const Element*) const;
323     virtual bool paintCapsLockIndicator(const RenderObject&, const PaintInfo&, const IntRect&);
324
325 #if ENABLE(APPLE_PAY)
326     virtual void adjustApplePayButtonStyle(StyleResolver&, RenderStyle&, const Element*) const { }
327     virtual bool paintApplePayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
328 #endif
329
330 #if ENABLE(ATTACHMENT_ELEMENT)
331     virtual void adjustAttachmentStyle(StyleResolver&, RenderStyle&, const Element*) const;
332     virtual bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&);
333 #endif
334
335     virtual void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const;
336     virtual bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
337
338     virtual void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const;
339     virtual bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
340
341     virtual void adjustSliderThumbStyle(StyleResolver&, RenderStyle&, const Element*) const;
342     virtual bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
343     virtual bool paintSliderThumbDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
344
345     virtual void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const;
346     virtual bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
347     virtual bool paintSearchFieldDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
348
349     virtual void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
350     virtual bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
351
352     virtual void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const;
353     virtual bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
354
355     virtual void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const;
356     virtual bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
357
358     virtual void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
359     virtual bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
360
361     virtual void adjustMediaControlStyle(StyleResolver&, RenderStyle&, const Element*) const;
362     virtual bool paintMediaFullscreenButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
363     virtual bool paintMediaPlayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
364     virtual bool paintMediaOverlayPlayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
365     virtual bool paintMediaMuteButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
366     virtual bool paintMediaSeekBackButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
367     virtual bool paintMediaSeekForwardButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
368     virtual bool paintMediaSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
369     virtual bool paintMediaSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
370     virtual bool paintMediaVolumeSliderContainer(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
371     virtual bool paintMediaVolumeSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
372     virtual bool paintMediaVolumeSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
373     virtual bool paintMediaRewindButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
374     virtual bool paintMediaReturnToRealtimeButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
375     virtual bool paintMediaToggleClosedCaptionsButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
376     virtual bool paintMediaControlsBackground(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
377     virtual bool paintMediaCurrentTime(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
378     virtual bool paintMediaTimeRemaining(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
379     virtual bool paintMediaFullScreenVolumeSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
380     virtual bool paintMediaFullScreenVolumeSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
381
382     virtual bool paintSnapshottedPluginOverlay(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
383
384 #if ENABLE(SERVICE_CONTROLS)
385     virtual bool paintImageControlsButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
386 #endif
387
388 public:
389     void updateControlStatesForRenderer(const RenderBox&, ControlStates&) const;
390     ControlStates::States extractControlStatesForRenderer(const RenderObject&) const;
391     bool isActive(const RenderObject&) const;
392     bool isChecked(const RenderObject&) const;
393     bool isIndeterminate(const RenderObject&) const;
394     bool isEnabled(const RenderObject&) const;
395     bool isFocused(const RenderObject&) const;
396     bool isPressed(const RenderObject&) const;
397     bool isSpinUpButtonPartPressed(const RenderObject&) const;
398     bool isHovered(const RenderObject&) const;
399     bool isSpinUpButtonPartHovered(const RenderObject&) const;
400     bool isReadOnlyControl(const RenderObject&) const;
401     bool isDefault(const RenderObject&) const;
402
403 protected:
404     struct ColorCache {
405         HashMap<int, Color> systemStyleColors;
406
407         Color systemVisitedLinkColor;
408
409         Color activeSelectionBackgroundColor;
410         Color inactiveSelectionBackgroundColor;
411         Color activeSelectionForegroundColor;
412         Color inactiveSelectionForegroundColor;
413
414         Color activeListBoxSelectionBackgroundColor;
415         Color inactiveListBoxSelectionBackgroundColor;
416         Color activeListBoxSelectionForegroundColor;
417         Color inactiveListBoxSelectionForegroundColor;
418
419         Color activeTextSearchHighlightColor;
420         Color inactiveTextSearchHighlightColor;
421     };
422
423     virtual ColorCache& colorCache(OptionSet<StyleColor::Options>) const { return m_colorCache; }
424
425 private:
426     mutable ColorCache m_colorCache;
427 };
428
429 } // namespace WebCore