summaryrefslogtreecommitdiffstats
path: root/layout/style/test/test_non_content_accessible_pseudos.html
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/test/test_non_content_accessible_pseudos.html')
-rw-r--r--layout/style/test/test_non_content_accessible_pseudos.html69
1 files changed, 69 insertions, 0 deletions
diff --git a/layout/style/test/test_non_content_accessible_pseudos.html b/layout/style/test/test_non_content_accessible_pseudos.html
new file mode 100644
index 0000000000..81493b1a4a
--- /dev/null
+++ b/layout/style/test/test_non_content_accessible_pseudos.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="sheet"></style>
+<script>
+// Even though some of these no longer exist, we still do want to test that
+// they aren't exposed to the web.
+const NON_CONTENT_ACCESIBLE_PSEUDOS = [
+ "::-moz-complex-control-wrapper",
+ "::-moz-number-wrapper",
+ "::-moz-number-text",
+ "::-moz-number-spin-up",
+ "::-moz-number-spin-down",
+ "::-moz-number-spin-box",
+ "::-moz-search-clear-button",
+
+ ":-moz-native-anonymous",
+ ":-moz-table-border-nonzero",
+ ":-moz-browser-frame",
+ ":-moz-devtools-highlighted",
+ ":-moz-styleeditor-transitioning",
+ ":-moz-handler-clicktoplay",
+ ":-moz-handler-vulnerable-updatable",
+ ":-moz-handler-vulnerable-no-update",
+ ":-moz-handler-disabled",
+ ":-moz-handler-blocked",
+ ":-moz-handler-chrased",
+ ":-moz-has-dir-attr",
+ ":-moz-dir-attr-ltr",
+ ":-moz-dir-attr-rtl",
+ ":-moz-dir-attr-like-auto",
+ ":-moz-autofill-preview",
+ ":-moz-lwtheme",
+ ":-moz-is-html",
+ ":-moz-locale-dir(rtl)",
+ ":-moz-locale-dir(ltr)",
+
+ "::-moz-tree-row",
+ "::-moz-tree-row(foo)",
+];
+
+test(function() {
+ sheet.textContent = `div { color: initial }`;
+ assert_equals(sheet.sheet.cssRules.length, 1);
+}, "sanity");
+
+for (const pseudo of NON_CONTENT_ACCESIBLE_PSEUDOS) {
+ test(function() {
+ sheet.textContent = `${pseudo} { color: blue; }`;
+ assert_equals(sheet.sheet.cssRules.length, 0,
+ pseudo + " shouldn't be accessible to content");
+ if (pseudo.indexOf("::") === 0) {
+ let pseudoStyle;
+ try {
+ pseudoStyle = getComputedStyle(document.documentElement, pseudo);
+ } catch (ex) {
+ // We can hit this when layout.css.computed-style.throw-on-invalid-pseudo is true
+ assert_true(true, `${pseudo} shouldn't be visible to content`);
+ return;
+ }
+ let elementStyle = getComputedStyle(document.documentElement);
+ for (prop of pseudoStyle) {
+ assert_equals(pseudoStyle[prop], elementStyle[prop],
+ pseudo + " styles shouldn't be visible from getComputedStyle");
+ }
+ }
+ }, pseudo);
+}
+</script>