Diff
Modified: trunk/Source/WebCore/ChangeLog (207676 => 207677)
--- trunk/Source/WebCore/ChangeLog 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/ChangeLog 2016-10-21 16:35:09 UTC (rev 207677)
@@ -1,3 +1,22 @@
+2016-10-21 Dave Hyatt <hy...@apple.com>
+
+ [CSS Parser] Add support for @-webkit-region rules
+ https://bugs.webkit.org/show_bug.cgi?id=163787
+
+ Reviewed by Zalan Bujtas.
+
+ * css/StyleRule.cpp:
+ (WebCore::StyleRuleRegion::StyleRuleRegion):
+ * css/StyleRule.h:
+ * css/parser/CSSAtRuleID.cpp:
+ (WebCore::cssAtRuleID):
+ * css/parser/CSSAtRuleID.h:
+ * css/parser/CSSParserImpl.cpp:
+ (WebCore::CSSParserImpl::consumeAtRule):
+ (WebCore::CSSParserImpl::consumePageRule):
+ (WebCore::CSSParserImpl::consumeRegionRule):
+ * css/parser/CSSParserImpl.h:
+
2016-10-21 David Kilzer <ddkil...@apple.com>
Bug 163757: Use IntSize::unclampedArea() in PDFDocumentImage::updateCachedImageIfNeeded()
Modified: trunk/Source/WebCore/css/StyleRule.cpp (207676 => 207677)
--- trunk/Source/WebCore/css/StyleRule.cpp 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/css/StyleRule.cpp 2016-10-21 16:35:09 UTC (rev 207677)
@@ -371,6 +371,12 @@
m_selectorList.adoptSelectorVector(*selectors);
}
+StyleRuleRegion::StyleRuleRegion(CSSSelectorList& selectors, Vector<RefPtr<StyleRuleBase>>& adoptRules)
+ : StyleRuleGroup(Region, adoptRules)
+ , m_selectorList(WTFMove(selectors))
+{
+}
+
StyleRuleRegion::StyleRuleRegion(const StyleRuleRegion& o)
: StyleRuleGroup(o)
, m_selectorList(o.m_selectorList)
Modified: trunk/Source/WebCore/css/StyleRule.h (207676 => 207677)
--- trunk/Source/WebCore/css/StyleRule.h 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/css/StyleRule.h 2016-10-21 16:35:09 UTC (rev 207677)
@@ -236,7 +236,12 @@
{
return adoptRef(*new StyleRuleRegion(selectors, adoptRules));
}
-
+
+ static Ref<StyleRuleRegion> create(CSSSelectorList& selectors, Vector<RefPtr<StyleRuleBase>>& adoptRules)
+ {
+ return adoptRef(*new StyleRuleRegion(selectors, adoptRules));
+ }
+
const CSSSelectorList& selectorList() const { return m_selectorList; }
Ref<StyleRuleRegion> copy() const { return adoptRef(*new StyleRuleRegion(*this)); }
@@ -243,6 +248,7 @@
private:
StyleRuleRegion(Vector<std::unique_ptr<CSSParserSelector>>*, Vector<RefPtr<StyleRuleBase>>& adoptRules);
+ StyleRuleRegion(CSSSelectorList&, Vector<RefPtr<StyleRuleBase>>&);
StyleRuleRegion(const StyleRuleRegion&);
CSSSelectorList m_selectorList;
Modified: trunk/Source/WebCore/css/parser/CSSAtRuleID.cpp (207676 => 207677)
--- trunk/Source/WebCore/css/parser/CSSAtRuleID.cpp 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/css/parser/CSSAtRuleID.cpp 2016-10-21 16:35:09 UTC (rev 207677)
@@ -56,6 +56,10 @@
return CSSAtRuleWebkitKeyframes;
if (equalIgnoringASCIICase(name, "apply"))
return CSSAtRuleApply;
+#if ENABLE(CSS_REGIONS)
+ if (equalIgnoringASCIICase(name, "-webkit-region"))
+ return CSSAtRuleWebkitRegion;
+#endif
return CSSAtRuleInvalid;
}
Modified: trunk/Source/WebCore/css/parser/CSSAtRuleID.h (207676 => 207677)
--- trunk/Source/WebCore/css/parser/CSSAtRuleID.h 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/css/parser/CSSAtRuleID.h 2016-10-21 16:35:09 UTC (rev 207677)
@@ -47,6 +47,7 @@
CSSAtRuleWebkitKeyframes = 10,
CSSAtRuleApply = 11,
+ CSSAtRuleWebkitRegion = 12
};
CSSAtRuleID cssAtRuleID(StringView name);
Modified: trunk/Source/WebCore/css/parser/CSSParserImpl.cpp (207676 => 207677)
--- trunk/Source/WebCore/css/parser/CSSParserImpl.cpp 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/css/parser/CSSParserImpl.cpp 2016-10-21 16:35:09 UTC (rev 207677)
@@ -422,6 +422,10 @@
return consumeKeyframesRule(false, prelude, block);
case CSSAtRulePage:
return consumePageRule(prelude, block);
+#if ENABLE(CSS_REGIONS)
+ case CSSAtRuleWebkitRegion:
+ return consumeRegionRule(prelude, block);
+#endif
default:
return nullptr; // Parse error, unrecognised at-rule with block
}
@@ -635,6 +639,32 @@
return page;
}
+#if ENABLE(CSS_REGIONS)
+RefPtr<StyleRuleRegion> CSSParserImpl::consumeRegionRule(CSSParserTokenRange prelude, CSSParserTokenRange block)
+{
+ CSSSelectorList selectorList = CSSSelectorParser::parseSelector(prelude, m_context, m_styleSheet.get());
+ if (!selectorList.isValid())
+ return nullptr; // Parse error, invalid selector list
+
+ if (m_observerWrapper) {
+ m_observerWrapper->observer().startRuleHeader(StyleRule::Region, m_observerWrapper->startOffset(prelude));
+ m_observerWrapper->observer().endRuleHeader(m_observerWrapper->endOffset(prelude));
+ m_observerWrapper->observer().startRuleBody(m_observerWrapper->previousTokenStartOffset(block));
+ }
+
+ Vector<RefPtr<StyleRuleBase>> rules;
+ consumeRuleList(block, RegularRuleList, [&rules](RefPtr<StyleRuleBase> rule) {
+ rules.append(rule);
+ });
+
+ if (m_observerWrapper)
+ m_observerWrapper->observer().endRuleBody(m_observerWrapper->endOffset(block));
+
+ return StyleRuleRegion::create(selectorList, rules);
+
+}
+#endif
+
// FIXME-NEWPARSER: Support "apply"
/*void CSSParserImpl::consumeApplyRule(CSSParserTokenRange prelude)
{
Modified: trunk/Source/WebCore/css/parser/CSSParserImpl.h (207676 => 207677)
--- trunk/Source/WebCore/css/parser/CSSParserImpl.h 2016-10-21 16:14:06 UTC (rev 207676)
+++ trunk/Source/WebCore/css/parser/CSSParserImpl.h 2016-10-21 16:35:09 UTC (rev 207677)
@@ -123,6 +123,9 @@
RefPtr<StyleRuleFontFace> consumeFontFaceRule(CSSParserTokenRange prelude, CSSParserTokenRange block);
RefPtr<StyleRuleKeyframes> consumeKeyframesRule(bool webkitPrefixed, CSSParserTokenRange prelude, CSSParserTokenRange block);
RefPtr<StyleRulePage> consumePageRule(CSSParserTokenRange prelude, CSSParserTokenRange block);
+#if ENABLE(CSS_REGIONS)
+ RefPtr<StyleRuleRegion> consumeRegionRule(CSSParserTokenRange prelude, CSSParserTokenRange block);
+#endif
// Updates m_parsedProperties
// FIXME-NEWPARSER: Support "apply"