Skip to content

Commit 02ab38d

Browse files
tcaptan-crDevtools-frontend LUCI CQ
authored and
Devtools-frontend LUCI CQ
committed
Expose ::checkmark pseudo-element in devtools
Bug: 379805728 Change-Id: I8c6c478fe7bef0d93a50354ad450a9fd91c49ce5 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6170906 Reviewed-by: Philip Pfaffe <[email protected]> Commit-Queue: Traian Captan <[email protected]> Reviewed-by: Eric Leese <[email protected]>
1 parent 1926731 commit 02ab38d

File tree

4 files changed

+73
-0
lines changed

4 files changed

+73
-0
lines changed

front_end/core/sdk/DOMModel.ts

+4
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,10 @@ export class DOMNode {
353353
return this.#pseudoElements;
354354
}
355355

356+
checkmarkPseudoElement(): DOMNode|undefined {
357+
return this.#pseudoElements.get(Protocol.DOM.PseudoType.Checkmark)?.at(-1);
358+
}
359+
356360
beforePseudoElement(): DOMNode|undefined {
357361
return this.#pseudoElements.get(Protocol.DOM.PseudoType.Before)?.at(-1);
358362
}

front_end/panels/elements/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ ts_library("unittests") {
162162
"ElementStatePaneWidget.test.ts",
163163
"ElementsPanel.test.ts",
164164
"ElementsTreeElementHighlighter.test.ts",
165+
"ElementsTreeOutline.test.ts",
165166
"InspectElementModeController.test.ts",
166167
"PlatformFontsWidget.test.ts",
167168
"PropertiesWidget.test.ts",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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 * as SDK from '../../core/sdk/sdk.js';
6+
import * as Protocol from '../../generated/protocol.js';
7+
import {createTarget} from '../../testing/EnvironmentHelpers.js';
8+
import {
9+
describeWithMockConnection,
10+
} from '../../testing/MockConnection.js';
11+
12+
import * as Elements from './elements.js';
13+
14+
describeWithMockConnection('ElementsTreeOutline', () => {
15+
let target: SDK.Target.Target;
16+
let model: SDK.DOMModel.DOMModel;
17+
let treeOutline: Elements.ElementsTreeOutline.ElementsTreeOutline;
18+
19+
beforeEach(() => {
20+
target = createTarget();
21+
22+
treeOutline = new Elements.ElementsTreeOutline.ElementsTreeOutline(/* omitRootDOMNode */ true);
23+
treeOutline.wireToDOMModel(target.model(SDK.DOMModel.DOMModel) as SDK.DOMModel.DOMModel);
24+
25+
const modelBeforeAssertion = target.model(SDK.DOMModel.DOMModel);
26+
assert.exists(modelBeforeAssertion);
27+
model = modelBeforeAssertion;
28+
});
29+
30+
afterEach(() => {
31+
target.dispose('NO_REASON');
32+
});
33+
34+
it('should include the ::checkmark pseudo element', () => {
35+
const optionNode = SDK.DOMModel.DOMNode.create(model, null, false, {
36+
nodeId: 1 as Protocol.DOM.NodeId,
37+
backendNodeId: 1 as Protocol.DOM.BackendNodeId,
38+
nodeType: Node.ELEMENT_NODE,
39+
nodeName: 'option',
40+
localName: 'option',
41+
nodeValue: 'An Option',
42+
childNodeCount: 1,
43+
pseudoElements: [{
44+
parentId: 1 as Protocol.DOM.NodeId,
45+
nodeId: 2 as Protocol.DOM.NodeId,
46+
backendNodeId: 2 as Protocol.DOM.BackendNodeId,
47+
nodeType: Node.ELEMENT_NODE,
48+
pseudoType: Protocol.DOM.PseudoType.Checkmark,
49+
pseudoIdentifier: '::checkmark',
50+
nodeName: '::checkmark',
51+
localName: '::checkmark',
52+
nodeValue: '*',
53+
}],
54+
});
55+
assert.isNotNull(optionNode);
56+
57+
const checkmarkNode = optionNode.checkmarkPseudoElement();
58+
assert.isNotNull(checkmarkNode);
59+
60+
treeOutline.rootDOMNode = optionNode;
61+
assert.isNotNull(treeOutline.findTreeElement(checkmarkNode!));
62+
});
63+
});

front_end/panels/elements/ElementsTreeOutline.ts

+5
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,11 @@ export class ElementsTreeOutline extends
13821382
visibleChildren.push(markerPseudoElement);
13831383
}
13841384

1385+
const checkmarkPseudoElement = node.checkmarkPseudoElement();
1386+
if (checkmarkPseudoElement) {
1387+
visibleChildren.push(checkmarkPseudoElement);
1388+
}
1389+
13851390
const beforePseudoElement = node.beforePseudoElement();
13861391
if (beforePseudoElement) {
13871392
visibleChildren.push(beforePseudoElement);

0 commit comments

Comments
 (0)