Move style adjustment code out of StyleResolver and into a class of its own
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 9 Nov 2019 17:09:02 +0000 (17:09 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 9 Nov 2019 17:09:02 +0000 (17:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=204041

Reviewed by Zalan Bujtas.

Introduce Style::Adjuster.

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* css/StyleResolver.cpp:
(WebCore::StyleResolver::styleForElement):
(WebCore::StyleResolver::styleForKeyframe):
(WebCore::StyleResolver::pseudoStyleForElement):
(WebCore::addIntrinsicMargins): Deleted.
(WebCore::equivalentBlockDisplay): Deleted.
(WebCore::doesNotInheritTextDecoration): Deleted.
(WebCore::isScrollableOverflow): Deleted.
(WebCore::hasEffectiveDisplayNoneForDisplayContents): Deleted.
(WebCore::adjustDisplayContentsStyle): Deleted.
(WebCore::StyleResolver::adjustSVGElementStyle): Deleted.
(WebCore::computeEffectiveTouchActions): Deleted.
(WebCore::hasTextChild): Deleted.
(WebCore::StyleResolver::adjustRenderStyleForTextAutosizing): Deleted.
(WebCore::StyleResolver::adjustRenderStyle): Deleted.
(WebCore::StyleResolver::adjustRenderStyleForSiteSpecificQuirks): Deleted.
* css/StyleResolver.h:
* page/Page.cpp:
(WebCore::Page::recomputeTextAutoSizingInAllFrames):
* rendering/RenderTheme.cpp:
(WebCore::RenderTheme::adjustStyle):

None of this code uses the StyleResolver argument so remove it.

(WebCore::RenderTheme::adjustCheckboxStyle const):
(WebCore::RenderTheme::adjustRadioStyle const):
(WebCore::RenderTheme::adjustButtonStyle const):
(WebCore::RenderTheme::adjustInnerSpinButtonStyle const):
(WebCore::RenderTheme::adjustTextFieldStyle const):
(WebCore::RenderTheme::adjustTextAreaStyle const):
(WebCore::RenderTheme::adjustMenuListStyle const):
(WebCore::RenderTheme::adjustMeterStyle const):
(WebCore::RenderTheme::adjustCapsLockIndicatorStyle const):
(WebCore::RenderTheme::adjustAttachmentStyle const):
(WebCore::RenderTheme::adjustListButtonStyle const):
(WebCore::RenderTheme::adjustProgressBarStyle const):
(WebCore::RenderTheme::adjustMenuListButtonStyle const):
(WebCore::RenderTheme::adjustMediaControlStyle const):
(WebCore::RenderTheme::adjustSliderTrackStyle const):
(WebCore::RenderTheme::adjustSliderThumbStyle const):
(WebCore::RenderTheme::adjustSearchFieldStyle const):
(WebCore::RenderTheme::adjustSearchFieldCancelButtonStyle const):
(WebCore::RenderTheme::adjustSearchFieldDecorationPartStyle const):
(WebCore::RenderTheme::adjustSearchFieldResultsDecorationPartStyle const):
(WebCore::RenderTheme::adjustSearchFieldResultsButtonStyle const):
* rendering/RenderTheme.h:
(WebCore::RenderTheme::adjustApplePayButtonStyle const):
* rendering/RenderThemeCocoa.h:
* rendering/RenderThemeCocoa.mm:
(WebCore::RenderThemeCocoa::adjustApplePayButtonStyle const):
* rendering/RenderThemeGtk.cpp:
(WebCore::RenderThemeGtk::adjustButtonStyle const):
(WebCore::RenderThemeGtk::adjustMenuListStyle const):
(WebCore::RenderThemeGtk::adjustMenuListButtonStyle const):
(WebCore::RenderThemeGtk::adjustTextFieldStyle const):
(WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle const):
(WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationPartStyle const):
(WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle const):
(WebCore::RenderThemeGtk::adjustListButtonStyle const):
(WebCore::RenderThemeGtk::adjustSearchFieldStyle const):
(WebCore::RenderThemeGtk::adjustSliderTrackStyle const):
(WebCore::RenderThemeGtk::adjustSliderThumbStyle const):
(WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle const):
(WebCore::RenderThemeGtk::adjustProgressBarStyle const):
* rendering/RenderThemeGtk.h:
* rendering/RenderThemeIOS.h:
* rendering/RenderThemeIOS.mm:
(WebCore::RenderThemeIOS::adjustCheckboxStyle const):
(WebCore::RenderThemeIOS::adjustRadioStyle const):
(WebCore::RenderThemeIOS::adjustMenuListButtonStyle const):
(WebCore::RenderThemeIOS::adjustSliderTrackStyle const):
(WebCore::RenderThemeIOS::adjustSearchFieldStyle const):
(WebCore::RenderThemeIOS::adjustButtonStyle const):
* rendering/RenderThemeMac.h:
* rendering/RenderThemeMac.mm:
(WebCore::RenderThemeMac::setFontFromControlSize const):
(WebCore::RenderThemeMac::adjustListButtonStyle const):
(WebCore::RenderThemeMac::adjustTextFieldStyle const):
(WebCore::RenderThemeMac::adjustTextAreaStyle const):
(WebCore::RenderThemeMac::adjustProgressBarStyle const):
(WebCore::RenderThemeMac::adjustMenuListStyle const):
(WebCore::RenderThemeMac::adjustMenuListButtonStyle const):
(WebCore::RenderThemeMac::adjustSliderTrackStyle const):
(WebCore::RenderThemeMac::adjustSliderThumbStyle const):
(WebCore::RenderThemeMac::adjustSearchFieldStyle const):
(WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle const):
(WebCore::RenderThemeMac::adjustSearchFieldDecorationPartStyle const):
(WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationPartStyle const):
(WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle const):
* style/StyleAdjuster.cpp: Added.
(WebCore::Style::Adjuster::Adjuster):
(WebCore::Style::addIntrinsicMargins):
(WebCore::Style::equivalentBlockDisplay):
(WebCore::Style::isAtShadowBoundary):
(WebCore::Style::doesNotInheritTextDecoration):
(WebCore::Style::isScrollableOverflow):
(WebCore::Style::computeEffectiveTouchActions):
(WebCore::Style::Adjuster::adjust const):
(WebCore::Style::hasEffectiveDisplayNoneForDisplayContents):
(WebCore::Style::Adjuster::adjustDisplayContentsStyle const):
(WebCore::Style::Adjuster::adjustSVGElementStyle):
(WebCore::Style::Adjuster::adjustForSiteSpecificQuirks const):
(WebCore::Style::hasTextChild):
(WebCore::Style::Adjuster::adjustForTextAutosizing):
* style/StyleAdjuster.h: Added.
* svg/SVGElement.cpp:
(WebCore::SVGElement::resolveCustomStyle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252308 268f45cc-cd09-0410-ab3c-d52691b4dbfc

21 files changed:
Source/WebCore/ChangeLog
Source/WebCore/Sources.txt
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/css/StyleResolver.cpp
Source/WebCore/css/StyleResolver.h
Source/WebCore/page/Page.cpp
Source/WebCore/rendering/RenderTheme.cpp
Source/WebCore/rendering/RenderTheme.h
Source/WebCore/rendering/RenderThemeCocoa.h
Source/WebCore/rendering/RenderThemeCocoa.mm
Source/WebCore/rendering/RenderThemeGtk.cpp
Source/WebCore/rendering/RenderThemeGtk.h
Source/WebCore/rendering/RenderThemeIOS.h
Source/WebCore/rendering/RenderThemeIOS.mm
Source/WebCore/rendering/RenderThemeMac.h
Source/WebCore/rendering/RenderThemeMac.mm
Source/WebCore/rendering/RenderThemeWin.cpp
Source/WebCore/rendering/RenderThemeWin.h
Source/WebCore/style/StyleAdjuster.cpp [new file with mode: 0644]
Source/WebCore/style/StyleAdjuster.h [new file with mode: 0644]
Source/WebCore/svg/SVGElement.cpp

index 39d8965..cfb51a0 100644 (file)
@@ -1,3 +1,122 @@
+2019-11-09  Antti Koivisto  <antti@apple.com>
+
+        Move style adjustment code out of StyleResolver and into a class of its own
+        https://bugs.webkit.org/show_bug.cgi?id=204041
+
+        Reviewed by Zalan Bujtas.
+
+        Introduce Style::Adjuster.
+
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::styleForElement):
+        (WebCore::StyleResolver::styleForKeyframe):
+        (WebCore::StyleResolver::pseudoStyleForElement):
+        (WebCore::addIntrinsicMargins): Deleted.
+        (WebCore::equivalentBlockDisplay): Deleted.
+        (WebCore::doesNotInheritTextDecoration): Deleted.
+        (WebCore::isScrollableOverflow): Deleted.
+        (WebCore::hasEffectiveDisplayNoneForDisplayContents): Deleted.
+        (WebCore::adjustDisplayContentsStyle): Deleted.
+        (WebCore::StyleResolver::adjustSVGElementStyle): Deleted.
+        (WebCore::computeEffectiveTouchActions): Deleted.
+        (WebCore::hasTextChild): Deleted.
+        (WebCore::StyleResolver::adjustRenderStyleForTextAutosizing): Deleted.
+        (WebCore::StyleResolver::adjustRenderStyle): Deleted.
+        (WebCore::StyleResolver::adjustRenderStyleForSiteSpecificQuirks): Deleted.
+        * css/StyleResolver.h:
+        * page/Page.cpp:
+        (WebCore::Page::recomputeTextAutoSizingInAllFrames):
+        * rendering/RenderTheme.cpp:
+        (WebCore::RenderTheme::adjustStyle):
+
+        None of this code uses the StyleResolver argument so remove it.
+
+        (WebCore::RenderTheme::adjustCheckboxStyle const):
+        (WebCore::RenderTheme::adjustRadioStyle const):
+        (WebCore::RenderTheme::adjustButtonStyle const):
+        (WebCore::RenderTheme::adjustInnerSpinButtonStyle const):
+        (WebCore::RenderTheme::adjustTextFieldStyle const):
+        (WebCore::RenderTheme::adjustTextAreaStyle const):
+        (WebCore::RenderTheme::adjustMenuListStyle const):
+        (WebCore::RenderTheme::adjustMeterStyle const):
+        (WebCore::RenderTheme::adjustCapsLockIndicatorStyle const):
+        (WebCore::RenderTheme::adjustAttachmentStyle const):
+        (WebCore::RenderTheme::adjustListButtonStyle const):
+        (WebCore::RenderTheme::adjustProgressBarStyle const):
+        (WebCore::RenderTheme::adjustMenuListButtonStyle const):
+        (WebCore::RenderTheme::adjustMediaControlStyle const):
+        (WebCore::RenderTheme::adjustSliderTrackStyle const):
+        (WebCore::RenderTheme::adjustSliderThumbStyle const):
+        (WebCore::RenderTheme::adjustSearchFieldStyle const):
+        (WebCore::RenderTheme::adjustSearchFieldCancelButtonStyle const):
+        (WebCore::RenderTheme::adjustSearchFieldDecorationPartStyle const):
+        (WebCore::RenderTheme::adjustSearchFieldResultsDecorationPartStyle const):
+        (WebCore::RenderTheme::adjustSearchFieldResultsButtonStyle const):
+        * rendering/RenderTheme.h:
+        (WebCore::RenderTheme::adjustApplePayButtonStyle const):
+        * rendering/RenderThemeCocoa.h:
+        * rendering/RenderThemeCocoa.mm:
+        (WebCore::RenderThemeCocoa::adjustApplePayButtonStyle const):
+        * rendering/RenderThemeGtk.cpp:
+        (WebCore::RenderThemeGtk::adjustButtonStyle const):
+        (WebCore::RenderThemeGtk::adjustMenuListStyle const):
+        (WebCore::RenderThemeGtk::adjustMenuListButtonStyle const):
+        (WebCore::RenderThemeGtk::adjustTextFieldStyle const):
+        (WebCore::RenderThemeGtk::adjustSearchFieldResultsButtonStyle const):
+        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationPartStyle const):
+        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle const):
+        (WebCore::RenderThemeGtk::adjustListButtonStyle const):
+        (WebCore::RenderThemeGtk::adjustSearchFieldStyle const):
+        (WebCore::RenderThemeGtk::adjustSliderTrackStyle const):
+        (WebCore::RenderThemeGtk::adjustSliderThumbStyle const):
+        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle const):
+        (WebCore::RenderThemeGtk::adjustProgressBarStyle const):
+        * rendering/RenderThemeGtk.h:
+        * rendering/RenderThemeIOS.h:
+        * rendering/RenderThemeIOS.mm:
+        (WebCore::RenderThemeIOS::adjustCheckboxStyle const):
+        (WebCore::RenderThemeIOS::adjustRadioStyle const):
+        (WebCore::RenderThemeIOS::adjustMenuListButtonStyle const):
+        (WebCore::RenderThemeIOS::adjustSliderTrackStyle const):
+        (WebCore::RenderThemeIOS::adjustSearchFieldStyle const):
+        (WebCore::RenderThemeIOS::adjustButtonStyle const):
+        * rendering/RenderThemeMac.h:
+        * rendering/RenderThemeMac.mm:
+        (WebCore::RenderThemeMac::setFontFromControlSize const):
+        (WebCore::RenderThemeMac::adjustListButtonStyle const):
+        (WebCore::RenderThemeMac::adjustTextFieldStyle const):
+        (WebCore::RenderThemeMac::adjustTextAreaStyle const):
+        (WebCore::RenderThemeMac::adjustProgressBarStyle const):
+        (WebCore::RenderThemeMac::adjustMenuListStyle const):
+        (WebCore::RenderThemeMac::adjustMenuListButtonStyle const):
+        (WebCore::RenderThemeMac::adjustSliderTrackStyle const):
+        (WebCore::RenderThemeMac::adjustSliderThumbStyle const):
+        (WebCore::RenderThemeMac::adjustSearchFieldStyle const):
+        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle const):
+        (WebCore::RenderThemeMac::adjustSearchFieldDecorationPartStyle const):
+        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationPartStyle const):
+        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle const):
+        * style/StyleAdjuster.cpp: Added.
+        (WebCore::Style::Adjuster::Adjuster):
+        (WebCore::Style::addIntrinsicMargins):
+        (WebCore::Style::equivalentBlockDisplay):
+        (WebCore::Style::isAtShadowBoundary):
+        (WebCore::Style::doesNotInheritTextDecoration):
+        (WebCore::Style::isScrollableOverflow):
+        (WebCore::Style::computeEffectiveTouchActions):
+        (WebCore::Style::Adjuster::adjust const):
+        (WebCore::Style::hasEffectiveDisplayNoneForDisplayContents):
+        (WebCore::Style::Adjuster::adjustDisplayContentsStyle const):
+        (WebCore::Style::Adjuster::adjustSVGElementStyle):
+        (WebCore::Style::Adjuster::adjustForSiteSpecificQuirks const):
+        (WebCore::Style::hasTextChild):
+        (WebCore::Style::Adjuster::adjustForTextAutosizing):
+        * style/StyleAdjuster.h: Added.
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::resolveCustomStyle):
+
 2019-11-08  Antoine Quint  <graouts@apple.com>
 
         [Web Animations] Optimize animation resolution to not re-compute whether effects only contain accelerated animation properties
index 9c639bc..26812ae 100644 (file)
@@ -2349,6 +2349,7 @@ style/IdChangeInvalidation.cpp
 style/InlineTextBoxStyle.cpp
 style/MatchedDeclarationsCache.cpp
 style/PropertyCascade.cpp
