<?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>135075</bug_id>
          
          <creation_ts>2014-07-18 15:38:43 -0700</creation_ts>
          <short_desc>Put position:fixed elements into layers when a WK1 view is layer-backed</short_desc>
          <delta_ts>2014-07-21 11:32:53 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1023374</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-07-18 15:38:43 -0700</bug_when>
    <thetext>We should put position:fixed elements into layers when a WK1 view is layer-backed. Otherwise they currently do not repaint correctly.

&lt;rdar://problem/17682335&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023377</commentid>
    <comment_count>1</comment_count>
      <attachid>235153</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-07-18 15:47:30 -0700</bug_when>
    <thetext>Created attachment 235153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023498</commentid>
    <comment_count>2</comment_count>
      <attachid>235153</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-19 22:47:44 -0700</bug_when>
    <thetext>Comment on attachment 235153
Patch

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

Looks like it will work.

&gt; Source/WebCore/css/StyleResolver.cpp:1261
&gt;          || (style.position() == FixedPosition &amp;&amp; e &amp;&amp; e-&gt;document().page() &amp;&amp; e-&gt;document().page()-&gt;settings().fixedPositionCreatesStackingContext())
&gt; +        || (style.position() == FixedPosition &amp;&amp; e &amp;&amp; e-&gt;document().page() &amp;&amp; e-&gt;document().page()-&gt;chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition())

Could we add a helper function to make this code easier to read?

    || (style.position() == FixedPosition &amp;&amp; shouldSomething(e))

Then the code in the helper function would say:

    if (!element)
        return false;
    Page* page = element-&gt;document().page();
    if (!page)
        return false;
    return page-&gt;settings().fixedPositionCreatesStackingContext()
        || page-&gt;chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition();

And we could even put some “why” comment in there. It can be an inline function if needed so the generated code could be the same.

&gt; Source/WebCore/page/ChromeClient.h:430
&gt; +    virtual bool requiresAcceleratedCompositingForViewportConstrainedPosition() const { return false; }

Seems a inconsistent that for Settings we go with ”fixed position” but here we say “viewport constrained position”.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2594
&gt;      const Settings&amp; settings = m_renderView.frameView().frame().settings();
&gt; -    if (!settings.acceleratedCompositingForFixedPositionEnabled())
&gt; +    Page* page = this-&gt;page();
&gt; +    bool clientRequiresCompositing = page &amp;&amp; page-&gt;chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition();
&gt; +    if (!(settings.acceleratedCompositingForFixedPositionEnabled() || clientRequiresCompositing))
&gt;          return false;

Sure would be nice if this shared code with StyleResolver.cpp. The code is identical, except for how we get to the Page.

&gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.h:202
&gt; +    virtual bool requiresAcceleratedCompositingForViewportConstrainedPosition() const override;

I suggest making this private rather than public. Same for most of the other virtual overrides. I don’t think we ever want to call these except polymorphically through the base class, so it’s kind of nice to make them private so we don’t do it by accident. A really minor thing.

&gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:1017
&gt; +    if ([documentView isKindOfClass:[WebHTMLView class]])
&gt; +        return documentView.layer;
&gt; +    return false;

I think this would read more logically as an &amp;&amp;:

    return [documentView isKindOfClass:[WebHTMLView class]] &amp;&amp; documentView.layer;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023560</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-07-20 13:50:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 235153 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235153&amp;action=review
&gt; 
&gt; Looks like it will work.
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:1261
&gt; &gt;          || (style.position() == FixedPosition &amp;&amp; e &amp;&amp; e-&gt;document().page() &amp;&amp; e-&gt;document().page()-&gt;settings().fixedPositionCreatesStackingContext())
&gt; &gt; +        || (style.position() == FixedPosition &amp;&amp; e &amp;&amp; e-&gt;document().page() &amp;&amp; e-&gt;document().page()-&gt;chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition())
&gt; 
&gt; Could we add a helper function to make this code easier to read?
&gt; 
&gt;     || (style.position() == FixedPosition &amp;&amp; shouldSomething(e))
&gt; 
&gt; Then the code in the helper function would say:
&gt; 
&gt;     if (!element)
&gt;         return false;
&gt;     Page* page = element-&gt;document().page();
&gt;     if (!page)
&gt;         return false;
&gt;     return page-&gt;settings().fixedPositionCreatesStackingContext()
&gt;         || page-&gt;chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition();
&gt; 
&gt; And we could even put some “why” comment in there. It can be an inline function if needed so the generated code could be the same.
&gt; 

I added a helper function. It is much cleaner.

