From de7af654e35a840f1371be57028d28feac83cfbf Mon Sep 17 00:00:00 2001 From: Patrick Hulce Date: Wed, 18 Jul 2018 16:57:44 -0700 Subject: [PATCH] core(optimized-images): support non-standard mime types --- .../gatherers/dobetterweb/optimized-images.js | 4 +++- .../test/audits/dobetterweb/doctype-test.js | 2 +- .../dobetterweb/optimized-images-test.js | 21 ++++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lighthouse-core/gather/gatherers/dobetterweb/optimized-images.js b/lighthouse-core/gather/gatherers/dobetterweb/optimized-images.js index b593ae9c1019..80ee69be4922 100644 --- a/lighthouse-core/gather/gatherers/dobetterweb/optimized-images.js +++ b/lighthouse-core/gather/gatherers/dobetterweb/optimized-images.js @@ -21,6 +21,8 @@ const WEBP_QUALITY = 0.85; const MINIMUM_IMAGE_SIZE = 4096; // savings of <4 KB will be ignored in the audit anyway +const IMAGE_REGEX = /^image\/((x|ms|x-ms)-)?(png|bmp|jpeg)$/; + /** @typedef {{isSameOrigin: boolean, isBase64DataUri: boolean, requestId: string, url: string, mimeType: string, resourceSize: number}} SimplifiedNetworkRecord */ /* global document, Image, atob */ @@ -87,7 +89,7 @@ class OptimizedImages extends Gatherer { seenUrls.add(record.url); const isOptimizableImage = record.resourceType === NetworkRequest.TYPES.Image && - /image\/(png|bmp|jpeg)/.test(record.mimeType); + IMAGE_REGEX.test(record.mimeType); const isSameOrigin = URL.originsMatch(pageUrl, record.url); const isBase64DataUri = /^data:.{2,40}base64\s*,/.test(record.url); diff --git a/lighthouse-core/test/audits/dobetterweb/doctype-test.js b/lighthouse-core/test/audits/dobetterweb/doctype-test.js index 937aa568a505..b77e49bf1c38 100644 --- a/lighthouse-core/test/audits/dobetterweb/doctype-test.js +++ b/lighthouse-core/test/audits/dobetterweb/doctype-test.js @@ -8,7 +8,7 @@ const Audit = require('../../../audits/dobetterweb/doctype.js'); const assert = require('assert'); -/* eslint-env mocha */ +/* eslint-env jest */ describe('DOBETTERWEB: doctype audit', () => { it('fails when document does not contain a doctype', () => { diff --git a/lighthouse-core/test/gather/gatherers/dobetterweb/optimized-images-test.js b/lighthouse-core/test/gather/gatherers/dobetterweb/optimized-images-test.js index 68dfe839c555..d017f0387938 100644 --- a/lighthouse-core/test/gather/gatherers/dobetterweb/optimized-images-test.js +++ b/lighthouse-core/test/gather/gatherers/dobetterweb/optimized-images-test.js @@ -5,7 +5,7 @@ */ 'use strict'; -/* eslint-env mocha */ +/* eslint-env jest */ const OptimizedImages = require('../../../../gather/gatherers/dobetterweb/optimized-images'); @@ -185,4 +185,23 @@ describe('Optimized images', () => { assert.ok(/gmail.*image.jpg/.test(artifact[3].url)); }); }); + + it('handles non-standard mime types too', async () => { + const traceData = { + networkRecords: [ + { + requestId: '1', + url: 'http://google.com/image.bmp?x-ms', + mimeType: 'image/x-ms-bmp', + resourceSize: 12000, + transferSize: 20000, + resourceType: 'Image', + finished: true, + }, + ], + }; + + const artifact = await optimizedImages.afterPass(options, traceData); + expect(artifact).toHaveLength(1); + }); });