Files
react-native-devtools-frontend/front_end/models/issues_manager/AttributionReportingIssue.ts
T
Andrew Paseltiner ffc9456230 Add description for invalid attribution reporting header issue
The description here is vague, but because the issue includes both a reference to the original request and the invalid header value, it
should still be more useful to developers than the situation before this
CL, which was for invalid headers to be silently ignored.

We will add additional metadata, such as the name of the invalid header
and the reason why it was invalid, in future changes.

Screenshot of reported issue available in crbug.com/1302318#c4.

Bug: 1302318
Change-Id: Ie7f3b5e34b25ff56d832bf553ffcac674b5a57ba
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3644629
Reviewed-by: Simon Zünd <szuend@chromium.org>
Commit-Queue: Andrew Paseltiner <apaseltiner@chromium.org>
2022-05-12 16:39:03 +00:00

112 lines
4.4 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 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} from './MarkdownIssueDescription.js';
export const enum IssueCode {
PermissionPolicyDisabled = 'AttributionReportingIssue::PermissionPolicyDisabled',
AttributionSourceUntrustworthyFrameOrigin = 'AttributionReportingIssue::AttributionSourceUntrustworthyFrameOrigin',
AttributionSourceUntrustworthyOrigin = 'AttributionReportingIssue::AttributionSourceUntrustworthyOrigin',
AttributionUntrustworthyFrameOrigin = 'AttributionReportingIssue::AttributionUntrustworthyFrameOrigin',
AttributionUntrustworthyOrigin = 'AttributionReportingIssue::AttributionUntrustworthyOrigin',
InvalidHeader = 'AttributionReportingIssue::InvalidHeader',
}
function getIssueCode(details: Protocol.Audits.AttributionReportingIssueDetails): IssueCode {
switch (details.violationType) {
case Protocol.Audits.AttributionReportingIssueType.PermissionPolicyDisabled:
return IssueCode.PermissionPolicyDisabled;
case Protocol.Audits.AttributionReportingIssueType.AttributionSourceUntrustworthyOrigin:
return details.frame !== undefined ? IssueCode.AttributionSourceUntrustworthyFrameOrigin :
IssueCode.AttributionSourceUntrustworthyOrigin;
case Protocol.Audits.AttributionReportingIssueType.AttributionUntrustworthyOrigin:
return details.frame !== undefined ? IssueCode.AttributionUntrustworthyFrameOrigin :
IssueCode.AttributionUntrustworthyOrigin;
case Protocol.Audits.AttributionReportingIssueType.InvalidHeader:
return IssueCode.InvalidHeader;
}
}
export class AttributionReportingIssue extends Issue<IssueCode> {
issueDetails: Readonly<Protocol.Audits.AttributionReportingIssueDetails>;
constructor(
issueDetails: Protocol.Audits.AttributionReportingIssueDetails, issuesModel: SDK.IssuesModel.IssuesModel) {
super(getIssueCode(issueDetails), issuesModel);
this.issueDetails = issueDetails;
}
getCategory(): IssueCategory {
return IssueCategory.AttributionReporting;
}
getDescription(): MarkdownIssueDescription|null {
switch (this.code()) {
case IssueCode.PermissionPolicyDisabled:
return {
file: 'arPermissionPolicyDisabled.md',
links: [],
};
case IssueCode.AttributionSourceUntrustworthyFrameOrigin:
return {
file: 'arAttributionSourceUntrustworthyFrameOrigin.md',
links: [],
};
case IssueCode.AttributionSourceUntrustworthyOrigin:
return {
file: 'arAttributionSourceUntrustworthyOrigin.md',
links: [
{
link:
'https://developer.chrome.com/docs/privacy-sandbox/attribution-reporting-event-guide/#html-attribute-attributiondestination-required',
linkTitle: 'attributiondestination attribute',
},
{
link:
'https://developer.chrome.com/docs/privacy-sandbox/attribution-reporting-event-guide/#html-attribute-attributionreportto',
linkTitle: 'attributionreportto attribute',
},
],
};
case IssueCode.AttributionUntrustworthyFrameOrigin:
return {
file: 'arAttributionUntrustworthyFrameOrigin.md',
links: [],
};
case IssueCode.AttributionUntrustworthyOrigin:
return {
file: 'arAttributionUntrustworthyOrigin.md',
links: [],
};
case IssueCode.InvalidHeader:
return {
file: 'arInvalidHeader.md',
links: [],
};
}
}
primaryKey(): string {
return JSON.stringify(this.issueDetails);
}
getKind(): IssueKind {
return IssueKind.PageError;
}
static fromInspectorIssue(issuesModel: SDK.IssuesModel.IssuesModel, inspectorIssue: Protocol.Audits.InspectorIssue):
AttributionReportingIssue[] {
const {attributionReportingIssueDetails} = inspectorIssue.details;
if (!attributionReportingIssueDetails) {
console.warn('Attribution Reporting issue without details received.');
return [];
}
return [new AttributionReportingIssue(attributionReportingIssueDetails, issuesModel)];
}
}