Bug 1406552 - Only update max ascent / descent with em ones when ascent and descent are zero. r?jfkthame draft
authorXidorn Quan <me@upsuper.org>
Thu, 03 May 2018 19:43:46 +1000
changeset 791342 42fa136d3631f4cc6ca8ea641ac99974d5f512e5
parent 790065 502c2f271bee2e3126fe641d0c99842de3cd86c6
push id108786
push userxquan@mozilla.com
push dateFri, 04 May 2018 03:39:42 +0000
reviewersjfkthame
bugs1406552, 385263, 279032
milestone61.0a1
Bug 1406552 - Only update max ascent / descent with em ones when ascent and descent are zero. r?jfkthame The original code was added in bug 385263 for fixing bug 279032 that a single font provides zero for max ascent / descent in its HHEA table which caused Firefox to crash. Unconditionally picking the maximum of max ascent / descent and their em correspondents doesn't seem to be essential for working around that case, so this patch changes it to just use the em ascent / descent when both max ascent and descent are zero. This fixes a webcompat problem related to Roboto font on Linux (and presumably also Android given it uses FreeType backend as well). MozReview-Commit-ID: EpKrfiOwnZt
gfx/thebes/gfxFT2FontBase.cpp
layout/reftests/font-face/reftest.list
testing/web-platform/meta/css/CSS2/margin-padding-clear/padding-em-inherit-001.xht.ini
--- a/gfx/thebes/gfxFT2FontBase.cpp
+++ b/gfx/thebes/gfxFT2FontBase.cpp
@@ -312,28 +312,24 @@ gfxFT2FontBase::InitMetrics()
         mMetrics.emDescent = -os2->sTypoDescender * yScale;
         FT_Short typoHeight =
             os2->sTypoAscender - os2->sTypoDescender + os2->sTypoLineGap;
         lineHeight = typoHeight * yScale;
 
         // If the OS/2 fsSelection USE_TYPO_METRICS bit is set,
         // set maxAscent/Descent from the sTypo* fields instead of hhea.
         const uint16_t kUseTypoMetricsMask = 1 << 7;
-        if (os2->fsSelection & kUseTypoMetricsMask) {
-            mMetrics.maxAscent = NS_round(mMetrics.emAscent);
-            mMetrics.maxDescent = NS_round(mMetrics.emDescent);
-        } else {
+        if ((os2->fsSelection & kUseTypoMetricsMask) ||
             // maxAscent/maxDescent get used for frame heights, and some fonts
             // don't have the HHEA table ascent/descent set (bug 279032).
+	    (mMetrics.maxAscent == 0.0 && mMetrics.maxDescent == 0.0)) {
             // We use NS_round here to parallel the pixel-rounded values that
             // freetype gives us for ftMetrics.ascender/descender.
-            mMetrics.maxAscent =
-                std::max(mMetrics.maxAscent, NS_round(mMetrics.emAscent));
-            mMetrics.maxDescent =
-                std::max(mMetrics.maxDescent, NS_round(mMetrics.emDescent));
+            mMetrics.maxAscent = NS_round(mMetrics.emAscent);
+            mMetrics.maxDescent = NS_round(mMetrics.emDescent);
         }
     } else {
         mMetrics.emAscent = mMetrics.maxAscent;
         mMetrics.emDescent = mMetrics.maxDescent;
     }
 
     // gfxFont::Metrics::underlineOffset is the position of the top of the
     // underline.
--- a/layout/reftests/font-face/reftest.list
+++ b/layout/reftests/font-face/reftest.list
@@ -124,17 +124,17 @@ load 486974-1.html
 != 507960-1-bad-sfnt-version-woff.html 507960-1-ref.html
 != 507960-1-bad-woff-sig.html 507960-1-ref.html
 != 507960-1-bad-offset-woff.html 507960-1-ref.html
 != 507960-1-woff-bad-hint.html 507960-1-ref.html
 
 # Tests for bug 523717
 == underline-offset-change-1.html underline-offset-change-1-ref.html
 == underline-offset-change-2.html underline-offset-change-2-ref.html
-fails-if(cocoaWidget||winWidget) != underline-offset-change-1-ref.html underline-offset-change-2-ref.html # Bug 534132
+fails != underline-offset-change-1-ref.html underline-offset-change-2-ref.html # Bug 534132
 
 != 534352-1-extra-cmap-sentinel.html 534352-1-extra-cmap-sentinel-ref.html
 == bug533251.html bug533251-ref.html
 
 # Bug 875287
 == font-familiy-whitespace-1.html font-familiy-whitespace-1-ref.html
 != font-familiy-whitespace-1.html font-familiy-whitespace-1-notref.html
 
deleted file mode 100644
--- a/testing/web-platform/meta/css/CSS2/margin-padding-clear/padding-em-inherit-001.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[padding-em-inherit-001.xht]
-  expected: FAIL