<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>87006</bug_id>
          
          <creation_ts>2012-05-21 04:55:51 -0700</creation_ts>
          <short_desc>[chromium] Load custom fonts for layout test on Android.</short_desc>
          <delta_ts>2012-06-24 01:33:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>89721</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66687</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hao Zheng">zhenghao</reporter>
          <assigned_to name="Hao Zheng">zhenghao</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>peter</cc>
    
    <cc>tony</cc>
    
    <cc>wangxianzhu</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>628972</commentid>
    <comment_count>0</comment_count>
    <who name="Hao Zheng">zhenghao</who>
    <bug_when>2012-05-21 04:55:51 -0700</bug_when>
    <thetext>[chromium] Load custom fonts for layout test on Android.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628982</commentid>
    <comment_count>1</comment_count>
      <attachid>143004</attachid>
    <who name="Hao Zheng">zhenghao</who>
    <bug_when>2012-05-21 05:06:17 -0700</bug_when>
    <thetext>Created attachment 143004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629135</commentid>
    <comment_count>2</comment_count>
      <attachid>143004</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-21 08:52:40 -0700</bug_when>
    <thetext>Comment on attachment 143004
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=143004&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/FontCacheAndroid.cpp:57
&gt; +    static const char* kDeviceFontDirForTest = &quot;/data/drt/fonts/&quot;;

It seems strange to have DRT related code in the production target.  Is this common for this file in other ports?  I would have expected this code to be in DumpRenderTree rather than WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629137</commentid>
    <comment_count>3</comment_count>
      <attachid>143004</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-21 08:53:37 -0700</bug_when>
    <thetext>Comment on attachment 143004
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=143004&amp;action=review

&gt; Source/WebCore/platform/graphics/chromium/FontCacheAndroid.cpp:45
&gt; +#include &lt;string&gt;

It&apos;s unusual to use std::string in WebCore.  Typically we use the string classes from WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629488</commentid>
    <comment_count>4</comment_count>
      <attachid>143004</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-21 14:22:37 -0700</bug_when>
    <thetext>Comment on attachment 143004
Patch

Seems reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629490</commentid>
    <comment_count>5</comment_count>
      <attachid>143004</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-21 14:23:39 -0700</bug_when>
    <thetext>Comment on attachment 143004
Patch

OK.  NM.  Adam has convinced me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629893</commentid>
    <comment_count>6</comment_count>
    <who name="Hao Zheng">zhenghao</who>
    <bug_when>2012-05-21 20:23:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 143004 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143004&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/FontCacheAndroid.cpp:57
&gt; &gt; +    static const char* kDeviceFontDirForTest = &quot;/data/drt/fonts/&quot;;
&gt; 
&gt; It seems strange to have DRT related code in the production target.  Is this common for this file in other ports?  I would have expected this code to be in DumpRenderTree rather than WebCore.

Yes, you are right. Normally, font setup code for layout test is in DumpRenderTree (TestShellLinux and TestShellWin). DRT on other platforms calls system api (fontconfig on Linux and windows api on Win) to make sure fonts used by Skia are configured properly before layout test starts.

However, there is no system api to customize font config on Android. Skia reads /system/etc/system_fonts.xml and /system/etc/fallback_fonts.xml directly to get font config (see FontHostConfiguration_android.cpp). So if we don&apos;t put code in WebCore, there are 2 options:
1. Change Skia on Andoird to be able to customize font config. Maybe pass a customized xml file to init Skia.
2. Replace 2 xml files used by Skia with a customized one in NRWT script. However, if NRWT fails to restore the 2 files, Android font config is broken  for all apps. So this is less desirable.

At last, we found it easier to put this code in FontCacheAndroird.cpp. The code is behind check PlatformSupport::layoutTestMode(), so we don&apos;t expect it a heavy perf burdon for production code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631144</commentid>
    <comment_count>7</comment_count>
    <who name="Hao Zheng">zhenghao</who>
    <bug_when>2012-05-22 21:00:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 143004 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143004&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/FontCacheAndroid.cpp:57
