Commit 8ae9b105 authored by Alex Rudenko's avatar Alex Rudenko Committed by Commit Bot

Use new StyleEngine API to get cascaded values

With the new StyleEngine API for getting cascaded CSS values[1],
previously introduced InspectorCSSCascade is not needed anymore.
This CL renames it to InspectorStyleResolver
and its responsibility is to resolve styles for elements as required
by the InspectorCSSAgent. The new StyleEngine API is used by
InspectorHighlight directly because it's independent from the logic
required for InspectorCSSAgent.

[1]: https://crrev.com/c/2324423

Bug: 1108356
Change-Id: Ib14e09a41f35356bac7a84045c71579debd31134
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2340043Reviewed-by: default avatarAnders Hartvoll Ruud <andruud@chromium.org>
Reviewed-by: default avatarRune Lillesveen <futhark@chromium.org>
Commit-Queue: Alex Rudenko <alexrudenko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795403}
parent 31d6d5cd
......@@ -1152,8 +1152,8 @@ jumbo_source_set("unit_tests") {
"input/scroll_snap_test.cc",
"input/touch_action_test.cc",
"input/touch_event_manager_test.cc",
"inspector/inspector_css_cascade_test.cc",
"inspector/inspector_session_state_test.cc",
"inspector/inspector_style_resolver_test.cc",
"inspector/main_thread_debugger_test.cc",
"inspector/protocol_parser_test.cc",
"inspector/protocol_unittest.cc",
......
......@@ -45,8 +45,6 @@ blink_core_sources("inspector") {
"inspector_base_agent.h",
"inspector_css_agent.cc",
"inspector_css_agent.h",
"inspector_css_cascade.cc",
"inspector_css_cascade.h",
"inspector_dom_agent.cc",
"inspector_dom_agent.h",
"inspector_dom_debugger_agent.cc",
......@@ -94,6 +92,8 @@ blink_core_sources("inspector") {
"inspector_resource_content_loader.h",
"inspector_session_state.cc",
"inspector_session_state.h",
"inspector_style_resolver.cc",
"inspector_style_resolver.h",
"inspector_style_sheet.cc",
"inspector_style_sheet.h",
"inspector_task_runner.cc",
......
......@@ -76,11 +76,11 @@
#include "third_party/blink/renderer/core/html/html_head_element.h"
#include "third_party/blink/renderer/core/inspector/identifiers_factory.h"
#include "third_party/blink/renderer/core/inspector/inspected_frames.h"
#include "third_party/blink/renderer/core/inspector/inspector_css_cascade.h"
#include "third_party/blink/renderer/core/inspector/inspector_history.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/inspector_resource_content_loader.h"
#include "third_party/blink/renderer/core/inspector/inspector_style_resolver.h"
#include "third_party/blink/renderer/core/layout/hit_test_result.h"
#include "third_party/blink/renderer/core/layout/layout_object.h"
#include "third_party/blink/renderer/core/layout/layout_object_inlines.h"
......@@ -1026,11 +1026,11 @@ Response InspectorCSSAgent::getMatchedStylesForNode(
stylesheet->SyncTextIfNeeded();
}
InspectorCSSCascade cascade(element, element_pseudo_id);
InspectorStyleResolver resolver(element, element_pseudo_id);
// Matched rules.
*matched_css_rules =
BuildArrayForMatchedRuleList(cascade.MatchedRules(), kPseudoIdNone);
BuildArrayForMatchedRuleList(resolver.MatchedRules(), kPseudoIdNone);
// Pseudo elements.
if (element_pseudo_id)
......@@ -1046,7 +1046,7 @@ Response InspectorCSSAgent::getMatchedStylesForNode(
*pseudo_id_matches =
std::make_unique<protocol::Array<protocol::CSS::PseudoElementMatches>>();
for (InspectorCSSMatchedRules* match : cascade.PseudoElementRules()) {
for (InspectorCSSMatchedRules* match : resolver.PseudoElementRules()) {
pseudo_id_matches->fromJust()->emplace_back(
protocol::CSS::PseudoElementMatches::create()
.setPseudoType(
......@@ -1059,7 +1059,7 @@ Response InspectorCSSAgent::getMatchedStylesForNode(
// Inherited styles.
*inherited_entries =
std::make_unique<protocol::Array<protocol::CSS::InheritedStyleEntry>>();
for (InspectorCSSMatchedRules* match : cascade.ParentRules()) {
for (InspectorCSSMatchedRules* match : resolver.ParentRules()) {
std::unique_ptr<protocol::CSS::InheritedStyleEntry> entry =
protocol::CSS::InheritedStyleEntry::create()
.setMatchedCSSRules(BuildArrayForMatchedRuleList(
......
......@@ -9,6 +9,7 @@
#include "third_party/blink/renderer/core/css/css_computed_style_declaration.h"
#include "third_party/blink/renderer/core/css/css_grid_auto_repeat_value.h"
#include "third_party/blink/renderer/core/css/css_grid_integer_repeat_value.h"
#include "third_party/blink/renderer/core/css/css_property_name.h"
#include "third_party/blink/renderer/core/css/css_property_names.h"
#include "third_party/blink/renderer/core/css/css_value.h"
#include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
......@@ -17,7 +18,6 @@
#include "third_party/blink/renderer/core/frame/visual_viewport.h"
#include "third_party/blink/renderer/core/geometry/dom_rect.h"
#include "third_party/blink/renderer/core/inspector/dom_traversal_utils.h"
#include "third_party/blink/renderer/core/inspector/inspector_css_cascade.h"
#include "third_party/blink/renderer/core/inspector/inspector_dom_agent.h"
#include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h"
#include "third_party/blink/renderer/core/layout/geometry/physical_offset.h"
......@@ -744,14 +744,15 @@ std::unique_ptr<protocol::DictionaryValue> BuildGridInfo(
if (grid_highlight_config.show_track_sizes) {
Element* element = DynamicTo<Element>(node);
DCHECK(element);
InspectorCSSCascade cascade(element, kPseudoIdNone);
// TODO(alexrudenko): caching might be required. Currently, the style
// resolver is used only for grid layouts when show_track_sizes is on.
StyleResolver& style_resolver = element->GetDocument().GetStyleResolver();
HeapHashMap<CSSPropertyName, Member<const CSSValue>> cascaded_values =
style_resolver.CascadedValuesForElement(element, kPseudoIdNone);
Vector<String> column_authored_values = GetAuthoredGridTrackSizes(
cascade.GetCascadedProperty(CSSPropertyID::kGridTemplateColumns),
cascaded_values.at(
CSSPropertyName(CSSPropertyID::kGridTemplateColumns)),
layout_grid->AutoRepeatCountForDirection(kForColumns));
Vector<String> row_authored_values = GetAuthoredGridTrackSizes(
cascade.GetCascadedProperty(CSSPropertyID::kGridTemplateRows),
cascaded_values.at(CSSPropertyName(CSSPropertyID::kGridTemplateRows)),
layout_grid->AutoRepeatCountForDirection(kForRows));
grid_info->setValue(
......
......@@ -2,7 +2,7 @@
// 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/inspector/inspector_css_cascade.h"
#include "third_party/blink/renderer/core/inspector/inspector_style_resolver.h"
#include "third_party/blink/renderer/core/css/css_rule_list.h"
#include "third_party/blink/renderer/core/css/css_style_declaration.h"
......@@ -17,8 +17,8 @@
namespace blink {
InspectorCSSCascade::InspectorCSSCascade(Element* element,
PseudoId element_pseudo_id)
InspectorStyleResolver::InspectorStyleResolver(Element* element,
PseudoId element_pseudo_id)
: element_(element) {
DCHECK(element_);
......@@ -74,62 +74,18 @@ InspectorCSSCascade::InspectorCSSCascade(Element* element,
}
}
RuleIndexList* InspectorCSSCascade::MatchedRules() const {
RuleIndexList* InspectorStyleResolver::MatchedRules() const {
return matched_rules_;
}
HeapVector<Member<InspectorCSSMatchedRules>>
InspectorCSSCascade::PseudoElementRules() {
InspectorStyleResolver::PseudoElementRules() {
return pseudo_element_rules_;
}
HeapVector<Member<InspectorCSSMatchedRules>>
InspectorCSSCascade::ParentRules() {
InspectorStyleResolver::ParentRules() {
return parent_rules_;
}
// This method does not handle different style origins/CSS variables/rule
// priorities.
// TODO (alexrudenko): Use real cascaded value (blocked on a better StyleEngine
// API).
const CSSValue* InspectorCSSCascade::GetCascadedProperty(
CSSPropertyID property_id) const {
DCHECK_NE(property_id, CSSPropertyID::kVariable);
if (const CSSValue* result =
GetPropertyValueFromStyle(element_->style(), property_id)) {
return result;
}
if (const CSSValue* result =
GetPropertyValueFromRuleIndexList(MatchedRules(), property_id)) {
return result;
}
return nullptr;
}
const CSSValue* InspectorCSSCascade::GetPropertyValueFromStyle(
CSSStyleDeclaration* style,
CSSPropertyID property_id) const {
if (!style)
return nullptr;
return style->GetPropertyCSSValueInternal(property_id);
}
const CSSValue* InspectorCSSCascade::GetPropertyValueFromRuleIndexList(
RuleIndexList* list,
CSSPropertyID property_id) const {
for (auto it = list->rbegin(); it != list->rend(); ++it) {
CSSRule* rule = it->first;
CSSStyleRule* style_rule = DynamicTo<CSSStyleRule>(rule);
if (!style_rule)
continue;
if (const CSSValue* result =
GetPropertyValueFromStyle(style_rule->style(), property_id)) {
return result;
}
}
return nullptr;
}
} // namespace blink
......@@ -2,8 +2,8 @@
// 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_INSPECTOR_INSPECTOR_CSS_CASCADE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_CSS_CASCADE_H_
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_STYLE_RESOLVER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_STYLE_RESOLVER_H_
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/css/css_rule_list.h"
......@@ -31,24 +31,17 @@ struct CORE_EXPORT InspectorCSSMatchedRules
}
};
// Resolves style rules for an element and helps compute cascaded values for
// inspector use cases.
class CORE_EXPORT InspectorCSSCascade {
// Resolves style rules for an element.
class CORE_EXPORT InspectorStyleResolver {
STACK_ALLOCATED();
public:
explicit InspectorCSSCascade(Element*, PseudoId);
explicit InspectorStyleResolver(Element*, PseudoId);
RuleIndexList* MatchedRules() const;
HeapVector<Member<InspectorCSSMatchedRules>> PseudoElementRules();
HeapVector<Member<InspectorCSSMatchedRules>> ParentRules();
const CSSValue* GetCascadedProperty(CSSPropertyID property_id) const;
private:
const CSSValue* GetPropertyValueFromStyle(CSSStyleDeclaration*,
CSSPropertyID) const;
const CSSValue* GetPropertyValueFromRuleIndexList(RuleIndexList*,
CSSPropertyID) const;
Element* element_;
RuleIndexList* matched_rules_;
HeapVector<Member<InspectorCSSMatchedRules>> parent_rules_;
......@@ -57,4 +50,4 @@ class CORE_EXPORT InspectorCSSCascade {
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_CSS_CASCADE_H_
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_INSPECTOR_INSPECTOR_STYLE_RESOLVER_H_
......@@ -2,7 +2,7 @@
// 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/inspector/inspector_css_cascade.h"
#include "third_party/blink/renderer/core/inspector/inspector_style_resolver.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/core/css/css_value.h"
......@@ -14,7 +14,7 @@
namespace blink {
class InspectorCSSCascadeTest : public testing::Test {
class InspectorStyleResolverTest : public testing::Test {
protected:
void SetUp() override;
......@@ -24,11 +24,11 @@ class InspectorCSSCascadeTest : public testing::Test {
std::unique_ptr<DummyPageHolder> dummy_page_holder_;
};
void InspectorCSSCascadeTest::SetUp() {
void InspectorStyleResolverTest::SetUp() {
dummy_page_holder_ = std::make_unique<DummyPageHolder>(IntSize(800, 600));
}
TEST_F(InspectorCSSCascadeTest, DirectlyMatchedRules) {
TEST_F(InspectorStyleResolverTest, DirectlyMatchedRules) {
GetDocument().body()->setInnerHTML(R"HTML(
<style>
#grid {
......@@ -41,17 +41,18 @@ TEST_F(InspectorCSSCascadeTest, DirectlyMatchedRules) {
</div>
)HTML");
Element* grid = GetDocument().getElementById("grid");
InspectorCSSCascade cascade(grid, kPseudoIdNone);
const CSSValue* value =
cascade.GetCascadedProperty(CSSPropertyID::kGridTemplateColumns);
const CSSValueList* value_list = DynamicTo<CSSValueList>(value);
EXPECT_EQ(3u, value_list->length());
EXPECT_EQ("100px", value_list->Item(0).CssText());
EXPECT_EQ("1fr", value_list->Item(1).CssText());
EXPECT_EQ("20%", value_list->Item(2).CssText());
InspectorStyleResolver resolver(grid, kPseudoIdNone);
RuleIndexList* matched_rules = resolver.MatchedRules();
// Some rules are coming for UA.
EXPECT_EQ(2u, matched_rules->size());
auto rule = matched_rules->at(1);
EXPECT_EQ(
"#grid { display: grid; gap: 10px; grid-template-columns: 100px 1fr 20%; "
"}",
rule.first->cssText());
}
TEST_F(InspectorCSSCascadeTest, ParentRules) {
TEST_F(InspectorStyleResolverTest, ParentRules) {
GetDocument().body()->setInnerHTML(R"HTML(
<style>
#grid-container {
......@@ -70,9 +71,9 @@ TEST_F(InspectorCSSCascadeTest, ParentRules) {
</div>
)HTML");
Element* grid = GetDocument().getElementById("grid");
InspectorCSSCascade cascade(grid, kPseudoIdNone);
InspectorStyleResolver resolver(grid, kPseudoIdNone);
HeapVector<Member<InspectorCSSMatchedRules>> parent_rules =
cascade.ParentRules();
resolver.ParentRules();
Element* grid_container = GetDocument().getElementById("grid-container");
// Some rules are coming for UA.
EXPECT_EQ(3u, parent_rules.size());
......
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