From 82505a157b4c2f0acfedba777b274ebdfed878bb Mon Sep 17 00:00:00 2001 From: Ward Peeters Date: Wed, 11 Jul 2018 18:45:39 +0200 Subject: [PATCH] core(preload): remove blob protocol from preload audit (#5409) --- lighthouse-core/audits/uses-rel-preload.js | 2 +- lighthouse-core/lib/url-shim.js | 2 ++ .../test/audits/uses-rel-preload-test.js | 30 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lighthouse-core/audits/uses-rel-preload.js b/lighthouse-core/audits/uses-rel-preload.js index 6e49d1038576..8622629d7d6d 100644 --- a/lighthouse-core/audits/uses-rel-preload.js +++ b/lighthouse-core/audits/uses-rel-preload.js @@ -65,7 +65,7 @@ class UsesRelPreloadAudit extends Audit { * @return {boolean} */ static shouldPreload(request, mainResource) { - if (request.isLinkPreload || request.protocol === 'data') { + if (request.isLinkPreload || URL.NON_NETWORK_PROTOCOLS.includes(request.protocol)) { return false; } diff --git a/lighthouse-core/lib/url-shim.js b/lighthouse-core/lib/url-shim.js index 78ee0fbbe979..aaeb79ea7651 100644 --- a/lighthouse-core/lib/url-shim.js +++ b/lighthouse-core/lib/url-shim.js @@ -190,6 +190,8 @@ URLShim.URL = URL; URLShim.URLSearchParams = (typeof self !== 'undefined' && self.URLSearchParams) || require('url').URLSearchParams; +URLShim.NON_NETWORK_PROTOCOLS = ['blob', 'data']; + URLShim.INVALID_URL_DEBUG_STRING = 'Lighthouse was unable to determine the URL of some script executions. ' + 'It\'s possible a Chrome extension or other eval\'d code is the source.'; diff --git a/lighthouse-core/test/audits/uses-rel-preload-test.js b/lighthouse-core/test/audits/uses-rel-preload-test.js index 4ab841a96363..ab41e062d269 100644 --- a/lighthouse-core/test/audits/uses-rel-preload-test.js +++ b/lighthouse-core/test/audits/uses-rel-preload-test.js @@ -232,6 +232,36 @@ describe('Performance: uses-rel-preload audit', () => { }); }); + it(`shouldn't suggest preload for protocol blob`, () => { + const networkRecords = [ + { + requestId: '3', + protocol: 'blob', + _startTime: 10, + }, + ]; + + const chains = { + '1': { + children: { + '2': { + children: { + '3': { + request: networkRecords[0], + children: {}, + }, + }, + }, + }, + }, + }; + + return UsesRelPreload.audit(mockArtifacts(networkRecords, chains), {}).then(output => { + assert.equal(output.rawValue, 0); + assert.equal(output.details.items.length, 0); + }); + }); + it('does not throw on a real trace/devtools log', async () => { const artifacts = Object.assign({ URL: {finalUrl: 'https://pwa.rocks/'},