&gt; &gt; &gt; +    static const char* kDeviceFontDirForTest = &quot;/data/drt/fonts/&quot;;
&gt; &gt; 
&gt; &gt; It seems strange to have DRT related code in the production target.  Is this common for this file in other ports?  I would have expected this code to be in DumpRenderTree rather than WebCore.
&gt; 
&gt; Yes, you are right. Normally, font setup code for layout test is in DumpRenderTree (TestShellLinux and TestShellWin). DRT on other platforms calls system api (fontconfig on Linux and windows api on Win) to make sure fonts used by Skia are configured properly before layout test starts.
&gt; 
&gt; However, there is no system api to customize font config on Android. Skia reads /system/etc/system_fonts.xml and /system/etc/fallback_fonts.xml directly to get font config (see FontHostConfiguration_android.cpp). So if we don&apos;t put code in WebCore, there are 2 options:
&gt; 1. Change Skia on Andoird to be able to customize font config. Maybe pass a customized xml file to init Skia.
&gt; 2. Replace 2 xml files used by Skia with a customized one in NRWT script. However, if NRWT fails to restore the 2 files, Android font config is broken  for all apps. So this is less desirable.
&gt; 
&gt; At last, we found it easier to put this code in FontCacheAndroird.cpp. The code is behind check PlatformSupport::layoutTestMode(), so we don&apos;t expect it a heavy perf burdon for production code.

Adam, does this sound reasonable to you? If yes, I could address your other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639351</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-01 08:10:51 -0700</bug_when>
    <thetext>It&apos;s not correct to put this testing code in the production build target.  From what you&apos;ve said, it sounds like the easiest path is to provide a way for DumpRenderTree to configure this font information in WebKit via an API.  Then we can hardcode this test data in DumpRenderTree rather than in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656182</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-24 01:33:15 -0700</bug_when>
    <thetext>This got fixed a better way in Bug 89721.

*** This bug has been marked as a duplicate of bug 89721 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143004</attachid>
            <date>2012-05-21 05:06:17 -0700</date>
            <delta_ts>2012-05-21 14:23:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87006-20120521200615.patch</filename>
            <type>text/plain</type>
            <size>10637</size>
            <attacher name="Hao Zheng">zhenghao</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3NjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmVlZjE4YzFlOThkMDYw