&gt; &gt; Source/WebCore/page/ChromeClient.h:430
&gt; &gt; +    virtual bool requiresAcceleratedCompositingForViewportConstrainedPosition() const { return false; }
&gt; 
&gt; Seems a inconsistent that for Settings we go with ”fixed position” but here we say “viewport constrained position”.
&gt; 

I used &quot;viewport constrained position&quot; instead of &quot;fixed position&quot; because of the comment on line 2589 in RenderLayerCompositor that reads:

// FIXME: acceleratedCompositingForFixedPositionEnabled should probably be renamed acceleratedCompositingForViewportConstrainedPositionEnabled().

So &quot;viewport constrained position&quot; seems to be the way of the future, and maybe this patch should have introduced that re-name, but I decided to save that for a future clean-up.

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2594
&gt; &gt;      const Settings&amp; settings = m_renderView.frameView().frame().settings();
&gt; &gt; -    if (!settings.acceleratedCompositingForFixedPositionEnabled())
&gt; &gt; +    Page* page = this-&gt;page();
&gt; &gt; +    bool clientRequiresCompositing = page &amp;&amp; page-&gt;chrome().client().requiresAcceleratedCompositingForViewportConstrainedPosition();
&gt; &gt; +    if (!(settings.acceleratedCompositingForFixedPositionEnabled() || clientRequiresCompositing))
&gt; &gt;          return false;
&gt; 
&gt; Sure would be nice if this shared code with StyleResolver.cpp. The code is identical, except for how we get to the Page.
&gt; 

The code is actually slightly different, in a rather confusing way. This code consults the Setting acceleratedCompositingForFixedPositionEnabled() and StyleResolver consults a different Setting: fixedPositionCreatesStackingContext(). I&apos;m guessing we made them two different settings because we expected enabling these settings to cause regressions way back when we first enabled them, and having two different settings would make it easier to track down the problem? Maybe? But it&apos;s terribly confusing now because if you ever had acceleratedCompositingForFixedPositionEnabled() set but not fixedPositionCreatesStackingContext(), then that could definitely lead to broken content. We should clean this up.

In the meantime, I did not attempt to share this code. I think the cleanup should happen first.

&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.h:202
&gt; &gt; +    virtual bool requiresAcceleratedCompositingForViewportConstrainedPosition() const override;
&gt; 
&gt; I suggest making this private rather than public. Same for most of the other virtual overrides. I don’t think we ever want to call these except polymorphically through the base class, so it’s kind of nice to make them private so we don’t do it by accident. A really minor thing.
&gt; 

Done.

&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:1017
&gt; &gt; +    if ([documentView isKindOfClass:[WebHTMLView class]])
&gt; &gt; +        return documentView.layer;
&gt; &gt; +    return false;
&gt; 
&gt; I think this would read more logically as an &amp;&amp;:
&gt; 
&gt;     return [documentView isKindOfClass:[WebHTMLView class]] &amp;&amp; documentView.layer;

Done.

Thanks Darin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023729</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-07-21 11:32:53 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/171308</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235153</attachid>
            <date>2014-07-18 15:47:30 -0700</date>
            <delta_ts>2014-07-19 22:47:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-layers.txt</filename>
            <type>text/plain</type>
            <size>6568</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MTI0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA3LTE4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBQdXQgcG9zaXRpb246Zml4ZWQgZWxl
