Skip to content

Commit 44861ab

Browse files
mikewestDevtools-frontend LUCI CQ
authored andcommitted
[SRI Message Signatures] Handle errors delivered to devtools.
This CL implements the devtools side of the integration for SRI Message Signature errors that occur during parsing or validation in the network service. It copies over the protocol changes from the Chromium side of the patch, and fleshes out the issue implementation and messaging. 1. [Chromium] https://crrev.com/c/6163804 2. [Devtools frontend] https://crrev.com/c/6239271 [You are here] Bug: 381044049 Change-Id: I94df831bcaacce8b37a60f880d5e01dc7e374db9 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6239271 Commit-Queue: Mike West <[email protected]> Reviewed-by: Danil Somsikov <[email protected]> Reviewed-by: Simon Zünd <[email protected]>
1 parent 67c99e2 commit 44861ab

28 files changed

+647
-1
lines changed

config/gni/devtools_grd_files.gni

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,26 @@ grd_files_release_sources = [
537537
"front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorShuttingDown.md",
538538
"front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorTooLongIdField.md",
539539
"front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorUnsupportedType.md",
540+
"front_end/models/issues_manager/descriptions/sriInvalidSignatureHeader.md",
541+
"front_end/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md",
542+
"front_end/models/issues_manager/descriptions/sriMissingSignatureHeader.md",
543+
"front_end/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md",
544+
"front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md",
545+
"front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md",
546+
"front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md",
547+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md",
548+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md",
549+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md",
550+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md",
551+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md",
552+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md",
553+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md",
554+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md",
555+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md",
556+
"front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md",
557+
"front_end/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md",
558+
"front_end/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md",
559+
"front_end/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md",
540560
"front_end/models/issues_manager/descriptions/stylesheetLateImport.md",
541561
"front_end/models/issues_manager/descriptions/stylesheetRequestFailed.md",
542562
"front_end/models/issues_manager/issues_manager.js",
@@ -1021,6 +1041,7 @@ grd_files_debug_sources = [
10211041
"front_end/models/issues_manager/PropertyRuleIssue.js",
10221042
"front_end/models/issues_manager/QuirksModeIssue.js",
10231043
"front_end/models/issues_manager/RelatedIssue.js",
1044+
"front_end/models/issues_manager/SRIMessageSignatureIssue.js",
10241045
"front_end/models/issues_manager/SelectElementAccessibilityIssue.js",
10251046
"front_end/models/issues_manager/SharedArrayBufferIssue.js",
10261047
"front_end/models/issues_manager/SharedDictionaryIssue.js",

front_end/core/host/UserMetrics.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1114,8 +1114,28 @@ export enum IssueCreated {
11141114
'SelectElementAccessibilityIssue::NonPhrasingContentOptionChild' = 88,
11151115
'SelectElementAccessibilityIssue::InteractiveContentOptionChild' = 89,
11161116
'SelectElementAccessibilityIssue::InteractiveContentLegendChild' = 90,
1117+
'SRIMessageSignatureIssue::MissingSignatureHeader' = 91,
1118+
'SRIMessageSignatureIssue::MissingSignatureInputHeader' = 92,
1119+
'SRIMessageSignatureIssue::InvalidSignatureHeader' = 93,
1120+
'SRIMessageSignatureIssue::InvalidSignatureInputHeader' = 94,
1121+
'SRIMessageSignatureIssue::SignatureHeaderValueIsNotByteSequence' = 95,
1122+
'SRIMessageSignatureIssue::SignatureHeaderValueIsParameterized' = 96,
1123+
'SRIMessageSignatureIssue::SignatureHeaderValueIsIncorrectLength' = 97,
1124+
'SRIMessageSignatureIssue::SignatureInputHeaderMissingLabel' = 98,
1125+
'SRIMessageSignatureIssue::SignatureInputHeaderValueNotInnerList' = 99,
1126+
'SRIMessageSignatureIssue::SignatureInputHeaderValueMissingComponents' = 100,
1127+
'SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentType' = 101,
1128+
'SRIMessageSignatureIssue::SignatureInputHeaderInvalidComponentName' = 102,
1129+
'SRIMessageSignatureIssue::SignatureInputHeaderInvalidHeaderComponentParameter' = 103,
1130+
'SRIMessageSignatureIssue::SignatureInputHeaderInvalidDerivedComponentParameter' = 104,
1131+
'SRIMessageSignatureIssue::SignatureInputHeaderKeyIdLength' = 105,
1132+
'SRIMessageSignatureIssue::SignatureInputHeaderInvalidParameter' = 106,
1133+
'SRIMessageSignatureIssue::SignatureInputHeaderMissingRequiredParameters' = 107,
1134+
'SRIMessageSignatureIssue::ValidationFailedSignatureExpired' = 108,
1135+
'SRIMessageSignatureIssue::ValidationFailedInvalidLength' = 109,
1136+
'SRIMessageSignatureIssue::ValidationFailedSignatureMismatch' = 110,
11171137
/* eslint-enable @typescript-eslint/naming-convention */
1118-
MAX_VALUE = 91,
1138+
MAX_VALUE = 111,
11191139
}
11201140

11211141
export const enum DeveloperResourceLoaded {

front_end/models/issues_manager/BUILD.gn

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ devtools_module("issues_manager") {
3535
"PropertyRuleIssue.ts",
3636
"QuirksModeIssue.ts",
3737
"RelatedIssue.ts",
38+
"SRIMessageSignatureIssue.ts",
3839
"SelectElementAccessibilityIssue.ts",
3940
"SharedArrayBufferIssue.ts",
4041
"SharedDictionaryIssue.ts",
@@ -213,6 +214,26 @@ devtools_issue_description_files = [
213214
"sharedDictionaryWriteErrorShuttingDown.md",
214215
"sharedDictionaryWriteErrorTooLongIdField.md",
215216
"sharedDictionaryWriteErrorUnsupportedType.md",
217+
"sriMissingSignatureHeader.md",
218+
"sriMissingSignatureInputHeader.md",
219+
"sriInvalidSignatureHeader.md",
220+
"sriInvalidSignatureInputHeader.md",
221+
"sriSignatureHeaderValueIsNotByteSequence.md",
222+
"sriSignatureHeaderValueIsParameterized.md",
223+
"sriSignatureHeaderValueIsIncorrectLength.md",
224+
"sriSignatureInputHeaderMissingLabel.md",
225+
"sriSignatureInputHeaderValueNotInnerList.md",
226+
"sriSignatureInputHeaderValueMissingComponents.md",
227+
"sriSignatureInputHeaderInvalidComponentType.md",
228+
"sriSignatureInputHeaderInvalidComponentName.md",
229+
"sriSignatureInputHeaderInvalidHeaderComponentParameter.md",
230+
"sriSignatureInputHeaderInvalidDerivedComponentParameter.md",
231+
"sriSignatureInputHeaderKeyIdLength.md",
232+
"sriSignatureInputHeaderInvalidParameter.md",
233+
"sriSignatureInputHeaderMissingRequiredParameters.md",
234+
"sriValidationFailedSignatureExpired.md",
235+
"sriValidationFailedInvalidLength.md",
236+
"sriValidationFailedSignatureMismatch.md",
216237
"placeholderDescriptionForInvisibleIssues.md",
217238
]
218239

@@ -265,6 +286,7 @@ ts_library("unittests") {
265286
"MarkdownIssueDescription.test.ts",
266287
"PropertyRuleIssue.test.ts",
267288
"RelatedIssue.test.ts",
289+
"SRIMessageSignatureIssue.test.ts",
268290
"SelectElementAccessibilityIssue.test.ts",
269291
"SharedDictionaryIssue.test.ts",
270292
"StylesheetLoadingIssue.test.ts",

front_end/models/issues_manager/IssuesManager.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {SelectElementAccessibilityIssue} from './SelectElementAccessibilityIssue
2929
import {SharedArrayBufferIssue} from './SharedArrayBufferIssue.js';
3030
import {SharedDictionaryIssue} from './SharedDictionaryIssue.js';
3131
import {SourceFrameIssuesManager} from './SourceFrameIssuesManager.js';
32+
import {SRIMessageSignatureIssue} from './SRIMessageSignatureIssue.js';
3233
import {StylesheetLoadingIssue} from './StylesheetLoadingIssue.js';
3334

3435
export {Events} from './IssuesManagerEvents.js';
@@ -129,6 +130,10 @@ const issueCodeHandlers = new Map<
129130
Protocol.Audits.InspectorIssueCode.SelectElementAccessibilityIssue,
130131
SelectElementAccessibilityIssue.fromInspectorIssue,
131132
],
133+
[
134+
Protocol.Audits.InspectorIssueCode.SRIMessageSignatureIssue,
135+
SRIMessageSignatureIssue.fromInspectorIssue,
136+
],
132137
]);
133138

134139
/**
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright 2025 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import type * as SDK from '../../core/sdk/sdk.js';
6+
import * as Protocol from '../../generated/protocol.js';
7+
import {describeWithLocale} from '../../testing/EnvironmentHelpers.js';
8+
import {MockIssuesModel} from '../../testing/MockIssuesModel.js';
9+
import * as IssuesManager from '../issues_manager/issues_manager.js';
10+
11+
function createProtocolIssue(sriMessageSignatureIssueDetails: Protocol.Audits.SRIMessageSignatureIssueDetails):
12+
Protocol.Audits.InspectorIssue {
13+
return {
14+
code: Protocol.Audits.InspectorIssueCode.SRIMessageSignatureIssue,
15+
details: {sriMessageSignatureIssueDetails},
16+
};
17+
}
18+
19+
describeWithLocale('SRIMessageSignatureIssue', () => {
20+
const mockModel = new MockIssuesModel([]) as unknown as SDK.IssuesModel.IssuesModel;
21+
22+
it('can be created for various error reasons', () => {
23+
const errorReasons = [
24+
Protocol.Audits.SRIMessageSignatureError.MissingSignatureHeader,
25+
Protocol.Audits.SRIMessageSignatureError.MissingSignatureInputHeader,
26+
Protocol.Audits.SRIMessageSignatureError.InvalidSignatureHeader,
27+
Protocol.Audits.SRIMessageSignatureError.InvalidSignatureInputHeader,
28+
Protocol.Audits.SRIMessageSignatureError.SignatureHeaderValueIsNotByteSequence,
29+
Protocol.Audits.SRIMessageSignatureError.SignatureHeaderValueIsParameterized,
30+
Protocol.Audits.SRIMessageSignatureError.SignatureHeaderValueIsIncorrectLength,
31+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderMissingLabel,
32+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderValueNotInnerList,
33+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderValueMissingComponents,
34+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderInvalidComponentType,
35+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderInvalidComponentName,
36+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderInvalidHeaderComponentParameter,
37+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderInvalidDerivedComponentParameter,
38+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderKeyIdLength,
39+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderInvalidParameter,
40+
Protocol.Audits.SRIMessageSignatureError.SignatureInputHeaderMissingRequiredParameters,
41+
Protocol.Audits.SRIMessageSignatureError.ValidationFailedSignatureExpired,
42+
Protocol.Audits.SRIMessageSignatureError.ValidationFailedInvalidLength,
43+
Protocol.Audits.SRIMessageSignatureError.ValidationFailedSignatureMismatch,
44+
];
45+
for (const errorReason of errorReasons) {
46+
const issueDetails = {
47+
error: errorReason,
48+
request: {
49+
requestId: 'test-request-id' as Protocol.Network.RequestId,
50+
url: 'https://example.com/',
51+
},
52+
};
53+
const issue = createProtocolIssue(issueDetails);
54+
const sriMessageSignatureIssues =
55+
IssuesManager.SRIMessageSignatureIssue.SRIMessageSignatureIssue.fromInspectorIssue(mockModel, issue);
56+
assert.lengthOf(sriMessageSignatureIssues, 1);
57+
const sriMessageSignatureIssue = sriMessageSignatureIssues[0];
58+
59+
assert.strictEqual(sriMessageSignatureIssue.getCategory(), IssuesManager.Issue.IssueCategory.OTHER);
60+
assert.deepEqual(sriMessageSignatureIssue.details(), issueDetails);
61+
assert.strictEqual(sriMessageSignatureIssue.getKind(), IssuesManager.Issue.IssueKind.PAGE_ERROR);
62+
assert.isNotNull(sriMessageSignatureIssue.getDescription());
63+
}
64+
});
65+
});

0 commit comments

Comments
 (0)