Skip to content
  • commit-queue@webkit.org's avatar
    Implement CSSSupportsRule · 03dd24f0
    commit-queue@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=104822
    
    Patch by Pablo Flouret <pablof@motorola.com> on 2013-01-16
    Reviewed by Allan Sandfeld Jensen.
    
    Source/WebCore:
    
    http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface
    
    Right now, @supports is not implemented as a proper CSSRule. Apart from
    the CSSOM implications it gives wrong results when, for instance, an
    @supports rule is nested inside a @media rule.
    
    Test: css3/supports-cssom.html
    
    * CMakeLists.txt:
    * DerivedSources.cpp:
    * DerivedSources.make:
    * DerivedSources.pri:
    * GNUmakefile.list.am:
    * Target.pri:
    * WebCore.exp.in:
    * WebCore.gypi:
    * WebCore.vcproj/WebCore.vcproj:
    * WebCore.xcodeproj/project.pbxproj:
        Add CSSSupportsRule.* and associated files.
    
    * bindings/js/JSCSSRuleCustom.cpp:
    (WebCore::toJS):
    * bindings/objc/DOMCSS.mm:
    (kitClass):
    * bindings/v8/custom/V8CSSRuleCustom.cpp:
    (WebCore::wrap):
        Create the correct wrappers for the rule.
    
    * css/CSSGrammar.y.in:
    * css/CSSParser.cpp:
    (WebCore::CSSParser::createSupportsRule):
    (WebCore::CSSParser::markSupportsRuleHeaderStart):
    (WebCore::CSSParser::markSupportsRuleHeaderEnd):
    * css/CSSParser.h:
        Create the supports rule when parsing and add it where it corresponds,
        instead of directly adding the child rules to the stylesheet.
    
    * css/CSSPropertySourceData.h:
    * css/CSSRule.h:
    * css/CSSRule.idl:
        Add SUPPORTS_RULE type to enums.
    
    * css/CSSSupportsRule.cpp: Added.
    (WebCore::CSSSupportsRule::CSSSupportsRule):
    (WebCore::CSSSupportsRule::~CSSSupportsRule):
    (WebCore::CSSSupportsRule::cssText):
    (WebCore::CSSSupportsRule::conditionText):
    * css/CSSSupportsRule.h: Added.
    (WebCore::CSSSupportsRule::create):
    * css/CSSSupportsRule.idl: Added.
        DOM interface.
    
    * css/RuleSet.cpp:
    (WebCore::RuleSet::addChildRules):
        Add rules included in the @supports rule.
    
    * css/StyleResolver.cpp:
    (WebCore::collectCSSOMWrappers):
        Collect CSSSupportsRule wrappers.
    
    * css/StyleRule.cpp:
    (WebCore::StyleRuleBase::reportMemoryUsage):
    (WebCore::StyleRuleBase::destroy):
    (WebCore::StyleRuleBase::copy):
    (WebCore::StyleRuleBase::createCSSOMWrapper):
    (WebCore::StyleRuleSupports::StyleRuleSupports):
    * css/StyleRule.h:
    (StyleRuleBase):
    (WebCore::StyleRuleBase::isSupportsRule):
    (StyleRuleSupports):
    (WebCore::StyleRuleSupports::create):
    (WebCore::StyleRuleSupports::conditionText):
    (WebCore::StyleRuleSupports::conditionIsSupported):
    (WebCore::StyleRuleSupports::copy):
    (WebCore::toStyleRuleSupports):
        New subclass of StyleRuleBlock: StyleRuleSupports.
    
    * css/StyleSheetContents.cpp:
    (WebCore::childRulesHaveFailedOrCanceledSubresources):
    * inspector/InspectorStyleSheet.cpp:
    (flattenSourceData):
    (WebCore::asCSSRuleList):
        Handle @supports rules where needed.
    
    LayoutTests:
    
    * css3/supports-cssom-expected.txt: Added.
    * css3/supports-cssom.html: Added.
    * css3/supports-expected.txt:
    * css3/supports.html:
    
    * platform/chromium/TestExpectations:
    * platform/efl/TestExpectations:
    * platform/gtk/TestExpectations:
    * platform/mac/TestExpectations:
    * platform/qt/TestExpectations:
    * platform/win/TestExpectations:
    * platform/wincairo/TestExpectations:
    * platform/wk2/TestExpectations:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@139866 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    03dd24f0