Report font-palette-values rules to the inspector
For editing the rule, the inspector requires a new parser mode to be
able to start parsing in the context of the rule. Since we're at
capacity of the packed property value set I'm stealing a bit from the
set size. This limits the maximum set size to 134M properties, but
presumably sites are running into all sorts of problems were they to
approach this limit.
Bug: 1501781
Change-Id: I3f54089fdb0ed910d5b4623dcc98fa63948dc56c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5001710
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
Commit-Queue: Philip Pfaffe <pfaffe@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1223685}
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index f71a974..8fabfc9 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -1926,6 +1926,19 @@
string syntax
+ # CSS font-palette-values rule representation.
+ type CSSFontPaletteValuesRule extends object
+ properties
+ # The css style sheet identifier (absent for user agent stylesheet and user-specified
+ # stylesheet rules) this rule came from.
+ optional StyleSheetId styleSheetId
+ # Parent stylesheet's origin.
+ StyleSheetOrigin origin
+ # Associated font palette name.
+ Value fontPaletteName
+ # Associated style declaration.
+ CSSStyle style
+
# CSS property at-rule representation.
type CSSPropertyRule extends object
properties
@@ -2070,6 +2083,8 @@
optional array of CSSPropertyRule cssPropertyRules
# A list of CSS property registrations matching this node.
optional array of CSSPropertyRegistration cssPropertyRegistrations
+ # A font-palette-values rule matching this node.
+ optional CSSFontPaletteValuesRule cssFontPaletteValuesRule
# Id of the first parent element that does not have display: contents.
experimental optional DOM.NodeId parentLayoutNodeId
diff --git a/third_party/blink/renderer/core/css/css_font_palette_values_rule.cc b/third_party/blink/renderer/core/css/css_font_palette_values_rule.cc
index 446190a..8e9c047 100644
--- a/third_party/blink/renderer/core/css/css_font_palette_values_rule.cc
+++ b/third_party/blink/renderer/core/css/css_font_palette_values_rule.cc
@@ -10,6 +10,7 @@
#include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
#include "third_party/blink/renderer/core/css/properties/css_parsing_utils.h"
#include "third_party/blink/renderer/core/css/style_engine.h"
+#include "third_party/blink/renderer/core/css/style_rule_css_style_declaration.h"
#include "third_party/blink/renderer/core/css/style_rule_font_palette_values.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
@@ -84,8 +85,23 @@
return String();
}
+StyleRuleFontPaletteValues* CSSFontPaletteValuesRule::FontPaletteValues()
+ const {
+ return font_palette_values_rule_.Get();
+}
+
+CSSStyleDeclaration* CSSFontPaletteValuesRule::Style() {
+ if (!font_palette_values_cssom_wrapper_) {
+ font_palette_values_cssom_wrapper_ =
+ MakeGarbageCollected<StyleRuleCSSStyleDeclaration>(
+ font_palette_values_rule_->MutableProperties(), this);
+ }
+ return font_palette_values_cssom_wrapper_.Get();
+}
+
void CSSFontPaletteValuesRule::Trace(Visitor* visitor) const {
visitor->Trace(font_palette_values_rule_);
+ visitor->Trace(font_palette_values_cssom_wrapper_);
CSSRule::Trace(visitor);
}
diff --git a/third_party/blink/renderer/core/css/css_font_palette_values_rule.h b/third_party/blink/renderer/core/css/css_font_palette_values_rule.h
index df37dba..f0b09bb 100644
--- a/third_party/blink/renderer/core/css/css_font_palette_values_rule.h
+++ b/third_party/blink/renderer/core/css/css_font_palette_values_rule.h
@@ -7,6 +7,7 @@
#include "third_party/blink/renderer/core/css/css_rule.h"
#include "third_party/blink/renderer/core/css/parser/at_rule_descriptors.h"
+#include "third_party/blink/renderer/core/css/style_rule_css_style_declaration.h"
#include "third_party/blink/renderer/platform/heap/member.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
@@ -28,6 +29,8 @@
String fontFamily() const;
String basePalette() const;
String overrideColors() const;
+ StyleRuleFontPaletteValues* FontPaletteValues() const;
+ CSSStyleDeclaration* Style();
void Trace(Visitor*) const override;
@@ -35,6 +38,7 @@
CSSRule::Type GetType() const override { return kFontPaletteValuesRule; }
Member<StyleRuleFontPaletteValues> font_palette_values_rule_;
+ Member<StyleRuleCSSStyleDeclaration> font_palette_values_cssom_wrapper_;
};
template <>
diff --git a/third_party/blink/renderer/core/css/css_property_source_data.h b/third_party/blink/renderer/core/css/css_property_source_data.h
index 14618aa..a1d6da8 100644
--- a/third_party/blink/renderer/core/css/css_property_source_data.h
+++ b/third_party/blink/renderer/core/css/css_property_source_data.h
@@ -91,7 +91,8 @@
bool HasProperties() const {
return type == StyleRule::kStyle || type == StyleRule::kFontFace ||
type == StyleRule::kPage || type == StyleRule::kProperty ||
- type == StyleRule::kKeyframe || type == StyleRule::kTry;
+ type == StyleRule::kKeyframe || type == StyleRule::kTry ||
+ type == StyleRule::kFontPaletteValues;
}
bool HasMedia() const {
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.h b/third_party/blink/renderer/core/css/css_property_value_set.h
index 5969bbca..d36a55f6b6 100644
--- a/third_party/blink/renderer/core/css/css_property_value_set.h
+++ b/third_party/blink/renderer/core/css/css_property_value_set.h
@@ -155,7 +155,7 @@
void TraceAfterDispatch(blink::Visitor* visitor) const {}
protected:
- enum { kMaxArraySize = (1 << 28) - 1 };
+ enum { kMaxArraySize = (1 << 27) - 1 };
explicit CSSPropertyValueSet(CSSParserMode css_parser_mode)
: array_size_(0), css_parser_mode_(css_parser_mode), is_mutable_(true) {}
@@ -170,8 +170,8 @@
css_parser_mode_(css_parser_mode),
is_mutable_(false) {}
- const uint32_t array_size_ : 28;
- const uint32_t css_parser_mode_ : 3;
+ const uint32_t array_size_ : 27;
+ const uint32_t css_parser_mode_ : 4;
const uint32_t is_mutable_ : 1;
friend class PropertySetCSSStyleDeclaration;
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
index f90af6e..83c41ec 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
@@ -125,6 +125,8 @@
return StyleRule::kKeyframe;
case kCSSPropertyRuleMode:
return StyleRule::kProperty;
+ case kCSSFontPaletteValuesRuleMode:
+ return StyleRule::kFontPaletteValues;
default:
return StyleRule::kStyle;
}
@@ -1637,7 +1639,8 @@
/*parent_rule_for_nesting=*/nullptr,
/*child_rules=*/nullptr);
return MakeGarbageCollected<StyleRuleFontPaletteValues>(
- name, CreateCSSPropertyValueSet(parsed_properties_, context_->Mode()));
+ name, CreateCSSPropertyValueSet(parsed_properties_,
+ kCSSFontPaletteValuesRuleMode));
}
StyleRuleBase* CSSParserImpl::ConsumeScopeRule(
@@ -2429,7 +2432,8 @@
if (observer_ &&
(rule_type == StyleRule::kStyle || rule_type == StyleRule::kKeyframe ||
- rule_type == StyleRule::kProperty || rule_type == StyleRule::kTry)) {
+ rule_type == StyleRule::kProperty || rule_type == StyleRule::kTry ||
+ rule_type == StyleRule::kFontPaletteValues)) {
if (!id) {
// If we skipped the main call to ConsumeValue due to an invalid
// property/descriptor, the inspector still needs to know the offset
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_mode.h b/third_party/blink/renderer/core/css/parser/css_parser_mode.h
index 94bb4727..e89c41f 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_mode.h
+++ b/third_party/blink/renderer/core/css/parser/css_parser_mode.h
@@ -35,7 +35,7 @@
namespace blink {
-// Must not grow beyond 3 bits, due to packing in CSSPropertyValueSet.
+// Must not grow beyond 4 bits, due to packing in CSSPropertyValueSet.
enum CSSParserMode : uint8_t {
kHTMLStandardMode,
kHTMLQuirksMode,
@@ -50,6 +50,9 @@
// @property rules are specially tagged so modifications through the
// inspector don't treat them as style rules.
kCSSPropertyRuleMode,
+ // @font-palette-values rules are specially tagged so modifications through
+ // the inspector don't treat them as style rules.
+ kCSSFontPaletteValuesRuleMode,
// User agent stylesheets are parsed in standards mode but also allows
// internal properties and values.
kUASheetMode,
diff --git a/third_party/blink/renderer/core/css/style_rule_font_palette_values.cc b/third_party/blink/renderer/core/css/style_rule_font_palette_values.cc
index 4844ddc..6a691f1 100644
--- a/third_party/blink/renderer/core/css/style_rule_font_palette_values.cc
+++ b/third_party/blink/renderer/core/css/style_rule_font_palette_values.cc
@@ -19,13 +19,7 @@
StyleRuleFontPaletteValues::StyleRuleFontPaletteValues(
const AtomicString& name,
CSSPropertyValueSet* properties)
- : StyleRuleBase(kFontPaletteValues),
- name_(name),
- font_family_(properties->GetPropertyCSSValue(CSSPropertyID::kFontFamily)),
- base_palette_(
- properties->GetPropertyCSSValue(CSSPropertyID::kBasePalette)),
- override_colors_(
- properties->GetPropertyCSSValue(CSSPropertyID::kOverrideColors)) {
+ : StyleRuleBase(kFontPaletteValues), name_(name), properties_(properties) {
DCHECK(properties);
}
@@ -34,16 +28,26 @@
StyleRuleFontPaletteValues::~StyleRuleFontPaletteValues() = default;
+const CSSValue* StyleRuleFontPaletteValues::GetFontFamily() const {
+ return properties_->GetPropertyCSSValue(CSSPropertyID::kFontFamily);
+}
+const CSSValue* StyleRuleFontPaletteValues::GetBasePalette() const {
+ return properties_->GetPropertyCSSValue(CSSPropertyID::kBasePalette);
+}
+const CSSValue* StyleRuleFontPaletteValues::GetOverrideColors() const {
+ return properties_->GetPropertyCSSValue(CSSPropertyID::kOverrideColors);
+}
FontPalette::BasePaletteValue StyleRuleFontPaletteValues::GetBasePaletteIndex()
const {
constexpr FontPalette::BasePaletteValue kNoBasePaletteValue = {
FontPalette::kNoBasePalette, 0};
- if (!base_palette_) {
+ const CSSValue* base_palette = GetBasePalette();
+ if (!base_palette) {
return kNoBasePaletteValue;
}
if (auto* base_palette_identifier =
- DynamicTo<CSSIdentifierValue>(*base_palette_)) {
+ DynamicTo<CSSIdentifierValue>(*base_palette)) {
switch (base_palette_identifier->GetValueID()) {
case CSSValueID::kLight:
return FontPalette::BasePaletteValue(
@@ -58,14 +62,15 @@
}
const CSSPrimitiveValue& palette_primitive =
- To<CSSPrimitiveValue>(*base_palette_);
+ To<CSSPrimitiveValue>(*base_palette);
return FontPalette::BasePaletteValue(
{FontPalette::kIndexBasePalette, palette_primitive.GetIntValue()});
}
Vector<FontPalette::FontPaletteOverride>
StyleRuleFontPaletteValues::GetOverrideColorsAsVector() const {
- if (!override_colors_ || !override_colors_->IsValueList()) {
+ const CSSValue* override_colors = GetOverrideColors();
+ if (!override_colors || !override_colors->IsValueList()) {
return {};
}
@@ -92,7 +97,7 @@
};
Vector<FontPalette::FontPaletteOverride> return_overrides;
- const CSSValueList& overrides_list = To<CSSValueList>(*override_colors_);
+ const CSSValueList& overrides_list = To<CSSValueList>(*override_colors);
for (auto& item : overrides_list) {
const CSSValuePair& override_pair = To<CSSValuePair>(*item);
@@ -110,11 +115,16 @@
return return_overrides;
}
+MutableCSSPropertyValueSet& StyleRuleFontPaletteValues::MutableProperties() {
+ if (!properties_->IsMutable()) {
+ properties_ = properties_->MutableCopy();
+ }
+ return *To<MutableCSSPropertyValueSet>(properties_.Get());
+}
+
void StyleRuleFontPaletteValues::TraceAfterDispatch(
blink::Visitor* visitor) const {
- visitor->Trace(font_family_);
- visitor->Trace(base_palette_);
- visitor->Trace(override_colors_);
+ visitor->Trace(properties_);
StyleRuleBase::TraceAfterDispatch(visitor);
}
diff --git a/third_party/blink/renderer/core/css/style_rule_font_palette_values.h b/third_party/blink/renderer/core/css/style_rule_font_palette_values.h
index 0c21d9a..c6e98a1 100644
--- a/third_party/blink/renderer/core/css/style_rule_font_palette_values.h
+++ b/third_party/blink/renderer/core/css/style_rule_font_palette_values.h
@@ -21,13 +21,14 @@
~StyleRuleFontPaletteValues();
AtomicString GetName() const { return name_; }
- const CSSValue* GetFontFamily() const { return font_family_.Get(); }
- const CSSValue* GetBasePalette() const { return base_palette_.Get(); }
- const CSSValue* GetOverrideColors() const { return override_colors_.Get(); }
+ const CSSValue* GetFontFamily() const;
+ const CSSValue* GetBasePalette() const;
+ const CSSValue* GetOverrideColors() const;
FontPalette::BasePaletteValue GetBasePaletteIndex() const;
Vector<FontPalette::FontPaletteOverride> GetOverrideColorsAsVector() const;
+ MutableCSSPropertyValueSet& MutableProperties();
StyleRuleFontPaletteValues* Copy() const {
return MakeGarbageCollected<StyleRuleFontPaletteValues>(*this);
}
@@ -38,9 +39,7 @@
Member<const CSSValue>& GetDescriptorReference(AtRuleDescriptorID);
AtomicString name_;
- Member<const CSSValue> font_family_;
- Member<const CSSValue> base_palette_;
- Member<const CSSValue> override_colors_;
+ Member<CSSPropertyValueSet> properties_;
};
template <>
diff --git a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
index 065295b..3b1ca030 100644
--- a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
@@ -37,6 +37,7 @@
#include "third_party/blink/renderer/core/css/css_default_style_sheets.h"
#include "third_party/blink/renderer/core/css/css_font_face.h"
#include "third_party/blink/renderer/core/css/css_font_face_source.h"
+#include "third_party/blink/renderer/core/css/css_font_palette_values_rule.h"
#include "third_party/blink/renderer/core/css/css_font_selector.h"
#include "third_party/blink/renderer/core/css/css_gradient_value.h"
#include "third_party/blink/renderer/core/css/css_import_rule.h"
@@ -74,6 +75,7 @@
#include "third_party/blink/renderer/core/css/style_change_reason.h"
#include "third_party/blink/renderer/core/css/style_engine.h"
#include "third_party/blink/renderer/core/css/style_rule.h"
+#include "third_party/blink/renderer/core/css/style_rule_font_palette_values.h"
#include "third_party/blink/renderer/core/css/style_sheet.h"
#include "third_party/blink/renderer/core/css/style_sheet_contents.h"
#include "third_party/blink/renderer/core/css/style_sheet_list.h"
@@ -444,6 +446,11 @@
if (auto* property_rule = DynamicTo<CSSPropertyRule>(rule)) {
return style_sheet_->BuildObjectForStyle(property_rule->Style());
}
+ if (auto* font_palette_values_rule =
+ DynamicTo<CSSFontPaletteValuesRule>(rule)) {
+ return style_sheet_->BuildObjectForStyle(
+ font_palette_values_rule->Style());
+ }
return nullptr;
}
@@ -1010,6 +1017,8 @@
Maybe<protocol::Array<protocol::CSS::CSSPropertyRule>>* css_property_rules,
Maybe<protocol::Array<protocol::CSS::CSSPropertyRegistration>>*
css_property_registrations,
+ Maybe<protocol::CSS::CSSFontPaletteValuesRule>*
+ css_font_palette_values_rule,
Maybe<int>* parentLayoutNodeId) {
protocol::Response response = AssertEnabled();
if (!response.IsSuccess())
@@ -1134,6 +1143,10 @@
CustomPropertiesForNode(element);
*css_position_fallback_rules = PositionFallbackRulesForNode(element);
+ if (auto rule = FontPalettesForNode(*element)) {
+ *css_font_palette_values_rule = std::move(rule);
+ }
+
auto* parentLayoutNode = LayoutTreeBuilderTraversal::LayoutParent(*element);
if (parentLayoutNode) {
if (int boundNodeId = dom_agent_->BoundNodeId(parentLayoutNode))
@@ -1358,6 +1371,64 @@
return result;
}
+template <class CSSRuleCollection>
+static CSSFontPaletteValuesRule* FindFontPaletteValuesRule(
+ CSSRuleCollection* css_rules,
+ StyleRuleFontPaletteValues* values_rule) {
+ if (!css_rules) {
+ return nullptr;
+ }
+
+ CSSFontPaletteValuesRule* result = nullptr;
+ for (unsigned j = 0; j < css_rules->length() && !result; ++j) {
+ CSSRule* css_rule = css_rules->item(j);
+ if (auto* css_style_rule = DynamicTo<CSSFontPaletteValuesRule>(css_rule)) {
+ if (css_style_rule->FontPaletteValues() == values_rule)
+ result = css_style_rule;
+ } else if (auto* css_import_rule = DynamicTo<CSSImportRule>(css_rule)) {
+ result =
+ FindFontPaletteValuesRule(css_import_rule->styleSheet(), values_rule);
+ } else {
+ result = FindFontPaletteValuesRule(css_rule->cssRules(), values_rule);
+ }
+ }
+ return result;
+}
+
+std::unique_ptr<protocol::CSS::CSSFontPaletteValuesRule>
+InspectorCSSAgent::FontPalettesForNode(Element& element) {
+ const ComputedStyle* style = element.EnsureComputedStyle();
+ const FontPalette* palette = style ? style->FontPalette() : nullptr;
+ if (!palette || !palette->IsCustomPalette()) {
+ LOG(ERROR) << "No palette";
+ return {};
+ }
+ Document& document = element.GetDocument();
+ StyleRuleFontPaletteValues* rule =
+ document.GetStyleEngine().FontPaletteValuesForNameAndFamily(
+ palette->GetPaletteValuesName(),
+ style->GetFontDescription().Family().FamilyName());
+ if (!rule) {
+ LOG(ERROR) << "No rule: " << palette->GetPaletteValuesName() << ", "
+ << style->GetFontDescription().Family().FamilyName();
+ return {};
+ }
+
+ // Find CSSOM wrapper.
+ CSSFontPaletteValuesRule* values_rule = nullptr;
+ for (CSSStyleSheet* style_sheet :
+ *document_to_css_style_sheets_.at(&document)) {
+ values_rule = FindFontPaletteValuesRule(style_sheet, rule);
+ if (values_rule)
+ break;
+ }
+
+ InspectorStyleSheet* inspector_style_sheet =
+ BindStyleSheet(values_rule->parentStyleSheet());
+ return inspector_style_sheet->BuildObjectForFontPaletteValuesRule(
+ values_rule);
+}
+
CSSKeyframesRule*
InspectorCSSAgent::FindKeyframesRuleFromUAViewTransitionStylesheet(
Element* element,
diff --git a/third_party/blink/renderer/core/inspector/inspector_css_agent.h b/third_party/blink/renderer/core/inspector/inspector_css_agent.h
index 9fac7aa0..41c67e0 100644
--- a/third_party/blink/renderer/core/inspector/inspector_css_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_css_agent.h
@@ -167,6 +167,8 @@
protocol::Maybe<protocol::Array<protocol::CSS::CSSPositionFallbackRule>>*,
protocol::Maybe<protocol::Array<protocol::CSS::CSSPropertyRule>>*,
protocol::Maybe<protocol::Array<protocol::CSS::CSSPropertyRegistration>>*,
+ protocol::Maybe<protocol::CSS::CSSFontPaletteValuesRule>*
+ out_cssFontPaletteValuesRule,
protocol::Maybe<int>*) override;
protocol::Response getInlineStylesForNode(
int node_id,
@@ -343,6 +345,8 @@
std::unique_ptr<protocol::Array<protocol::CSS::CSSPropertyRule>>,
std::unique_ptr<protocol::Array<protocol::CSS::CSSPropertyRegistration>>>
CustomPropertiesForNode(Element* element);
+ std::unique_ptr<protocol::CSS::CSSFontPaletteValuesRule> FontPalettesForNode(
+ Element& element);
// If the |animating_element| is a pseudo element, then |element| is a
// reference to its originating DOM element.
diff --git a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
index 89c5f6a..9f63caa 100644
--- a/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_style_sheet.cc
@@ -30,6 +30,7 @@
#include "third_party/blink/renderer/bindings/core/v8/script_regexp.h"
#include "third_party/blink/renderer/core/css/css_container_rule.h"
+#include "third_party/blink/renderer/core/css/css_font_palette_values_rule.h"
#include "third_party/blink/renderer/core/css/css_grouping_rule.h"
#include "third_party/blink/renderer/core/css/css_import_rule.h"
#include "third_party/blink/renderer/core/css/css_keyframe_rule.h"
@@ -68,6 +69,7 @@
#include "third_party/blink/renderer/core/inspector/inspector_css_agent.h"
#include "third_party/blink/renderer/core/inspector/inspector_network_agent.h"
#include "third_party/blink/renderer/core/inspector/inspector_resource_container.h"
+#include "third_party/blink/renderer/core/inspector/protocol/css.h"
#include "third_party/blink/renderer/core/svg/svg_style_element.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
@@ -882,6 +884,7 @@
case StyleRule::kFontFeatureValues:
case StyleRule::kPositionFallback:
case StyleRule::kProperty:
+ case StyleRule::kFontPaletteValues:
result->push_back(data);
FlattenSourceData(data->child_rules, result);
break;
@@ -924,6 +927,10 @@
if (auto* property_rule = DynamicTo<CSSPropertyRule>(rule))
return property_rule->cssRules();
+ if (auto* font_palette_values_rule =
+ DynamicTo<CSSFontPaletteValuesRule>(rule))
+ return font_palette_values_rule->cssRules();
+
return nullptr;
}
@@ -947,6 +954,7 @@
case CSSRule::kFontFeatureRule:
case CSSRule::kTryRule:
case CSSRule::kViewTransitionsRule:
+ case CSSRule::kFontPaletteValuesRule:
result->push_back(rule);
break;
case CSSRule::kStyleRule:
@@ -1513,7 +1521,8 @@
CSSRule* rule = RuleForSourceData(source_data);
if (!rule || !rule->parentStyleSheet() ||
(!IsA<CSSStyleRule>(rule) && !IsA<CSSKeyframeRule>(rule) &&
- !IsA<CSSPropertyRule>(rule) && !IsA<CSSTryRule>(rule))) {
+ !IsA<CSSPropertyRule>(rule) && !IsA<CSSFontPaletteValuesRule>(rule) &&
+ !IsA<CSSTryRule>(rule))) {
exception_state.ThrowDOMException(
DOMExceptionCode::kNotFoundError,
"Source range didn't match existing style source range");
@@ -1527,6 +1536,9 @@
style = try_rule->style();
} else if (auto* property_rule = DynamicTo<CSSPropertyRule>(rule)) {
style = property_rule->Style();
+ } else if (auto* font_palette_values_rule =
+ DynamicTo<CSSFontPaletteValuesRule>(rule)) {
+ style = font_palette_values_rule->Style();
} else {
style = To<CSSKeyframeRule>(rule)->style();
}
@@ -2302,6 +2314,25 @@
return result;
}
+std::unique_ptr<protocol::CSS::CSSFontPaletteValuesRule>
+InspectorStyleSheet::BuildObjectForFontPaletteValuesRule(
+ CSSFontPaletteValuesRule* values_rule) {
+ std::unique_ptr<protocol::CSS::Value> name_text =
+ protocol::CSS::Value::create().setText(values_rule->name()).build();
+ CSSRuleSourceData* source_data = SourceDataForRule(values_rule);
+ if (source_data)
+ name_text->setRange(BuildSourceRangeObject(source_data->rule_header_range));
+ std::unique_ptr<protocol::CSS::CSSFontPaletteValuesRule> result =
+ protocol::CSS::CSSFontPaletteValuesRule::create()
+ .setFontPaletteName(std::move(name_text))
+ .setOrigin(origin_)
+ .setStyle(BuildObjectForStyle(values_rule->Style()))
+ .build();
+ if (CanBind(origin_) && !Id().empty())
+ result->setStyleSheetId(Id());
+ return result;
+}
+
std::unique_ptr<protocol::CSS::CSSPropertyRule>
InspectorStyleSheet::BuildObjectForPropertyRule(
CSSPropertyRule* property_rule) {
diff --git a/third_party/blink/renderer/core/inspector/inspector_style_sheet.h b/third_party/blink/renderer/core/inspector/inspector_style_sheet.h
index 33ca325..f5deeec 100644
--- a/third_party/blink/renderer/core/inspector/inspector_style_sheet.h
+++ b/third_party/blink/renderer/core/inspector/inspector_style_sheet.h
@@ -29,6 +29,7 @@
#include <memory>
#include "base/memory/scoped_refptr.h"
#include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/css/css_font_palette_values_rule.h"
#include "third_party/blink/renderer/core/css/css_property_source_data.h"
#include "third_party/blink/renderer/core/css/css_scope_rule.h"
#include "third_party/blink/renderer/core/css/css_style_declaration.h"
@@ -207,6 +208,8 @@
std::unique_ptr<protocol::CSS::RuleUsage> BuildObjectForRuleUsage(CSSRule*,
bool);
std::unique_ptr<protocol::CSS::CSSTryRule> BuildObjectForTryRule(CSSTryRule*);
+ std::unique_ptr<protocol::CSS::CSSFontPaletteValuesRule>
+ BuildObjectForFontPaletteValuesRule(CSSFontPaletteValuesRule*);
std::unique_ptr<protocol::CSS::CSSPropertyRule> BuildObjectForPropertyRule(
CSSPropertyRule*);
std::unique_ptr<protocol::CSS::CSSKeyframeRule> BuildObjectForKeyframeRule(
diff --git a/third_party/blink/web_tests/inspector-protocol/css/css-font-palette-values-expected.txt b/third_party/blink/web_tests/inspector-protocol/css/css-font-palette-values-expected.txt
new file mode 100644
index 0000000..01f6db90
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/css/css-font-palette-values-expected.txt
@@ -0,0 +1,63 @@
+Test that font-palette-values rules are reported
+{
+ fontPaletteName : {
+ range : {
+ endColumn : 32
+ endLine : 6
+ startColumn : 23
+ startLine : 6
+ }
+ text : --palette
+ }
+ origin : regular
+ style : {
+ cssProperties : [
+ [0] : {
+ disabled : false
+ implicit : false
+ name : font-family
+ range : {
+ endColumn : 22
+ endLine : 7
+ startColumn : 4
+ startLine : 7
+ }
+ text : font-family: Bixa;
+ value : Bixa
+ }
+ [1] : {
+ disabled : false
+ implicit : false
+ name : override-colors
+ range : {
+ endColumn : 27
+ endLine : 8
+ startColumn : 4
+ startLine : 8
+ }
+ text : override-colors: 0 red;
+ value : 0 red
+ }
+ [2] : {
+ name : font-family
+ value : Bixa
+ }
+ [3] : {
+ name : override-colors
+ value : 0 red
+ }
+ ]
+ cssText : font-family: Bixa; override-colors: 0 red;
+ range : {
+ endColumn : 2
+ endLine : 9
+ startColumn : 34
+ startLine : 6
+ }
+ shorthandEntries : [
+ ]
+ styleSheetId : <string>
+ }
+ styleSheetId : <string>
+}
+
diff --git a/third_party/blink/web_tests/inspector-protocol/css/css-font-palette-values.js b/third_party/blink/web_tests/inspector-protocol/css/css-font-palette-values.js
new file mode 100644
index 0000000..deb16b6
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/css/css-font-palette-values.js
@@ -0,0 +1,32 @@
+(async function(testRunner) {
+ var {page, session, dp} = await testRunner.startHTML(
+ `
+ <style>
+ div {
+ font-family: Bixa;
+ font-palette: --palette;
+ }
+
+ @font-palette-values --palette {
+ font-family: Bixa;
+ override-colors: 0 red;
+ }
+ </style>
+
+ <div>div</div>
+ `,
+ 'Test that font-palette-values rules are reported');
+
+ await dp.DOM.enable();
+ await dp.CSS.enable();
+
+ const {result: {root}} = await dp.DOM.getDocument();
+ const {result: {nodeId}} =
+ await dp.DOM.querySelector({nodeId: root.nodeId, selector: 'div'});
+
+ const {result: {cssFontPaletteValuesRule}} = await dp.CSS.getMatchedStylesForNode({nodeId});
+
+ testRunner.log(cssFontPaletteValuesRule);
+
+ testRunner.completeTest();
+});
diff --git a/third_party/blink/web_tests/inspector-protocol/css/css-set-font-palette-values-expected.txt b/third_party/blink/web_tests/inspector-protocol/css/css-set-font-palette-values-expected.txt
new file mode 100644
index 0000000..8ed87875
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/css/css-set-font-palette-values-expected.txt
@@ -0,0 +1,70 @@
+Test that properties of font-palette-value rules are editable
+Edit:
+{
+ range : {
+ endColumn : 2
+ endLine : 9
+ startColumn : 34
+ startLine : 6
+ }
+ styleSheetId : <string>
+ text : font-family: Bixa; override-colors: 0 purple;
+}
+Edit result:
+{
+ id : <number>
+ result : {
+ styles : [
+ [0] : {
+ cssProperties : [
+ [0] : {
+ disabled : false
+ implicit : false
+ name : font-family
+ range : {
+ endColumn : 22
+ endLine : 7
+ startColumn : 4
+ startLine : 7
+ }
+ text : font-family: Bixa;
+ value : Bixa
+ }
+ [1] : {
+ disabled : false
+ implicit : false
+ name : override-colors
+ range : {
+ endColumn : 30
+ endLine : 8
+ startColumn : 4
+ startLine : 8
+ }
+ text : override-colors: 0 purple;
+ value : 0 purple
+ }
+ [2] : {
+ name : font-family
+ value : Bixa
+ }
+ [3] : {
+ name : override-colors
+ value : 0 purple
+ }
+ ]
+ cssText : font-family: Bixa; override-colors: 0 purple;
+ range : {
+ endColumn : 0
+ endLine : 9
+ startColumn : 34
+ startLine : 6
+ }
+ shorthandEntries : [
+ ]
+ styleSheetId : <string>
+ }
+ ]
+ }
+ sessionId : <string>
+}
+
diff --git a/third_party/blink/web_tests/inspector-protocol/css/css-set-font-palette-values.js b/third_party/blink/web_tests/inspector-protocol/css/css-set-font-palette-values.js
new file mode 100644
index 0000000..563610d
--- /dev/null
+++ b/third_party/blink/web_tests/inspector-protocol/css/css-set-font-palette-values.js
@@ -0,0 +1,48 @@
+(async function(testRunner) {
+ var {page, session, dp} = await testRunner.startHTML(
+ `
+ <style>
+ div {
+ font-family: Bixa;
+ font-palette: --palette;
+ }
+
+ @font-palette-values --palette {
+ font-family: Bixa;
+ override-colors: 0 red;
+ }
+ </style>
+
+ <div>div</div>
+ `,
+ 'Test that properties of font-palette-value rules are editable');
+
+ await dp.DOM.enable();
+ await dp.CSS.enable();
+
+ const {result: {root}} = await dp.DOM.getDocument();
+ const {result: {nodeId}} =
+ await dp.DOM.querySelector({nodeId: root.nodeId, selector: 'div'});
+
+ const styles = await dp.CSS.getMatchedStylesForNode({nodeId});
+ const {result: {cssFontPaletteValuesRule: {style: {range}, styleSheetId}}} = styles;
+
+ const edit = {
+ styleSheetId,
+ range,
+ text: `
+ font-family: Bixa;
+ override-colors: 0 purple;
+`,
+ };
+
+ testRunner.log('Edit:');
+ testRunner.log(edit);
+
+ const result = await dp.CSS.setStyleTexts({edits: [edit]});
+
+ testRunner.log('Edit result:');
+ testRunner.log(result);
+
+ testRunner.completeTest();
+});