<?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>27240</bug_id>
          
          <creation_ts>2009-07-13 15:41:58 -0700</creation_ts>
          <short_desc>Refactor WebFrame::spoolPages to share with Windows Cairo</short_desc>
          <delta_ts>2009-07-14 11:03:42 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>17484</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131426</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-07-13 15:41:58 -0700</bug_when>
    <thetext>The existing WebFrame::spool will not build under Cairo due to its use of CG-based data types and methods.  This patch moves the platform-specific implementation into a separate method, conditionally compiled for CG and Cairo.  It also abstracts some common functions into separate methods for easier sharing between platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131427</commentid>
    <comment_count>1</comment_count>
      <attachid>32685</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-07-13 15:46:28 -0700</bug_when>
    <thetext>Created attachment 32685
Refactor page spooling

Refactor page spooling code to share with Cairo port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131432</commentid>
    <comment_count>2</comment_count>
      <attachid>32685</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-07-13 16:00:59 -0700</bug_when>
    <thetext>Comment on attachment 32685
Refactor page spooling

&gt; +#if PLATFORM(CG)
&gt;  #include &lt;CoreGraphics/CoreGraphics.h&gt;
&gt;  
&gt;  // CG SPI used for printing
&gt; @@ -105,6 +106,9 @@ extern &quot;C&quot; {
&gt;      CGAffineTransform CGContextGetBaseCTM(CGContextRef c); 
&gt;      void CGContextSetBaseCTM(CGContextRef c, CGAffineTransform m); 
&gt;  }
&gt; +#elif PLATFORM(CAIRO)
&gt; +#include &lt;cairo-win32.h&gt;
&gt; +#endif

It&apos;s probably best to keep all #includes above all declarations, even though that will require two #if PLATFORM(CG) blocks.

&gt; +void WebFrame::printHeader(void* ctx, COMPtr&lt;IWebUIDelegate&gt; ui, const IntRect&amp; pageRect, float headerHeight)

Why can&apos;t ctx be a PlatformGraphicsContext*?

ui should just be an IWebUIDelegate*, to avoid ref-count churn.

The same comments apply to all your new functions.

&gt; +    PlatformGraphicsContext* pctx = (PlatformGraphicsContext*)ctx;

static_cast would be better here (if you don&apos;t change the type of ctx to PlatformGraphicsContext).

&gt; +    int x = pageRect.x();
&gt; +    int y = 0;
&gt; +    RECT headerRect = {x, y, x+pageRect.width(), y+(int)headerHeight};
&gt; +    ui-&gt;drawHeaderInRect(d-&gt;webView, &amp;headerRect, (OLE_HANDLE)(LONG64)pctx);

reinterpret_cast would be better here (I won&apos;t comment on other existing uses of C-style casts).

&gt; +#if PLATFORM(CG)
&gt; +void WebFrame::spoolPage (void* ctx, GraphicsContext* spoolCtx, HDC printDC, COMPtr&lt;IWebUIDelegate&gt; ui, float headerHeight, float footerHeight, UINT page, UINT pageCount)

Please remove the space before the opening parenthesis (here and elsewhere in the patch).

Why not have separate WebFrameCG and WebFrameCairo files for the two implementations of spoolPage?

&gt; +    float scale = (float)mediaBox.size().width()/ (float)pageRect.width();
&gt; +    cairo_scale(pctx, -scale, -scale);
&gt; +    cairo_translate(pctx, -pageRect.x(), -pageRect.y()+headerHeight);
&gt; +    cairo_scale(pctx, scale, scale);
&gt; +    cairo_translate(pctx, -pageRect.x(), -pageRect.y()+headerHeight);   // reserves space for header

Seems like we could share all this coordinate space code if we used GraphicsContext a little more. Maybe add a FIXME?

