Revision: 5501
Author: [email protected]
Date: Wed Jul 24 10:50:28 2013
Log: Fix handling of !important following CSS property values.
https://codereview.appspot.com/11745045
Recognize "!important" at the end of CSS property values in stylesheets.
[email protected]
http://code.google.com/p/google-caja/source/detail?r=5501
Modified:
/trunk/src/com/google/caja/plugin/sanitizecss.js
/trunk/tests/com/google/caja/plugin/sanitizecss_test.html
/trunk/tests/com/google/caja/plugin/sanitizecss_test.js
=======================================
--- /trunk/src/com/google/caja/plugin/sanitizecss.js Wed Jul 17 15:09:45
2013
+++ /trunk/src/com/google/caja/plugin/sanitizecss.js Wed Jul 24 10:50:28
2013
@@ -692,8 +692,9 @@
* which is true if the external url itself contained other
external
* URLs.
*/
- function sanitizeStylesheetInternal(baseUri, cssText, virtualization,
- naiveUriRewriter, naiveUriFetcher, continuation) {
+ function sanitizeStylesheetInternal(
+ baseUri, cssText, virtualization, naiveUriRewriter,
naiveUriFetcher,
+ continuation) {
var safeCss = void 0;
var moreToCome = false;
// A stack describing the { ... } regions.
@@ -838,10 +839,20 @@
},
declaration: function (property, valueArray) {
if (!elide) {
+ var isImportant = false;
+ var nValues = valueArray.length;
+ if (nValues >= 2
+ && valueArray[nValues - 2] === '!'
+ && valueArray[nValues - 1].toLowerCase()
=== 'important') {
+ isImportant = true;
+ valueArray.length -= 2;
+ }
sanitizeCssProperty(
property, valueArray, naiveUriRewriter, baseUri);
if (valueArray.length) {
- safeCss.push(property, ':', valueArray.join(' '), ';');
+ safeCss.push(
+ property, ':', valueArray.join(' '),
+ isImportant ? ' !important;' : ';');
}
}
}
@@ -859,14 +870,17 @@
sanitizeStylesheet = function (
baseUri, cssText, virtualization, naiveUriRewriter) {
- return sanitizeStylesheetInternal(baseUri, cssText, virtualization,
- naiveUriRewriter, undefined, undefined).result;
+ return sanitizeStylesheetInternal(
+ baseUri, cssText, virtualization,
+ naiveUriRewriter, undefined, undefined).result;
};
- sanitizeStylesheetWithExternals = function (baseUri, cssText,
- virtualization, naiveUriRewriter, naiveUriFetcher, continuation) {
- return sanitizeStylesheetInternal(baseUri, cssText, virtualization,
- naiveUriRewriter, naiveUriFetcher, continuation);
+ sanitizeStylesheetWithExternals = function (
+ baseUri, cssText, virtualization, naiveUriRewriter,
naiveUriFetcher,
+ continuation) {
+ return sanitizeStylesheetInternal(
+ baseUri, cssText, virtualization,
+ naiveUriRewriter, naiveUriFetcher, continuation);
};
})();
})();
=======================================
--- /trunk/tests/com/google/caja/plugin/sanitizecss_test.html Fri Mar 1
15:16:31 2013
+++ /trunk/tests/com/google/caja/plugin/sanitizecss_test.html Wed Jul 24
10:50:28 2013
@@ -6,6 +6,7 @@
<script src="css-defs.js"></script>
<script src="html4-defs.js"></script>
<script src="csslexer.js"></script>
+ <script src="cssparser.js"></script>
<script src="sanitizecss.js"></script>
<script src="jsUnitCore.js"></script>
<script src="jsunit.js"></script>
=======================================
--- /trunk/tests/com/google/caja/plugin/sanitizecss_test.js Mon Jul 15
14:11:53 2013
+++ /trunk/tests/com/google/caja/plugin/sanitizecss_test.js Wed Jul 24
10:50:28 2013
@@ -363,3 +363,28 @@
log);
jsunit.pass();
});
+
+jsunitRegister('testImportant', function testImportant() {
+ function assertSanitizedStylesheet(golden, input) {
+ var selectors = sanitizeStylesheet(
+ 'http://example.com/baseurl', input,
+ {
+ containerClass: 'scopeClass',
+ idSuffix: '-suffix',
+ tagPolicy: function (elName, attrs) { return []; }
+ });
+ assertArrayEquals(input, golden, selectors);
+ }
+
+ assertSanitizedStylesheet(
+ ''
+ + '.scopeClass p{color:red !important;}'
+ + '.scopeClass q{color:green !important;}'
+ + '.scopeClass #id-suffix{color:blue;}',
+ ''
+ + 'p { color: red !important }\n'
+ + 'q { color: green ! Important }\n'
+ + '#id { color: blue }');
+
+ jsunit.pass();
+});
--
---
You received this message because you are subscribed to the Google Groups "Google Caja Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.