зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1680084 - Tests. r=freddyb
Differential Revision: https://phabricator.services.mozilla.com/D98745
This commit is contained in:
Родитель
0ed4f74e39
Коммит
b274d0d387
|
@ -0,0 +1,105 @@
|
||||||
|
const { AppConstants } = ChromeUtils.import(
|
||||||
|
"resource://gre/modules/AppConstants.jsm"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (AppConstants.platform != "android") {
|
||||||
|
// We load HTML documents, which try to track link state, which requires
|
||||||
|
// the history service, which requires a profile.
|
||||||
|
do_get_profile();
|
||||||
|
}
|
||||||
|
|
||||||
|
const kTestCases = [
|
||||||
|
{
|
||||||
|
// bug 1602843
|
||||||
|
data: `@font-face { font-family: 'ab<\\/style><img src onerror=alert(1)>'}`,
|
||||||
|
sanitized: `@font-face { font-family: 'ab<\\/style><img src onerror=alert(1)>'}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// bug 1680084
|
||||||
|
data: `<!--
|
||||||
|
/* Font Definitions */
|
||||||
|
@font-face
|
||||||
|
{font-family:"Cambria Math";
|
||||||
|
panose-1:2 4 5 3 5 4 6 3 2 4;}
|
||||||
|
@font-face
|
||||||
|
{font-family:"Yu Gothic";
|
||||||
|
panose-1:2 11 4 0 0 0 0 0 0 0;}
|
||||||
|
@font-face
|
||||||
|
{font-family:"Yu Gothic";
|
||||||
|
panose-1:2 11 4 0 0 0 0 0 0 0;}
|
||||||
|
/* Style Definitions */
|
||||||
|
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||||
|
{margin:0mm;
|
||||||
|
text-align:justify;
|
||||||
|
text-justify:inter-ideograph;
|
||||||
|
font-size:10.5pt;
|
||||||
|
font-family:"Yu Gothic";}
|
||||||
|
span.17
|
||||||
|
{mso-style-type:personal-compose;
|
||||||
|
font-family:"Yu Gothic";
|
||||||
|
color:windowtext;}
|
||||||
|
.MsoChpDefault
|
||||||
|
{mso-style-type:export-only;
|
||||||
|
font-family:"Yu Gothic";}
|
||||||
|
/* Page Definitions */
|
||||||
|
@page WordSection1
|
||||||
|
{size:612.0pt 792.0pt;
|
||||||
|
margin:99.25pt 30.0mm 30.0mm 30.0mm;}
|
||||||
|
div.WordSection1
|
||||||
|
{page:WordSection1}
|
||||||
|
-->`,
|
||||||
|
sanitized: `@font-face
|
||||||
|
{font-family:"Cambria Math";
|
||||||
|
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
|
||||||
|
{font-family:"Yu Gothic";
|
||||||
|
panose-1:2 11 4 0 0 0 0 0 0 0;}@font-face
|
||||||
|
{font-family:"Yu Gothic";
|
||||||
|
panose-1:2 11 4 0 0 0 0 0 0 0;}p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||||
|
{margin:0mm;
|
||||||
|
text-align:justify;
|
||||||
|
text-justify:inter-ideograph;
|
||||||
|
font-size:10.5pt;
|
||||||
|
font-family:"Yu Gothic";}.MsoChpDefault
|
||||||
|
{mso-style-type:export-only;
|
||||||
|
font-family:"Yu Gothic";}div.WordSection1
|
||||||
|
{page:WordSection1}`,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
function run_test() {
|
||||||
|
if (AppConstants.platform != "android") {
|
||||||
|
// xpcshell tests are weird. They fake shutdown after the test finishes. This upsets this test
|
||||||
|
// because it will try to create the history service to check for visited state on the links
|
||||||
|
// we're parsing.
|
||||||
|
// Creating the history service midway through shutdown breaks.
|
||||||
|
// We can't catch this in the history component because we're not *actually* shutting down,
|
||||||
|
// and so the app startup's service's `shuttingDown` bool is false, even though normally that
|
||||||
|
// is set to true *before* profile-change-teardown notifications are fired.
|
||||||
|
// To work around this, just force the history service to be created earlier:
|
||||||
|
|
||||||
|
let { PlacesUtils } = ChromeUtils.import(
|
||||||
|
"resource://gre/modules/PlacesUtils.jsm"
|
||||||
|
);
|
||||||
|
Assert.ok(
|
||||||
|
PlacesUtils.history.databaseStatus <= 1,
|
||||||
|
"ensure places database is successfully initialized."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ParserUtils = Cc["@mozilla.org/parserutils;1"].getService(
|
||||||
|
Ci.nsIParserUtils
|
||||||
|
);
|
||||||
|
var sanitizeFlags =
|
||||||
|
ParserUtils.SanitizerDropForms |
|
||||||
|
ParserUtils.SanitizerDropNonCSSPresentation |
|
||||||
|
ParserUtils.SanitizerAllowStyle;
|
||||||
|
|
||||||
|
for (let { data, sanitized } of kTestCases) {
|
||||||
|
let out = ParserUtils.sanitize(`<style>${data}</style>`, sanitizeFlags);
|
||||||
|
info(out);
|
||||||
|
Assert.equal(
|
||||||
|
`<html><head><style>${sanitized}</style></head><body></body></html>`,
|
||||||
|
out
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,3 +3,4 @@ head =
|
||||||
support-files = results.js
|
support-files = results.js
|
||||||
|
|
||||||
[test_sanitizer.js]
|
[test_sanitizer.js]
|
||||||
|
[test_sanitizer_style.js]
|
||||||
|
|
Загрузка…
Ссылка в новой задаче