Commit 48d7bb29 authored by cjamcl@google.com's avatar cjamcl@google.com Committed by Commit Bot

[DevTools] Audits: Fix broken DOM node revealing

Bug: lighthouse=2289
Change-Id: I600ac5dc4413a0d501bcc9ca9dafc9a754444878
Reviewed-on: https://chromium-review.googlesource.com/c/1337285Reviewed-by: default avatarPaul Irish <paulirish@chromium.org>
Reviewed-by: default avatarErik Luo <luoe@chromium.org>
Commit-Queue: Paul Irish <paulirish@chromium.org>
Commit-Queue: Connor Clark <cjamcl@google.com>
Cr-Commit-Position: refs/heads/master@{#611427}
parent 8d1cffce
...@@ -137,9 +137,7 @@ Audits2.Audits2Panel = class extends UI.Panel { ...@@ -137,9 +137,7 @@ Audits2.Audits2Panel = class extends UI.Panel {
const reportContainer = this._auditResultsElement.createChild('div', 'lh-vars lh-root lh-devtools'); const reportContainer = this._auditResultsElement.createChild('div', 'lh-vars lh-root lh-devtools');
const dom = new DOM(/** @type {!Document} */ (this._auditResultsElement.ownerDocument)); const dom = new DOM(/** @type {!Document} */ (this._auditResultsElement.ownerDocument));
const detailsRenderer = new Audits2.DetailsRenderer(dom); const renderer = new Audits2.ReportRenderer(dom);
const categoryRenderer = new CategoryRenderer(dom, detailsRenderer);
const renderer = new Audits2.ReportRenderer(dom, categoryRenderer);
const templatesHTML = Runtime.cachedResources['audits2/lighthouse/templates.html']; const templatesHTML = Runtime.cachedResources['audits2/lighthouse/templates.html'];
const templatesDOM = new DOMParser().parseFromString(templatesHTML, 'text/html'); const templatesDOM = new DOMParser().parseFromString(templatesHTML, 'text/html');
...@@ -149,6 +147,7 @@ Audits2.Audits2Panel = class extends UI.Panel { ...@@ -149,6 +147,7 @@ Audits2.Audits2Panel = class extends UI.Panel {
renderer.setTemplateContext(templatesDOM); renderer.setTemplateContext(templatesDOM);
const el = renderer.renderReport(lighthouseResult, reportContainer); const el = renderer.renderReport(lighthouseResult, reportContainer);
Audits2.ReportRenderer.addViewTraceButton(el, artifacts); Audits2.ReportRenderer.addViewTraceButton(el, artifacts);
Audits2.ReportRenderer.linkifyNodeDetails(el);
this._cachedRenderedReports.set(lighthouseResult, reportContainer); this._cachedRenderedReports.set(lighthouseResult, reportContainer);
} }
......
...@@ -25,66 +25,44 @@ Audits2.ReportRenderer = class extends ReportRenderer { ...@@ -25,66 +25,44 @@ Audits2.ReportRenderer = class extends ReportRenderer {
Timeline.TimelinePanel.instance().loadFromEvents(defaultPassTrace.traceEvents); Timeline.TimelinePanel.instance().loadFromEvents(defaultPassTrace.traceEvents);
} }
} }
};
class ReportUIFeatures {
/** /**
* @param {!ReportRenderer.ReportJSON} report * @param {!Element} el
*/ */
initFeatures(report) { static async linkifyNodeDetails(el) {
}
}
Audits2.DetailsRenderer = class extends DetailsRenderer {
/**
* @param {!DOM} dom
*/
constructor(dom) {
super(dom);
this._onLoadPromise = null;
}
/**
* @override
* @param {!DetailsRenderer.NodeDetailsJSON} item
* @return {!Element}
*/
renderNode(item) {
const element = super.renderNode(item);
this._replaceWithDeferredNodeBlock(element, item);
return element;
}
/**
* @param {!Element} origElement
* @param {!DetailsRenderer.NodeDetailsJSON} detailsItem
*/
async _replaceWithDeferredNodeBlock(origElement, detailsItem) {
const mainTarget = SDK.targetManager.mainTarget(); const mainTarget = SDK.targetManager.mainTarget();
if (!this._onLoadPromise) { const resourceTreeModel = mainTarget.model(SDK.ResourceTreeModel);
const resourceTreeModel = mainTarget.model(SDK.ResourceTreeModel); await resourceTreeModel.once(SDK.ResourceTreeModel.Events.Load);
this._onLoadPromise = resourceTreeModel.once(SDK.ResourceTreeModel.Events.Load);
}
await this._onLoadPromise;
const domModel = mainTarget.model(SDK.DOMModel); const domModel = mainTarget.model(SDK.DOMModel);
if (!detailsItem.path)
return;
const nodeId = await domModel.pushNodeByPathToFrontend(detailsItem.path); for (const origElement of el.getElementsByClassName('lh-node')) {
/** @type {!DetailsRenderer.NodeDetailsJSON} */
const detailsItem = origElement.dataset;
if (!detailsItem.path)
return;
if (!nodeId) const nodeId = await domModel.pushNodeByPathToFrontend(detailsItem.path);
return;
const node = domModel.nodeForId(nodeId);
if (!node)
return;
const element = if (!nodeId)
await Common.Linkifier.linkify(node, /** @type {!Common.Linkifier.Options} */ ({title: detailsItem.snippet})); return;
origElement.title = ''; const node = domModel.nodeForId(nodeId);
origElement.textContent = ''; if (!node)
origElement.appendChild(element); return;
const element =
await Common.Linkifier.linkify(node, /** @type {!Common.Linkifier.Options} */ ({title: detailsItem.snippet}));
origElement.title = '';
origElement.textContent = '';
origElement.appendChild(element);
}
} }
}; };
class ReportUIFeatures {
/**
* @param {!ReportRenderer.ReportJSON} report
*/
initFeatures(report) {
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment