const { AppConstants } = ChromeUtils.importESModule( "resource://gre/modules/AppConstants.sys.mjs" ); 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>'}`, sanitized: `@font-face { font-family: 'ab<\\/style>'}`, }, { // bug 1680084 data: ``, 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}`, }, ]; const kConditionalCSSTestCases = [ { data: `#foo { display: none } @media (min-width: 300px) { #bar { display: none } }`, sanitized: `#foo { display: none }`, }, { data: `@media (min-width: 300px) { #bar { display: none } }`, sanitized: ``, }, ]; 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.importESModule( "resource://gre/modules/PlacesUtils.sys.mjs" ); 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(``, sanitizeFlags); info(out); Assert.equal( `
`, out ); } for (let { data, sanitized } of kConditionalCSSTestCases) { let out = ParserUtils.removeConditionalCSS(``); info(out); Assert.equal( ``, out ); } }