&gt; +    void spoolPage (void* ctx, WebCore::GraphicsContext* spoolCtx, HDC printDC, COMPtr&lt;IWebUIDelegate&gt; ui, float headerHeight, float footerHeight, UINT page, UINT pageCount);
&gt; +    void printHeader(void* ctx, COMPtr&lt;IWebUIDelegate&gt; ui, const WebCore::IntRect&amp; pageRect, float headerHeight);
&gt; +    void printFooter(void* ctx, COMPtr&lt;IWebUIDelegate&gt; ui, const WebCore::IntRect&amp; pageRect, UINT page, UINT pageCount, float headerHeight, float footerHeight);

Please remove the &quot;ui&quot; parameter names from these declarations.

I think drawHeader/drawFooter would be better names, since these functions on their own don&apos;t do any printing.

r=me, but please make these changes first (except for maybe the WebFrameCG/WebFrameCairo stuff).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131439</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-07-13 16:35:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 32685 [details])
&gt; It&apos;s probably best to keep all #includes above all declarations, even though
&gt; that will require two #if PLATFORM(CG) blocks.

Done.
 
&gt; &gt; +void WebFrame::printHeader(void* ctx, COMPtr&lt;IWebUIDelegate&gt; ui, const IntRect&amp; pageRect, float headerHeight)
&gt; 
&gt; Why can&apos;t ctx be a PlatformGraphicsContext*?

Done.

&gt; ui should just be an IWebUIDelegate*, to avoid ref-count churn.

Done.
 
&gt; &gt; +    ui-&gt;drawHeaderInRect(d-&gt;webView, &amp;headerRect, (OLE_HANDLE)(LONG64)pctx);
&gt; 
&gt; reinterpret_cast would be better here (I won&apos;t comment on other existing uses
&gt; of C-style casts).

Done.
 
&gt; &gt; +#if PLATFORM(CG)
&gt; &gt; +void WebFrame::spoolPage (void* ctx, GraphicsContext* spoolCtx, HDC printDC, COMPtr&lt;IWebUIDelegate&gt; ui, float headerHeight, float footerHeight, UINT page, UINT pageCount)
&gt; 
&gt; Please remove the space before the opening parenthesis (here and elsewhere in
&gt; the patch).

Done.


&gt; Seems like we could share all this coordinate space code if we used
&gt; GraphicsContext a little more. Maybe add a FIXME?

Fixme added.  I&apos;ll try to take another pass once I can do more printing support work to factor these out a bit better.

&gt; &gt; +    void spoolPage (void* ctx, WebCore::GraphicsContext* spoolCtx, HDC printDC, COMPtr&lt;IWebUIDelegate&gt; ui, float headerHeight, float footerHeight, UINT page, UINT pageCount);
&gt; &gt; +    void printHeader(void* ctx, COMPtr&lt;IWebUIDelegate&gt; ui, const WebCore::IntRect&amp; pageRect, float headerHeight);
&gt; &gt; +    void printFooter(void* ctx, COMPtr&lt;IWebUIDelegate&gt; ui, const WebCore::IntRect&amp; pageRect, UINT page, UINT pageCount, float headerHeight, float footerHeight);
&gt; 
&gt; Please remove the &quot;ui&quot; parameter names from these declarations.

Done.

&gt; I think drawHeader/drawFooter would be better names, since these functions on
&gt; their own don&apos;t do any printing.

Done.
 
&gt; r=me, but please make these changes first (except for maybe the
&gt; WebFrameCG/WebFrameCairo stuff).

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131440</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-07-13 16:48:53 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/45846.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131615</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-07-14 11:03:42 -0700</bug_when>
    <thetext>A quick test of printing via a nightly WebKit using Safari on Windows seems to work properly.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32685</attachid>
            <date>2009-07-13 15:46:28 -0700</date>
            <delta_ts>2009-07-13 16:00:59 -0700</delta_ts>
            <desc>Refactor page spooling</desc>
            <filename>print_cairo.patch</filename>
            <type>text/plain</type>
            <size>9299</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA0NTg0MCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDctMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlZmFjdG9yIFdlYkZyYW1lOjpzcG9vbFBhZ2VzIGZvciBlYXNpZXIgc2hhcmlu
