diff --git a/lighthouse-core/report/html/renderer/report-ui-features.js b/lighthouse-core/report/html/renderer/report-ui-features.js index 14ffbd3355bf..a1757ca70632 100644 --- a/lighthouse-core/report/html/renderer/report-ui-features.js +++ b/lighthouse-core/report/html/renderer/report-ui-features.js @@ -353,25 +353,19 @@ class ReportUIFeatures { * @protected */ static openTabAndSendJsonReport(reportJson, viewerPath) { - let resolve; - const p = new Promise(res => resolve = res); // Chrome doesn't allow us to immediately postMessage to a popup right // after it's created. Normally, we could also listen for the popup window's // load event, however it is cross-domain and won't fire. Instead, listen // for a message from the target app saying "I'm open". const json = reportJson; window.addEventListener('message', function msgHandler(/** @type {!Event} */ e) { - const messageEvent = /** @type {!MessageEvent<{opened: boolean, rendered: boolean}>} */ (e); + const messageEvent = /** @type {!MessageEvent<{opened: boolean}>} */ (e); if (messageEvent.origin !== VIEWER_ORIGIN) { return; } - // Most recent deployment if (messageEvent.data.opened) { popup.postMessage({lhresults: json}, VIEWER_ORIGIN); - } - if (messageEvent.data.rendered) { window.removeEventListener('message', msgHandler); - resolve(popup); } }); @@ -379,8 +373,6 @@ class ReportUIFeatures { const fetchTime = json.fetchTime || json.generatedTime; const windowName = `${json.lighthouseVersion}-${json.requestedUrl}-${fetchTime}`; const popup = /** @type {!Window} */ (window.open(`${VIEWER_ORIGIN}${viewerPath}`, windowName)); - - return p; } /** diff --git a/lighthouse-viewer/app/src/lighthouse-report-viewer.js b/lighthouse-viewer/app/src/lighthouse-report-viewer.js index a67246456833..0dac51d60938 100644 --- a/lighthouse-viewer/app/src/lighthouse-report-viewer.js +++ b/lighthouse-viewer/app/src/lighthouse-report-viewer.js @@ -175,7 +175,7 @@ class LighthouseReportViewer { } /** - * Opens new tab with compatible report viewer version + * Opens legacy viewer in current tab, then renders report * @param {!ReportRenderer.ReportJSON} reportJson * @private */ @@ -183,6 +183,7 @@ class LighthouseReportViewer { const warnMsg = `Version mismatch between viewer and JSON. Opening compatible viewer...`; logger.log(warnMsg, false); + // Place report in IDB, then navigate current tab to the legacy viewer const viewerPath = new URL('../viewer2x/', location.href); idbKeyval.set('2xreport', json).then(_ => { window.location.href = viewerPath; diff --git a/lighthouse-viewer/app/src/viewer-ui-features.js b/lighthouse-viewer/app/src/viewer-ui-features.js index e213bf358d32..8d880b157d2a 100644 --- a/lighthouse-viewer/app/src/viewer-ui-features.js +++ b/lighthouse-viewer/app/src/viewer-ui-features.js @@ -46,6 +46,13 @@ class ViewerUIFeatures extends ReportUIFeatures { return ReportGenerator.generateReportHtml(this.json); } + /** + * @override + */ + sendJsonReport() { + throw new Error('Cannot send JSON to Viewer from Viewer.'); + } + /** * @override */