YWZkZmEzMDlkOTJkYTZlYzgzM2JlMmUyOC4uNzI3N2M0YjRmZmRmMmI5ZTdjNGU0ZGIwMDQ2NGQ2
ZWNlZjUwZTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA1LTIxICBIYW8g
WmhlbmcgIDx6aGVuZ2hhb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBMb2Fk
IGN1c3RvbSBmb250cyBmb3IgbGF5b3V0IHRlc3Qgb24gQW5kcm9pZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MDA2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2tpYSB1c2VzIC9zeXN0ZW0vZXRjL3N5
c3RlbV9mb250cy54bWwgYW5kCisgICAgICAgIC9zeXN0ZW0vZXRjL2ZhbGxiYWNrX2ZvbnRzLnht
bCwgd2hpY2ggaXMgbm90IGN1c3RvbWl6YWJsZSwgdG8gcmVzb2x2ZQorICAgICAgICBmb250IGZh
bWlseSBuYW1lcy4gVG8gbWFrZSBsYXlvdXQgdGVzdCByZXByb2R1Y2libGUgb24gZGlmZmVyZW50
CisgICAgICAgIEFuZHJvaWQgcGxhdGZvcm1zIGFuZCBtYXRjaCBMaW51eCBiYXNlbGluZXMsIHVz
ZQorICAgICAgICBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tRmlsZSB0byBsb2FkIGZvbnQgZmlsZSBk
aXJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRvIHJ1biBhbGwgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRy
b2lkLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q3VzdG9t
Rm9udFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKToKKwogMjAxMi0wNS0xOCAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgcmVzb3VyY2UgdG8gVUlTb3VyY2VD
b2RlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAppbmRleCA2ZjA0N2I5
YzgzNDIxZDhkNzc3MjBlMjI5NmY4NzBmYzc4ODA4NWM5Li4zOGNjODY1NDJlOTQ3YWI1YTE5YTM0
NWFlMTExMTBiNzNkMjgyMzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcApAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIlNrVHlwZWZhY2VfYW5kcm9pZC5oIgogI2luY2x1ZGUgIlNr
VXRpbHMuaCIKIAorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1bmljb2RlL2xvY2lkLmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KQEAgLTQ5LDYgKzUwLDkwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
TG9hZCBjdXN0b20gZm9udHMgZnJvbSBmaWxlIGZvciBsYXlvdXQgdGVzdHMsIGFzIHdlIG5lZWQg
dG8gbWF0Y2gKKy8vIGZvbnQgb2YgY2hyb21pdW0vbGludXguCitzdGF0aWMgQ1N0cmluZyBnZXRD
dXN0b21Gb250UGF0aChjb25zdCBjaGFyKiBuYW1lLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrRGV2aWNlRm9udERpckZvclRlc3QgPSAiL2RhdGEv
ZHJ0L2ZvbnRzLyI7CisKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IEFsaWFzVG9Gb250TmFtZSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGFsaWFzOworICAgICAgICBjb25zdCBjaGFyKiBmb250TmFt
ZTsKKyAgICB9IGtBbGlhc1RvRm9udE5hbWVbXSA9IHsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBtYXBwaW5nIHJvdWdobHkgZXF1YWxzIHRvIGZvbnRzLmNvbmYgdXNlZCBieQorICAgICAgICAv
LyBUZXN0U2hlbGxMaW51eC5jcHAuCisgICAgICAgIHsgIlRpbWVzIiwgIlRpbWVzIE5ldyBSb21h
biIgfSwKKyAgICAgICAgeyAic2FucyIsICJBcmlhbCIgfSwKKyAgICAgICAgeyAic2FucyBzZXJp
ZiIsICJBcmlhbCIgfSwKKyAgICAgICAgeyAiSGVsdmV0aWNhIiwgIkFyaWFsIiB9LAorICAgICAg
ICB7ICJzYW5zLXNlcmlmIiwgIkFyaWFsIiB9LAorICAgICAgICB7ICJzZXJpZiIsICJUaW1lcyBO
ZXcgUm9tYW4iIH0sCisgICAgICAgIHsgIm1vbm8iLCAiQ291cmllciBOZXciIH0sCisgICAgICAg
IHsgIm1vbm9zcGFjZSIsICJDb3VyaWVyIE5ldyIgfSwKKyAgICAgICAgeyAiQ291cmllciIsICJD
b3VyaWVyIE5ldyIgfSwKKyAgICAgICAgeyAiY3Vyc2l2ZSIsICJDb21pYyBTYW5zIE1TIiB9LAor
ICAgICAgICB7ICJmYW50YXN5IiwgIkltcGFjdCIgfSwKKyAgICAgICAgeyAiTW9uYWNvIiwgIlRp
bWVzIE5ldyBSb21hbiIgfSwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBGb250
TmFtZVRvRm9udCB7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnROYW1lOworICAgICAgICBjb25z
dCBjaGFyKiBmb250RmlsZXNbNF07IC8vIDA6IG5vcm1hbDsgMTogYm9sZDsgMjogaXRhbGljOyAz
OiBib2xkIGl0YWxpYworICAgIH0ga0ZvbnROYW1lVG9Gb250W10gPSB7CisgICAgICAgIHsgIlRp
bWVzIE5ldyBSb21hbiIsCisgICAgICAgICAgICB7ICJUaW1lc19OZXdfUm9tYW4udHRmIiwgIlRp
bWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIsCisgICAgICAgICAgICAgICJUaW1lc19OZXdfUm9tYW5f
SXRhbGljLnR0ZiIsICJUaW1lc19OZXdfUm9tYW5fQm9sZF9JdGFsaWMudHRmIiB9CisgICAgICAg
IH0sCisgICAgICAgIHsgIkFyaWFsIiwKKyAgICAgICAgICAgIHsgIkFyaWFsLnR0ZiIsICJBcmlh
bF9Cb2xkLnR0ZiIsCisgICAgICAgICAgICAgICJBcmlhbF9JdGFsaWMudHRmIiwgIkFyaWFsX0Jv
bGRfSXRhbGljLnR0ZiIgfQorICAgICAgICB9LAorICAgICAgICB7ICJDb3VyaWVyIE5ldyIsCisg
ICAgICAgICAgICB7ICJDb3VyaWVyX05ldy50dGYiLCAiQ291cmllcl9OZXdfQm9sZC50dGYiLAor
ICAgICAgICAgICAgICAiQ291cmllcl9OZXdfSXRhbGljLnR0ZiIsICJDb3VyaWVyX05ld19Cb2xk
X0l0YWxpYy50dGYiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeyAiQ29taWMgU2FucyBNUyIsCisg
ICAgICAgICAgICB7ICJDb21pY19TYW5zX01TLnR0ZiIsICJDb21pY19TYW5zX01TX0JvbGQudHRm
IiwKKyAgICAgICAgICAgICAgIkNvbWljX1NhbnNfTVMudHRmIiwgIkNvbWljX1NhbnNfTVNfQm9s
ZC50dGYiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeyAiSW1wYWN0IiwKKyAgICAgICAgICAgIHsg
IkltcGFjdC50dGYiLCAiSW1wYWN0LnR0ZiIsICJJbXBhY3QudHRmIiwgIkltcGFjdC50dGYiIH0K
KyAgICAgICAgfSwKKyAgICAgICAgeyAiR2VvcmdpYSIsCisgICAgICAgICAgICB7ICJHZW9yZ2lh
LnR0ZiIsICJHZW9yZ2lhX0JvbGQudHRmIiwKKyAgICAgICAgICAgICAgIkdlb3JnaWFfSXRhbGlj
LnR0ZiIsICJHZW9yZ2lhX0JvbGRfSXRhbGljLnR0ZiIgfQorICAgICAgICB9LAorICAgICAgICB7
ICJUcmVidWNoZXQgTVMiLAorICAgICAgICAgICAgeyAiVHJlYnVjaGV0X01TLnR0ZiIsICJUcmVi
dWNoZXRfTVNfQm9sZC50dGYiLAorICAgICAgICAgICAgICAiVHJlYnVjaGV0X01TX0l0YWxpYy50
dGYiLCAiVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0ZiIgfQorICAgICAgICB9LAorICAgICAg
ICB7ICJWZXJkYW5hIiwKKyAgICAgICAgICAgIHsgIlZlcmRhbmEudHRmIiwgIlZlcmRhbmFfQm9s
ZC50dGYiLAorICAgICAgICAgICAgICAiVmVyZGFuYV9JdGFsaWMudHRmIiwgIlZlcmRhbmFfQm9s
ZF9JdGFsaWMudHRmIiB9CisgICAgICAgIH0sCisgICAgICAgIHsgIkFoZW0iLAorICAgICAgICAg
ICAgeyAiQUhFTV9fX18uVFRGIiwgIkFIRU1fX19fLlRURiIsICJBSEVNX19fXy5UVEYiLCAiQUhF
TV9fX18uVFRGIiB9CisgICAgICAgIH0sCisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZW9mKGtBbGlhc1RvRm9udE5hbWUpIC8gc2l6ZW9mKGtBbGlhc1RvRm9udE5hbWVb
MF0pOyArK2kpIHsKKyAgICAgICAgaWYgKCFzdHJjYXNlY21wKG5hbWUsIGtBbGlhc1RvRm9udE5h
bWVbaV0uYWxpYXMpKSB7CisgICAgICAgICAgICBuYW1lID0ga0FsaWFzVG9Gb250TmFtZVtpXS5m
b250TmFtZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoa0ZvbnROYW1lVG9Gb250KSAvIHNpemVvZihrRm9u
dE5hbWVUb0ZvbnRbMF0pOyArK2kpIHsKKyAgICAgICAgaWYgKCFzdHJjYXNlY21wKG5hbWUsIGtG
b250TmFtZVRvRm9udFtpXS5mb250TmFtZSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBzdHlsZUlu
ZGV4ID0gYm9sZCA/IChpdGFsaWMgPyAzIDogMSkgOiAoaXRhbGljID8gMiA6IDApOworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgZm9udFBhdGgoa0RldmljZUZvbnREaXJGb3JUZXN0KTsKKyAgICAg
ICAgICAgIGZvbnRQYXRoICs9IGtGb250TmFtZVRvRm9udFtpXS5mb250RmlsZXNbc3R5bGVJbmRl
eF07CisgICAgICAgICAgICByZXR1cm4gQ1N0cmluZyhmb250UGF0aC5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCiBzdGF0aWMgY29uc3QgY2hh
ciogZ2V0RmFsbGJhY2tGb250TmFtZShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikKIHsKICAgICBzd2l0Y2ggKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsK
QEAgLTE2Niw0MCArMjUxLDU4IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRECiAKICAgICBTa1R5
cGVmYWNlKiB0eXBlZmFjZSA9IDA7CiAgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gMDsK
LSAgICBGYWxsYmFja1NjcmlwdHMgZmFsbGJhY2tTY3JpcHQgPSBTa0dldEZhbGxiYWNrU2NyaXB0
RnJvbUlEKG5hbWUpOwotICAgIGlmIChTa1R5cGVmYWNlX1ZhbGlkU2NyaXB0KGZhbGxiYWNrU2Ny
aXB0KSkgewotICAgICAgICB0eXBlZmFjZSA9IFNrQ3JlYXRlVHlwZWZhY2VGb3JTY3JpcHQoZmFs
bGJhY2tTY3JpcHQpOwotICAgICAgICBpZiAodHlwZWZhY2UpCisgICAgaWYgKFBsYXRmb3JtU3Vw
cG9ydDo6bGF5b3V0VGVzdE1vZGUoKSkgeworICAgICAgICBDU3RyaW5nIGN1c3RvbUZvbnRQYXRo
ID0gZ2V0Q3VzdG9tRm9udFBhdGgobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlICYgU2tUeXBlZmFjZTo6a0JvbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSAmIFNrVHlw
ZWZhY2U6OmtJdGFsaWMpOworICAgICAgICBpZiAoY3VzdG9tRm9udFBhdGgubGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIHR5cGVmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoY3VzdG9t
Rm9udFBhdGguZGF0YSgpKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBGb250UGxhdGZvcm1E
YXRhKHR5cGVmYWNlLCBuYW1lLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNl
OjprQm9sZCkgJiYgIXR5cGVmYWNlLT5pc0JvbGQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6OmtJdGFsaWMpICYmICF0eXBl
ZmFjZS0+aXNJdGFsaWMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRleHRPcmllbnRhdGlvbigpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICB0eXBlZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21O
YW1lKG5hbWUsIFNrVHlwZWZhY2U6OmtOb3JtYWwpOwotCi0gICAgICAgIC8vIENyZWF0ZUZyb21O
YW1lIGFsd2F5cyByZXR1cm5zIGEgdHlwZWZhY2UsIGZhbGxpbmcgYmFjayB0byBhIGRlZmF1bHQg
Zm9udAotICAgICAgICAvLyBpZiB0aGUgb25lIHJlcXVlc3RlZCBjb3VsZCBub3QgYmUgZm91bmQu
IENhbGxpbmcgRXF1YWwoKSB3aXRoIGEgbnVsbAotICAgICAgICAvLyBwb2ludGVyIHdpbGwgY29t
cGFyZSB0aGUgcmV0dXJuZWQgZm9udCBhZ2FpbnN0IHRoZSBkZWZhdWx0LCB3aXRoIHRoZQotICAg
ICAgICAvLyBjYXZlYXQgdGhhdCB0aGUgZGVmYXVsdCBpcyBhbHdheXMgb2Ygbm9ybWFsIHN0eWxl
LiBXaGVuIHRoYXQgaGFwcGVucywKLSAgICAgICAgLy8gaWdub3JlIHRoZSBkZWZhdWx0IGZvbnQg
YW5kIGFsbG93IFdlYkNvcmUgdG8gcHJvdmlkZSB0aGUgbmV4dCBmb250IG9uIHRoZQotICAgICAg
ICAvLyBDU1MgZmFsbGJhY2sgbGlzdC4gVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgb2NjdXJz
IHdoZW4gdGhlIGZhbWlseSBuYW1lCi0gICAgICAgIC8vIGlzIGEgY29tbW9ubHkgdXNlZCBnZW5l
cmljIGZhbWlseSwgd2hpY2ggaXMgdGhlIGNhc2Ugd2hlbiBjYWxsZWQgYnkKLSAgICAgICAgLy8g
Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoKSBvciBnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250
KCkuIEluIHRoYXQgY2FzZQotICAgICAgICAvLyB0aGUgZGVmYXVsdCBmb250IGlzIGFuIGFjY2Vw
dGFibGUgcmVzdWx0LgotCi0gICAgICAgIGlmICghU2tUeXBlZmFjZTo6RXF1YWwodHlwZWZhY2Us
IDApIHx8IGlzRmFsbGJhY2tGYW1pbHkoZmFtaWx5LnN0cmluZygpKSkgewotICAgICAgICAgICAg
Ly8gV2UgaGFkIHRvIHVzZSBub3JtYWwgc3R5bGluZyB0byBzZWUgaWYgdGhpcyB3YXMgYSBkZWZh
dWx0IGZvbnQuIElmCi0gICAgICAgICAgICAvLyB3ZSBuZWVkIGJvbGQgb3IgaXRhbGljLCByZXBs
YWNlIHdpdGggdGhlIGNvcnJlY3RlZCB0eXBlZmFjZS4KLSAgICAgICAgICAgIGlmIChzdHlsZSAh
PSBTa1R5cGVmYWNlOjprTm9ybWFsKSB7Ci0gICAgICAgICAgICAgICAgdHlwZWZhY2UtPnVucmVm
KCk7Ci0gICAgICAgICAgICAgICAgdHlwZWZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFt
ZShuYW1lLCBzdGF0aWNfY2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4oc3R5bGUpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoIXR5cGVmYWNlKSB7CisgICAgICAgIEZhbGxiYWNrU2NyaXB0cyBm
YWxsYmFja1NjcmlwdCA9IFNrR2V0RmFsbGJhY2tTY3JpcHRGcm9tSUQobmFtZSk7CisgICAgICAg
IGlmIChTa1R5cGVmYWNlX1ZhbGlkU2NyaXB0KGZhbGxiYWNrU2NyaXB0KSkgeworICAgICAgICAg
ICAgLy8gRG8gbm90IHVzZSBmYWxsYmFjayBmb250cyBpbiBsYXlvdXQgdGVzdC4KKyAgICAgICAg
ICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2RlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB0eXBlZmFjZSA9IFNrQ3JlYXRlVHlwZWZhY2VGb3JT
Y3JpcHQoZmFsbGJhY2tTY3JpcHQpOworICAgICAgICAgICAgaWYgKHR5cGVmYWNlKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG5ldyBGb250UGxhdGZvcm1EYXRhKHR5cGVmYWNlLCBuYW1lLCBm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0JvbGQpICYmICF0eXBl
ZmFjZS0+aXNCb2xkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXR5cGVmYWNlLT5pc0l0YWxp
YygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi50ZXh0T3JpZW50YXRpb24oKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0eXBlZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZy
b21OYW1lKG5hbWUsIFNrVHlwZWZhY2U6OmtOb3JtYWwpOworCisgICAgICAgICAgICAvLyBDcmVh
dGVGcm9tTmFtZSBhbHdheXMgcmV0dXJucyBhIHR5cGVmYWNlLCBmYWxsaW5nIGJhY2sgdG8gYSBk
ZWZhdWx0IGZvbnQKKyAgICAgICAgICAgIC8vIGlmIHRoZSBvbmUgcmVxdWVzdGVkIGNvdWxkIG5v
dCBiZSBmb3VuZC4gQ2FsbGluZyBFcXVhbCgpIHdpdGggYSBudWxsCisgICAgICAgICAgICAvLyBw
b2ludGVyIHdpbGwgY29tcGFyZSB0aGUgcmV0dXJuZWQgZm9udCBhZ2FpbnN0IHRoZSBkZWZhdWx0
LCB3aXRoIHRoZQorICAgICAgICAgICAgLy8gY2F2ZWF0IHRoYXQgdGhlIGRlZmF1bHQgaXMgYWx3
YXlzIG9mIG5vcm1hbCBzdHlsZS4gV2hlbiB0aGF0IGhhcHBlbnMsCisgICAgICAgICAgICAvLyBp
Z25vcmUgdGhlIGRlZmF1bHQgZm9udCBhbmQgYWxsb3cgV2ViQ29yZSB0byBwcm92aWRlIHRoZSBu
ZXh0IGZvbnQgb24gdGhlCisgICAgICAgICAgICAvLyBDU1MgZmFsbGJhY2sgbGlzdC4gVGhlIG9u
bHkgZXhjZXB0aW9uIHRvIHRoaXMgb2NjdXJzIHdoZW4gdGhlIGZhbWlseSBuYW1lCisgICAgICAg
ICAgICAvLyBpcyBhIGNvbW1vbmx5IHVzZWQgZ2VuZXJpYyBmYW1pbHksIHdoaWNoIGlzIHRoZSBj
YXNlIHdoZW4gY2FsbGVkIGJ5CisgICAgICAgICAgICAvLyBnZXRTaW1pbGFyRm9udFBsYXRmb3Jt
RGF0YSgpIG9yIGdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoKS4gSW4gdGhhdCBjYXNlCisgICAg
ICAgICAgICAvLyB0aGUgZGVmYXVsdCBmb250IGlzIGFuIGFjY2VwdGFibGUgcmVzdWx0LgorCisg
ICAgICAgICAgICBpZiAoIVNrVHlwZWZhY2U6OkVxdWFsKHR5cGVmYWNlLCAwKSB8fCBpc0ZhbGxi
YWNrRmFtaWx5KGZhbWlseS5zdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBoYWQg
dG8gdXNlIG5vcm1hbCBzdHlsaW5nIHRvIHNlZSBpZiB0aGlzIHdhcyBhIGRlZmF1bHQgZm9udC4g
SWYKKyAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIGJvbGQgb3IgaXRhbGljLCByZXBsYWNlIHdp
dGggdGhlIGNvcnJlY3RlZCB0eXBlZmFjZS4KKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUgIT0g
U2tUeXBlZmFjZTo6a05vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICB0eXBlZmFjZS0+dW5y
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZWZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVG
cm9tTmFtZShuYW1lLCBzdGF0aWNfY2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4oc3R5bGUpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGEodHlwZWZhY2UsIG5hbWUsIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5
cGVmYWNlOjprQm9sZCkgJiYgIXR5cGVmYWNlLT5pc0JvbGQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprSXRhbGlj
KSAmJiAhdHlwZWZhY2UtPmlzSXRhbGljKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRl
eHRPcmllbnRhdGlvbigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCA9IG5l
dyBGb250UGxhdGZvcm1EYXRhKHR5cGVmYWNlLCBuYW1lLCBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5
bGUgJiBTa1R5cGVmYWNlOjprQm9sZCkgJiYgIXR5cGVmYWNlLT5pc0JvbGQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6OmtJ
dGFsaWMpICYmICF0eXBlZmFjZS0+aXNJdGFsaWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnRleHRP
cmllbnRhdGlvbigpKTsKICAgICAgICAgfQogICAgIH0KIAo=
</data>
<flag name="review"
          id="149460"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>