aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/text.rs27
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json25
-rw-r--r--tests/wpt/mozilla/tests/css/ellipsis_font_panic-ref.html13
-rw-r--r--tests/wpt/mozilla/tests/css/ellipsis_font_panic.html17
4 files changed, 71 insertions, 11 deletions
diff --git a/components/layout/text.rs b/components/layout/text.rs
index 0299199af39..5c9b93edee1 100644
--- a/components/layout/text.rs
+++ b/components/layout/text.rs
@@ -234,17 +234,22 @@ impl TextRunScanner {
let flush_run = run_info.font_index != font_index ||
run_info.bidi_level != bidi_level ||
!compatible_script;
- let flush_mapping = flush_run || mapping.selected != selected;
-
- if flush_mapping {
- mapping.flush(&mut mappings,
- &mut run_info,
- &**text,
- compression,
- text_transform,
- &mut last_whitespace,
- &mut start_position,
- end_position);
+ let new_mapping_needed = flush_run || mapping.selected != selected;
+
+ if new_mapping_needed {
+ // We ignore empty mappings at the very start of a fragment.
+ // The run info values are uninitialized at this point so
+ // flushing an empty mapping is pointless.
+ if end_position > 0 {
+ mapping.flush(&mut mappings,
+ &mut run_info,
+ &**text,
+ compression,
+ text_transform,
+ &mut last_whitespace,
+ &mut start_position,
+ end_position);
+ }
if run_info.text.len() > 0 {
if flush_run {
run_info.flush(&mut run_info_list, &mut insertion_point);
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index f4d1b1e32ca..7a65b9afbdb 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -1451,6 +1451,18 @@
{}
]
],
+ "css/ellipsis_font_panic.html": [
+ [
+ "/_mozilla/css/ellipsis_font_panic.html",
+ [
+ [
+ "/_mozilla/css/ellipsis_font_panic-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/empty_cells_a.html": [
[
"/_mozilla/css/empty_cells_a.html",
@@ -7329,6 +7341,11 @@
{}
]
],
+ "css/ellipsis_font_panic-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/empty_cells_ref.html": [
[
{}
@@ -20919,6 +20936,14 @@
"24dfcfa8ac401233d287631e57ea64edb94883cc",
"support"
],
+ "css/ellipsis_font_panic-ref.html": [
+ "21988e7f477117e23eb0d6770eec3896bac3b4a2",
+ "support"
+ ],
+ "css/ellipsis_font_panic.html": [
+ "037c81c6f2f550b6d7e415b0fc7f3d0476202b76",
+ "reftest"
+ ],
"css/empty-keyframes.html": [
"366edc7d29168809b6385ce7139786a0446ba560",
"testharness"
diff --git a/tests/wpt/mozilla/tests/css/ellipsis_font_panic-ref.html b/tests/wpt/mozilla/tests/css/ellipsis_font_panic-ref.html
new file mode 100644
index 00000000000..1471933c7bc
--- /dev/null
+++ b/tests/wpt/mozilla/tests/css/ellipsis_font_panic-ref.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset="utf-8">
+<title></title>
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url("fonts/octicons/octicons.ttf");
+ }
+ #foo {
+ font-family: Roboto;
+ }
+</style>
+<div id="foo">E…</div>
diff --git a/tests/wpt/mozilla/tests/css/ellipsis_font_panic.html b/tests/wpt/mozilla/tests/css/ellipsis_font_panic.html
new file mode 100644
index 00000000000..6d63195ea18
--- /dev/null
+++ b/tests/wpt/mozilla/tests/css/ellipsis_font_panic.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset="utf-8">
+<title></title>
+<link rel="match" href="ellipsis_font_panic-ref.html">
+<style>
+ @font-face {
+ font-family: "Roboto";
+ src: url("fonts/octicons/octicons.ttf");
+ }
+ #foo {
+ max-width: 30px;
+ overflow-x: hidden;
+ text-overflow: ellipsis;
+ font-family: Roboto;
+ }
+</style>
+<div id="foo">English</div>