Commit 3c518aca authored by Xiaocheng Hu's avatar Xiaocheng Hu Committed by Commit Bot

Implement CSSOM wrapper for @counter-style rule

This patch implements most of the CSSOM class, CSSCounterStyleRule, for
@counter-style rule. This also allows us to test @counter-style rules
in web tests.

Note that the attribute setters require actual implementation of
descriptor parser, and hence, is left for future patches.

Bug: 687225
Change-Id: Ia8d06f8565a17de89e7edb38ea13ad47e99472a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2522124
Commit-Queue: Xiaocheng Hu <xiaochengh@chromium.org>
Reviewed-by: default avatarRune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825210}
parent a4546a0b
...@@ -529,6 +529,8 @@ generated_interface_sources_in_core = [ ...@@ -529,6 +529,8 @@ generated_interface_sources_in_core = [
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_animation.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_animation.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_condition_rule.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_condition_rule.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_condition_rule.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_condition_rule.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_counter_style_rule.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_counter_style_rule.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_font_face_rule.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_font_face_rule.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_font_face_rule.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_font_face_rule.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_grouping_rule.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_css_grouping_rule.cc",
......
...@@ -39,6 +39,7 @@ static_idl_files_in_core = get_path_info( ...@@ -39,6 +39,7 @@ static_idl_files_in_core = get_path_info(
"//third_party/blink/renderer/core/clipboard/data_transfer_item_list.idl", "//third_party/blink/renderer/core/clipboard/data_transfer_item_list.idl",
"//third_party/blink/renderer/core/css/css.idl", "//third_party/blink/renderer/core/css/css.idl",
"//third_party/blink/renderer/core/css/css_condition_rule.idl", "//third_party/blink/renderer/core/css/css_condition_rule.idl",
"//third_party/blink/renderer/core/css/css_counter_style_rule.idl",
"//third_party/blink/renderer/core/css/css_font_face_rule.idl", "//third_party/blink/renderer/core/css/css_font_face_rule.idl",
"//third_party/blink/renderer/core/css/css_grouping_rule.idl", "//third_party/blink/renderer/core/css/css_grouping_rule.idl",
"//third_party/blink/renderer/core/css/css_import_rule.idl", "//third_party/blink/renderer/core/css/css_import_rule.idl",
......
...@@ -56,6 +56,7 @@ core_interface_idl_files_core_only = ...@@ -56,6 +56,7 @@ core_interface_idl_files_core_only =
"clipboard/data_transfer.idl", "clipboard/data_transfer.idl",
"clipboard/data_transfer_item_list.idl", "clipboard/data_transfer_item_list.idl",
"css/css_condition_rule.idl", "css/css_condition_rule.idl",
"css/css_counter_style_rule.idl",
"css/css_font_face_rule.idl", "css/css_font_face_rule.idl",
"css/css_grouping_rule.idl", "css/css_grouping_rule.idl",
"css/css_import_rule.idl", "css/css_import_rule.idl",
......
...@@ -29,6 +29,8 @@ blink_core_sources_css = [ ...@@ -29,6 +29,8 @@ blink_core_sources_css = [
"css_condition_rule.h", "css_condition_rule.h",
"css_content_distribution_value.cc", "css_content_distribution_value.cc",
"css_content_distribution_value.h", "css_content_distribution_value.h",
"css_counter_style_rule.cc",
"css_counter_style_rule.h",
"css_counter_value.cc", "css_counter_value.cc",
"css_counter_value.h", "css_counter_value.h",
"css_crossfade_value.cc", "css_crossfade_value.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/css/css_counter_style_rule.h"
#include "third_party/blink/renderer/core/css/style_rule.h"
namespace blink {
CSSCounterStyleRule::CSSCounterStyleRule(
StyleRuleCounterStyle* counter_style_rule,
CSSStyleSheet* sheet)
: CSSRule(sheet), counter_style_rule_(counter_style_rule) {}
CSSCounterStyleRule::~CSSCounterStyleRule() = default;
String CSSCounterStyleRule::cssText() const {
return String();
}
void CSSCounterStyleRule::Reattach(StyleRuleBase* rule) {
DCHECK(rule);
counter_style_rule_ = To<StyleRuleCounterStyle>(rule);
}
String CSSCounterStyleRule::name() const {
return counter_style_rule_->GetName();
}
String CSSCounterStyleRule::system() const {
if (const CSSValue* value = counter_style_rule_->GetSystem())
return value->CssText();
return String();
}
String CSSCounterStyleRule::symbols() const {
if (const CSSValue* value = counter_style_rule_->GetSymbols())
return value->CssText();
return String();
}
String CSSCounterStyleRule::additiveSymbols() const {
if (const CSSValue* value = counter_style_rule_->GetAdditiveSymbols())
return value->CssText();
return String();
}
String CSSCounterStyleRule::negative() const {
if (const CSSValue* value = counter_style_rule_->GetNegative())
return value->CssText();
return String();
}
String CSSCounterStyleRule::prefix() const {
if (const CSSValue* value = counter_style_rule_->GetPrefix())
return value->CssText();
return String();
}
String CSSCounterStyleRule::suffix() const {
if (const CSSValue* value = counter_style_rule_->GetSuffix())
return value->CssText();
return String();
}
String CSSCounterStyleRule::range() const {
if (const CSSValue* value = counter_style_rule_->GetRange())
return value->CssText();
return String();
}
String CSSCounterStyleRule::pad() const {
if (const CSSValue* value = counter_style_rule_->GetPad())
return value->CssText();
return String();
}
String CSSCounterStyleRule::speakAs() const {
if (const CSSValue* value = counter_style_rule_->GetSpeakAs())
return value->CssText();
return String();
}
String CSSCounterStyleRule::fallback() const {
if (const CSSValue* value = counter_style_rule_->GetFallback())
return value->CssText();
return String();
}
void CSSCounterStyleRule::setName(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setSystem(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setSymbols(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setAdditiveSymbols(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setNegative(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setPrefix(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setSuffix(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setRange(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setPad(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setSpeakAs(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::setFallback(const String&) {
// TODO(crbug.com/687225): Implement
}
void CSSCounterStyleRule::Trace(Visitor* visitor) const {
visitor->Trace(counter_style_rule_);
CSSRule::Trace(visitor);
}
} // namespace blink
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_COUNTER_STYLE_RULE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_COUNTER_STYLE_RULE_H_
#include "third_party/blink/renderer/core/css/css_rule.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
namespace blink {
class StyleRuleCounterStyle;
class CSSCounterStyleRule final : public CSSRule {
DEFINE_WRAPPERTYPEINFO();
public:
CSSCounterStyleRule(StyleRuleCounterStyle*, CSSStyleSheet*);
~CSSCounterStyleRule() override;
String cssText() const override;
void Reattach(StyleRuleBase*) override;
String name() const;
String system() const;
String symbols() const;
String additiveSymbols() const;
String negative() const;
String prefix() const;
String suffix() const;
String range() const;
String pad() const;
String speakAs() const;
String fallback() const;
void setName(const String&);
void setSystem(const String&);
void setSymbols(const String&);
void setAdditiveSymbols(const String&);
void setNegative(const String&);
void setPrefix(const String&);
void setSuffix(const String&);
void setRange(const String&);
void setPad(const String&);
void setSpeakAs(const String&);
void setFallback(const String&);
void Trace(Visitor*) const override;
private:
CSSRule::Type GetType() const override { return kCounterStyleRule; }
Member<StyleRuleCounterStyle> counter_style_rule_;
};
template <>
struct DowncastTraits<CSSCounterStyleRule> {
static bool AllowFrom(const CSSRule& rule) {
return rule.GetType() == CSSRule::kCounterStyleRule;
}
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_CSS_COUNTER_STYLE_RULE_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://drafts.csswg.org/css-counter-styles-3/#the-csscounterstylerule-interface
[Exposed=Window, RuntimeEnabled=CSSAtRuleCounterStyle]
interface CSSCounterStyleRule : CSSRule {
attribute CSSOMString name;
attribute CSSOMString system;
attribute CSSOMString symbols;
attribute CSSOMString additiveSymbols;
attribute CSSOMString negative;
attribute CSSOMString prefix;
attribute CSSOMString suffix;
attribute CSSOMString range;
attribute CSSOMString pad;
attribute CSSOMString speakAs;
attribute CSSOMString fallback;
};
...@@ -53,6 +53,7 @@ class CORE_EXPORT CSSRule : public ScriptWrappable { ...@@ -53,6 +53,7 @@ class CORE_EXPORT CSSRule : public ScriptWrappable {
kKeyframesRule = 7, kKeyframesRule = 7,
kKeyframeRule = 8, kKeyframeRule = 8,
kNamespaceRule = 10, kNamespaceRule = 10,
kCounterStyleRule = 11,
kSupportsRule = 12, kSupportsRule = 12,
kViewportRule = 15, kViewportRule = 15,
// CSSOM constants are deprecated [1], and there will be no new // CSSOM constants are deprecated [1], and there will be no new
......
...@@ -42,6 +42,11 @@ ...@@ -42,6 +42,11 @@
const unsigned short KEYFRAMES_RULE = 7; const unsigned short KEYFRAMES_RULE = 7;
const unsigned short KEYFRAME_RULE = 8; const unsigned short KEYFRAME_RULE = 8;
// CSS Counter Styles
// https://drafts.csswg.org/css-counter-styles-3/#extentions-to-cssrule-interface
[RuntimeEnabled=CSSAtRuleCounterStyle]
const unsigned short COUNTER_STYLE_RULE = 11;
// CSS Conditional Rules // CSS Conditional Rules
// https://drafts.csswg.org/css-conditional/#extentions-to-cssrule-interface // https://drafts.csswg.org/css-conditional/#extentions-to-cssrule-interface
const unsigned short SUPPORTS_RULE = 12; const unsigned short SUPPORTS_RULE = 12;
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "third_party/blink/renderer/core/css/style_rule.h" #include "third_party/blink/renderer/core/css/style_rule.h"
#include "third_party/blink/renderer/core/css/css_counter_style_rule.h"
#include "third_party/blink/renderer/core/css/css_font_face_rule.h" #include "third_party/blink/renderer/core/css/css_font_face_rule.h"
#include "third_party/blink/renderer/core/css/css_identifier_value.h" #include "third_party/blink/renderer/core/css/css_identifier_value.h"
#include "third_party/blink/renderer/core/css/css_import_rule.h" #include "third_party/blink/renderer/core/css/css_import_rule.h"
...@@ -234,8 +235,9 @@ CSSRule* StyleRuleBase::CreateCSSOMWrapper(CSSStyleSheet* parent_sheet, ...@@ -234,8 +235,9 @@ CSSRule* StyleRuleBase::CreateCSSOMWrapper(CSSStyleSheet* parent_sheet,
To<StyleRuleNamespace>(self), parent_sheet); To<StyleRuleNamespace>(self), parent_sheet);
break; break;
case kCounterStyle: case kCounterStyle:
// TODO(crbug.com/687225): Implement CSSOM wrapper rule = MakeGarbageCollected<CSSCounterStyleRule>(
return nullptr; To<StyleRuleCounterStyle>(self), parent_sheet);
break;
case kKeyframe: case kKeyframe:
case kCharset: case kCharset:
case kViewport: case kViewport:
......
...@@ -518,6 +518,10 @@ void FrameSerializer::SerializeCSSRule(CSSRule* rule) { ...@@ -518,6 +518,10 @@ void FrameSerializer::SerializeCSSRule(CSSRule* rule) {
&To<CSSFontFaceRule>(rule)->StyleRule()->Properties(), document); &To<CSSFontFaceRule>(rule)->StyleRule()->Properties(), document);
break; break;
case CSSRule::kCounterStyleRule:
// TODO(crbug.com/687225): Implement
break;
// Rules in which no external resources can be referenced // Rules in which no external resources can be referenced
case CSSRule::kCharsetRule: case CSSRule::kCharsetRule:
case CSSRule::kPageRule: case CSSRule::kPageRule:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment