blob: f32d7b472c83f56a3d604cf27eaef6b265c2cede [file] [log] [blame]
Connor Clark5f267212019-07-26 23:59:111// Copyright 2019 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
Paul Lewis6d4ebb22020-08-04 12:02:555// @ts-nocheck
6// TODO(crbug.com/1011811): Enable TypeScript compiler checks
7
Tim van der Lippe97611c92020-02-12 16:56:588import * as Components from '../components/components.js';
9import * as SDK from '../sdk/sdk.js';
10import * as UI from '../ui/ui.js';
11
Connor Clark5f267212019-07-26 23:59:1112/**
13 * @unrestricted
14 */
Tim van der Lippe97611c92020-02-12 16:56:5815export class NodeStackTraceWidget extends UI.ThrottledWidget.ThrottledWidget {
Connor Clark5f267212019-07-26 23:59:1116 constructor() {
17 super(true /* isWebComponent */);
Jack Franklin71519f82020-11-03 12:08:5918 this.registerRequiredCSS('elements/nodeStackTraceWidget.css', {enableLegacyPatching: true});
Connor Clark5f267212019-07-26 23:59:1119
20 this._noStackTraceElement = this.contentElement.createChild('div', 'gray-info-message');
21 this._noStackTraceElement.textContent = ls`No stack trace available`;
22 this._creationStackTraceElement = this.contentElement.createChild('div', 'stack-trace');
23
Tim van der Lippe97611c92020-02-12 16:56:5824 this._linkifier = new Components.Linkifier.Linkifier(MaxLengthForLinks);
Connor Clark5f267212019-07-26 23:59:1125 }
26
27 /**
28 * @override
29 */
30 wasShown() {
Tim van der Lipped1a00aa2020-08-19 16:03:5631 UI.Context.Context.instance().addFlavorChangeListener(SDK.DOMModel.DOMNode, this.update, this);
Connor Clark5f267212019-07-26 23:59:1132 this.update();
33 }
34
35 /**
36 * @override
37 */
38 willHide() {
Tim van der Lipped1a00aa2020-08-19 16:03:5639 UI.Context.Context.instance().removeFlavorChangeListener(SDK.DOMModel.DOMNode, this.update, this);
Connor Clark5f267212019-07-26 23:59:1140 }
41
42 /**
43 * @override
44 * @protected
45 * @return {!Promise<undefined>}
46 */
47 async doUpdate() {
Tim van der Lipped1a00aa2020-08-19 16:03:5648 const node = UI.Context.Context.instance().flavor(SDK.DOMModel.DOMNode);
Connor Clark5f267212019-07-26 23:59:1149
50 if (!node) {
51 this._noStackTraceElement.classList.remove('hidden');
52 this._creationStackTraceElement.classList.add('hidden');
53 return;
54 }
55
56 const creationStackTrace = await node.creationStackTrace();
57 if (creationStackTrace) {
58 this._noStackTraceElement.classList.add('hidden');
59 this._creationStackTraceElement.classList.remove('hidden');
60
61 const stackTracePreview = Components.JSPresentationUtils.buildStackTracePreviewContents(
Jack Lynch7bc9bf22020-01-13 17:16:0062 node.domModel().target(), this._linkifier, {stackTrace: creationStackTrace});
Connor Clark5f267212019-07-26 23:59:1163 this._creationStackTraceElement.removeChildren();
64 this._creationStackTraceElement.appendChild(stackTracePreview.element);
65 } else {
66 this._noStackTraceElement.classList.remove('hidden');
67 this._creationStackTraceElement.classList.add('hidden');
68 }
69 }
Tim van der Lippe13f71fb2019-11-29 11:17:3970}
Connor Clark5f267212019-07-26 23:59:1171
72/**
73 * @const
74 * @type {number}
75 */
Tim van der Lippe13f71fb2019-11-29 11:17:3976export const MaxLengthForLinks = 40;