diff --git a/layout/reftests/css-charset/pass.html b/layout/reftests/css-charset/pass.html new file mode 100644 index 00000000000..9b8d0e95bbd --- /dev/null +++ b/layout/reftests/css-charset/pass.html @@ -0,0 +1,7 @@ + + + + This should be green + + + diff --git a/layout/reftests/css-charset/reftest.list b/layout/reftests/css-charset/reftest.list new file mode 100644 index 00000000000..ef6505576ae --- /dev/null +++ b/layout/reftests/css-charset/reftest.list @@ -0,0 +1,10 @@ +== test-attribute.html pass.html +== test-charset-quotes.html pass.html +== test-charset-leading-space.html pass.html +== test-charset-trailing-space.html pass.html +== test-charset-utf-16-le-no-bom.html pass.html +fails == test-charset-utf-16-le-bom.html pass.html +== test-charset-utf-16-bom-le.html pass.html +== test-charset-utf-16-be-no-bom.html pass.html +fails == test-charset-utf-16-be-bom.html pass.html +== test-charset-utf-16-bom-be.html pass.html diff --git a/layout/reftests/css-charset/test-attribute.css b/layout/reftests/css-charset/test-attribute.css new file mode 100644 index 00000000000..8fcd96f5d42 Binary files /dev/null and b/layout/reftests/css-charset/test-attribute.css differ diff --git a/layout/reftests/css-charset/test-attribute.html b/layout/reftests/css-charset/test-attribute.html new file mode 100644 index 00000000000..23ba888b21f --- /dev/null +++ b/layout/reftests/css-charset/test-attribute.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-leading-space.css b/layout/reftests/css-charset/test-charset-leading-space.css new file mode 100644 index 00000000000..69b4324aaff Binary files /dev/null and b/layout/reftests/css-charset/test-charset-leading-space.css differ diff --git a/layout/reftests/css-charset/test-charset-leading-space.html b/layout/reftests/css-charset/test-charset-leading-space.html new file mode 100644 index 00000000000..4f441d7b877 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-leading-space.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-quotes.css b/layout/reftests/css-charset/test-charset-quotes.css new file mode 100644 index 00000000000..67f9f21f45d Binary files /dev/null and b/layout/reftests/css-charset/test-charset-quotes.css differ diff --git a/layout/reftests/css-charset/test-charset-quotes.html b/layout/reftests/css-charset/test-charset-quotes.html new file mode 100644 index 00000000000..2fa93f6a0d3 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-quotes.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-trailing-space.css b/layout/reftests/css-charset/test-charset-trailing-space.css new file mode 100644 index 00000000000..c1f9d451e27 Binary files /dev/null and b/layout/reftests/css-charset/test-charset-trailing-space.css differ diff --git a/layout/reftests/css-charset/test-charset-trailing-space.html b/layout/reftests/css-charset/test-charset-trailing-space.html new file mode 100644 index 00000000000..c91cdf89422 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-trailing-space.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-utf-16-be-bom.css b/layout/reftests/css-charset/test-charset-utf-16-be-bom.css new file mode 100644 index 00000000000..a5d0914b496 Binary files /dev/null and b/layout/reftests/css-charset/test-charset-utf-16-be-bom.css differ diff --git a/layout/reftests/css-charset/test-charset-utf-16-be-bom.html b/layout/reftests/css-charset/test-charset-utf-16-be-bom.html new file mode 100644 index 00000000000..a9e6c86cc7b --- /dev/null +++ b/layout/reftests/css-charset/test-charset-utf-16-be-bom.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-utf-16-be-no-bom.css b/layout/reftests/css-charset/test-charset-utf-16-be-no-bom.css new file mode 100644 index 00000000000..7218603e6a3 Binary files /dev/null and b/layout/reftests/css-charset/test-charset-utf-16-be-no-bom.css differ diff --git a/layout/reftests/css-charset/test-charset-utf-16-be-no-bom.html b/layout/reftests/css-charset/test-charset-utf-16-be-no-bom.html new file mode 100644 index 00000000000..c2cbff25645 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-utf-16-be-no-bom.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-utf-16-bom-be.css b/layout/reftests/css-charset/test-charset-utf-16-bom-be.css new file mode 100644 index 00000000000..21e4206f726 Binary files /dev/null and b/layout/reftests/css-charset/test-charset-utf-16-bom-be.css differ diff --git a/layout/reftests/css-charset/test-charset-utf-16-bom-be.html b/layout/reftests/css-charset/test-charset-utf-16-bom-be.html new file mode 100644 index 00000000000..3d05acc4260 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-utf-16-bom-be.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-utf-16-bom-le.css b/layout/reftests/css-charset/test-charset-utf-16-bom-le.css new file mode 100644 index 00000000000..ddf7fd00ae5 Binary files /dev/null and b/layout/reftests/css-charset/test-charset-utf-16-bom-le.css differ diff --git a/layout/reftests/css-charset/test-charset-utf-16-bom-le.html b/layout/reftests/css-charset/test-charset-utf-16-bom-le.html new file mode 100644 index 00000000000..aec7c495815 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-utf-16-bom-le.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-utf-16-le-bom.css b/layout/reftests/css-charset/test-charset-utf-16-le-bom.css new file mode 100644 index 00000000000..3aab85e0b2b Binary files /dev/null and b/layout/reftests/css-charset/test-charset-utf-16-le-bom.css differ diff --git a/layout/reftests/css-charset/test-charset-utf-16-le-bom.html b/layout/reftests/css-charset/test-charset-utf-16-le-bom.html new file mode 100644 index 00000000000..8b03930e99f --- /dev/null +++ b/layout/reftests/css-charset/test-charset-utf-16-le-bom.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/css-charset/test-charset-utf-16-le-no-bom.css b/layout/reftests/css-charset/test-charset-utf-16-le-no-bom.css new file mode 100644 index 00000000000..0da429cfd5a Binary files /dev/null and b/layout/reftests/css-charset/test-charset-utf-16-le-no-bom.css differ diff --git a/layout/reftests/css-charset/test-charset-utf-16-le-no-bom.html b/layout/reftests/css-charset/test-charset-utf-16-le-no-bom.html new file mode 100644 index 00000000000..9f7e7b79a10 --- /dev/null +++ b/layout/reftests/css-charset/test-charset-utf-16-le-no-bom.html @@ -0,0 +1,14 @@ + + + + + + + + This should be green + + + diff --git a/layout/reftests/reftest.list b/layout/reftests/reftest.list index 190455b7687..074da139b17 100644 --- a/layout/reftests/reftest.list +++ b/layout/reftests/reftest.list @@ -35,6 +35,9 @@ include canvas/reftest.list # css @import tests include css-import/reftest.list +# css character encoding tests +include css-charset/reftest.list + # columns/ include columns/reftest.list diff --git a/layout/style/nsCSSLoader.cpp b/layout/style/nsCSSLoader.cpp index 40f85ff22d4..4deb9445f8e 100644 --- a/layout/style/nsCSSLoader.cpp +++ b/layout/style/nsCSSLoader.cpp @@ -445,7 +445,7 @@ CSSLoaderImpl::RecycleParser(nsICSSParser* aParser) return NS_OK; } -static const char kCharsetSym[] = "@charset"; +static const char kCharsetSym[] = "@charset \""; static nsresult GetCharsetFromData(const unsigned char* aStyleSheetData, PRUint32 aDataLength, @@ -576,25 +576,9 @@ static nsresult GetCharsetFromData(const unsigned char* aStyleSheetData, pos += step; } - while (pos < aDataLength && nsCRT::IsAsciiSpace(aStyleSheetData[pos])) { - pos += step; - } - - if (pos >= aDataLength || - (aStyleSheetData[pos] != '"' && aStyleSheetData[pos] != '\'')) { - return aCharset.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK; - } - - char quote = aStyleSheetData[pos]; - pos += step; nsCAutoString charset; while (pos < aDataLength) { - if (aStyleSheetData[pos] == '\\') { - pos += step; - if (pos >= aDataLength) { - break; - } - } else if (aStyleSheetData[pos] == quote) { + if (aStyleSheetData[pos] == '"') { break; } @@ -605,10 +589,6 @@ static nsresult GetCharsetFromData(const unsigned char* aStyleSheetData, // Check for the ending ';' pos += step; - while (pos < aDataLength && nsCRT::IsAsciiSpace(aStyleSheetData[pos])) { - pos += step; - } - if (pos >= aDataLength || aStyleSheetData[pos] != ';') { return aCharset.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK; }