blob: 1fb6dc2492ae08c6eaa3b502bf9d2a7930ccd76e [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
5/**
6 * @unrestricted
7 */
8Elements.NodeStackTraceWidget = class extends UI.ThrottledWidget {
9 constructor() {
10 super(true /* isWebComponent */);
11 this.registerRequiredCSS('elements/nodeStackTraceWidget.css');
12
13 this._noStackTraceElement = this.contentElement.createChild('div', 'gray-info-message');
14 this._noStackTraceElement.textContent = ls`No stack trace available`;
15 this._creationStackTraceElement = this.contentElement.createChild('div', 'stack-trace');
16
17 this._linkifier = new Components.Linkifier(Elements.NodeStackTraceWidget.MaxLengthForLinks);
18 }
19
20 /**
21 * @override
22 */
23 wasShown() {
24 UI.context.addFlavorChangeListener(SDK.DOMNode, this.update, this);
25 this.update();
26 }
27
28 /**
29 * @override
30 */
31 willHide() {
32 UI.context.removeFlavorChangeListener(SDK.DOMNode, this.update, this);
33 }
34
35 /**
36 * @override
37 * @protected
38 * @return {!Promise<undefined>}
39 */
40 async doUpdate() {
41 const node = UI.context.flavor(SDK.DOMNode);
42
43 if (!node) {
44 this._noStackTraceElement.classList.remove('hidden');
45 this._creationStackTraceElement.classList.add('hidden');
46 return;
47 }
48
49 const creationStackTrace = await node.creationStackTrace();
50 if (creationStackTrace) {
51 this._noStackTraceElement.classList.add('hidden');
52 this._creationStackTraceElement.classList.remove('hidden');
53
54 const stackTracePreview = Components.JSPresentationUtils.buildStackTracePreviewContents(
55 node.domModel().target(), this._linkifier, creationStackTrace);
56 this._creationStackTraceElement.removeChildren();
57 this._creationStackTraceElement.appendChild(stackTracePreview.element);
58 } else {
59 this._noStackTraceElement.classList.remove('hidden');
60 this._creationStackTraceElement.classList.add('hidden');
61 }
62 }
63};
64
65/**
66 * @const
67 * @type {number}
68 */
69Elements.NodeStackTraceWidget.MaxLengthForLinks = 40;