Commit 7e314a6f authored by Alex Rudenko's avatar Alex Rudenko Committed by Commit Bot

CDP: add contrast algorithm param to HighlightConfig

This CL adds a new parameter to HighlightConfig to indicate
what kind of contrast ratio the overlay needs to compute.
Previously, it was computing the contrast ratio according to
the AA threshold. With this change, it is possible to show
the contrast according to AAA and APCA thresholds.

Frontend CL: https://crrev.com/c/2546705

Bug: 1121900
Change-Id: I319eb472e513d3ccc2ba0c2d90a6bdd60ba6d94e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2545509
Commit-Queue: Alex Rudenko <alexrudenko@chromium.org>
Reviewed-by: default avatarSigurd Schneider <sigurds@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Reviewed-by: default avatarMathias Bynens <mathias@chromium.org>
Cr-Commit-Position: refs/heads/master@{#829611}
parent 7640a420
...@@ -5679,6 +5679,12 @@ experimental domain Overlay ...@@ -5679,6 +5679,12 @@ experimental domain Overlay
# The hatching color for the box (default: transparent) # The hatching color for the box (default: transparent)
optional DOM.RGBA hatchColor optional DOM.RGBA hatchColor
type ContrastAlgorithm extends string
enum
aa
aaa
apca
# Configuration data for the highlighting of page elements. # Configuration data for the highlighting of page elements.
type HighlightConfig extends object type HighlightConfig extends object
properties properties
...@@ -5714,6 +5720,8 @@ experimental domain Overlay ...@@ -5714,6 +5720,8 @@ experimental domain Overlay
optional GridHighlightConfig gridHighlightConfig optional GridHighlightConfig gridHighlightConfig
# The flex container highlight configuration (default: all transparent). # The flex container highlight configuration (default: all transparent).
optional FlexContainerHighlightConfig flexContainerHighlightConfig optional FlexContainerHighlightConfig flexContainerHighlightConfig
# The contrast algorithm to use for the contrast ratio (default: aa).
optional ContrastAlgorithm contrastAlgorithm
type ColorFormat extends string type ColorFormat extends string
enum enum
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "third_party/blink/renderer/core/geometry/dom_rect.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/dom_traversal_utils.h"
#include "third_party/blink/renderer/core/inspector/inspector_dom_agent.h" #include "third_party/blink/renderer/core/inspector/inspector_dom_agent.h"
#include "third_party/blink/renderer/core/inspector/protocol/Overlay.h"
#include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h" #include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h"
#include "third_party/blink/renderer/core/layout/geometry/physical_offset.h" #include "third_party/blink/renderer/core/layout/geometry/physical_offset.h"
#include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/layout/layout_box.h"
...@@ -229,9 +230,26 @@ String ToHEXA(const Color& color) { ...@@ -229,9 +230,26 @@ String ToHEXA(const Color& color) {
color.Blue(), color.Alpha()); color.Blue(), color.Alpha());
} }
namespace ContrastAlgorithmEnum = protocol::Overlay::ContrastAlgorithmEnum;
String ContrastAlgorithmToString(const ContrastAlgorithm& contrast_algorithm) {
// It reuses the protocol string constants to avoid duplicating the string
// values. These string values are sent to the overlay code that is expected
// to handle them properly.
switch (contrast_algorithm) {
case ContrastAlgorithm::AA:
return ContrastAlgorithmEnum::Aa;
case ContrastAlgorithm::AAA:
return ContrastAlgorithmEnum::Aaa;
case ContrastAlgorithm::APCA:
return ContrastAlgorithmEnum::Apca;
}
}
void AppendStyleInfo(Node* node, void AppendStyleInfo(Node* node,
protocol::DictionaryValue* element_info, protocol::DictionaryValue* element_info,
const InspectorHighlightContrastInfo& node_contrast) { const InspectorHighlightContrastInfo& node_contrast,
const ContrastAlgorithm& contrast_algorithm) {
std::unique_ptr<protocol::DictionaryValue> computed_style = std::unique_ptr<protocol::DictionaryValue> computed_style =
protocol::DictionaryValue::create(); protocol::DictionaryValue::create();
CSSComputedStyleDeclaration* style = CSSComputedStyleDeclaration* style =
...@@ -276,6 +294,8 @@ void AppendStyleInfo(Node* node, ...@@ -276,6 +294,8 @@ void AppendStyleInfo(Node* node,
contrast->setString("fontWeight", node_contrast.font_weight); contrast->setString("fontWeight", node_contrast.font_weight);
contrast->setString("backgroundColor", contrast->setString("backgroundColor",
ToHEXA(node_contrast.background_color)); ToHEXA(node_contrast.background_color));
contrast->setString("contrastAlgorithm",
ContrastAlgorithmToString(contrast_algorithm));
element_info->setValue("contrast", std::move(contrast)); element_info->setValue("contrast", std::move(contrast));
} }
} }
...@@ -1407,8 +1427,10 @@ InspectorHighlight::InspectorHighlight( ...@@ -1407,8 +1427,10 @@ InspectorHighlight::InspectorHighlight(
element_info_ = BuildElementInfo(element); element_info_ = BuildElementInfo(element);
else if (append_element_info && text_node) else if (append_element_info && text_node)
element_info_ = BuildTextNodeInfo(text_node); element_info_ = BuildTextNodeInfo(text_node);
if (element_info_ && highlight_config.show_styles) if (element_info_ && highlight_config.show_styles) {
AppendStyleInfo(node, element_info_.get(), node_contrast); AppendStyleInfo(node, element_info_.get(), node_contrast,
highlight_config.contrast_algorithm);
}
if (element_info_ && is_locked_ancestor) if (element_info_ && is_locked_ancestor)
element_info_->setString("isLockedAncestor", "true"); element_info_->setString("isLockedAncestor", "true");
......
...@@ -18,6 +18,7 @@ namespace blink { ...@@ -18,6 +18,7 @@ namespace blink {
class Color; class Color;
enum class ColorFormat { RGB, HEX, HSL }; enum class ColorFormat { RGB, HEX, HSL };
enum class ContrastAlgorithm { AA, AAA, APCA };
struct CORE_EXPORT LineStyle { struct CORE_EXPORT LineStyle {
USING_FAST_MALLOC(LineStyle); USING_FAST_MALLOC(LineStyle);
...@@ -122,7 +123,8 @@ struct CORE_EXPORT InspectorHighlightConfig { ...@@ -122,7 +123,8 @@ struct CORE_EXPORT InspectorHighlightConfig {
bool show_accessibility_info; bool show_accessibility_info;
String selector_list; String selector_list;
ColorFormat color_format; ColorFormat color_format = ColorFormat::HEX;
ContrastAlgorithm contrast_algorithm = ContrastAlgorithm::AA;
std::unique_ptr<InspectorGridHighlightConfig> grid_highlight_config; std::unique_ptr<InspectorGridHighlightConfig> grid_highlight_config;
std::unique_ptr<InspectorFlexContainerHighlightConfig> std::unique_ptr<InspectorFlexContainerHighlightConfig>
......
...@@ -1573,6 +1573,17 @@ base::Optional<BoxStyle> InspectorOverlayAgent::ToBoxStyle( ...@@ -1573,6 +1573,17 @@ base::Optional<BoxStyle> InspectorOverlayAgent::ToBoxStyle(
return box_style; return box_style;
} }
ContrastAlgorithm GetContrastAlgorithm(const String& contrast_algorithm) {
namespace ContrastAlgorithmEnum = protocol::Overlay::ContrastAlgorithmEnum;
if (contrast_algorithm == ContrastAlgorithmEnum::Aaa) {
return ContrastAlgorithm::AAA;
} else if (contrast_algorithm == ContrastAlgorithmEnum::Apca) {
return ContrastAlgorithm::APCA;
} else {
return ContrastAlgorithm::AA;
}
}
// static // static
std::unique_ptr<InspectorHighlightConfig> std::unique_ptr<InspectorHighlightConfig>
InspectorOverlayAgent::ToHighlightConfig( InspectorOverlayAgent::ToHighlightConfig(
...@@ -1614,6 +1625,10 @@ InspectorOverlayAgent::ToHighlightConfig( ...@@ -1614,6 +1625,10 @@ InspectorOverlayAgent::ToHighlightConfig(
highlight_config->color_format = ColorFormat::HEX; highlight_config->color_format = ColorFormat::HEX;
} }
namespace ContrastAlgorithmEnum = protocol::Overlay::ContrastAlgorithmEnum;
highlight_config->contrast_algorithm = GetContrastAlgorithm(
config->getContrastAlgorithm(ContrastAlgorithmEnum::Aa));
highlight_config->grid_highlight_config = highlight_config->grid_highlight_config =
InspectorOverlayAgent::ToGridHighlightConfig( InspectorOverlayAgent::ToGridHighlightConfig(
config->getGridHighlightConfig(nullptr)); config->getGridHighlightConfig(nullptr));
......
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