+style/StyleAdjuster.cpp
 style/StyleBuilder.cpp
 style/StyleBuilderState.cpp
 style/StyleChange.cpp
index afadee5..7104321 100644 (file)
                E44FA1851BCA6B5A0091B6EF /* ComposedTreeIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E44FA1841BCA6B5A0091B6EF /* ComposedTreeIterator.h */; };
                E45322AC140CE267005A0F92 /* SelectorQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = E45322AA140CE267005A0F92 /* SelectorQuery.h */; };
                E45BA6AA2374926C004DFC07 /* MatchedDeclarationsCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E45BA6A82374926B004DFC07 /* MatchedDeclarationsCache.h */; };
+               E45BA6B6237622A3004DFC07 /* StyleAdjuster.h in Headers */ = {isa = PBXBuildFile; fileRef = E45BA6B52376229F004DFC07 /* StyleAdjuster.h */; };
                E4605FEC2166480900E53046 /* PrewarmInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = E4605FEA2166480800E53046 /* PrewarmInformation.h */; settings = {ATTRIBUTES = (Private, ); }; };
                E461802D1C8DD2900026C02C /* StyleRelations.h in Headers */ = {isa = PBXBuildFile; fileRef = E461802C1C8DD2900026C02C /* StyleRelations.h */; };
                E461D65F1BB0C80D00CB5645 /* StyleScope.h in Headers */ = {isa = PBXBuildFile; fileRef = E461D65E1BB0C80D00CB5645 /* StyleScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
                E45390AD0EAFF4B5003695C8 /* SystemMemoryIOS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SystemMemoryIOS.cpp; sourceTree = "<group>"; };
                E45BA6A82374926B004DFC07 /* MatchedDeclarationsCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MatchedDeclarationsCache.h; sourceTree = "<group>"; };
                E45BA6AB2374927B004DFC07 /* MatchedDeclarationsCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MatchedDeclarationsCache.cpp; sourceTree = "<group>"; };
+               E45BA6B22376227E004DFC07 /* StyleAdjuster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleAdjuster.cpp; sourceTree = "<group>"; };
+               E45BA6B52376229F004DFC07 /* StyleAdjuster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleAdjuster.h; sourceTree = "<group>"; };
                E4605FEA2166480800E53046 /* PrewarmInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrewarmInformation.h; sourceTree = "<group>"; };
                E461802C1C8DD2900026C02C /* StyleRelations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleRelations.h; sourceTree = "<group>"; };
                E461802E1C8DD4D20026C02C /* StyleRelations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleRelations.cpp; sourceTree = "<group>"; };
                                E45BA6A82374926B004DFC07 /* MatchedDeclarationsCache.h */,
                                E4ABABE52361A34200FA4345 /* PropertyCascade.cpp */,
                                E4ABABE22361A32900FA4345 /* PropertyCascade.h */,
+                               E45BA6B22376227E004DFC07 /* StyleAdjuster.cpp */,
+                               E45BA6B52376229F004DFC07 /* StyleAdjuster.h */,
                                E4ABAC07236B018100FA4345 /* StyleBuilder.cpp */,
                                E4ABAC05236B016C00FA4345 /* StyleBuilder.h */,
                                83B9687919F8AB83004EF7AF /* StyleBuilderConverter.h */,
                                5721A98B1ECE57040081295A /* CryptoAlgorithmRsaPssParams.h in Headers */,
                                E1BD331A182D8DDD00C05D9F /* CryptoAlgorithmRSASSA_PKCS1_v1_5.h in Headers */,
                                E125F82C1822CFEC00D84CD9 /* CryptoAlgorithmSHA1.h in Headers */,
+                               E45BA6B6237622A3004DFC07 /* StyleAdjuster.h in Headers */,
                                E19AC3EF1824DC7900349426 /* CryptoAlgorithmSHA224.h in Headers */,
                                E19AC3F11824DC7900349426 /* CryptoAlgorithmSHA256.h in Headers */,
                                E19AC3F31824DC7900349426 /* CryptoAlgorithmSHA384.h in Headers */,
index 6dca902..f413f72 100644 (file)
 #include "Frame.h"
 #include "FrameSelection.h"
 #include "FrameView.h"
-#include "HTMLInputElement.h"
-#include "HTMLMarqueeElement.h"
-#include "HTMLNames.h"
-#include "HTMLSlotElement.h"
-#include "HTMLTableElement.h"
-#include "HTMLTextAreaElement.h"
 #include "InspectorInstrumentation.h"
 #include "KeyframeList.h"
 #include "Logging.h"
-#include "MathMLElement.h"
-#include "MathMLNames.h"
 #include "MediaList.h"
 #include "MediaQueryEvaluator.h"
 #include "NodeRenderStyle.h"
 #include "PageRuleCollector.h"
 #include "Pair.h"
-#include "Quirks.h"
 #include "RenderScrollbar.h"
 #include "RenderStyleConstants.h"
-#include "RenderTheme.h"
 #include "RenderView.h"
 #include "RuleSet.h"
 #include "RuntimeEnabledFeatures.h"
-#include "SVGDocument.h"
 #include "SVGDocumentExtensions.h"
 #include "SVGFontFaceElement.h"
-#include "SVGNames.h"
-#include "SVGURIReference.h"
 #include "Settings.h"
 #include "ShadowRoot.h"
 #include "SharedStringHash.h"
+#include "StyleAdjuster.h"
 #include "StyleBuilder.h"
 #include "StyleFontSizeFunctions.h"
 #include "StyleProperties.h"
@@ -87,7 +75,6 @@
 #include "ViewportStyleResolver.h"
 #include "VisitedLinkState.h"
 #include "WebKitFontFamilyNames.h"
-#include <bitset>
 #include <wtf/Seconds.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/Vector.h>
@@ -275,8 +262,8 @@ ElementStyle StyleResolver::styleForElement(const Element& element, const Render
 
     applyMatchedProperties(collector.matchResult(), element);
 
-    // Clean up our style object's display and text decorations (among other fixups).
-    adjustRenderStyle(*state.style(), *state.parentStyle(), parentBoxStyle, &element, state.userAgentAppearanceStyle());
+    Style::Adjuster adjuster(document(), *state.parentStyle(), parentBoxStyle, &element);
+    adjuster.adjust(*state.style(), state.userAgentAppearanceStyle());
 
     if (state.style()->hasViewportUnits())
         document().setHasStyleWithViewportUnits();
@@ -304,7 +291,8 @@ std::unique_ptr<RenderStyle> StyleResolver::styleForKeyframe(const RenderStyle*
     Style::Builder builder(*this, result, { Style::CascadeLevel::Author });
     builder.applyAllProperties();
 
-    adjustRenderStyle(*state.style(), *state.parentStyle(), nullptr, nullptr, state.userAgentAppearanceStyle());
+    Style::Adjuster adjuster(document(), *state.parentStyle(), nullptr, nullptr);
+    adjuster.adjust(*state.style(), state.userAgentAppearanceStyle());
 
     // Add all the animating properties to the keyframe.
     unsigned propertyCount = keyframe->properties().propertyCount();
@@ -459,8 +447,8 @@ std::unique_ptr<RenderStyle> StyleResolver::pseudoStyleForElement(const Element&
 
     applyMatchedProperties(collector.matchResult(), element);
 
-    // Clean up our style object's display and text decorations (among other fixups).
-    adjustRenderStyle(*state.style(), *m_state.parentStyle(), parentBoxStyle, nullptr, state.userAgentAppearanceStyle());
+    Style::Adjuster adjuster(document(), *state.parentStyle(), parentBoxStyle, nullptr);
+    adjuster.adjust(*state.style(), state.userAgentAppearanceStyle());
 
     if (state.style()->hasViewportUnits())
         document().setHasStyleWithViewportUnits();
@@ -503,548 +491,6 @@ std::unique_ptr<RenderStyle> StyleResolver::defaultStyleForElement()
     return m_state.takeStyle();
 }
 
-static void addIntrinsicMargins(RenderStyle& style)
-{
-    // Intrinsic margin value.
-    const int intrinsicMargin = clampToInteger(2 * style.effectiveZoom());
-
-    // FIXME: Using width/height alone and not also dealing with min-width/max-width is flawed.
-    // FIXME: Using "hasQuirk" to decide the margin wasn't set is kind of lame.
-    if (style.width().isIntrinsicOrAuto()) {
-        if (style.marginLeft().hasQuirk())
-            style.setMarginLeft(Length(intrinsicMargin, Fixed));
-        if (style.marginRight().hasQuirk())
-            style.setMarginRight(Length(intrinsicMargin, Fixed));
-    }
-
-    if (style.height().isAuto()) {
-        if (style.marginTop().hasQuirk())
-            style.setMarginTop(Length(intrinsicMargin, Fixed));
-        if (style.marginBottom().hasQuirk())
-            style.setMarginBottom(Length(intrinsicMargin, Fixed));
-    }
-}
-
-static DisplayType equivalentBlockDisplay(const RenderStyle& style, const Document& document)
-{
-    switch (auto display = style.display()) {
-    case DisplayType::Block:
-    case DisplayType::Table:
-    case DisplayType::Box:
-    case DisplayType::Flex:
-    case DisplayType::WebKitFlex:
-    case DisplayType::Grid:
-    case DisplayType::FlowRoot:
-        return display;
-
-    case DisplayType::ListItem:
-        // It is a WinIE bug that floated list items lose their bullets, so we'll emulate the quirk, but only in quirks mode.
-        if (document.inQuirksMode() && style.isFloating())
-            return DisplayType::Block;
-        return display;
-    case DisplayType::InlineTable:
-        return DisplayType::Table;
-    case DisplayType::InlineBox:
-        return DisplayType::Box;
-    case DisplayType::InlineFlex:
-    case DisplayType::WebKitInlineFlex:
-        return DisplayType::Flex;
-    case DisplayType::InlineGrid:
-        return DisplayType::Grid;
-
-    case DisplayType::Inline:
-    case DisplayType::Compact:
-    case DisplayType::InlineBlock:
-    case DisplayType::TableRowGroup:
-    case DisplayType::TableHeaderGroup:
-    case DisplayType::TableFooterGroup:
-    case DisplayType::TableRow:
-    case DisplayType::TableColumnGroup:
-    case DisplayType::TableColumn:
-    case DisplayType::TableCell:
-    case DisplayType::TableCaption:
-        return DisplayType::Block;
-    case DisplayType::Contents:
-        ASSERT_NOT_REACHED();
-        return DisplayType::Contents;
-    case DisplayType::None:
-        ASSERT_NOT_REACHED();
-        return DisplayType::None;
-    }
-    ASSERT_NOT_REACHED();
-    return DisplayType::Block;
-}
-
-// CSS requires text-decoration to be reset at each DOM element for tables, 
-// inline blocks, inline tables, shadow DOM crossings, floating elements,
-// and absolute or relatively positioned elements.
-static bool doesNotInheritTextDecoration(const RenderStyle& style, const Element* element)
-{
-    return style.display() == DisplayType::Table || style.display() == DisplayType::InlineTable
-        || style.display() == DisplayType::InlineBlock || style.display() == DisplayType::InlineBox || (element && isAtShadowBoundary(*element))
-        || style.isFloating() || style.hasOutOfFlowPosition();
-}
-
-#if ENABLE(OVERFLOW_SCROLLING_TOUCH) || ENABLE(POINTER_EVENTS)
-static bool isScrollableOverflow(Overflow overflow)
-{
-    return overflow == Overflow::Scroll || overflow == Overflow::Auto;
-}
-#endif
-
-static bool hasEffectiveDisplayNoneForDisplayContents(const Element& element)
-{
-    // https://drafts.csswg.org/css-display-3/#unbox-html
-    static NeverDestroyed<HashSet<AtomString>> tagNames = [] {
-        static const HTMLQualifiedName* const tagList[] = {
-            &brTag.get(),
-            &wbrTag.get(),
-            &meterTag.get(),
-            &appletTag.get(),
-            &progressTag.get(),
-            &canvasTag.get(),
-            &embedTag.get(),
-            &objectTag.get(),
-            &audioTag.get(),
-            &iframeTag.get(),
-            &imgTag.get(),
-            &videoTag.get(),
-            &frameTag.get(),
-            &framesetTag.get(),
-            &inputTag.get(),
-            &textareaTag.get(),
-            &selectTag.get(),
-        };
-        HashSet<AtomString> set;
-        for (auto& name : tagList)
-            set.add(name->localName());
-        return set;
-    }();
-
-    // https://drafts.csswg.org/css-display-3/#unbox-svg
-    // FIXME: <g>, <use> and <tspan> have special (?) behavior for display:contents in the current draft spec.
-    if (is<SVGElement>(element))
-        return true;
-#if ENABLE(MATHML)
-    // Not sure MathML code can handle it.
-    if (is<MathMLElement>(element))
-        return true;
-#endif // ENABLE(MATHML)
-    if (!is<HTMLElement>(element))
-        return false;
-    return tagNames.get().contains(element.localName());
-}
-
-static void adjustDisplayContentsStyle(RenderStyle& style, const Element* element)
-{
-    bool displayContentsEnabled = is<HTMLSlotElement>(element) || RuntimeEnabledFeatures::sharedFeatures().displayContentsEnabled();
-    if (!displayContentsEnabled) {
-        style.setDisplay(DisplayType::Inline);
-        return;
-    }
-    if (!element) {
-        if (style.styleType() != PseudoId::Before && style.styleType() != PseudoId::After)
-            style.setDisplay(DisplayType::None);
-        return;
-    }
-    if (element->document().documentElement() == element) {
-        style.setDisplay(DisplayType::Block);
-        return;
-    }
-    if (hasEffectiveDisplayNoneForDisplayContents(*element))
-        style.setDisplay(DisplayType::None);
-}
-
-void StyleResolver::adjustSVGElementStyle(const SVGElement& svgElement, RenderStyle& style)
-{
-    // Only the root <svg> element in an SVG document fragment tree honors css position
-    auto isPositioningAllowed = svgElement.hasTagName(SVGNames::svgTag) && svgElement.parentNode() && !svgElement.parentNode()->isSVGElement() && !svgElement.correspondingElement();
-    if (!isPositioningAllowed)
-        style.setPosition(RenderStyle::initialPosition());
-
-    // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignObject content should
-    // not be scaled again.
-    if (svgElement.hasTagName(SVGNames::foreignObjectTag))
-        style.setEffectiveZoom(RenderStyle::initialZoom());
-
-    // SVG text layout code expects us to be a block-level style element.
-    if ((svgElement.hasTagName(SVGNames::foreignObjectTag) || svgElement.hasTagName(SVGNames::textTag)) && style.isDisplayInlineType())
-        style.setDisplay(DisplayType::Block);
-}
-
-#if ENABLE(POINTER_EVENTS)
-static OptionSet<TouchAction> computeEffectiveTouchActions(const RenderStyle& style, OptionSet<TouchAction> effectiveTouchActions)
-{
-    // https://w3c.github.io/pointerevents/#determining-supported-touch-behavior
-    // "A touch behavior is supported if it conforms to the touch-action property of each element between
-    // the hit tested element and its nearest ancestor with the default touch behavior (including both the
-    // hit tested element and the element with the default touch behavior)."
-
-    bool hasDefaultTouchBehavior = isScrollableOverflow(style.overflowX()) || isScrollableOverflow(style.overflowY());
-    if (hasDefaultTouchBehavior)
-        effectiveTouchActions = RenderStyle::initialTouchActions();
-
-    auto touchActions = style.touchActions();
-    if (touchActions == RenderStyle::initialTouchActions())
-        return effectiveTouchActions;
-
-    if (effectiveTouchActions.contains(TouchAction::None))
-        return { TouchAction::None };
-
-    if (effectiveTouchActions.containsAny({ TouchAction::Auto, TouchAction::Manipulation }))
-        return touchActions;
-
-    if (touchActions.containsAny({ TouchAction::Auto, TouchAction::Manipulation }))
-        return effectiveTouchActions;
-
-    auto sharedTouchActions = effectiveTouchActions & touchActions;
-    if (sharedTouchActions.isEmpty())
-        return { TouchAction::None };
-
-    return sharedTouchActions;
-}
-#endif
-
-#if ENABLE(TEXT_AUTOSIZING)
-static bool hasTextChild(const Element& element)
-{
-    for (auto* child = element.firstChild(); child; child = child->nextSibling()) {
-        if (is<Text>(child))
-            return true;
-    }
-    return false;
-}
-
-bool StyleResolver::adjustRenderStyleForTextAutosizing(RenderStyle& style, const Element& element)
-{
-    if (!settings().textAutosizingEnabled() || !settings().textAutosizingUsesIdempotentMode())
-        return false;
-
-    AutosizeStatus::updateStatus(style);
-    if (style.textSizeAdjust().isNone())
-        return false;
-
-    float initialScale = document().page() ? document().page()->initialScale() : 1;
-    auto adjustLineHeightIfNeeded = [&](auto computedFontSize) {
-        auto lineHeight = style.specifiedLineHeight();
-        constexpr static unsigned eligibleFontSize = 12;
-        if (computedFontSize * initialScale >= eligibleFontSize)
-            return;
-
-        constexpr static float boostFactor = 1.25;
-        auto minimumLineHeight = boostFactor * computedFontSize;
-        if (!lineHeight.isFixed() || lineHeight.value() >= minimumLineHeight)
-            return;
-
-        if (AutosizeStatus::probablyContainsASmallFixedNumberOfLines(style))
-            return;
-
-        style.setLineHeight({ minimumLineHeight, Fixed });
-    };
-
-    auto fontDescription = style.fontDescription();
-    auto initialComputedFontSize = fontDescription.computedSize();
-    auto specifiedFontSize = fontDescription.specifiedSize();
-    bool isCandidate = style.isIdempotentTextAutosizingCandidate();
-    if (!isCandidate && WTF::areEssentiallyEqual(initialComputedFontSize, specifiedFontSize))
-        return false;
-
-    auto adjustedFontSize = AutosizeStatus::idempotentTextSize(fontDescription.specifiedSize(), initialScale);
-    if (isCandidate && WTF::areEssentiallyEqual(initialComputedFontSize, adjustedFontSize))
-        return false;
-
-    if (!hasTextChild(element))
-        return false;
-
-    fontDescription.setComputedSize(isCandidate ? adjustedFontSize : specifiedFontSize);
-    style.setFontDescription(WTFMove(fontDescription));
-    style.fontCascade().update(&document().fontSelector());
-
-    // FIXME: We should restore computed line height to its original value in the case where the element is not
-    // an idempotent text autosizing candidate; otherwise, if an element that is a text autosizing candidate contains
-    // children which are not autosized, the non-autosized content will end up with a boosted line height.
-    if (isCandidate)
-        adjustLineHeightIfNeeded(adjustedFontSize);
-
-    return true;
-}
-#endif
-
-void StyleResolver::adjustRenderStyle(RenderStyle& style, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle, const Element* element, const RenderStyle* userAgentAppearanceStyle)
-{
-    // If the composed tree parent has display:contents, the parent box style will be different from the parent style.
-    // We don't have it when resolving computed style for display:none subtree. Use parent style for adjustments in that case.
-    if (!parentBoxStyle)
-        parentBoxStyle = &parentStyle;
-
-    // Cache our original display.
-    style.setOriginalDisplay(style.display());
-
-    if (style.display() == DisplayType::Contents)
-        adjustDisplayContentsStyle(style, element);
-
-    if (style.display() != DisplayType::None && style.display() != DisplayType::Contents) {
-        if (element) {
-            // If we have a <td> that specifies a float property, in quirks mode we just drop the float
-            // property.
-            // Sites also commonly use display:inline/block on <td>s and <table>s. In quirks mode we force
-            // these tags to retain their display types.
-            if (document().inQuirksMode()) {
-                if (element->hasTagName(tdTag)) {
-                    style.setDisplay(DisplayType::TableCell);
-                    style.setFloating(Float::No);
-                } else if (is<HTMLTableElement>(*element))
-                    style.setDisplay(style.isDisplayInlineType() ? DisplayType::InlineTable : DisplayType::Table);
-            }
-
-            if (element->hasTagName(tdTag) || element->hasTagName(thTag)) {
-                if (style.whiteSpace() == WhiteSpace::KHTMLNoWrap) {
-                    // Figure out if we are really nowrapping or if we should just
-                    // use normal instead. If the width of the cell is fixed, then
-                    // we don't actually use WhiteSpace::NoWrap.
-                    if (style.width().isFixed())
-                        style.setWhiteSpace(WhiteSpace::Normal);
-                    else
-                        style.setWhiteSpace(WhiteSpace::NoWrap);
-                }
-            }
-
-            // Tables never support the -webkit-* values for text-align and will reset back to the default.
-            if (is<HTMLTableElement>(*element) && (style.textAlign() == TextAlignMode::WebKitLeft || style.textAlign() == TextAlignMode::WebKitCenter || style.textAlign() == TextAlignMode::WebKitRight))
-                style.setTextAlign(TextAlignMode::Start);
-
-            // Frames and framesets never honor position:relative or position:absolute. This is necessary to
-            // fix a crash where a site tries to position these objects. They also never honor display.
-            if (element->hasTagName(frameTag) || element->hasTagName(framesetTag)) {
-                style.setPosition(PositionType::Static);
-                style.setDisplay(DisplayType::Block);
-            }
-
-            // Ruby text does not support float or position. This might change with evolution of the specification.
-            if (element->hasTagName(rtTag)) {
-                style.setPosition(PositionType::Static);
-                style.setFloating(Float::No);
-            }
-
-            // User agents are expected to have a rule in their user agent stylesheet that matches th elements that have a parent
-            // node whose computed value for the 'text-align' property is its initial value, whose declaration block consists of
-            // just a single declaration that sets the 'text-align' property to the value 'center'.
-            // https://html.spec.whatwg.org/multipage/rendering.html#rendering
-            if (element->hasTagName(thTag) && !style.hasExplicitlySetTextAlign() && parentStyle.textAlign() == RenderStyle::initialTextAlign())
-                style.setTextAlign(TextAlignMode::Center);
-
-            if (element->hasTagName(legendTag))
-                style.setDisplay(DisplayType::Block);
-        }
-
-        // Absolute/fixed positioned elements, floating elements and the document element need block-like outside display.
-        if (style.hasOutOfFlowPosition() || style.isFloating() || (element && element->document().documentElement() == element))
-            style.setDisplay(equivalentBlockDisplay(style, document()));
-
-        // FIXME: Don't support this mutation for pseudo styles like first-letter or first-line, since it's not completely
-        // clear how that should work.
-        if (style.display() == DisplayType::Inline && style.styleType() == PseudoId::None && style.writingMode() != parentStyle.writingMode())
-            style.setDisplay(DisplayType::InlineBlock);
-
-        // After performing the display mutation, check table rows. We do not honor position:relative or position:sticky on
-        // table rows or cells. This has been established for position:relative in CSS2.1 (and caused a crash in containingBlock()
-        // on some sites).
-        if ((style.display() == DisplayType::TableHeaderGroup || style.display() == DisplayType::TableRowGroup
-            || style.display() == DisplayType::TableFooterGroup || style.display() == DisplayType::TableRow)
-            && style.position() == PositionType::Relative)
-            style.setPosition(PositionType::Static);
-
-        // writing-mode does not apply to table row groups, table column groups, table rows, and table columns.
-        // FIXME: Table cells should be allowed to be perpendicular or flipped with respect to the table, though.
-        if (style.display() == DisplayType::TableColumn || style.display() == DisplayType::TableColumnGroup || style.display() == DisplayType::TableFooterGroup
-            || style.display() == DisplayType::TableHeaderGroup || style.display() == DisplayType::TableRow || style.display() == DisplayType::TableRowGroup
-            || style.display() == DisplayType::TableCell)
-            style.setWritingMode(parentStyle.writingMode());
-
-        // FIXME: Since we don't support block-flow on flexible boxes yet, disallow setting
-        // of block-flow to anything other than TopToBottomWritingMode.
-        // https://bugs.webkit.org/show_bug.cgi?id=46418 - Flexible box support.
-        if (style.writingMode() != TopToBottomWritingMode && (style.display() == DisplayType::Box || style.display() == DisplayType::InlineBox))
-            style.setWritingMode(TopToBottomWritingMode);
-
-        // https://www.w3.org/TR/css-display/#transformations
-        // "A parent with a grid or flex display value blockifies the box’s display type."
-        if (parentBoxStyle->isDisplayFlexibleOrGridBox()) {
-            style.setFloating(Float::No);
-            style.setDisplay(equivalentBlockDisplay(style, document()));
-        }
-    }
-
-    // Make sure our z-index value is only applied if the object is positioned.
-    if (style.position() == PositionType::Static && !parentBoxStyle->isDisplayFlexibleOrGridBox())
-        style.setHasAutoZIndex();
-
-    // Auto z-index becomes 0 for the root element and transparent objects. This prevents
-    // cases where objects that should be blended as a single unit end up with a non-transparent
-    // object wedged in between them. Auto z-index also becomes 0 for objects that specify transforms/masks/reflections.
-    if (style.hasAutoZIndex()) {
-        if ((element && element->document().documentElement() == element)
-            || style.opacity() < 1.0f
-            || style.hasTransformRelatedProperty()
-            || style.hasMask()
-            || style.clipPath()
-            || style.boxReflect()
-            || style.hasFilter()
-#if ENABLE(FILTERS_LEVEL_2)
-            || style.hasBackdropFilter()
-#endif
-            || style.hasBlendMode()
-            || style.hasIsolation()
-            || style.position() == PositionType::Sticky
-            || style.position() == PositionType::Fixed
-            || style.willChangeCreatesStackingContext())
-            style.setZIndex(0);
-    }
-
-    if (element) {
-        // Textarea considers overflow visible as auto.
-        if (is<HTMLTextAreaElement>(*element)) {
-            style.setOverflowX(style.overflowX() == Overflow::Visible ? Overflow::Auto : style.overflowX());
-            style.setOverflowY(style.overflowY() == Overflow::Visible ? Overflow::Auto : style.overflowY());
-        }
-
-        // Disallow -webkit-user-modify on :pseudo and ::pseudo elements.
-        if (!element->shadowPseudoId().isNull())
-            style.setUserModify(UserModify::ReadOnly);
-
-        if (is<HTMLMarqueeElement>(*element)) {
-            // For now, <marquee> requires an overflow clip to work properly.
-            style.setOverflowX(Overflow::Hidden);
-            style.setOverflowY(Overflow::Hidden);
-
-            bool isVertical = style.marqueeDirection() == MarqueeDirection::Up || style.marqueeDirection() == MarqueeDirection::Down;
-            // Make horizontal marquees not wrap.
-            if (!isVertical) {
-                style.setWhiteSpace(WhiteSpace::NoWrap);
-                style.setTextAlign(TextAlignMode::Start);
-            }
-            // Apparently this is the expected legacy behavior.
-            if (isVertical && style.height().isAuto())
-                style.setHeight(Length(200, Fixed));
-        }
-    }
-
-    if (doesNotInheritTextDecoration(style, element))
-        style.setTextDecorationsInEffect(style.textDecoration());
-    else
-        style.addToTextDecorationsInEffect(style.textDecoration());
-
-    // If either overflow value is not visible, change to auto.
-    if (style.overflowX() == Overflow::Visible && style.overflowY() != Overflow::Visible) {
-        // FIXME: Once we implement pagination controls, overflow-x should default to hidden
-        // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, we'll let it
-        // default to auto so we can at least scroll through the pages.
-        style.setOverflowX(Overflow::Auto);
-    } else if (style.overflowY() == Overflow::Visible && style.overflowX() != Overflow::Visible)
-        style.setOverflowY(Overflow::Auto);
-
-    // Call setStylesForPaginationMode() if a pagination mode is set for any non-root elements. If these
-    // styles are specified on a root element, then they will be incorporated in
-    // Style::createForDocument().
-    if ((style.overflowY() == Overflow::PagedX || style.overflowY() == Overflow::PagedY) && !(element && (element->hasTagName(htmlTag) || element->hasTagName(bodyTag))))
-        style.setColumnStylesFromPaginationMode(WebCore::paginationModeForRenderStyle(style));
-
-    // Table rows, sections and the table itself will support overflow:hidden and will ignore scroll/auto.
-    // FIXME: Eventually table sections will support auto and scroll.
-    if (style.display() == DisplayType::Table || style.display() == DisplayType::InlineTable
-        || style.display() == DisplayType::TableRowGroup || style.display() == DisplayType::TableRow) {
-        if (style.overflowX() != Overflow::Visible && style.overflowX() != Overflow::Hidden)
-            style.setOverflowX(Overflow::Visible);
-        if (style.overflowY() != Overflow::Visible && style.overflowY() != Overflow::Hidden)
-            style.setOverflowY(Overflow::Visible);
-    }
-
-    // Menulists should have visible overflow
-    if (style.appearance() == MenulistPart) {
-        style.setOverflowX(Overflow::Visible);
-        style.setOverflowY(Overflow::Visible);
-    }
-
-#if ENABLE(OVERFLOW_SCROLLING_TOUCH)
-    // Touch overflow scrolling creates a stacking context.
-    if (style.hasAutoZIndex() && style.useTouchOverflowScrolling() && (isScrollableOverflow(style.overflowX()) || isScrollableOverflow(style.overflowY())))
-        style.setZIndex(0);
-#endif
-
-    // Cull out any useless layers and also repeat patterns into additional layers.
-    style.adjustBackgroundLayers();
-    style.adjustMaskLayers();
-
-    // Do the same for animations and transitions.
-    style.adjustAnimations();
-    style.adjustTransitions();
-
-    // Important: Intrinsic margins get added to controls before the theme has adjusted the style, since the theme will
-    // alter fonts and heights/widths.
-    if (is<HTMLFormControlElement>(element) && style.computedFontPixelSize() >= 11) {
-        // Don't apply intrinsic margins to image buttons. The designer knows how big the images are,
-        // so we have to treat all image buttons as though they were explicitly sized.
-        if (!is<HTMLInputElement>(*element) || !downcast<HTMLInputElement>(*element).isImageButton())
-            addIntrinsicMargins(style);
-    }
-
-    // Let the theme also have a crack at adjusting the style.
-    if (style.hasAppearance())
-        RenderTheme::singleton().adjustStyle(*this, style, element, userAgentAppearanceStyle);
-
-    // If we have first-letter pseudo style, do not share this style.
-    if (style.hasPseudoStyle(PseudoId::FirstLetter))
-        style.setUnique();
-
-    // FIXME: when dropping the -webkit prefix on transform-style, we should also have opacity < 1 cause flattening.
-    if (style.preserves3D() && (style.overflowX() != Overflow::Visible
-        || style.overflowY() != Overflow::Visible
-        || style.hasClip()
-        || style.clipPath()
-        || style.hasFilter()
-#if ENABLE(FILTERS_LEVEL_2)
-        || style.hasBackdropFilter()
-#endif
-        || style.hasBlendMode()))
-        style.setTransformStyle3D(TransformStyle3D::Flat);
-
-    if (is<SVGElement>(element))
-        adjustSVGElementStyle(downcast<SVGElement>(*element), style);
-
-    // If the inherited value of justify-items includes the 'legacy' keyword (plus 'left', 'right' or
-    // 'center'), 'legacy' computes to the the inherited value. Otherwise, 'auto' computes to 'normal'.
-    if (parentBoxStyle->justifyItems().positionType() == ItemPositionType::Legacy && style.justifyItems().position() == ItemPosition::Legacy)
-        style.setJustifyItems(parentBoxStyle->justifyItems());
-
-#if ENABLE(POINTER_EVENTS)
-    style.setEffectiveTouchActions(computeEffectiveTouchActions(style, parentStyle.effectiveTouchActions()));
-#endif
-
-    if (element) {
-#if ENABLE(TEXT_AUTOSIZING)
-        adjustRenderStyleForTextAutosizing(style, *element);
-#endif
-        adjustRenderStyleForSiteSpecificQuirks(style, *element);
-    }
-}
-
-void StyleResolver::adjustRenderStyleForSiteSpecificQuirks(RenderStyle& style, const Element& element)
-{
-    if (document().quirks().needsGMailOverflowScrollQuirk()) {
-        // This turns sidebar scrollable without mouse move event.
-        static NeverDestroyed<AtomString> roleValue("navigation", AtomString::ConstructFromLiteral);
-        if (style.overflowY() == Overflow::Hidden && element.attributeWithoutSynchronization(roleAttr) == roleValue)
-            style.setOverflowY(Overflow::Auto);
-    }
-    if (document().quirks().needsYouTubeOverflowScrollQuirk()) {
-        // This turns sidebar scrollable without hover.
-        static NeverDestroyed<AtomString> idValue("guide-inner-content", AtomString::ConstructFromLiteral);
-        if (style.overflowY() == Overflow::Hidden && element.idForStyleResolution() == idValue)
-            style.setOverflowY(Overflow::Auto);
-    }
-}
-
-
 Vector<RefPtr<StyleRule>> StyleResolver::styleRulesForElement(const Element* element, unsigned rulesToInclude)
 {
     return pseudoStyleRulesForElement(element, PseudoId::None, rulesToInclude);
index 849d569..93e5c43 100644 (file)
@@ -133,7 +133,6 @@ public:
     void setOverrideDocumentElementStyle(RenderStyle* style) { m_overrideDocumentElementStyle = style; }
 
     void addCurrentSVGFontFaceRules();
-    static void adjustSVGElementStyle(const SVGElement&, RenderStyle&);
 
     void setNewStateWithElement(const Element&);
     std::unique_ptr<RenderStyle> styleForKeyframe(const RenderStyle*, const StyleRuleKeyframe*, KeyframeValue&);
@@ -183,9 +182,6 @@ public:
     void clearCachedDeclarationsAffectedByViewportUnits();
 
 private:
-    void adjustRenderStyle(RenderStyle&, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle, const Element*, const RenderStyle* userAgentStyle);
-    void adjustRenderStyleForSiteSpecificQuirks(RenderStyle&, const Element&);
-
     enum class UseMatchedDeclarationsCache { Yes, No };
     void applyMatchedProperties(const MatchResult&, const Element&, UseMatchedDeclarationsCache = UseMatchedDeclarationsCache::Yes);
 
@@ -195,8 +191,6 @@ private:
     KeyframesRuleMap m_keyframesRuleMap;
 
 public:
-    typedef HashMap<CSSPropertyID, RefPtr<CSSValue>> PendingImagePropertyMap;
-
     class State {
     public:
         State() { }
@@ -237,8 +231,6 @@ public:
 
     InspectorCSSOMWrappers& inspectorCSSOMWrappers() { return m_inspectorCSSOMWrappers; }
 
-    bool adjustRenderStyleForTextAutosizing(RenderStyle&, const Element&);
-
 private:
     void cacheBorderAndBackground();
 
index b146cac..cf378b0 100644 (file)
 #include "StorageArea.h"
 #include "StorageNamespace.h"
 #include "StorageNamespaceProvider.h"
+#include "StyleAdjuster.h"
 #include "StyleResolver.h"
 #include "StyleScope.h"
 #include "SubframeLoader.h"
@@ -3061,13 +3062,12 @@ void Page::recomputeTextAutoSizingInAllFrames()
         if (!frame->document())
             continue;
         auto& document = *frame->document();
-        if (!document.renderView() || !document.styleScope().resolverIfExists())
+        if (!document.renderView())
             continue;
 
-        auto& styleResolver = document.styleScope().resolver();
         for (auto& renderer : descendantsOfType<RenderElement>(*document.renderView())) {
             if (auto* element = renderer.element()) {
-                auto needsLayout = styleResolver.adjustRenderStyleForTextAutosizing(renderer.mutableStyle(), *element);
+                auto needsLayout = Style::Adjuster::adjustForTextAutosizing(renderer.mutableStyle(), *element);
                 if (needsLayout)
                     renderer.setNeedsLayout();
             }
index 9b2dfec..7b83a18 100644 (file)
@@ -78,7 +78,7 @@ RenderTheme::RenderTheme()
 {
 }
 
-void RenderTheme::adjustStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* element, const RenderStyle* userAgentAppearanceStyle)
+void RenderTheme::adjustStyle(RenderStyle& style, const Element* element, const RenderStyle* userAgentAppearanceStyle)
 {
     // Force inline and table display styles to be inline-block (except for table- which is block)
     ControlPart part = style.appearance();
@@ -97,7 +97,7 @@ void RenderTheme::adjustStyle(StyleResolver& styleResolver, RenderStyle& style,
             part = MenulistButtonPart;
             break;
         case TextFieldPart:
-            adjustTextFieldStyle(styleResolver, style, element);
+            adjustTextFieldStyle(style, element);
             FALLTHROUGH;
         default:
             style.setAppearance(NoControlPart);
@@ -200,9 +200,9 @@ void RenderTheme::adjustStyle(StyleResolver& styleResolver, RenderStyle& style,
     switch (style.appearance()) {
 #if !USE(NEW_THEME)
     case CheckboxPart:
-        return adjustCheckboxStyle(styleResolver, style, element);
+        return adjustCheckboxStyle(style, element);
     case RadioPart:
-        return adjustRadioStyle(styleResolver, style, element);
+        return adjustRadioStyle(style, element);
     case PushButtonPart:
     case SquareButtonPart:
 #if ENABLE(INPUT_TYPE_COLOR)
@@ -210,18 +210,18 @@ void RenderTheme::adjustStyle(StyleResolver& styleResolver, RenderStyle& style,
 #endif
     case DefaultButtonPart:
     case ButtonPart:
-        return adjustButtonStyle(styleResolver, style, element);
+        return adjustButtonStyle(style, element);
     case InnerSpinButtonPart:
-        return adjustInnerSpinButtonStyle(styleResolver, style, element);
+        return adjustInnerSpinButtonStyle(style, element);
 #endif
     case TextFieldPart:
-        return adjustTextFieldStyle(styleResolver, style, element);
+        return adjustTextFieldStyle(style, element);
     case TextAreaPart:
-        return adjustTextAreaStyle(styleResolver, style, element);
+        return adjustTextAreaStyle(style, element);
     case MenulistPart:
-        return adjustMenuListStyle(styleResolver, style, element);
+        return adjustMenuListStyle(style, element);
     case MenulistButtonPart:
-        return adjustMenuListButtonStyle(styleResolver, style, element);
+        return adjustMenuListButtonStyle(style, element);
     case MediaPlayButtonPart:
     case MediaCurrentTimePart:
     case MediaTimeRemainingPart:
@@ -229,54 +229,54 @@ void RenderTheme::adjustStyle(StyleResolver& styleResolver, RenderStyle& style,
     case MediaExitFullscreenButtonPart:
     case MediaMuteButtonPart:
     case MediaVolumeSliderContainerPart:
-        return adjustMediaControlStyle(styleResolver, style, element);
+        return adjustMediaControlStyle(style, element);
     case MediaSliderPart:
     case MediaVolumeSliderPart:
     case MediaFullScreenVolumeSliderPart:
     case SliderHorizontalPart:
     case SliderVerticalPart:
-        return adjustSliderTrackStyle(styleResolver, style, element);
+        return adjustSliderTrackStyle(style, element);
     case SliderThumbHorizontalPart:
     case SliderThumbVerticalPart:
-        return adjustSliderThumbStyle(styleResolver, style, element);
+        return adjustSliderThumbStyle(style, element);
     case SearchFieldPart:
-        return adjustSearchFieldStyle(styleResolver, style, element);
+        return adjustSearchFieldStyle(style, element);
     case SearchFieldCancelButtonPart:
-        return adjustSearchFieldCancelButtonStyle(styleResolver, style, element);
+        return adjustSearchFieldCancelButtonStyle(style, element);
     case SearchFieldDecorationPart:
-        return adjustSearchFieldDecorationPartStyle(styleResolver, style, element);
+        return adjustSearchFieldDecorationPartStyle(style, element);
     case SearchFieldResultsDecorationPart:
-        return adjustSearchFieldResultsDecorationPartStyle(styleResolver, style, element);
+        return adjustSearchFieldResultsDecorationPartStyle(style, element);
     case SearchFieldResultsButtonPart:
-        return adjustSearchFieldResultsButtonStyle(styleResolver, style, element);
+        return adjustSearchFieldResultsButtonStyle(style, element);
     case ProgressBarPart:
-        return adjustProgressBarStyle(styleResolver, style, element);
+        return adjustProgressBarStyle(style, element);
 #if ENABLE(METER_ELEMENT)
     case MeterPart:
     case RelevancyLevelIndicatorPart:
     case ContinuousCapacityLevelIndicatorPart:
     case DiscreteCapacityLevelIndicatorPart:
     case RatingLevelIndicatorPart:
-        return adjustMeterStyle(styleResolver, style, element);
+        return adjustMeterStyle(style, element);
 #endif
 #if ENABLE(SERVICE_CONTROLS)
     case ImageControlsButtonPart:
         break;
 #endif
     case CapsLockIndicatorPart:
-        return adjustCapsLockIndicatorStyle(styleResolver, style, element);
+        return adjustCapsLockIndicatorStyle(style, element);
 #if ENABLE(APPLE_PAY)
     case ApplePayButtonPart:
-        return adjustApplePayButtonStyle(styleResolver, style, element);
+        return adjustApplePayButtonStyle(style, element);
 #endif
 #if ENABLE(ATTACHMENT_ELEMENT)
     case AttachmentPart:
     case BorderlessAttachmentPart:
-        return adjustAttachmentStyle(styleResolver, style, element);
+        return adjustAttachmentStyle(style, element);
 #endif
 #if ENABLE(DATALIST_ELEMENT)
     case ListButtonPart:
-        return adjustListButtonStyle(styleResolver, style, element);
+        return adjustListButtonStyle(style, element);
 #endif
     default:
         break;
@@ -926,7 +926,7 @@ bool RenderTheme::isDefault(const RenderObject& o) const
 
 #if !USE(NEW_THEME)
 
-void RenderTheme::adjustCheckboxStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderTheme::adjustCheckboxStyle(RenderStyle& style, const Element*) const
 {
     // A summary of the rules for checkbox designed to match WinIE:
     // width/height - honored (WinIE actually scales its control for small widths, but lets it overflow for small heights.)
@@ -943,7 +943,7 @@ void RenderTheme::adjustCheckboxStyle(StyleResolver&, RenderStyle& style, const
     style.setBoxShadow(nullptr);
 }
 
-void RenderTheme::adjustRadioStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderTheme::adjustRadioStyle(RenderStyle& style, const Element*) const
 {
     // A summary of the rules for checkbox designed to match WinIE:
     // width/height - honored (WinIE actually scales its control for small widths, but lets it overflow for small heights.)
@@ -960,7 +960,7 @@ void RenderTheme::adjustRadioStyle(StyleResolver&, RenderStyle& style, const Ele
     style.setBoxShadow(nullptr);
 }
 
-void RenderTheme::adjustButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderTheme::adjustButtonStyle(RenderStyle& style, const Element*) const
 {
     // Most platforms will completely honor all CSS, and so we have no need to
     // adjust the style at all by default. We will still allow the theme a crack
@@ -968,26 +968,26 @@ void RenderTheme::adjustButtonStyle(StyleResolver&, RenderStyle& style, const El
     setButtonSize(style);
 }
 
-void RenderTheme::adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustInnerSpinButtonStyle(RenderStyle&, const Element*) const
 {
 }
 #endif
 
-void RenderTheme::adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustTextFieldStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustTextAreaStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustMenuListStyle(RenderStyle&, const Element*) const
 {
 }
 
 #if ENABLE(METER_ELEMENT)
 
-void RenderTheme::adjustMeterStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderTheme::adjustMeterStyle(RenderStyle& style, const Element*) const
 {
     style.setBoxShadow(nullptr);
 }
@@ -1009,7 +1009,7 @@ bool RenderTheme::paintMeter(const RenderObject&, const PaintInfo&, const IntRec
 
 #endif // METER_ELEMENT
 
-void RenderTheme::adjustCapsLockIndicatorStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustCapsLockIndicatorStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1020,7 +1020,7 @@ bool RenderTheme::paintCapsLockIndicator(const RenderObject&, const PaintInfo&,
 
 #if ENABLE(ATTACHMENT_ELEMENT)
 
-void RenderTheme::adjustAttachmentStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustAttachmentStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1049,7 +1049,7 @@ String RenderTheme::dataListStyleSheet() const
     return "datalist { display: none; }"_s;
 }
 
-void RenderTheme::adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustListButtonStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1150,7 +1150,7 @@ Seconds RenderTheme::animationDurationForProgressBar(RenderProgress&) const
     return 0_s;
 }
 
-void RenderTheme::adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustProgressBarStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1169,19 +1169,19 @@ bool RenderTheme::shouldHaveCapsLockIndicator(const HTMLInputElement&) const
     return false;
 }
 
-void RenderTheme::adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustMenuListButtonStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustMediaControlStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustMediaControlStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustSliderTrackStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSliderThumbStyle(StyleResolver&, RenderStyle& style, const Element* element) const
+void RenderTheme::adjustSliderThumbStyle(RenderStyle& style, const Element* element) const
 {
     adjustSliderThumbSize(style, element);
 }
@@ -1190,23 +1190,23 @@ void RenderTheme::adjustSliderThumbSize(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustSearchFieldStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustSearchFieldCancelButtonStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustSearchFieldDecorationPartStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustSearchFieldResultsDecorationPartStyle(RenderStyle&, const Element*) const
 {
 }
 
-void RenderTheme::adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderTheme::adjustSearchFieldResultsButtonStyle(RenderStyle&, const Element*) const
 {
 }
 
index 19acf0b..77a8c39 100644 (file)
@@ -65,7 +65,7 @@ public:
     // metrics and defaults given the contents of the style.  This includes sophisticated operations like
     // selection of control size based off the font, the disabling of appearance when certain other properties like
     // "border" are set, or if the appearance is not supported by the theme.
-    void adjustStyle(StyleResolver&, RenderStyle&, const Element*, const RenderStyle* userAgentAppearanceStyle);
+    void adjustStyle(RenderStyle&, const Element*, const RenderStyle* userAgentAppearanceStyle);
 
     // This method is called to paint the widget as a background of the RenderObject.  A widget's foreground, e.g., the
     // text of a button, is always rendered by the engine itself.  The boolean return value indicates
@@ -285,19 +285,19 @@ protected:
 
 #if !USE(NEW_THEME)
     // Methods for each appearance value.
-    virtual void adjustCheckboxStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustCheckboxStyle(RenderStyle&, const Element*) const;
     virtual bool paintCheckbox(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual void setCheckboxSize(RenderStyle&) const { }
 
-    virtual void adjustRadioStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustRadioStyle(RenderStyle&, const Element*) const;
     virtual bool paintRadio(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual void setRadioSize(RenderStyle&) const { }
 
-    virtual void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustButtonStyle(RenderStyle&, const Element*) const;
     virtual bool paintButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual void setButtonSize(RenderStyle&) const { }
 
-    virtual void adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustInnerSpinButtonStyle(RenderStyle&, const Element*) const;
     virtual bool paintInnerSpinButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 #endif
 
@@ -305,73 +305,73 @@ protected:
     virtual bool paintRadioDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual bool paintButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustTextFieldStyle(RenderStyle&, const Element*) const;
     virtual bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
     virtual bool paintTextFieldDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
 
-    virtual void adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustTextAreaStyle(RenderStyle&, const Element*) const;
     virtual bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
     virtual bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
 
-    virtual void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustMenuListStyle(RenderStyle&, const Element*) const;
     virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
     virtual bool paintMenuListDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustMenuListButtonStyle(RenderStyle&, const Element*) const;
     virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) { return true; }
 
     virtual bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual bool paintSquareButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
 #if ENABLE(METER_ELEMENT)
-    virtual void adjustMeterStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustMeterStyle(RenderStyle&, const Element*) const;
     virtual bool paintMeter(const RenderObject&, const PaintInfo&, const IntRect&);
 #endif
 
-    virtual void adjustCapsLockIndicatorStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustCapsLockIndicatorStyle(RenderStyle&, const Element*) const;
     virtual bool paintCapsLockIndicator(const RenderObject&, const PaintInfo&, const IntRect&);
 
 #if ENABLE(APPLE_PAY)
-    virtual void adjustApplePayButtonStyle(StyleResolver&, RenderStyle&, const Element*) const { }
+    virtual void adjustApplePayButtonStyle(RenderStyle&, const Element*) const { }
     virtual bool paintApplePayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 #endif
 
 #if ENABLE(ATTACHMENT_ELEMENT)
-    virtual void adjustAttachmentStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustAttachmentStyle(RenderStyle&, const Element*) const;
     virtual bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&);
 #endif
 
 #if ENABLE(DATALIST_ELEMENT)
-    virtual void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustListButtonStyle(RenderStyle&, const Element*) const;
 #endif
 
-    virtual void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustProgressBarStyle(RenderStyle&, const Element*) const;
     virtual bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSliderTrackStyle(RenderStyle&, const Element*) const;
     virtual bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSliderThumbStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSliderThumbStyle(RenderStyle&, const Element*) const;
     virtual bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual bool paintSliderThumbDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSearchFieldStyle(RenderStyle&, const Element*) const;
     virtual bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual bool paintSearchFieldDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSearchFieldCancelButtonStyle(RenderStyle&, const Element*) const;
     virtual bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSearchFieldDecorationPartStyle(RenderStyle&, const Element*) const;
     virtual bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSearchFieldResultsDecorationPartStyle(RenderStyle&, const Element*) const;
     virtual bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustSearchFieldResultsButtonStyle(RenderStyle&, const Element*) const;
     virtual bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
 
-    virtual void adjustMediaControlStyle(StyleResolver&, RenderStyle&, const Element*) const;
+    virtual void adjustMediaControlStyle(RenderStyle&, const Element*) const;
     virtual bool paintMediaFullscreenButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual bool paintMediaPlayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
     virtual bool paintMediaOverlayPlayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
index f188742..3b2b50d 100644 (file)
@@ -39,7 +39,7 @@ private:
     bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const final;
 
 #if ENABLE(APPLE_PAY)
-    void adjustApplePayButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustApplePayButtonStyle(RenderStyle&, const Element*) const override;
     bool paintApplePayButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
 #endif
 
index cb61082..36198f0 100644 (file)
@@ -54,7 +54,7 @@ static const auto applePayButtonMinimumWidth = 140;
 static const auto applePayButtonPlainMinimumWidth = 100;
 static const auto applePayButtonMinimumHeight = 30;
 
-void RenderThemeCocoa::adjustApplePayButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeCocoa::adjustApplePayButtonStyle(RenderStyle& style, const Element*) const
 {
     if (style.applePayButtonType() == ApplePayButtonType::Plain)
         style.setMinWidth(Length(applePayButtonPlainMinimumWidth, Fixed));
index 0e1f5c9..07e7a32 100644 (file)
@@ -290,7 +290,7 @@ static GtkStateFlags themePartStateFlags(const RenderThemeGtk& theme, RenderThem
     return static_cast<GtkStateFlags>(stateFlags);
 }
 
-void RenderThemeGtk::adjustButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustButtonStyle(RenderStyle& style, const Element*) const
 {
     // Some layout tests check explicitly that buttons ignore line-height.
     if (style.appearance() == PushButtonPart)
@@ -396,7 +396,7 @@ static Color menuListColor(const Element* element)
     return comboWidget.button().color();
 }
 
-void RenderThemeGtk::adjustMenuListStyle(StyleResolver&, RenderStyle& style, const Element* element) const
+void RenderThemeGtk::adjustMenuListStyle(RenderStyle& style, const Element* element) const
 {
     // The tests check explicitly that select menu buttons ignore line height.
     style.setLineHeight(RenderStyle::initialLineHeight());
@@ -408,9 +408,9 @@ void RenderThemeGtk::adjustMenuListStyle(StyleResolver&, RenderStyle& style, con
         style.setColor(menuListColor(element));
 }
 
-void RenderThemeGtk::adjustMenuListButtonStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* e) const
+void RenderThemeGtk::adjustMenuListButtonStyle(RenderStyle& style, const Element* e) const
 {
-    adjustMenuListStyle(styleResolver, style, e);
+    adjustMenuListStyle(style, e);
 }
 
 /*
@@ -491,7 +491,7 @@ static IntSize spinButtonSize()
 }
 
 
-void RenderThemeGtk::adjustTextFieldStyle(StyleResolver&, RenderStyle& style, const Element* element) const
+void RenderThemeGtk::adjustTextFieldStyle(RenderStyle& style, const Element* element) const
 {
     if (!is<HTMLInputElement>(element) || !shouldHaveSpinButton(downcast<HTMLInputElement>(*element)))
         return;
@@ -558,9 +558,9 @@ bool RenderThemeGtk::paintTextArea(const RenderObject& o, const PaintInfo& i, co
     return paintTextField(o, i, r);
 }
 
-void RenderThemeGtk::adjustSearchFieldResultsButtonStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* e) const
+void RenderThemeGtk::adjustSearchFieldResultsButtonStyle(RenderStyle& style, const Element* e) const
 {
-    adjustSearchFieldCancelButtonStyle(styleResolver, style, e);
+    adjustSearchFieldCancelButtonStyle(style, e);
 }
 
 bool RenderThemeGtk::paintSearchFieldResultsButton(const RenderBox& o, const PaintInfo& i, const IntRect& rect)
@@ -568,12 +568,12 @@ bool RenderThemeGtk::paintSearchFieldResultsButton(const RenderBox& o, const Pai
     return paintSearchFieldResultsDecorationPart(o, i, rect);
 }
 
-void RenderThemeGtk::adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustSearchFieldResultsDecorationPartStyle(RenderStyle& style, const Element*) const
 {
     adjustSearchFieldIconStyle(EntryIconLeft, style);
 }
 
-void RenderThemeGtk::adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustSearchFieldCancelButtonStyle(RenderStyle& style, const Element*) const
 {
     adjustSearchFieldIconStyle(EntryIconRight, style);
 }
@@ -606,7 +606,7 @@ bool RenderThemeGtk::paintSearchFieldCancelButton(const RenderBox& renderObject,
 }
 
 #if ENABLE(DATALIST_ELEMENT)
-void RenderThemeGtk::adjustListButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustListButtonStyle(RenderStyle& style, const Element*) const
 {
     // Add a margin to place the button at end of the input field.
     if (style.isLeftToRightDirection())
@@ -633,7 +633,7 @@ void RenderThemeGtk::paintListButtonForInput(const RenderObject& renderObject, c
 }
 #endif
 
-void RenderThemeGtk::adjustSearchFieldStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustSearchFieldStyle(RenderStyle& style, const Element*) const
 {
     // We cannot give a proper rendering when border radius is active, unfortunately.
     style.resetBorderRadius();
@@ -650,14 +650,14 @@ bool RenderThemeGtk::shouldHaveCapsLockIndicator(const HTMLInputElement& element
     return element.isPasswordField();
 }
 
-void RenderThemeGtk::adjustSliderTrackStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustSliderTrackStyle(RenderStyle& style, const Element*) const
 {
     style.setBoxShadow(nullptr);
 }
 
-void RenderThemeGtk::adjustSliderThumbStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* element) const
+void RenderThemeGtk::adjustSliderThumbStyle(RenderStyle& style, const Element* element) const
 {
-    RenderTheme::adjustSliderThumbStyle(styleResolver, style, element);
+    RenderTheme::adjustSliderThumbStyle(style, element);
     style.setBoxShadow(nullptr);
 }
 
@@ -817,7 +817,7 @@ RenderTheme::InnerSpinButtonLayout RenderThemeGtk::innerSpinButtonLayout(const R
     return renderObject.style().direction() == TextDirection::RTL ? InnerSpinButtonLayout::HorizontalUpLeft : InnerSpinButtonLayout::HorizontalUpRight;
 }
 
-void RenderThemeGtk::adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustInnerSpinButtonStyle(RenderStyle& style, const Element*) const
 {
     style.setWidth(Length(spinButtonSize().width(), Fixed));
     style.setHeight(Length(spinButtonSize().height(), Fixed));
@@ -1140,7 +1140,7 @@ bool RenderThemeGtk::paintMediaCurrentTime(const RenderObject&, const PaintInfo&
 }
 #endif
 
-void RenderThemeGtk::adjustProgressBarStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeGtk::adjustProgressBarStyle(RenderStyle& style, const Element*) const
 {
     style.setBoxShadow(nullptr);
 }
index d6aa05d..9f5bf24 100644 (file)
@@ -113,10 +113,10 @@ private:
     bool paintRadio(const RenderObject&, const PaintInfo&, const IntRect&) override;
     void setRadioSize(RenderStyle&) const override;
 
-    void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustButtonStyle(RenderStyle&, const Element*) const override;
     bool paintButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
-    void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustTextFieldStyle(RenderStyle&, const Element*) const override;
     bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) override;
     bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) override;
 
@@ -126,33 +126,33 @@ private:
     // The former is used when a menu list button has been styled. This is used to ensure
     // Aqua themed controls whenever possible. We always want to use GTK+ theming, so
     // we don't maintain this differentiation.
-    void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const override;
-    void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustMenuListStyle(RenderStyle&, const Element*) const override;
+    void adjustMenuListButtonStyle(RenderStyle&, const Element*) const override;
     bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
 
-    void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldResultsDecorationPartStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) override;
 
-    void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldStyle(RenderStyle&, const Element*) const override;
     bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
-    void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldResultsButtonStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) override;
 
-    void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldCancelButtonStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) override;
 
 #if ENABLE(DATALIST_ELEMENT)
     void paintListButtonForInput(const RenderObject&, const PaintInfo&, const FloatRect&);
-    void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustListButtonStyle(RenderStyle&, const Element*) const override;
 #endif
 
     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
-    void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSliderTrackStyle(RenderStyle&, const Element*) const override;
 
     bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) override;
-    void adjustSliderThumbStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSliderThumbStyle(RenderStyle&, const Element*) const override;
 
     void adjustSliderThumbSize(RenderStyle&, const Element*) const override;
 
@@ -175,12 +175,12 @@ private:
 
     Seconds animationRepeatIntervalForProgressBar(RenderProgress&) const override;
     Seconds animationDurationForProgressBar(RenderProgress&) const override;
-    void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustProgressBarStyle(RenderStyle&, const Element*) const override;
     IntRect progressBarRectForBounds(const RenderObject&, const IntRect&) const override;
     bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
     InnerSpinButtonLayout innerSpinButtonLayout(const RenderObject&) const override;
-    void adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustInnerSpinButtonStyle(RenderStyle&, const Element*) const override;
     bool paintInnerSpinButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
     String fileListNameForWidth(const FileList*, const FontCascade&, int width, bool multipleFilesAllowed) const override;
index 7e39ec6..9362cb8 100644 (file)
@@ -69,13 +69,13 @@ protected:
     bool isControlStyled(const RenderStyle&, const RenderStyle& userAgentStyle) const override;
 
     // Methods for each appearance value.
-    void adjustCheckboxStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustCheckboxStyle(RenderStyle&, const Element*) const override;
     bool paintCheckboxDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
-    void adjustRadioStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustRadioStyle(RenderStyle&, const Element*) const override;
     bool paintRadioDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
-    void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustButtonStyle(RenderStyle&, const Element*) const override;
     bool paintButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
     bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
     void setButtonSize(RenderStyle&) const override;
@@ -85,10 +85,10 @@ protected:
     bool paintTextFieldDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
     bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
 
-    void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustMenuListButtonStyle(RenderStyle&, const Element*) const override;
     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
 
-    void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSliderTrackStyle(RenderStyle&, const Element*) const override;
     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
     void adjustSliderThumbSize(RenderStyle&, const Element*) const override;
@@ -106,7 +106,7 @@ protected:
     int sliderTickOffsetFromTrackCenter() const override;
 #endif
 
-    void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
     bool supportsFocusRing(const RenderStyle&) const final;
index 10af040..7f102f5 100644 (file)
@@ -344,7 +344,7 @@ FloatRect RenderThemeIOS::addRoundedBorderClip(const RenderObject& box, Graphics
     return border.rect();
 }
 
-void RenderThemeIOS::adjustCheckboxStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeIOS::adjustCheckboxStyle(RenderStyle& style, const Element*) const
 {
     if (!style.width().isIntrinsicOrAuto() && !style.height().isAuto())
         return;
@@ -459,7 +459,7 @@ bool RenderThemeIOS::isControlStyled(const RenderStyle& style, const RenderStyle
     return RenderTheme::isControlStyled(style, userAgentStyle);
 }
 
-void RenderThemeIOS::adjustRadioStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeIOS::adjustRadioStyle(RenderStyle& style, const Element*) const
 {
     if (!style.width().isIntrinsicOrAuto() && !style.height().isAuto())
         return;
@@ -620,7 +620,7 @@ static void adjustInputElementButtonStyle(RenderStyle& style, const HTMLInputEle
     }
 }
 
-void RenderThemeIOS::adjustMenuListButtonStyle(StyleResolver&, RenderStyle& style, const Element* element) const
+void RenderThemeIOS::adjustMenuListButtonStyle(RenderStyle& style, const Element* element) const
 {
     // Set the min-height to be at least MenuListMinHeight.
     if (style.height().isAuto())
@@ -765,9 +765,9 @@ const CGFloat kTrackThickness = 4.0;
 const CGFloat kTrackRadius = kTrackThickness / 2.0;
 const int kDefaultSliderThumbSize = 16;
 
-void RenderThemeIOS::adjustSliderTrackStyle(StyleResolver& selector, RenderStyle& style, const Element* element) const
+void RenderThemeIOS::adjustSliderTrackStyle(RenderStyle& style, const Element* element) const
 {
-    RenderTheme::adjustSliderTrackStyle(selector, style, element);
+    RenderTheme::adjustSliderTrackStyle(style, element);
 
     // FIXME: We should not be relying on border radius for the appearance of our controls <rdar://problem/7675493>.
     int radius = static_cast<int>(kTrackRadius);
@@ -989,9 +989,9 @@ int RenderThemeIOS::sliderTickOffsetFromTrackCenter() const
 }
 #endif
 
-void RenderThemeIOS::adjustSearchFieldStyle(StyleResolver& selector, RenderStyle& style, const Element* element) const
+void RenderThemeIOS::adjustSearchFieldStyle(RenderStyle& style, const Element* element) const
 {
-    RenderTheme::adjustSearchFieldStyle(selector, style, element);
+    RenderTheme::adjustSearchFieldStyle(style, element);
 
     if (!element)
         return;
@@ -1011,9 +1011,9 @@ bool RenderThemeIOS::paintSearchFieldDecorations(const RenderObject& box, const
     return paintTextFieldDecorations(box, paintInfo, rect);
 }
 
-void RenderThemeIOS::adjustButtonStyle(StyleResolver& selector, RenderStyle& style, const Element* element) const
+void RenderThemeIOS::adjustButtonStyle(RenderStyle& style, const Element* element) const
 {
-    RenderTheme::adjustButtonStyle(selector, style, element);
+    RenderTheme::adjustButtonStyle(style, element);
 
 #if ENABLE(INPUT_TYPE_COLOR)
     if (style.appearance() == ColorWellPart)
index 1b9f460..07f26e5 100644 (file)
@@ -118,44 +118,44 @@ private:
 #endif
 
     bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) final;
-    void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustTextFieldStyle(RenderStyle&, const Element*) const final;
 
     bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) final;
-    void adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustTextAreaStyle(RenderStyle&, const Element*) const final;
 
     bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) final;
-    void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustMenuListStyle(RenderStyle&, const Element*) const final;
 
     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) final;
-    void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustMenuListButtonStyle(RenderStyle&, const Element*) const final;
 
-    void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustProgressBarStyle(RenderStyle&, const Element*) const final;
     bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) final;
 
     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) final;
-    void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSliderTrackStyle(RenderStyle&, const Element*) const final;
 
     bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) final;
-    void adjustSliderThumbStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSliderThumbStyle(RenderStyle&, const Element*) const final;
 
     bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) final;
-    void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSearchFieldStyle(RenderStyle&, const Element*) const final;
 
-    void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSearchFieldCancelButtonStyle(RenderStyle&, const Element*) const final;
     bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) final;
 
-    void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSearchFieldDecorationPartStyle(RenderStyle&, const Element*) const final;
     bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) final;
 
-    void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSearchFieldResultsDecorationPartStyle(RenderStyle&, const Element*) const final;
     bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) final;
 
-    void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustSearchFieldResultsButtonStyle(RenderStyle&, const Element*) const final;
     bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) final;
 
 #if ENABLE(DATALIST_ELEMENT)
     void paintListButtonForInput(const RenderObject&, GraphicsContext&, const FloatRect&);
-    void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
+    void adjustListButtonStyle(RenderStyle&, const Element*) const final;
 #endif
 
 #if ENABLE(VIDEO)
@@ -185,7 +185,7 @@ private:
     void setSizeFromFont(RenderStyle&, const IntSize* sizes) const;
     IntSize sizeForFont(const RenderStyle&, const IntSize* sizes) const;
     IntSize sizeForSystemFont(const RenderStyle&, const IntSize* sizes) const;
-    void setFontFromControlSize(StyleResolver&, RenderStyle&, NSControlSize) const;
+    void setFontFromControlSize(RenderStyle&, NSControlSize) const;
 
     void updateCheckedState(NSCell*, const RenderObject&);
     void updateEnabledState(NSCell*, const RenderObject&);
index aa5991c..087a74e 100644 (file)
@@ -63,7 +63,6 @@
 #import "RuntimeEnabledFeatures.h"
 #import "SharedBuffer.h"
 #import "StringTruncator.h"
-#import "StyleResolver.h"
 #import "ThemeMac.h"
 #import "TimeRanges.h"
 #import "UTIUtilities.h"
@@ -1074,7 +1073,7 @@ void RenderThemeMac::setSizeFromFont(RenderStyle& style, const IntSize* sizes) c
         style.setHeight(Length(size.height(), Fixed));
 }
 
-void RenderThemeMac::setFontFromControlSize(StyleResolver&, RenderStyle& style, NSControlSize controlSize) const
+void RenderThemeMac::setFontFromControlSize(RenderStyle& style, NSControlSize controlSize) const
 {
     FontCascadeDescription fontDescription;
     fontDescription.setIsAbsoluteSize(true);
@@ -1141,7 +1140,7 @@ void RenderThemeMac::paintListButtonForInput(const RenderObject& o, GraphicsCont
     context.drawImage(*image, imageRect);
 }
 
-void RenderThemeMac::adjustListButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustListButtonStyle(RenderStyle& style, const Element*) const
 {
     // Add a margin to place the button at end of the input field.
     if (style.isLeftToRightDirection())
@@ -1190,7 +1189,7 @@ bool RenderThemeMac::paintTextField(const RenderObject& o, const PaintInfo& pain
     return false;
 }
 
-void RenderThemeMac::adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderThemeMac::adjustTextFieldStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1201,7 +1200,7 @@ bool RenderThemeMac::paintTextArea(const RenderObject& o, const PaintInfo& paint
     return false;
 }
 
-void RenderThemeMac::adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderThemeMac::adjustTextAreaStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1429,7 +1428,7 @@ Seconds RenderThemeMac::animationDurationForProgressBar(RenderProgress&) const
     return progressAnimationFrameRate * progressAnimationNumFrames;
 }
 
-void RenderThemeMac::adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const
+void RenderThemeMac::adjustProgressBarStyle(RenderStyle&, const Element*) const
 {
 }
 
@@ -1674,7 +1673,7 @@ static const IntSize* menuListButtonSizes()
     return sizes;
 }
 
-void RenderThemeMac::adjustMenuListStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* e) const
+void RenderThemeMac::adjustMenuListStyle(RenderStyle& style, const Element* e) const
 {
     NSControlSize controlSize = controlSizeForFont(style);
 
@@ -1701,7 +1700,7 @@ void RenderThemeMac::adjustMenuListStyle(StyleResolver& styleResolver, RenderSty
     // Our font is locked to the appropriate system font size for the control.  To clarify, we first use the CSS-specified font to figure out
     // a reasonable control size, but once that control size is determined, we throw that font away and use the appropriate
     // system font for the control size instead.
-    setFontFromControlSize(styleResolver, style, controlSize);
+    setFontFromControlSize(style, controlSize);
 
     style.setBoxShadow(nullptr);
 }
@@ -1747,7 +1746,7 @@ PopupMenuStyle::PopupMenuSize RenderThemeMac::popupMenuSize(const RenderStyle& s
     }
 }
 
-void RenderThemeMac::adjustMenuListButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustMenuListButtonStyle(RenderStyle& style, const Element*) const
 {
     float fontScale = style.computedFontPixelSize() / baseFontSize;
 
@@ -1799,7 +1798,7 @@ int RenderThemeMac::minimumMenuListSize(const RenderStyle& style) const
 const int trackWidth = 5;
 const int trackRadius = 2;
 
-void RenderThemeMac::adjustSliderTrackStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustSliderTrackStyle(RenderStyle& style, const Element*) const
 {
     style.setBoxShadow(nullptr);
 }
@@ -1845,9 +1844,9 @@ bool RenderThemeMac::paintSliderTrack(const RenderObject& o, const PaintInfo& pa
     return false;
 }
 
-void RenderThemeMac::adjustSliderThumbStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* element) const
+void RenderThemeMac::adjustSliderThumbStyle(RenderStyle& style, const Element* element) const
 {
-    RenderTheme::adjustSliderThumbStyle(styleResolver, style, element);
+    RenderTheme::adjustSliderThumbStyle(style, element);
     style.setBoxShadow(nullptr);
 }
 
@@ -1984,7 +1983,7 @@ void RenderThemeMac::setSearchFieldSize(RenderStyle& style) const
     setSizeFromFont(style, searchFieldSizes());
 }
 
-void RenderThemeMac::adjustSearchFieldStyle(StyleResolver& styleResolver, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustSearchFieldStyle(RenderStyle& style, const Element*) const
 {
     // Override border.
     style.resetBorder();
@@ -2010,7 +2009,7 @@ void RenderThemeMac::adjustSearchFieldStyle(StyleResolver& styleResolver, Render
     style.setPaddingBottom(Length(padding, Fixed));
 
     NSControlSize controlSize = controlSizeForFont(style);
-    setFontFromControlSize(styleResolver, style, controlSize);
+    setFontFromControlSize(style, controlSize);
 
     style.setBoxShadow(nullptr);
 }
@@ -2075,7 +2074,7 @@ const IntSize* RenderThemeMac::cancelButtonSizes() const
     return sizes;
 }
 
-void RenderThemeMac::adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustSearchFieldCancelButtonStyle(RenderStyle& style, const Element*) const
 {
     IntSize size = sizeForSystemFont(style, cancelButtonSizes());
     style.setWidth(Length(size.width(), Fixed));
@@ -2091,7 +2090,7 @@ const IntSize* RenderThemeMac::resultsButtonSizes() const
 }
 
 const int emptyResultsOffset = 9;
-void RenderThemeMac::adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustSearchFieldDecorationPartStyle(RenderStyle& style, const Element*) const
 {
     IntSize size = sizeForSystemFont(style, resultsButtonSizes());
     style.setWidth(Length(size.width() - emptyResultsOffset, Fixed));
@@ -2104,7 +2103,7 @@ bool RenderThemeMac::paintSearchFieldDecorationPart(const RenderObject&, const P
     return false;
 }
 
-void RenderThemeMac::adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustSearchFieldResultsDecorationPartStyle(RenderStyle& style, const Element*) const
 {
     IntSize size = sizeForSystemFont(style, resultsButtonSizes());
     style.setWidth(Length(size.width(), Fixed));
@@ -2140,7 +2139,7 @@ bool RenderThemeMac::paintSearchFieldResultsDecorationPart(const RenderBox& box,
     return false;
 }
 
-void RenderThemeMac::adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeMac::adjustSearchFieldResultsButtonStyle(RenderStyle& style, const Element*) const
 {
     IntSize size = sizeForSystemFont(style, resultsButtonSizes());
     style.setWidth(Length(size.width() + resultsArrowWidth, Fixed));
index de04e5f..cfd9f25 100644 (file)
@@ -682,7 +682,7 @@ bool RenderThemeWin::paintButton(const RenderObject& o, const PaintInfo& i, cons
     return false;
 }
 
-void RenderThemeWin::adjustInnerSpinButtonStyle(StyleResolver& styleResolver, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustInnerSpinButtonStyle(RenderStyle& style, const Element*) const
 {
     int width = ::GetSystemMetrics(SM_CXVSCROLL);
     if (width <= 0)
@@ -746,13 +746,13 @@ bool RenderThemeWin::paintMenuList(const RenderObject& renderer, const PaintInfo
     return paintMenuListButtonDecorations(downcast<RenderBox>(renderer), paintInfo, FloatRect(rect));
 }
 
-void RenderThemeWin::adjustMenuListStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* e) const
+void RenderThemeWin::adjustMenuListStyle(RenderStyle& style, const Element* e) const
 {
     style.resetBorder();
-    adjustMenuListButtonStyle(styleResolver, style, e);
+    adjustMenuListButtonStyle(style, e);
 }
 
-void RenderThemeWin::adjustMenuListButtonStyle(StyleResolver& styleResolver, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustMenuListButtonStyle(RenderStyle& style, const Element*) const
 {
     // These are the paddings needed to place the text correctly in the <select> box
     const int dropDownBoxPaddingTop    = 2;
@@ -856,7 +856,7 @@ bool RenderThemeWin::paintSearchField(const RenderObject& o, const PaintInfo& i,
     return paintTextField(o, i, r);
 }
 
-void RenderThemeWin::adjustSearchFieldStyle(StyleResolver& styleResolver, RenderStyle& style, const Element* e) const
+void RenderThemeWin::adjustSearchFieldStyle(RenderStyle& style, const Element* e) const
 {
     // Override paddingSize to match AppKit text positioning.
     const int padding = 1;
@@ -891,7 +891,7 @@ bool RenderThemeWin::paintSearchFieldCancelButton(const RenderBox& o, const Pain
     return false;
 }
 
-void RenderThemeWin::adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustSearchFieldCancelButtonStyle(RenderStyle& style, const Element*) const
 {
     // Scale the button size based on the font size
     float fontScale = style.computedFontPixelSize() / defaultControlFontPixelSize;
@@ -900,14 +900,14 @@ void RenderThemeWin::adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderSt
     style.setHeight(Length(cancelButtonSize, Fixed));
 }
 
-void RenderThemeWin::adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustSearchFieldDecorationPartStyle(RenderStyle& style, const Element*) const
 {
     IntSize emptySize(1, 11);
     style.setWidth(Length(emptySize.width(), Fixed));
     style.setHeight(Length(emptySize.height(), Fixed));
 }
 
-void RenderThemeWin::adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustSearchFieldResultsDecorationPartStyle(RenderStyle& style, const Element*) const
 {
     // Scale the decoration size based on the font size
     float fontScale = style.computedFontPixelSize() / defaultControlFontPixelSize;
@@ -939,7 +939,7 @@ bool RenderThemeWin::paintSearchFieldResultsDecorationPart(const RenderBox& o, c
     return false;
 }
 
-void RenderThemeWin::adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustSearchFieldResultsButtonStyle(RenderStyle& style, const Element*) const
 {
     // Scale the button size based on the font size
     float fontScale = style.computedFontPixelSize() / defaultControlFontPixelSize;
@@ -1104,7 +1104,7 @@ String RenderThemeWin::mediaControlsScript()
 #endif
 
 #if ENABLE(METER_ELEMENT)
-void RenderThemeWin::adjustMeterStyle(StyleResolver&, RenderStyle& style, const Element*) const
+void RenderThemeWin::adjustMeterStyle(RenderStyle& style, const Element*) const
 {
     style.setBoxShadow(nullptr);
 }
index 8280f91..5eee8e6 100644 (file)
@@ -72,7 +72,7 @@ public:
 
     bool paintButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
-    void adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustInnerSpinButtonStyle(RenderStyle&, const Element*) const override;
     bool paintInnerSpinButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
     bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) override;
@@ -80,9 +80,9 @@ public:
     bool paintTextArea(const RenderObject& o, const PaintInfo& i, const FloatRect& r) override
     { return paintTextField(o, i, r); }
 
-    void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustMenuListStyle(RenderStyle&, const Element*) const override;
     bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
-    void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustMenuListButtonStyle(RenderStyle&, const Element*) const override;
 
     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
 
@@ -92,26 +92,26 @@ public:
 
     bool popupOptionSupportsTextIndent() const override { return true; }
 
-    void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldStyle(RenderStyle&, const Element*) const override;
     bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) override;
 
-    void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldCancelButtonStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) override;
 
-    void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldDecorationPartStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) override { return false; }
 
-    void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldResultsDecorationPartStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) override;
 
-    void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustSearchFieldResultsButtonStyle(RenderStyle&, const Element*) const override;
     bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) override;
 
     void themeChanged() override;
 
-    void adjustButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const override { }
-    void adjustTextFieldStyle(StyleResolver&, RenderStyle& style, const Element*) const override { }
-    void adjustTextAreaStyle(StyleResolver&, RenderStyle& style, const Element*) const override { }
+    void adjustButtonStyle(RenderStyle& style, const Element*) const override { }
+    void adjustTextFieldStyle(RenderStyle& style, const Element*) const override { }
+    void adjustTextAreaStyle(RenderStyle& style, const Element*) const override { }
 
     static void setWebKitIsBeingUnloaded();
 
@@ -127,7 +127,7 @@ public:
 #if ENABLE(METER_ELEMENT)
     IntSize meterSizeForBounds(const RenderMeter&, const IntRect&) const override;
     bool supportsMeter(ControlPart) const override;
-    void adjustMeterStyle(StyleResolver&, RenderStyle&, const Element*) const override;
+    void adjustMeterStyle(RenderStyle&, const Element*) const override;
     bool paintMeter(const RenderObject&, const PaintInfo&, const IntRect&) override;
 #endif
 
diff --git a/Source/WebCore/style/StyleAdjuster.cpp b/Source/WebCore/style/StyleAdjuster.cpp
new file mode 100644 (file)
index 0000000..fdd47f3
--- /dev/null
@@ -0,0 +1,612 @@
+/*
+ * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
+ * Copyright (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
+ * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
+ * Copyright (C) 2005-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
+ * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
+ * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+ * Copyright (C) Research In Motion Limited 2011. All rights reserved.
+ * Copyright (C) 2012, 2013 Google Inc. All rights reserved.
+ * Copyright (C) 2014 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "StyleAdjuster.h"
+
+#include "CSSFontSelector.h"
+#include "Element.h"
+#include "HTMLInputElement.h"
+#include "HTMLMarqueeElement.h"
+#include "HTMLNames.h"
+#include "HTMLSlotElement.h"
+#include "HTMLTableElement.h"
+#include "HTMLTextAreaElement.h"
+#include "MathMLElement.h"
+#include "Quirks.h"
+#include "RenderStyle.h"
+#include "RenderTheme.h"
+#include "RuntimeEnabledFeatures.h"
+#include "SVGDocument.h"
+#include "SVGElement.h"
+#include "SVGNames.h"
+#include "SVGURIReference.h"
+#include "Settings.h"
+
+namespace WebCore {
+namespace Style {
+
+using namespace HTMLNames;
+
+Adjuster::Adjuster(const Document& document, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle, const Element* element)
+    : m_document(document)
+    , m_parentStyle(parentStyle)
+    , m_parentBoxStyle(parentBoxStyle ? *parentBoxStyle : m_parentStyle)
+    , m_element(element)
+{
+}
+
+static void addIntrinsicMargins(RenderStyle& style)
+{
+    // Intrinsic margin value.
+    const int intrinsicMargin = clampToInteger(2 * style.effectiveZoom());
+
+    // FIXME: Using width/height alone and not also dealing with min-width/max-width is flawed.
+    // FIXME: Using "hasQuirk" to decide the margin wasn't set is kind of lame.
+    if (style.width().isIntrinsicOrAuto()) {
+        if (style.marginLeft().hasQuirk())
+            style.setMarginLeft(Length(intrinsicMargin, Fixed));
+        if (style.marginRight().hasQuirk())
+            style.setMarginRight(Length(intrinsicMargin, Fixed));
+    }
+
+    if (style.height().isAuto()) {
+        if (style.marginTop().hasQuirk())
+            style.setMarginTop(Length(intrinsicMargin, Fixed));
+        if (style.marginBottom().hasQuirk())
+            style.setMarginBottom(Length(intrinsicMargin, Fixed));
+    }
+}
+
+static DisplayType equivalentBlockDisplay(const RenderStyle& style, const Document& document)
+{
+    switch (auto display = style.display()) {
+    case DisplayType::Block:
+    case DisplayType::Table:
+    case DisplayType::Box:
+    case DisplayType::Flex:
+    case DisplayType::WebKitFlex:
+    case DisplayType::Grid:
+    case DisplayType::FlowRoot:
+        return display;
+
+    case DisplayType::ListItem:
+        // It is a WinIE bug that floated list items lose their bullets, so we'll emulate the quirk, but only in quirks mode.
+        if (document.inQuirksMode() && style.isFloating())
+            return DisplayType::Block;
+        return display;
+    case DisplayType::InlineTable:
+        return DisplayType::Table;
+    case DisplayType::InlineBox:
+        return DisplayType::Box;
+    case DisplayType::InlineFlex:
+    case DisplayType::WebKitInlineFlex:
+        return DisplayType::Flex;
+    case DisplayType::InlineGrid:
+        return DisplayType::Grid;
+
+    case DisplayType::Inline:
+    case DisplayType::Compact:
+    case DisplayType::InlineBlock:
+    case DisplayType::TableRowGroup:
+    case DisplayType::TableHeaderGroup:
+    case DisplayType::TableFooterGroup:
+    case DisplayType::TableRow:
+    case DisplayType::TableColumnGroup:
+    case DisplayType::TableColumn:
+    case DisplayType::TableCell:
+    case DisplayType::TableCaption:
+        return DisplayType::Block;
+    case DisplayType::Contents:
+        ASSERT_NOT_REACHED();
+        return DisplayType::Contents;
+    case DisplayType::None:
+        ASSERT_NOT_REACHED();
+        return DisplayType::None;
+    }
+    ASSERT_NOT_REACHED();
+    return DisplayType::Block;
+}
+
+static inline bool isAtShadowBoundary(const Element& element)
+{
+    auto* parentNode = element.parentNode();
+    return parentNode && parentNode->isShadowRoot();
+}
+
+// CSS requires text-decoration to be reset at each DOM element for tables,
+// inline blocks, inline tables, shadow DOM crossings, floating elements,
+// and absolute or relatively positioned elements.
+static bool doesNotInheritTextDecoration(const RenderStyle& style, const Element* element)
+{
+    return style.display() == DisplayType::Table || style.display() == DisplayType::InlineTable
+        || style.display() == DisplayType::InlineBlock || style.display() == DisplayType::InlineBox || (element && isAtShadowBoundary(*element))
+        || style.isFloating() || style.hasOutOfFlowPosition();
+}
+
+#if ENABLE(OVERFLOW_SCROLLING_TOUCH) || ENABLE(POINTER_EVENTS)
+static bool isScrollableOverflow(Overflow overflow)
+{
+    return overflow == Overflow::Scroll || overflow == Overflow::Auto;
+}
+#endif
+
+#if ENABLE(POINTER_EVENTS)
+static OptionSet<TouchAction> computeEffectiveTouchActions(const RenderStyle& style, OptionSet<TouchAction> effectiveTouchActions)
+{
+    // https://w3c.github.io/pointerevents/#determining-supported-touch-behavior
+    // "A touch behavior is supported if it conforms to the touch-action property of each element between
+    // the hit tested element and its nearest ancestor with the default touch behavior (including both the
+    // hit tested element and the element with the default touch behavior)."
+
+    bool hasDefaultTouchBehavior = isScrollableOverflow(style.overflowX()) || isScrollableOverflow(style.overflowY());
+    if (hasDefaultTouchBehavior)
+        effectiveTouchActions = RenderStyle::initialTouchActions();
+
+    auto touchActions = style.touchActions();
+    if (touchActions == RenderStyle::initialTouchActions())
+        return effectiveTouchActions;
+
+    if (effectiveTouchActions.contains(TouchAction::None))
+        return { TouchAction::None };
+
+    if (effectiveTouchActions.containsAny({ TouchAction::Auto, TouchAction::Manipulation }))
+        return touchActions;
+
+    if (touchActions.containsAny({ TouchAction::Auto, TouchAction::Manipulation }))
+        return effectiveTouchActions;
+
+    auto sharedTouchActions = effectiveTouchActions & touchActions;
+    if (sharedTouchActions.isEmpty())
+        return { TouchAction::None };
+
+    return sharedTouchActions;
+}
+#endif
+
+void Adjuster::adjust(RenderStyle& style, const RenderStyle* userAgentAppearanceStyle) const
+{
+    // Cache our original display.
+    style.setOriginalDisplay(style.display());
+
+    if (style.display() == DisplayType::Contents)
+        adjustDisplayContentsStyle(style);
+
+    if (style.display() != DisplayType::None && style.display() != DisplayType::Contents) {
+        if (m_element) {
+            // If we have a <td> that specifies a float property, in quirks mode we just drop the float
+            // property.
+            // Sites also commonly use display:inline/block on <td>s and <table>s. In quirks mode we force
+            // these tags to retain their display types.
+            if (m_document.inQuirksMode()) {
+                if (m_element->hasTagName(tdTag)) {
+                    style.setDisplay(DisplayType::TableCell);
+                    style.setFloating(Float::No);
+                } else if (is<HTMLTableElement>(*m_element))
+                    style.setDisplay(style.isDisplayInlineType() ? DisplayType::InlineTable : DisplayType::Table);
+            }
+
+            if (m_element->hasTagName(tdTag) || m_element->hasTagName(thTag)) {
+                if (style.whiteSpace() == WhiteSpace::KHTMLNoWrap) {
+                    // Figure out if we are really nowrapping or if we should just
+                    // use normal instead. If the width of the cell is fixed, then
+                    // we don't actually use WhiteSpace::NoWrap.
+                    if (style.width().isFixed())
+                        style.setWhiteSpace(WhiteSpace::Normal);
+                    else
+                        style.setWhiteSpace(WhiteSpace::NoWrap);
+                }
+            }
+
+            // Tables never support the -webkit-* values for text-align and will reset back to the default.
+            if (is<HTMLTableElement>(*m_element) && (style.textAlign() == TextAlignMode::WebKitLeft || style.textAlign() == TextAlignMode::WebKitCenter || style.textAlign() == TextAlignMode::WebKitRight))
+                style.setTextAlign(TextAlignMode::Start);
+
+            // Frames and framesets never honor position:relative or position:absolute. This is necessary to
+            // fix a crash where a site tries to position these objects. They also never honor display.
+            if (m_element->hasTagName(frameTag) || m_element->hasTagName(framesetTag)) {
+                style.setPosition(PositionType::Static);
+                style.setDisplay(DisplayType::Block);
+            }
+
+            // Ruby text does not support float or position. This might change with evolution of the specification.
+            if (m_element->hasTagName(rtTag)) {
+                style.setPosition(PositionType::Static);
+                style.setFloating(Float::No);
+            }
+
+            // User agents are expected to have a rule in their user agent stylesheet that matches th elements that have a parent
+            // node whose computed value for the 'text-align' property is its initial value, whose declaration block consists of
+            // just a single declaration that sets the 'text-align' property to the value 'center'.
+            // https://html.spec.whatwg.org/multipage/rendering.html#rendering
+            if (m_element->hasTagName(thTag) && !style.hasExplicitlySetTextAlign() && m_parentStyle.textAlign() == RenderStyle::initialTextAlign())
+                style.setTextAlign(TextAlignMode::Center);
+
+            if (m_element->hasTagName(legendTag))
+                style.setDisplay(DisplayType::Block);
+        }
+
+        // Absolute/fixed positioned elements, floating elements and the document element need block-like outside display.
+        if (style.hasOutOfFlowPosition() || style.isFloating() || (m_element && m_document.documentElement() == m_element))
+            style.setDisplay(equivalentBlockDisplay(style, m_document));
+
+        // FIXME: Don't support this mutation for pseudo styles like first-letter or first-line, since it's not completely
+        // clear how that should work.
+        if (style.display() == DisplayType::Inline && style.styleType() == PseudoId::None && style.writingMode() != m_parentStyle.writingMode())
+            style.setDisplay(DisplayType::InlineBlock);
+
+        // After performing the display mutation, check table rows. We do not honor position:relative or position:sticky on
+        // table rows or cells. This has been established for position:relative in CSS2.1 (and caused a crash in containingBlock()
+        // on some sites).
+        if ((style.display() == DisplayType::TableHeaderGroup || style.display() == DisplayType::TableRowGroup
+            || style.display() == DisplayType::TableFooterGroup || style.display() == DisplayType::TableRow)
+            && style.position() == PositionType::Relative)
+            style.setPosition(PositionType::Static);
+
+        // writing-mode does not apply to table row groups, table column groups, table rows, and table columns.
+        // FIXME: Table cells should be allowed to be perpendicular or flipped with respect to the table, though.
+        if (style.display() == DisplayType::TableColumn || style.display() == DisplayType::TableColumnGroup || style.display() == DisplayType::TableFooterGroup
+            || style.display() == DisplayType::TableHeaderGroup || style.display() == DisplayType::TableRow || style.display() == DisplayType::TableRowGroup
+            || style.display() == DisplayType::TableCell)
+            style.setWritingMode(m_parentStyle.writingMode());
+
+        // FIXME: Since we don't support block-flow on flexible boxes yet, disallow setting
+        // of block-flow to anything other than TopToBottomWritingMode.
+        // https://bugs.webkit.org/show_bug.cgi?id=46418 - Flexible box support.
+        if (style.writingMode() != TopToBottomWritingMode && (style.display() == DisplayType::Box || style.display() == DisplayType::InlineBox))
+            style.setWritingMode(TopToBottomWritingMode);
+
+        // https://www.w3.org/TR/css-display/#transformations
+        // "A parent with a grid or flex display value blockifies the box’s display type."
+        if (m_parentBoxStyle.isDisplayFlexibleOrGridBox()) {
+            style.setFloating(Float::No);
+            style.setDisplay(equivalentBlockDisplay(style, m_document));
+        }
+    }
+
+    // Make sure our z-index value is only applied if the object is positioned.
+    if (style.position() == PositionType::Static && !m_parentBoxStyle.isDisplayFlexibleOrGridBox())
+        style.setHasAutoZIndex();
+
+    // Auto z-index becomes 0 for the root element and transparent objects. This prevents
+    // cases where objects that should be blended as a single unit end up with a non-transparent
+    // object wedged in between them. Auto z-index also becomes 0 for objects that specify transforms/masks/reflections.
+    if (style.hasAutoZIndex()) {
+        if ((m_element && m_document.documentElement() == m_element)
+            || style.opacity() < 1.0f
+            || style.hasTransformRelatedProperty()
+            || style.hasMask()
+            || style.clipPath()
+            || style.boxReflect()
+            || style.hasFilter()
+#if ENABLE(FILTERS_LEVEL_2)
+            || style.hasBackdropFilter()
+#endif
+            || style.hasBlendMode()
+            || style.hasIsolation()
+            || style.position() == PositionType::Sticky
+            || style.position() == PositionType::Fixed
+            || style.willChangeCreatesStackingContext())
+            style.setZIndex(0);
+    }
+
+    if (m_element) {
+        // Textarea considers overflow visible as auto.
+        if (is<HTMLTextAreaElement>(*m_element)) {
+            style.setOverflowX(style.overflowX() == Overflow::Visible ? Overflow::Auto : style.overflowX());
+            style.setOverflowY(style.overflowY() == Overflow::Visible ? Overflow::Auto : style.overflowY());
+        }
+
+        // Disallow -webkit-user-modify on :pseudo and ::pseudo elements.
+        if (!m_element->shadowPseudoId().isNull())
+            style.setUserModify(UserModify::ReadOnly);
+
+        if (is<HTMLMarqueeElement>(*m_element)) {
+            // For now, <marquee> requires an overflow clip to work properly.
+            style.setOverflowX(Overflow::Hidden);
+            style.setOverflowY(Overflow::Hidden);
+
+            bool isVertical = style.marqueeDirection() == MarqueeDirection::Up || style.marqueeDirection() == MarqueeDirection::Down;
+            // Make horizontal marquees not wrap.
+            if (!isVertical) {
+                style.setWhiteSpace(WhiteSpace::NoWrap);
+                style.setTextAlign(TextAlignMode::Start);
+            }
+            // Apparently this is the expected legacy behavior.
+            if (isVertical && style.height().isAuto())
+                style.setHeight(Length(200, Fixed));
+        }
+    }
+
+    if (doesNotInheritTextDecoration(style, m_element))
+        style.setTextDecorationsInEffect(style.textDecoration());
+    else
+        style.addToTextDecorationsInEffect(style.textDecoration());
+
+    // If either overflow value is not visible, change to auto.
+    if (style.overflowX() == Overflow::Visible && style.overflowY() != Overflow::Visible) {
+        // FIXME: Once we implement pagination controls, overflow-x should default to hidden
+        // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, we'll let it
+        // default to auto so we can at least scroll through the pages.
+        style.setOverflowX(Overflow::Auto);
+    } else if (style.overflowY() == Overflow::Visible && style.overflowX() != Overflow::Visible)
+        style.setOverflowY(Overflow::Auto);
+
+    // Call setStylesForPaginationMode() if a pagination mode is set for any non-root elements. If these
+    // styles are specified on a root element, then they will be incorporated in
+    // Style::createForm_document.
+    if ((style.overflowY() == Overflow::PagedX || style.overflowY() == Overflow::PagedY) && !(m_element && (m_element->hasTagName(htmlTag) || m_element->hasTagName(bodyTag))))
+        style.setColumnStylesFromPaginationMode(WebCore::paginationModeForRenderStyle(style));
+
+    // Table rows, sections and the table itself will support overflow:hidden and will ignore scroll/auto.
+    // FIXME: Eventually table sections will support auto and scroll.
+    if (style.display() == DisplayType::Table || style.display() == DisplayType::InlineTable
+        || style.display() == DisplayType::TableRowGroup || style.display() == DisplayType::TableRow) {
+        if (style.overflowX() != Overflow::Visible && style.overflowX() != Overflow::Hidden)
+            style.setOverflowX(Overflow::Visible);
+        if (style.overflowY() != Overflow::Visible && style.overflowY() != Overflow::Hidden)
+            style.setOverflowY(Overflow::Visible);
+    }
+
+    // Menulists should have visible overflow
+    if (style.appearance() == MenulistPart) {
+        style.setOverflowX(Overflow::Visible);
+        style.setOverflowY(Overflow::Visible);
+    }
+
+#if ENABLE(OVERFLOW_SCROLLING_TOUCH)
+    // Touch overflow scrolling creates a stacking context.
+    if (style.hasAutoZIndex() && style.useTouchOverflowScrolling() && (isScrollableOverflow(style.overflowX()) || isScrollableOverflow(style.overflowY())))
+        style.setZIndex(0);
+#endif
+
+    // Cull out any useless layers and also repeat patterns into additional layers.
+    style.adjustBackgroundLayers();
+    style.adjustMaskLayers();
+
+    // Do the same for animations and transitions.
+    style.adjustAnimations();
+    style.adjustTransitions();
+
+    // Important: Intrinsic margins get added to controls before the theme has adjusted the style, since the theme will
+    // alter fonts and heights/widths.
+    if (is<HTMLFormControlElement>(m_element) && style.computedFontPixelSize() >= 11) {
+        // Don't apply intrinsic margins to image buttons. The designer knows how big the images are,
+        // so we have to treat all image buttons as though they were explicitly sized.
+        if (!is<HTMLInputElement>(*m_element) || !downcast<HTMLInputElement>(*m_element).isImageButton())
+            addIntrinsicMargins(style);
+    }
+
+    // Let the theme also have a crack at adjusting the style.
+    if (style.hasAppearance())
+        RenderTheme::singleton().adjustStyle(style, m_element, userAgentAppearanceStyle);
+
+    // If we have first-letter pseudo style, do not share this style.
+    if (style.hasPseudoStyle(PseudoId::FirstLetter))
+        style.setUnique();
+
+    // FIXME: when dropping the -webkit prefix on transform-style, we should also have opacity < 1 cause flattening.
+    if (style.preserves3D() && (style.overflowX() != Overflow::Visible
+        || style.overflowY() != Overflow::Visible
+        || style.hasClip()
+        || style.clipPath()
+        || style.hasFilter()
+#if ENABLE(FILTERS_LEVEL_2)
+        || style.hasBackdropFilter()
+#endif
+        || style.hasBlendMode()))
+        style.setTransformStyle3D(TransformStyle3D::Flat);
+
+    if (is<SVGElement>(m_element))
+        adjustSVGElementStyle(style, downcast<SVGElement>(*m_element));
+
+    // If the inherited value of justify-items includes the 'legacy' keyword (plus 'left', 'right' or
+    // 'center'), 'legacy' computes to the the inherited value. Otherwise, 'auto' computes to 'normal'.
+    if (m_parentBoxStyle.justifyItems().positionType() == ItemPositionType::Legacy && style.justifyItems().position() == ItemPosition::Legacy)
+        style.setJustifyItems(m_parentBoxStyle.justifyItems());
+
+#if ENABLE(POINTER_EVENTS)
+    style.setEffectiveTouchActions(computeEffectiveTouchActions(style, m_parentStyle.effectiveTouchActions()));
+#endif
+
+#if ENABLE(TEXT_AUTOSIZING)
+    if (m_element)
+        adjustForTextAutosizing(style, *m_element);
+#endif
+
+    adjustForSiteSpecificQuirks(style);
+}
+
+static bool hasEffectiveDisplayNoneForDisplayContents(const Element& element)
+{
+    // https://drafts.csswg.org/css-display-3/#unbox-html
+    static NeverDestroyed<HashSet<AtomString>> tagNames = [] {
+        static const HTMLQualifiedName* const tagList[] = {
+            &brTag.get(),
+            &wbrTag.get(),
+            &meterTag.get(),
+            &appletTag.get(),
+            &progressTag.get(),
+            &canvasTag.get(),
+            &embedTag.get(),
+            &objectTag.get(),
+            &audioTag.get(),
+            &iframeTag.get(),
+            &imgTag.get(),
+            &videoTag.get(),
+            &frameTag.get(),
+            &framesetTag.get(),
+            &inputTag.get(),
+            &textareaTag.get(),
+            &selectTag.get(),
+        };
+        HashSet<AtomString> set;
+        for (auto& name : tagList)
+            set.add(name->localName());
+        return set;
+    }();
+
+    // https://drafts.csswg.org/css-display-3/#unbox-svg
+    // FIXME: <g>, <use> and <tspan> have special (?) behavior for display:contents in the current draft spec.
+    if (is<SVGElement>(element))
+        return true;
+#if ENABLE(MATHML)
+    // Not sure MathML code can handle it.
+    if (is<MathMLElement>(element))
+        return true;
+#endif // ENABLE(MATHML)
+    if (!is<HTMLElement>(element))
+        return false;
+    return tagNames.get().contains(element.localName());
+}
+
+void Adjuster::adjustDisplayContentsStyle(RenderStyle& style) const
+{
+    bool displayContentsEnabled = is<HTMLSlotElement>(m_element) || RuntimeEnabledFeatures::sharedFeatures().displayContentsEnabled();
+    if (!displayContentsEnabled) {
+        style.setDisplay(DisplayType::Inline);
+        return;
+    }
+
+    if (!m_element) {
+        if (style.styleType() != PseudoId::Before && style.styleType() != PseudoId::After)
+            style.setDisplay(DisplayType::None);
+        return;
+    }
+
+    if (m_document.documentElement() == m_element) {
+        style.setDisplay(DisplayType::Block);
+        return;
+    }
+
+    if (hasEffectiveDisplayNoneForDisplayContents(*m_element))
+        style.setDisplay(DisplayType::None);
+}
+
+void Adjuster::adjustSVGElementStyle(RenderStyle& style, const SVGElement& svgElement)
+{
+    // Only the root <svg> element in an SVG document fragment tree honors css position
+    auto isPositioningAllowed = svgElement.hasTagName(SVGNames::svgTag) && svgElement.parentNode() && !svgElement.parentNode()->isSVGElement() && !svgElement.correspondingElement();
+    if (!isPositioningAllowed)
+        style.setPosition(RenderStyle::initialPosition());
+
+    // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignObject content should
+    // not be scaled again.
+    if (svgElement.hasTagName(SVGNames::foreignObjectTag))
+        style.setEffectiveZoom(RenderStyle::initialZoom());
+
+    // SVG text layout code expects us to be a block-level style element.
+    if ((svgElement.hasTagName(SVGNames::foreignObjectTag) || svgElement.hasTagName(SVGNames::textTag)) && style.isDisplayInlineType())
+        style.setDisplay(DisplayType::Block);
+}
+
+void Adjuster::adjustForSiteSpecificQuirks(RenderStyle& style) const
+{
+    if (m_document.quirks().needsGMailOverflowScrollQuirk() && m_element) {
+        // This turns sidebar scrollable without mouse move event.
+        static NeverDestroyed<AtomString> roleValue("navigation", AtomString::ConstructFromLiteral);
+        if (style.overflowY() == Overflow::Hidden && m_element->attributeWithoutSynchronization(roleAttr) == roleValue)
+            style.setOverflowY(Overflow::Auto);
+    }
+    if (m_document.quirks().needsYouTubeOverflowScrollQuirk() && m_element) {
+        // This turns sidebar scrollable without hover.
+        static NeverDestroyed<AtomString> idValue("guide-inner-content", AtomString::ConstructFromLiteral);
+        if (style.overflowY() == Overflow::Hidden && m_element->idForStyleResolution() == idValue)
+            style.setOverflowY(Overflow::Auto);
+    }
+}
+
+#if ENABLE(TEXT_AUTOSIZING)
+static bool hasTextChild(const Element& element)
+{
+    for (auto* child = element.firstChild(); child; child = child->nextSibling()) {
+        if (is<Text>(child))
+            return true;
+    }
+    return false;
+}
+
+bool Adjuster::adjustForTextAutosizing(RenderStyle& style, const Element& element)
+{
+    auto& document = element.document();
+    if (!document.settings().textAutosizingEnabled() || !document.settings().textAutosizingUsesIdempotentMode())
+        return false;
+
+    AutosizeStatus::updateStatus(style);
+    if (style.textSizeAdjust().isNone())
+        return false;
+
+    float initialScale = document.page() ? document.page()->initialScale() : 1;
+    auto adjustLineHeightIfNeeded = [&](auto computedFontSize) {
+        auto lineHeight = style.specifiedLineHeight();
+        constexpr static unsigned eligibleFontSize = 12;
+        if (computedFontSize * initialScale >= eligibleFontSize)
+            return;
+
+        constexpr static float boostFactor = 1.25;
+        auto minimumLineHeight = boostFactor * computedFontSize;
+        if (!lineHeight.isFixed() || lineHeight.value() >= minimumLineHeight)
+            return;
+
+        if (AutosizeStatus::probablyContainsASmallFixedNumberOfLines(style))
+            return;
+
+        style.setLineHeight({ minimumLineHeight, Fixed });
+    };
+
+    auto fontDescription = style.fontDescription();
+    auto initialComputedFontSize = fontDescription.computedSize();
+    auto specifiedFontSize = fontDescription.specifiedSize();
+    bool isCandidate = style.isIdempotentTextAutosizingCandidate();
+    if (!isCandidate && WTF::areEssentiallyEqual(initialComputedFontSize, specifiedFontSize))
+        return false;
+
+    auto adjustedFontSize = AutosizeStatus::idempotentTextSize(fontDescription.specifiedSize(), initialScale);
+    if (isCandidate && WTF::areEssentiallyEqual(initialComputedFontSize, adjustedFontSize))
+        return false;
+
+    if (!hasTextChild(element))
+        return false;
+
+    fontDescription.setComputedSize(isCandidate ? adjustedFontSize : specifiedFontSize);
+    style.setFontDescription(WTFMove(fontDescription));
+    style.fontCascade().update(&document.fontSelector());
+
+    // FIXME: We should restore computed line height to its original value in the case where the element is not
+    // an idempotent text autosizing candidate; otherwise, if an element that is a text autosizing candidate contains
+    // children which are not autosized, the non-autosized content will end up with a boosted line height.
+    if (isCandidate)
+        adjustLineHeightIfNeeded(adjustedFontSize);
+
+    return true;
+}
+#endif
+
+}
+}
diff --git a/Source/WebCore/style/StyleAdjuster.h b/Source/WebCore/style/StyleAdjuster.h
new file mode 100644 (file)
index 0000000..805b05d
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+namespace WebCore {
+
+class Element;
+class RenderStyle;
+class SVGElement;
+class Settings;
+
+namespace Style {
+
+class Adjuster {
+public:
+    Adjuster(const Document&, const RenderStyle& parentStyle, const RenderStyle* parentBoxStyle, const Element*);
+
+    void adjust(RenderStyle&, const RenderStyle* userAgentAppearanceStyle) const;
+
+    static void adjustSVGElementStyle(RenderStyle&, const SVGElement&);
+#if ENABLE(TEXT_AUTOSIZING)
+    static bool adjustForTextAutosizing(RenderStyle&, const Element&);
+#endif
+
+private:
+    void adjustDisplayContentsStyle(RenderStyle&) const;
+    void adjustForSiteSpecificQuirks(RenderStyle&) const;
+
+    const Document& m_document;
+    const RenderStyle& m_parentStyle;
+    const RenderStyle& m_parentBoxStyle;
+    const Element* m_element;
+};
+
+}
+}
index 11ebe25..2b9ff84 100644 (file)
@@ -51,6 +51,7 @@
 #include "SVGTitleElement.h"
 #include "SVGUseElement.h"
 #include "ShadowRoot.h"
+#include "StyleAdjuster.h"
 #include "XMLNames.h"
 #include <wtf/Assertions.h>
 #include <wtf/HashMap.h>
@@ -597,7 +598,7 @@ Optional<ElementStyle> SVGElement::resolveCustomStyle(const RenderStyle& parentS
     // If the element is in a <use> tree we get the style from the definition tree.
     if (auto styleElement = makeRefPtr(this->correspondingElement())) {
         Optional<ElementStyle> style = styleElement->resolveStyle(&parentStyle);
-        StyleResolver::adjustSVGElementStyle(*this, *style->renderStyle);
+        Style::Adjuster::adjustSVGElementStyle(*style->renderStyle, *this);
         return style;
     }