Bug 1382925 - Part 4: Test origin iteration order by checking @font-face rule cascade. r=emilio draft
authorCameron McCormack <cam@mcc.id.au>
Sun, 13 Aug 2017 13:54:12 +0800
changeset 645572 032939d8fca98fd76694304dbaf8903c769e4fa4
parent 645571 34f3b6fa85d952d69c81a5a453c62d0d04bda108
child 725922 dfa0ced3d77116ead3c6123448a7d9cc04c75a91
push id73781
push userbmo:cam@mcc.id.au
push dateSun, 13 Aug 2017 10:53:24 +0000
reviewersemilio
bugs1382925
milestone57.0a1
Bug 1382925 - Part 4: Test origin iteration order by checking @font-face rule cascade. r=emilio MozReview-Commit-ID: 7UzDKkKOEtw
layout/style/test/mochitest.ini
layout/style/test/test_font_face_cascade.html
--- a/layout/style/test/mochitest.ini
+++ b/layout/style/test/mochitest.ini
@@ -203,16 +203,17 @@ skip-if = toolkit == 'android' #bug 5366
 [test_flexbox_flex_shorthand.html]
 [test_flexbox_focus_order.html]
 [test_flexbox_layout.html]
 support-files = flexbox_layout_testcases.js
 [test_flexbox_order.html]
 [test_flexbox_order_abspos.html]
 [test_flexbox_order_table.html]
 [test_flexbox_reflow_counts.html]
+[test_font_face_cascade.html]
 [test_font_face_parser.html]
 [test_font_family_parsing.html]
 [test_font_loading_api.html]
 support-files =
   BitPattern.woff
   file_font_loading_api_vframe.html
 [test_garbage_at_end_of_declarations.html]
 [test_grid_container_shorthands.html]
new file mode 100644
--- /dev/null
+++ b/layout/style/test/test_font_face_cascade.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<title>Test that @font-face rules from different origins cascade correctly</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
+<script>
+let io = SpecialPowers.Cc["@mozilla.org/network/io-service;1"]
+  .getService(SpecialPowers.Ci.nsIIOService);
+
+let utils = SpecialPowers.wrap(window)
+  .QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor)
+  .getInterface(SpecialPowers.Ci.nsIDOMWindowUtils);
+
+function load_sheet(sheet_text, level) {
+  if (level != "AGENT_SHEET" && level != "USER_SHEET" && level != "AUTHOR_SHEET") {
+    throw "unknown level";
+  }
+
+  let uri = io.newURI("data:text/css," + encodeURI(sheet_text));
+  utils.loadSheet(uri, utils[level]);
+}
+
+load_sheet(
+  "@font-face { font-family: TestAgent; src: url(about:invalid); }",
+  "AGENT_SHEET");
+
+load_sheet(
+  "@font-face { font-family: TestAuthor; src: url(about:invalid); }",
+  "AUTHOR_SHEET");
+
+load_sheet(
+  "@font-face { font-family: TestUser; src: url(about:invalid); }",
+  "USER_SHEET");
+
+is([...document.fonts].map(f => f.family).join(" "),
+   '"TestAuthor" "TestUser" "TestAgent"',
+   "@font-face rules are returned in correct cascade order");
+</script>