diff --git a/src/htmlminifier.js b/src/htmlminifier.js index 30d9054e..bff3574d 100644 --- a/src/htmlminifier.js +++ b/src/htmlminifier.js @@ -311,6 +311,9 @@ function cleanAttributeValue(tag, attrName, attrValue, options, attrs) { return (+numString).toString(); }); } + else if (isContentSecurityPolicy(tag, attrs) && attrName.toLowerCase() === 'content') { + return collapseWhitespaceAll(attrValue); + } else if (options.customAttrCollapse && options.customAttrCollapse.test(attrName)) { attrValue = attrValue.replace(/\n+|\r+|\s{2,}/g, ''); } @@ -335,6 +338,17 @@ function isMetaViewport(tag, attrs) { } } +function isContentSecurityPolicy(tag, attrs) { + if (tag !== 'meta') { + return false; + } + for (var i = 0, len = attrs.length; i < len; i++) { + if (attrs[i].name.toLowerCase() === 'http-equiv' && attrs[i].value.toLowerCase() === 'content-security-policy') { + return true; + } + } +} + function ignoreCSS(id) { return '/* clean-css ignore:start */' + id + '/* clean-css ignore:end */'; } diff --git a/tests/minifier.js b/tests/minifier.js index 07897d1e..c2fa4f11 100644 --- a/tests/minifier.js +++ b/tests/minifier.js @@ -3549,3 +3549,18 @@ QUnit.test('canCollapseWhitespace and canTrimWhitespace hooks', function(assert) canCollapseWhitespace: canCollapseAndTrimWhitespace }), output); }); + +QUnit.test('minify Content-Security-Policy', function(assert) { + var input, output; + + input = ''; + output = ''; + assert.equal(minify(input), output); + + input = ''; + output = ''; + assert.equal(minify(input), output); + + input = ''; + assert.equal(minify(input), input); +});