bWVudHMgaW50byBsYXllcnMgd2hlbiBhIFdLMSB2aWV3IGlzIGxheWVyLWJhY2tlZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IGEgbmV3IENocm9tZUNsaWVudCBmdW5jdGlvbiBjYWxsZWQgCisgICAgICAgIHJlcXVpcmVzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpLiBTaW5j
ZSBhIHZpZXcgY2FuIAorICAgICAgICBnbyBpbiBhbmQgb3V0IG9mIGxheWVyIGJhY2tpbmcsIHdl
IG5lZWQgYSBDaHJvbWVDbGllbnQgbWV0aG9kIHRoYXQgY2FuIGJlIAorICAgICAgICBkeW5hbWlj
YWxseSByZS1ldmFsdWF0ZWQgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGV4aXN0aW5nIHNldHRpbmdz
IGZvciBlbmFibGluZyAKKyAgICAgICAgYWNjZWxlcmF0ZWQgZml4ZWQgYW5kIGZpeGVkIHRoYXQg
Y3JlYXRlcyBhIHN0YWNraW5nIGNvbnRleHQuCisKKyAgICAgICAgRW5zdXJlIHRoYXQgZml4ZWQg
ZWxlbWVudHMgY3JlYXRlIGEgc3RhY2tpbmcgY29udGV4dCB3aGVuIAorICAgICAgICByZXF1aXJl
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24gaXMg
dHJ1ZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisKKyAgICAgICAgTmV3IENocm9t
ZUNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpyZXF1aXJlc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24pOgorCisgICAgICAgIENoZWNrIHJlcXVpcmVz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpIHdo
ZW4gY2hlY2tpbmcgCisgICAgICAgIHRoZSBTZXR0aW5nLiAKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKToKKwogMjAxNC0wNy0x
OCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgcG9zaXRp
b24gZWxlbWVudHMgYXJlIG1pc3BsYWNlZCB3aGVuIGEgV0sxIHZpZXcgaGFzIGNvbnRlbnRJbnNl
dHMgc2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAx
NzEyMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDggQEAKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiQ2FsY3Vs
YXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2lu
Y2x1ZGUgIkNvdW50ZXJDb250ZW50LmgiCkBAIC0xMjU2LDYgKzEyNTgsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAgICAgICAgIHx8IHN0eWxlLmhhc0lzb2xh
dGlvbigpCiAgICAgICAgIHx8IHN0eWxlLnBvc2l0aW9uKCkgPT0gU3RpY2t5UG9zaXRpb24KICAg
ICAgICAgfHwgKHN0eWxlLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiAmJiBlICYmIGUtPmRv
Y3VtZW50KCkucGFnZSgpICYmIGUtPmRvY3VtZW50KCkucGFnZSgpLT5zZXR0aW5ncygpLmZpeGVk
UG9zaXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHx8IChzdHlsZS5wb3Np
dGlvbigpID09IEZpeGVkUG9zaXRpb24gJiYgZSAmJiBlLT5kb2N1bWVudCgpLnBhZ2UoKSAmJiBl
LT5kb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkucmVxdWlyZXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCiAgICAgICAgIHx8
IHN0eWxlLmhhc0Zsb3dGcm9tKCkKICAgICAgICAgKSkKICAgICAgICAgc3R5bGUuc2V0WkluZGV4
KDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzEyMjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MjcsNiArNDI3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZVRp
bGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBGcmFtZVZpZXcqKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvclZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKICAgICB2aXJ0dWFsIGJvb2wgd3JhcENyeXB0
b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCB1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCShyZXZpc2lvbiAxNzEyMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4OCw3ICsyNTg4
LDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogCiAgICAgLy8g
RklYTUU6IGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCBzaG91
bGQgcHJvYmFibHkgYmUgcmVuYW1lZCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlld3BvcnRD
b25zdHJhaW5lZFBvc2l0aW9uRW5hYmxlZCgpLgogICAgIGNvbnN0IFNldHRpbmdzJiBzZXR0aW5n
cyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnNldHRpbmdzKCk7Ci0gICAgaWYg
KCFzZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQo
KSkKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGJvb2wgY2xpZW50UmVxdWly
ZXNDb21wb3NpdGluZyA9IHBhZ2UgJiYgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkucmVxdWlyZXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCk7Cisg
ICAgaWYgKCEoc2V0dGluZ3MuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25F
bmFibGVkKCkgfHwgY2xpZW50UmVxdWlyZXNDb21wb3NpdGluZykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChpc1N0aWNreSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE3MTI0NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE0LTA3LTE4ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBQdXQgcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgaW50byBsYXllcnMgd2hl
biBhIFdLMSB2aWV3IGlzIGxheWVyLWJhY2tlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIFdlYkhUTUxWaWV3IGhh
cyBhIGxheWVyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAo
V2ViQ2hyb21lQ2xpZW50OjpyZXF1aXJlc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWV3cG9y
dENvbnN0cmFpbmVkUG9zaXRpb24pOgorCiAyMDE0LTA3LTE3ICBEYXZpZCBLaWx6ZXIgIDxkZGtp
bHplckBhcHBsZS5jb20+CiAKICAgICAgICAgU0VDVE9SREVSX0ZMQUdTIHNob3VsZCBiZSBkZWZp
bmVkIGluIHRhcmdldCdzIHhjY29uZmlnIGZpbGUsIG5vdCBCYXNlLnhjY29uZmlnCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gMTcxMjI1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNp
Z25lZCkgb3ZlcnJpZGUgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKICAgICB2aXJ0dWFsIGJvb2wgd3JhcENy
eXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQko
cmV2aXNpb24gMTcxMjI1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA5LDYgKzEwMDksMTQgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRQogCiAjZW5kaWYgLy8gRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQogCitib29sIFdlYkNocm9tZUNsaWVudDo6cmVxdWlyZXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkgY29uc3QKK3sK
KyAgICBOU1ZpZXc8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1tbbV93ZWJWaWV3
IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYg
KFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAg
ICAgcmV0dXJuIGRvY3VtZW50Vmlldy5sYXllcjsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRv
S2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRL
ZXkpIGNvbnN0CiB7Cg==
</data>
<flag name="review"
          id="259704"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>