Files
react-native-devtools-frontend/front_end/models/issues_manager/ClientHintIssue.ts
T
Ari Chivukula 8ad687341f [Client Hint Issue] (3) Implement devtools issue {DEVTOOLS}
Now that third-party delegation via markup for client hints is in M99,
we need to start alerting developers where they use unsupported
features. These features will be expanded and extended as more client
hint features launch.
https://docs.google.com/document/d/1lDEvj8tMeuvUs1HTTqL-44YiI-7ljeQkusM_WhUfIeE/edit

This CL is a part of a series:
(1) Implement devtools issue {CHROMIUM}
(2) Update devtools protocol {DEVTOOLS}
(3) Implement devtools issue {DEVTOOLS}

Bug: 1219359
Change-Id: Ia8aaf05b98894fd32f5aad8f973fcdf774e1634c
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3343149
Reviewed-by: Simon Zünd <szuend@chromium.org>
Reviewed-by: Rowan Merewood <merewood@chromium.org>
Commit-Queue: Ari Chivukula <arichiv@chromium.org>
Auto-Submit: Ari Chivukula <arichiv@chromium.org>
2021-12-16 12:12:18 +00:00

96 lines
3.1 KiB
TypeScript

// Copyright 2021 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.
import * as i18n from '../../core/i18n/i18n.js';
import type * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
import {Issue, IssueCategory, IssueKind} from './Issue.js';
import type {MarkdownIssueDescription, LazyMarkdownIssueDescription} from './MarkdownIssueDescription.js';
import {resolveLazyDescription} from './MarkdownIssueDescription.js';
const UIStrings = {
/**
*@description Title for Client Hint specification url link
*/
clientHintsInfrastructure: 'Client Hints Infrastructure',
};
const str_ = i18n.i18n.registerUIStrings('models/issues_manager/ClientHintIssue.ts', UIStrings);
const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
export class ClientHintIssue extends Issue {
private issueDetails: Protocol.Audits.ClientHintIssueDetails;
constructor(issueDetails: Protocol.Audits.ClientHintIssueDetails, issuesModel: SDK.IssuesModel.IssuesModel) {
super(
{
code: Protocol.Audits.InspectorIssueCode.ClientHintIssue,
umaCode: [Protocol.Audits.InspectorIssueCode.ClientHintIssue, issueDetails.clientHintIssueReason].join('::'),
},
issuesModel);
this.issueDetails = issueDetails;
}
getCategory(): IssueCategory {
return IssueCategory.Other;
}
details(): Protocol.Audits.ClientHintIssueDetails {
return this.issueDetails;
}
getDescription(): MarkdownIssueDescription|null {
const description = issueDescriptions.get(this.issueDetails.clientHintIssueReason);
if (!description) {
return null;
}
return resolveLazyDescription(description);
}
sources(): Iterable<Protocol.Audits.SourceCodeLocation> {
return [this.issueDetails.sourceCodeLocation];
}
primaryKey(): string {
return JSON.stringify(this.issueDetails);
}
getKind(): IssueKind {
return IssueKind.BreakingChange;
}
static fromInspectorIssue(issuesModel: SDK.IssuesModel.IssuesModel, inspectorIssue: Protocol.Audits.InspectorIssue):
ClientHintIssue[] {
const details = inspectorIssue.details.clientHintIssueDetails;
if (!details) {
console.warn('Client Hint issue without details received.');
return [];
}
return [new ClientHintIssue(details, issuesModel)];
}
}
const issueDescriptions: Map<Protocol.Audits.ClientHintIssueReason, LazyMarkdownIssueDescription> = new Map([
[
Protocol.Audits.ClientHintIssueReason.MetaTagAllowListInvalidOrigin,
{
file: 'clientHintMetaTagAllowListInvalidOrigin.md',
links: [{
link: 'https://wicg.github.io/client-hints-infrastructure/',
linkTitle: i18nLazyString(UIStrings.clientHintsInfrastructure),
}],
},
],
[
Protocol.Audits.ClientHintIssueReason.MetaTagModifiedHTML,
{
file: 'clientHintMetaTagModifiedHTML.md',
links: [{
link: 'https://wicg.github.io/client-hints-infrastructure/',
linkTitle: i18nLazyString(UIStrings.clientHintsInfrastructure),
}],
},
],
]);