Title: [207677] trunk/Source/WebCore
Revision
207677
Author
hy...@apple.com
Date
2016-10-21 09:35:09 -0700 (Fri, 21 Oct 2016)

Log Message

[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:

Modified Paths

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"
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to