ZyB3aXRoIFdpbmRvd3MgQ2Fpcm8uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzI0MC4KKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkZyYW1lOjpwcmludEhlYWRlcik6IE5ldyBzaGFyZWQgbWV0aG9kIHRvIHByaW50IHRoZSBo
ZWFkZXIuCisgICAgICAgIChXZWJGcmFtZTo6cHJpbnRGb290ZXIpOiBOZXcgc2hhcmVkIG1ldGhv
ZCB0byBwcmludCB0aGUgZm9vdGVyLgorICAgICAgICAoV2ViRnJhbWU6OnNwb29sUGFnZSk6IE5l
dyBjb25kaXRpb25hbGx5LWNvbXBpbGVkIG1ldGhvZCB0byBwcmludAorICAgICAgICAgYSBwYWdl
LgorICAgICAgICAoV2ViRnJhbWU6OnNwb29sUGFnZXMpOiBSZXZpc2VkIHRvIGNhbGwgdGhlIHBs
YXRmb3JtLXNwZWNpZmljIHNwb29sUGFnZQorICAgICAgICAgZm9yIGVhY2ggcGFnZS4KKyAgICAg
ICAgKiBXZWJGcmFtZS5oOiBBZGQgbmV3IG1ldGhvZCBwcm90b3R5cGVzLgorCiAyMDA5LTA3LTEz
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDQ1ODMwKQorKysgV2ViS2l0
L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI3ByYWdtYSB3YXJu
aW5nKHBvcCkKIAorI2lmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3Jl
R3JhcGhpY3MuaD4KIAogLy8gQ0cgU1BJIHVzZWQgZm9yIHByaW50aW5nCkBAIC0xMDUsNiArMTA2
LDkgQEAgZXh0ZXJuICJDIiB7CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dDb250ZXh0R2V0QmFz
ZUNUTShDR0NvbnRleHRSZWYgYyk7IAogICAgIHZvaWQgQ0dDb250ZXh0U2V0QmFzZUNUTShDR0Nv
bnRleHRSZWYgYywgQ0dBZmZpbmVUcmFuc2Zvcm0gbSk7IAogfQorI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC0xODUwLDYgKzE4NTQsMTAw
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6OmdldFAKICAgICByZXR1cm4g
U19PSzsKIH0KIAordm9pZCBXZWJGcmFtZTo6cHJpbnRIZWFkZXIodm9pZCogY3R4LCBDT01QdHI8
SVdlYlVJRGVsZWdhdGU+IHVpLCBjb25zdCBJbnRSZWN0JiBwYWdlUmVjdCwgZmxvYXQgaGVhZGVy
SGVpZ2h0KQoreworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwY3R4ID0gKFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiljdHg7CisgICAgaW50IHggPSBwYWdlUmVjdC54KCk7CisgICAgaW50
IHkgPSAwOworICAgIFJFQ1QgaGVhZGVyUmVjdCA9IHt4LCB5LCB4K3BhZ2VSZWN0LndpZHRoKCks
IHkrKGludCloZWFkZXJIZWlnaHR9OworICAgIHVpLT5kcmF3SGVhZGVySW5SZWN0KGQtPndlYlZp
ZXcsICZoZWFkZXJSZWN0LCAoT0xFX0hBTkRMRSkoTE9ORzY0KXBjdHgpOworfQorCit2b2lkIFdl
YkZyYW1lOjpwcmludEZvb3Rlcih2b2lkKiBjdHgsIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWks
IGNvbnN0IEludFJlY3QmIHBhZ2VSZWN0LCBVSU5UIHBhZ2UsIFVJTlQgcGFnZUNvdW50LCBmbG9h
dCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCkKK3sKKyAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogcGN0eCA9IChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopY3R4OworICAgIGlu
dCB4ID0gcGFnZVJlY3QueCgpOworICAgIGludCB5ID0gbWF4KChpbnQpaGVhZGVySGVpZ2h0K3Bh
Z2VSZWN0LmhlaWdodCgpLCBtX3BhZ2VIZWlnaHQtKGludClmb290ZXJIZWlnaHQpOworICAgIFJF
Q1QgZm9vdGVyUmVjdCA9IHt4LCB5LCB4K3BhZ2VSZWN0LndpZHRoKCksIHkrKGludClmb290ZXJI
ZWlnaHR9OworICAgIHVpLT5kcmF3Rm9vdGVySW5SZWN0KGQtPndlYlZpZXcsICZmb290ZXJSZWN0
LCAoT0xFX0hBTkRMRSkoTE9ORzY0KXBjdHgsIHBhZ2UrMSwgcGFnZUNvdW50KTsKK30KKworI2lm
IFBMQVRGT1JNKENHKQordm9pZCBXZWJGcmFtZTo6c3Bvb2xQYWdlICh2b2lkKiBjdHgsIEdyYXBo
aWNzQ29udGV4dCogc3Bvb2xDdHgsIEhEQyBwcmludERDLCBDT01QdHI8SVdlYlVJRGVsZWdhdGU+
IHVpLCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgVUlOVCBwYWdlLCBV
SU5UIHBhZ2VDb3VudCkKK3sKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGN0eCA9IChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopY3R4OworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KHRoaXMpOworCisgICAgSW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJlY3RzW3BhZ2VdOworCisg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShwY3R4KTsKKworICAgIEludFJlY3QgcHJpbnRSZWN0ID0g
cHJpbnRlclJlY3QocHJpbnREQyk7CisgICAgQ0dSZWN0IG1lZGlhQm94ID0gQ0dSZWN0TWFrZShD
R0Zsb2F0KDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCgwKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQocHJpbnRSZWN0LndpZHRo
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdChwcmludFJlY3Qu
aGVpZ2h0KCkpKTsKKworICAgIENHQ29udGV4dEJlZ2luUGFnZShwY3R4LCAmbWVkaWFCb3gpOwor
CisgICAgQ0dGbG9hdCBzY2FsZSA9IChmbG9hdCltZWRpYUJveC5zaXplLndpZHRoLyAoZmxvYXQp
cGFnZVJlY3Qud2lkdGgoKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBjdG0gPSBDR0NvbnRleHRH
ZXRCYXNlQ1RNKHBjdHgpOworICAgIGN0bSA9IENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoY3RtLCAt
c2NhbGUsIC1zY2FsZSk7CisgICAgY3RtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUoY3Rt
LCBDR0Zsb2F0KC1wYWdlUmVjdC54KCkpLCBDR0Zsb2F0KC1wYWdlUmVjdC55KCkraGVhZGVySGVp
Z2h0KSk7IC8vIHJlc2VydmVzIHNwYWNlIGZvciBoZWFkZXIKKyAgICBDR0NvbnRleHRTY2FsZUNU
TShwY3R4LCBzY2FsZSwgc2NhbGUpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwY3R4LCBD
R0Zsb2F0KC1wYWdlUmVjdC54KCkpLCBDR0Zsb2F0KC1wYWdlUmVjdC55KCkraGVhZGVySGVpZ2h0
KSk7ICAgLy8gcmVzZXJ2ZXMgc3BhY2UgZm9yIGhlYWRlcgorICAgIENHQ29udGV4dFNldEJhc2VD
VE0ocGN0eCwgY3RtKTsKKworICAgIGNvcmVGcmFtZS0+dmlldygpLT5wYWludENvbnRlbnRzKHNw
b29sQ3R4LCBwYWdlUmVjdCk7CisKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGN0eCwgQ0dG
bG9hdChwYWdlUmVjdC54KCkpLCBDR0Zsb2F0KHBhZ2VSZWN0LnkoKSktaGVhZGVySGVpZ2h0KTsK
KworICAgIGlmIChoZWFkZXJIZWlnaHQpCisgICAgICAgIHByaW50SGVhZGVyKGN0eCwgdWksIHBh
Z2VSZWN0LCBoZWFkZXJIZWlnaHQpOworCisgICAgaWYgKGZvb3RlckhlaWdodCkKKyAgICAgICAg
cHJpbnRGb290ZXIoY3R4LCB1aSwgcGFnZVJlY3QsIHBhZ2UsIHBhZ2VDb3VudCwgaGVhZGVySGVp
Z2h0LCBmb290ZXJIZWlnaHQpOworCisgICAgQ0dDb250ZXh0RW5kUGFnZShwY3R4KTsKKyAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKHBjdHgpOworfQorI2VsaWYgUExBVEZPUk0oQ0FJUk8pCit2
b2lkIFdlYkZyYW1lOjpzcG9vbFBhZ2UgKHZvaWQqIGN0eCwgR3JhcGhpY3NDb250ZXh0KiBzcG9v
bEN0eCwgSERDIHByaW50REMsIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWksIGZsb2F0IGhlYWRl
ckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBVSU5UIHBhZ2UsIFVJTlQgcGFnZUNvdW50KQor
eworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwY3R4ID0gKFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiljdHg7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodGhpcyk7CisKKyAgICBJ
bnRSZWN0IHBhZ2VSZWN0ID0gbV9wYWdlUmVjdHNbcGFnZV07CisKKyAgICBjYWlyb19zYXZlKHBj
dHgpOworCisgICAgSW50UmVjdCBwcmludFJlY3QgPSBwcmludGVyUmVjdChwcmludERDKTsKKyAg
ICBJbnRSZWN0IG1lZGlhQm94KDAsIDAsIHByaW50UmVjdC53aWR0aCgpLCBwcmludFJlY3QuaGVp
Z2h0KCkpOworCisgICAgOjpTdGFydFBhZ2UocHJpbnREQyk7CisKKyAgICBmbG9hdCBzY2FsZSA9
IChmbG9hdCltZWRpYUJveC5zaXplKCkud2lkdGgoKS8gKGZsb2F0KXBhZ2VSZWN0LndpZHRoKCk7
CisgICAgY2Fpcm9fc2NhbGUocGN0eCwgLXNjYWxlLCAtc2NhbGUpOworICAgIGNhaXJvX3RyYW5z
bGF0ZShwY3R4LCAtcGFnZVJlY3QueCgpLCAtcGFnZVJlY3QueSgpK2hlYWRlckhlaWdodCk7Cisg
ICAgY2Fpcm9fc2NhbGUocGN0eCwgc2NhbGUsIHNjYWxlKTsKKyAgICBjYWlyb190cmFuc2xhdGUo
cGN0eCwgLXBhZ2VSZWN0LngoKSwgLXBhZ2VSZWN0LnkoKStoZWFkZXJIZWlnaHQpOyAgIC8vIHJl
c2VydmVzIHNwYWNlIGZvciBoZWFkZXIKKworICAgIGNvcmVGcmFtZS0+dmlldygpLT5wYWludENv
bnRlbnRzKHNwb29sQ3R4LCBwYWdlUmVjdCk7CisKKyAgICBjYWlyb190cmFuc2xhdGUocGN0eCwg
cGFnZVJlY3QueCgpLCBwYWdlUmVjdC55KCktaGVhZGVySGVpZ2h0KTsKKworICAgIGlmIChoZWFk
ZXJIZWlnaHQpCisgICAgICAgIHByaW50SGVhZGVyKGN0eCwgdWksIHBhZ2VSZWN0LCBoZWFkZXJI
ZWlnaHQpOworICAgIAorICAgIGlmIChmb290ZXJIZWlnaHQpCisgICAgICAgIHByaW50Rm9vdGVy
KGN0eCwgdWksIHBhZ2VSZWN0LCBwYWdlLCBwYWdlQ291bnQsIGhlYWRlckhlaWdodCwgZm9vdGVy
SGVpZ2h0KTsKKworICAgIGNhaXJvX3Nob3dfcGFnZShwY3R4KTsKKyAgICA6OkVuZFBhZ2UocHJp
bnREQyk7CisgICAgY2Fpcm9fcmVzdG9yZShwY3R4KTsKK30KKyNlbmRpZgorCiBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpzcG9vbFBhZ2VzKCAKICAgICAvKiBbaW5dICovIEhE
QyBwcmludERDLAogICAgIC8qIFtpbl0gKi8gVUlOVCBzdGFydFBhZ2UsCkBAIC0xODkzLDQ3ICsx
OTkxLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6c3BvbwogICAgIEdy
YXBoaWNzQ29udGV4dCBzcG9vbEN0eChwY3R4KTsKICAgICBzcG9vbEN0eC5zZXRTaG91bGRJbmNs
dWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogCi0gICAgZm9yIChVSU5UIGlpID0gc3RhcnRQYWdlOyBp
aSA8IGVuZFBhZ2U7IGlpKyspIHsKLSAgICAgICAgSW50UmVjdCBwYWdlUmVjdCA9IG1fcGFnZVJl
Y3RzW2lpXTsKLQotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKHBjdHgpOwotCi0gICAgICAg
IEludFJlY3QgcHJpbnRSZWN0ID0gcHJpbnRlclJlY3QocHJpbnREQyk7Ci0gICAgICAgIENHUmVj
dCBtZWRpYUJveCA9IENHUmVjdE1ha2UoQ0dGbG9hdCgwKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDR0Zsb2F0KDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENHRmxvYXQocHJpbnRSZWN0LndpZHRoKCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHRmxvYXQocHJpbnRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAg
ICAgQ0dDb250ZXh0QmVnaW5QYWdlKHBjdHgsICZtZWRpYUJveCk7Ci0KLSAgICAgICAgQ0dGbG9h
dCBzY2FsZSA9IChmbG9hdCltZWRpYUJveC5zaXplLndpZHRoLyAoZmxvYXQpcGFnZVJlY3Qud2lk
dGgoKTsKLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY3RtID0gQ0dDb250ZXh0R2V0QmFzZUNU
TShwY3R4KTsKLSAgICAgICAgY3RtID0gQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShjdG0sIC1zY2Fs
ZSwgLXNjYWxlKTsKLSAgICAgICAgY3RtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUoY3Rt
LCBDR0Zsb2F0KC1wYWdlUmVjdC54KCkpLCBDR0Zsb2F0KC1wYWdlUmVjdC55KCkraGVhZGVySGVp
Z2h0KSk7IC8vIHJlc2VydmVzIHNwYWNlIGZvciBoZWFkZXIKLSAgICAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0ocGN0eCwgc2NhbGUsIHNjYWxlKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KHBjdHgsIENHRmxvYXQoLXBhZ2VSZWN0LngoKSksIENHRmxvYXQoLXBhZ2VSZWN0LnkoKStoZWFk
ZXJIZWlnaHQpKTsgICAvLyByZXNlcnZlcyBzcGFjZSBmb3IgaGVhZGVyCi0gICAgICAgIENHQ29u
dGV4dFNldEJhc2VDVE0ocGN0eCwgY3RtKTsKLQotICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+
cGFpbnRDb250ZW50cygmc3Bvb2xDdHgsIHBhZ2VSZWN0KTsKLQotICAgICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0ocGN0eCwgQ0dGbG9hdChwYWdlUmVjdC54KCkpLCBDR0Zsb2F0KHBhZ2VSZWN0
LnkoKSktaGVhZGVySGVpZ2h0KTsKLQotICAgICAgICBpbnQgeCA9IHBhZ2VSZWN0LngoKTsKLSAg
ICAgICAgaW50IHkgPSAwOwotICAgICAgICBpZiAoaGVhZGVySGVpZ2h0KSB7Ci0gICAgICAgICAg
ICBSRUNUIGhlYWRlclJlY3QgPSB7eCwgeSwgeCtwYWdlUmVjdC53aWR0aCgpLCB5KyhpbnQpaGVh
ZGVySGVpZ2h0fTsKLSAgICAgICAgICAgIHVpLT5kcmF3SGVhZGVySW5SZWN0KGQtPndlYlZpZXcs
ICZoZWFkZXJSZWN0LCAoT0xFX0hBTkRMRSkoTE9ORzY0KXBjdHgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGZvb3RlckhlaWdodCkgewotICAgICAgICAgICAgeSA9IG1heCgoaW50KWhlYWRl
ckhlaWdodCtwYWdlUmVjdC5oZWlnaHQoKSwgbV9wYWdlSGVpZ2h0LShpbnQpZm9vdGVySGVpZ2h0
KTsKLSAgICAgICAgICAgIFJFQ1QgZm9vdGVyUmVjdCA9IHt4LCB5LCB4K3BhZ2VSZWN0LndpZHRo
KCksIHkrKGludClmb290ZXJIZWlnaHR9OwotICAgICAgICAgICAgdWktPmRyYXdGb290ZXJJblJl
Y3QoZC0+d2ViVmlldywgJmZvb3RlclJlY3QsIChPTEVfSEFORExFKShMT05HNjQpcGN0eCwgaWkr
MSwgcGFnZUNvdW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIENHQ29udGV4dEVuZFBhZ2UocGN0
eCk7Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGN0eCk7Ci0gICAgfQorICAgIGZv
ciAoVUlOVCBpaSA9IHN0YXJ0UGFnZTsgaWkgPCBlbmRQYWdlOyBpaSsrKQorICAgICAgICBzcG9v
bFBhZ2UgKGN0eCwgJnNwb29sQ3R4LCBwcmludERDLCB1aSwgaGVhZGVySGVpZ2h0LCBmb290ZXJI
ZWlnaHQsIGlpLCBwYWdlQ291bnQpOwogIAogICAgIHJldHVybiBTX09LOwogfQpAQCAtMjEyMCw0
ICsyMTc5LDMgQEAgdm9pZCBXZWJGcmFtZTo6dXBkYXRlQmFja2dyb3VuZCgpCiAKICAgICBjb3Jl
RnJhbWUtPnZpZXcoKS0+dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGJhY2tncm91bmRDb2xv
ciwgd2ViVmlldygpLT50cmFuc3BhcmVudCgpKTsKIH0KLQpJbmRleDogV2ViS2l0L3dpbi9XZWJG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRnJhbWUuaAkocmV2aXNpb24gNDU4
MzApCisrKyBXZWJLaXQvd2luL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwogICAg
IGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwogICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKICAgICBjbGFzcyBJbnRSZWN0
OwogICAgIGNsYXNzIFBhZ2U7CkBAIC0zMzQsNiArMzM1LDkgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgc2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywgZmxvYXQgbWluUGFnZVdpZHRoLCBmbG9hdCBt
YXhQYWdlV2lkdGgsIGJvb2wgYWRqdXN0Vmlld1NpemUpOwogICAgIHZvaWQgaGVhZGVyQW5kRm9v
dGVySGVpZ2h0cyhmbG9hdCosIGZsb2F0Kik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCBwcmludGVy
TWFyZ2luUmVjdChIREMpOworICAgIHZvaWQgc3Bvb2xQYWdlICh2b2lkKiBjdHgsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCogc3Bvb2xDdHgsIEhEQyBwcmludERDLCBDT01QdHI8SVdlYlVJRGVs
ZWdhdGU+IHVpLCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgVUlOVCBw
YWdlLCBVSU5UIHBhZ2VDb3VudCk7CisgICAgdm9pZCBwcmludEhlYWRlcih2b2lkKiBjdHgsIENP
TVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHBhZ2VSZWN0
LCBmbG9hdCBoZWFkZXJIZWlnaHQpOworICAgIHZvaWQgcHJpbnRGb290ZXIodm9pZCogY3R4LCBD
T01QdHI8SVdlYlVJRGVsZWdhdGU+IHVpLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYWdlUmVj
dCwgVUlOVCBwYWdlLCBVSU5UIHBhZ2VDb3VudCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBm
b290ZXJIZWlnaHQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVUxPTkcgICAgICAgICAgICAgICBtX3Jl
ZkNvdW50Owo=
</data>
<flag name="review"
          id="17071"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>