summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc143
1 files changed, 133 insertions, 10 deletions
diff --git a/chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc b/chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc
index a1717fda6c0..233632b95ff 100644
--- a/chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc
+++ b/chromium/third_party/blink/renderer/core/inspector/inspector_audits_agent.cc
@@ -8,12 +8,16 @@
#include "third_party/blink/public/platform/web_data.h"
#include "third_party/blink/public/platform/web_size.h"
#include "third_party/blink/public/web/web_image.h"
+#include "third_party/blink/renderer/core/dom/dom_node_ids.h"
+#include "third_party/blink/renderer/core/dom/dom_token_list.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
+#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/inspector/inspector_issue.h"
#include "third_party/blink/renderer/core/inspector/inspector_issue_storage.h"
#include "third_party/blink/renderer/core/inspector/inspector_network_agent.h"
+#include "third_party/blink/renderer/core/inspector/protocol/Audits.h"
#include "third_party/blink/renderer/platform/graphics/image_data_buffer.h"
#include "third_party/blink/renderer/platform/wtf/text/base64.h"
-
namespace blink {
using protocol::Maybe;
@@ -64,19 +68,55 @@ bool EncodeAsImage(char* body,
return image_to_encode->EncodeImage(mime_type, quality, output);
}
+mojom::blink::InspectorIssueInfoPtr CreateLowTextContrastIssue(
+ const ContrastInfo& info) {
+ Element* element = info.element;
+ auto low_text_contrast_details = mojom::blink::LowTextContrastIssue::New();
+
+ StringBuilder sb;
+ auto element_id = element->getAttribute("id").LowerASCII();
+ sb.Append(element->nodeName().LowerASCII());
+ if (!element_id.IsEmpty()) {
+ sb.Append("#");
+ sb.Append(element_id);
+ }
+ for (unsigned i = 0; i < element->classList().length(); i++) {
+ sb.Append(".");
+ sb.Append(element->classList().item(i));
+ }
+
+ low_text_contrast_details->threshold_aa = info.threshold_aa;
+ low_text_contrast_details->threshold_aaa = info.threshold_aaa;
+ low_text_contrast_details->font_size = info.font_size;
+ low_text_contrast_details->font_weight = info.font_weight;
+ low_text_contrast_details->violating_node_id = DOMNodeIds::IdForNode(element);
+ low_text_contrast_details->violating_node_selector = sb.ToString();
+ low_text_contrast_details->contrast_ratio = info.contrast_ratio;
+
+ auto details = mojom::blink::InspectorIssueDetails::New();
+ details->low_text_contrast_details = std::move(low_text_contrast_details);
+
+ return mojom::blink::InspectorIssueInfo::New(
+ mojom::blink::InspectorIssueCode::kLowTextContrastIssue,
+ std::move(details));
+}
+
} // namespace
void InspectorAuditsAgent::Trace(Visitor* visitor) const {
visitor->Trace(network_agent_);
visitor->Trace(inspector_issue_storage_);
+ visitor->Trace(inspected_frames_);
InspectorBaseAgent::Trace(visitor);
}
InspectorAuditsAgent::InspectorAuditsAgent(InspectorNetworkAgent* network_agent,
- InspectorIssueStorage* storage)
+ InspectorIssueStorage* storage,
+ InspectedFrames* inspected_frames)
: inspector_issue_storage_(storage),
enabled_(&agent_state_, false),
- network_agent_(network_agent) {}
+ network_agent_(network_agent),
+ inspected_frames_(inspected_frames) {}
InspectorAuditsAgent::~InspectorAuditsAgent() = default;
@@ -120,6 +160,32 @@ protocol::Response InspectorAuditsAgent::getEncodedResponse(
return Response::Success();
}
+void InspectorAuditsAgent::CheckContrastForDocument(Document* document,
+ bool report_aaa) {
+ InspectorContrast contrast(document);
+ Vector<std::pair<Element*, mojom::blink::InspectorIssueInfoPtr>> issues;
+ unsigned max_elements = 100;
+ for (ContrastInfo info :
+ contrast.GetElementsWithContrastIssues(report_aaa, max_elements)) {
+ InspectorIssueAdded(
+ InspectorIssue::Create(CreateLowTextContrastIssue(info)));
+ }
+}
+
+Response InspectorAuditsAgent::checkContrast(protocol::Maybe<bool> report_aaa) {
+ if (!inspected_frames_)
+ return Response::ServerError("Inspected frames are not available");
+
+ auto* main_window = inspected_frames_->Root()->DomWindow();
+ if (!main_window)
+ return Response::ServerError("Document is not available");
+
+ CheckContrastForDocument(main_window->document(),
+ report_aaa.fromMaybe(false));
+
+ return Response::Success();
+}
+
Response InspectorAuditsAgent::enable() {
if (enabled_.Get()) {
return Response::Success();
@@ -192,6 +258,16 @@ blink::protocol::String InspectorIssueCodeValue(
case mojom::blink::InspectorIssueCode::kContentSecurityPolicyIssue:
return protocol::Audits::InspectorIssueCodeEnum::
ContentSecurityPolicyIssue;
+ case mojom::blink::InspectorIssueCode::kSharedArrayBufferIssue:
+ return protocol::Audits::InspectorIssueCodeEnum::SharedArrayBufferIssue;
+ case mojom::blink::InspectorIssueCode::kTrustedWebActivityIssue:
+ CHECK(false);
+ return "";
+ case mojom::blink::InspectorIssueCode::kHeavyAdIssue:
+ CHECK(false);
+ return "";
+ case mojom::blink::InspectorIssueCode::kLowTextContrastIssue:
+ return protocol::Audits::InspectorIssueCodeEnum::LowTextContrastIssue;
}
}
@@ -364,6 +440,8 @@ protocol::String BuildMixedContentResourceType(
return protocol::Audits::MixedContentResourceTypeEnum::Stylesheet;
case blink::mojom::blink::RequestContextType::SUBRESOURCE:
return protocol::Audits::MixedContentResourceTypeEnum::Resource;
+ case blink::mojom::blink::RequestContextType::SUBRESOURCE_WEBBUNDLE:
+ return protocol::Audits::MixedContentResourceTypeEnum::Resource;
case blink::mojom::blink::RequestContextType::TRACK:
return protocol::Audits::MixedContentResourceTypeEnum::Track;
case blink::mojom::blink::RequestContextType::UNSPECIFIED:
@@ -426,6 +504,29 @@ protocol::String BuildViolationType(
}
}
+protocol::String BuildSABIssueType(
+ blink::mojom::blink::SharedArrayBufferIssueType type) {
+ switch (type) {
+ case blink::mojom::blink::SharedArrayBufferIssueType::kTransferIssue:
+ return protocol::Audits::SharedArrayBufferIssueTypeEnum::TransferIssue;
+ case blink::mojom::blink::SharedArrayBufferIssueType::kCreationIssue:
+ return protocol::Audits::SharedArrayBufferIssueTypeEnum::CreationIssue;
+ }
+}
+
+std::unique_ptr<protocol::Audits::SourceCodeLocation> BuildAffectedLocation(
+ const blink::mojom::blink::AffectedLocationPtr& affected_location) {
+ auto protocol_affected_location =
+ protocol::Audits::SourceCodeLocation::create()
+ .setUrl(affected_location->url)
+ .setColumnNumber(affected_location->column)
+ .setLineNumber(affected_location->line)
+ .build();
+ if (!affected_location->script_id.IsEmpty())
+ protocol_affected_location->setScriptId(affected_location->script_id);
+ return protocol_affected_location;
+}
+
} // namespace
void InspectorAuditsAgent::InspectorIssueAdded(InspectorIssue* issue) {
@@ -505,19 +606,41 @@ void InspectorAuditsAgent::InspectorIssueAdded(InspectorIssue* issue) {
}
if (d->frame_ancestor)
cspDetails.setFrameAncestor(BuildAffectedFrame(d->frame_ancestor));
- if (d->source_location) {
- auto source_location = protocol::Audits::SourceCodeLocation::create()
- .setUrl(d->source_location->url)
- .setColumnNumber(d->source_location->column)
- .setLineNumber(d->source_location->line)
- .build();
- cspDetails.setSourceCodeLocation(std::move(source_location));
+ if (d->affected_location) {
+ cspDetails.setSourceCodeLocation(
+ BuildAffectedLocation(d->affected_location));
}
if (d->violating_node_id)
cspDetails.setViolatingNodeId(d->violating_node_id);
issueDetails.setContentSecurityPolicyIssueDetails(cspDetails.build());
}
+ if (issue->Details()->sab_issue_details) {
+ const auto* d = issue->Details()->sab_issue_details.get();
+ auto details =
+ protocol::Audits::SharedArrayBufferIssueDetails::create()
+ .setIsWarning(d->is_warning)
+ .setType(BuildSABIssueType(d->type))
+ .setSourceCodeLocation(BuildAffectedLocation(d->affected_location))
+ .build();
+ issueDetails.setSharedArrayBufferIssueDetails(std::move(details));
+ }
+
+ if (issue->Details()->low_text_contrast_details) {
+ const auto* d = issue->Details()->low_text_contrast_details.get();
+ auto lowContrastDetails =
+ protocol::Audits::LowTextContrastIssueDetails::create()
+ .setThresholdAA(d->threshold_aa)
+ .setThresholdAAA(d->threshold_aaa)
+ .setFontSize(d->font_size)
+ .setFontWeight(d->font_weight)
+ .setContrastRatio(d->contrast_ratio)
+ .setViolatingNodeSelector(d->violating_node_selector)
+ .setViolatingNodeId(d->violating_node_id)
+ .build();
+ issueDetails.setLowTextContrastIssueDetails(std::move(lowContrastDetails));
+ }
+
auto inspector_issue = protocol::Audits::InspectorIssue::create()
.setCode(InspectorIssueCodeValue(issue->Code()))
.setDetails(issueDetails.build())