<?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>137069</bug_id>
          
          <creation_ts>2014-09-24 10:55:59 -0700</creation_ts>
          <short_desc>iOS8 new &quot;slow tap&quot; heuristic fires mouse compat events despite preventDefault on touchend</short_desc>
          <delta_ts>2014-11-18 21:06:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://patrickhlauke.github.io/touch/tests/event-listener_prevent-default-touchend.html</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="Patrick H. Lauke">redux</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>mmfrezabakhshi</cc>
    
    <cc>rbyers</cc>
    
    <cc>rkerr</cc>
    
    <cc>rowan</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1036989</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick H. Lauke">redux</who>
    <bug_when>2014-09-24 10:55:59 -0700</bug_when>
    <thetext>It appears that iOS8/Safari (and the new WKWebView) implements some form of &quot;slow tap&quot; heuristic in an attempt to work around the classic 300ms delay that normally happens between touchend and the mouse compatibility + click events (which other browsers have worked around more explicitly by supporting things like taking hints from viewport https://bugs.webkit.org/show_bug.cgi?id=122212 or taking a hint from touch-action https://bugs.webkit.org/show_bug.cgi?id=133112).

Quick taps behave as they did before in iOS7, meaning that tapping on a button would generate a sequence of touchstart &gt; [touchmove]+ &gt; touchend &gt; [300ms delay] &gt; mouseover &gt; mouseenter &gt; mousemove &gt; mousedown &gt; mouseup &gt; click

However, &quot;slow&quot; taps (where the time between touchstart and touchend is above approximately 125ms) seem to magically optimise the 300ms away - see https://www.youtube.com/watch?v=k-UiuPp2CK0 - which is an interesting approach (just shame that this doesn&apos;t appear to be documented anywhere, and has not been communicated to developers, who are already finding mysterious bugs in their existing code because of it, such as https://github.com/ftlabs/fastclick/issues/262)

In general, I can understand the rationale here: a quick tap is more likely to be part of a double-tap sequence, hence the 300ms delay is necessary as before to wait for a possible second tap, while a slower tap is more likely to be an explicit &quot;activation&quot; intent on part of the user.

It seems, though, that this heuristic also has some unintended side effects (or at least, I can&apos;t rationalise why Safari would be doing this): traditionally, cancelling the touchend event (e.g. with preventDefault) would suppress any further mouse compatibility events and click from being fired - see iOS7 https://www.youtube.com/watch?v=HmXvwYcFkps. But the new heuristic in iOS8 seems to kick in here as well: &quot;slow&quot; taps, even when touchend has been preventDefault-ed, now fire mouse compatibility and click - see https://www.youtube.com/watch?v=i787lZCL_YQ

Could I get confirmation please if the above heuristic assessment is correct in principle (that the threshold between touchstart and touchend that determines whether it&apos;s a quick or slow tap is roughly 125ms), and more importantly if the second behavior - that despite touchend being cancelled the mouse compatibility and click events are being fired - is a bug or a feature (and, if the latter, maybe an indication of the rationale behind it?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036998</commentid>
    <comment_count>1</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2014-09-24 12:04:04 -0700</bug_when>
    <thetext>Yeah it seems really unfortunate that safari sends click events in this case even though touchend has been consumed.  Old versions of the android browser behaved like that and it was a huge source of pain for web developers - forcing them to do unnatural things like trying to &quot;bust ghost clicks&quot;: https://developers.google.com/mobile/articles/fast_buttons#ghost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037009</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-24 12:43:40 -0700</bug_when>
    <thetext>Damn :(

Adding this to my &quot;touch TODO list&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037018</commentid>
    <comment_count>3</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2014-09-24 13:36:00 -0700</bug_when>
    <thetext>Thanks Benjamin!  Sorry I didn&apos;t spot this in my experimentation with the earlier beta.  I definitely played with touch consumption modes (http://www.rbyers.net/eventTest.html), but it never occurred to me that tap duration was at all relevant to the behavior.

Will you guys be discussing the behavior / reasoning here around tap duration at some point?  It&apos;s certainly an interesting idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037024</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-24 14:24:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Thanks Benjamin!  Sorry I didn&apos;t spot this in my experimentation with the earlier beta.  I definitely played with touch consumption modes (http://www.rbyers.net/eventTest.html), but it never occurred to me that tap duration was at all relevant to the behavior.

I did test this case as well and I did not catch the bug. The problem is related to the gesture recognizers installed in the app, it is very possible we have all tested a working version and something else changed in the system that broke this later. :(

&gt; Will you guys be discussing the behavior / reasoning here around tap duration at some point?  It&apos;s certainly an interesting idea.

I changed the dependency graph of the long press. Another example is that you can now pinch to zoom after the tap highlight is shown, this was impossible before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037027</commentid>
    <comment_count>5</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2014-09-24 14:28:11 -0700</bug_when>
    <thetext>Ah thanks, so the &quot;long tap suppresses click delay&quot; behavior isn&apos;t intentional either then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037030</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-24 14:47:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Ah thanks, so the &quot;long tap suppresses click delay&quot; behavior isn&apos;t intentional either then?

It is. It is the byproduct of relaxed constraints on the graph. We don&apos;t add delays explicitly, they happen because other gesture recognizers (e.g. double tap) add a restriction.

I am not saying long press will always works this way. A new system gesture could redefine how we have to handle the graph. But at the moment, this is something we can do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037032</commentid>
    <comment_count>7</comment_count>
    <who name="Rick Byers">rbyers</who>
    <bug_when>2014-09-24 14:51:28 -0700</bug_when>
    <thetext>&gt; (In reply to comment #5)
&gt; &gt; Ah thanks, so the &quot;long tap suppresses click delay&quot; behavior isn&apos;t intentional either then?
&gt; 
&gt; It is. It is the byproduct of relaxed constraints on the graph. We don&apos;t add delays explicitly, they happen because other gesture recognizers (e.g. double tap) add a restriction.

Ah, right - we don&apos;t have the nice UIGestureRecognizer-style abstraction system you do.  Makes sense, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044124</commentid>
    <comment_count>8</comment_count>
      <attachid>240453</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-24 21:35:42 -0700</bug_when>
    <thetext>Created attachment 240453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044159</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-10-25 20:31:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/18481464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049594</commentid>
    <comment_count>10</comment_count>
      <attachid>240453</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-11-18 14:25:41 -0800</bug_when>
    <thetext>Comment on attachment 240453
Patch

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

&gt; Source/WebKit2/ChangeLog:15
&gt; +        run concurrently. This causes a race with an incorrect behavior:
&gt; +        -If UIWebTouchEventsGestureRecognizer does not cancel the native gestures on start.
&gt; +        -_UIWebHighlightLongPressGestureRecognizer starts after highlightDelay.
&gt; +        -When the finger leaves the screen, both gestures end.
&gt; +        -&gt; If the touch end sent to JavaScript ask the priority over native events, that no longer stops
&gt; +           the _UIWebHighlightLongPressGestureRecognizer.

The formatting here makes it hard for me to follow the logic of the explanation.

&gt; Source/WebKit2/ChangeLog:19
&gt; +        if the page want the event.

wants

&gt; Source/WebKit2/ChangeLog:29
&gt; +           the gesture can end normally. This is done on timer and not direct input so I don&apos;t really have to worry

on a  timer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049706</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-11-18 21:06:47 -0800</bug_when>
    <thetext>Committed r176305: &lt;http://trac.webkit.org/changeset/176305&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240453</attachid>
            <date>2014-10-24 21:35:42 -0700</date>
            <delta_ts>2014-11-18 14:25:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137069-20141024213549.patch</filename>
            <type>text/plain</type>
            <size>5283</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1MTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2U2NjdlNmJjZmZmM2Zh
ODAyYWIwMGQwMDdhMzRmZWIwMmQ3ZDc5NC4uNWQxYjkyODhjNmJiNTE1OTZmZTAzNDgyYmM0MmIw
N2VkZjdmNzk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDE0LTEwLTI0ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCisgICAgICAgIGlPUzggbmV3ICJz
bG93IHRhcCIgaGV1cmlzdGljIGZpcmVzIG1vdXNlIGNvbXBhdCBldmVudHMgZGVzcGl0ZSBwcmV2
ZW50RGVmYXVsdCBvbiB0b3VjaGVuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM3MDY5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE4NDgxNDY0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT24gV2ViS2l0
Miwgd2UgbGV0IFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplciBhbmQgX1VJV2ViSGln
aGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIKKyAgICAgICAgcnVuIGNvbmN1cnJlbnRs
eS4gVGhpcyBjYXVzZXMgYSByYWNlIHdpdGggYW4gaW5jb3JyZWN0IGJlaGF2aW9yOgorICAgICAg
ICAtSWYgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyIGRvZXMgbm90IGNhbmNlbCB0
aGUgbmF0aXZlIGdlc3R1cmVzIG9uIHN0YXJ0LgorICAgICAgICAtX1VJV2ViSGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc3RhcnRzIGFmdGVyIGhpZ2hsaWdodERlbGF5LgorICAg
ICAgICAtV2hlbiB0aGUgZmluZ2VyIGxlYXZlcyB0aGUgc2NyZWVuLCBib3RoIGdlc3R1cmVzIGVu
ZC4KKyAgICAgICAgLT4gSWYgdGhlIHRvdWNoIGVuZCBzZW50IHRvIEphdmFTY3JpcHQgYXNrIHRo
ZSBwcmlvcml0eSBvdmVyIG5hdGl2ZSBldmVudHMsIHRoYXQgbm8gbG9uZ2VyIHN0b3BzCisgICAg
ICAgICAgIHRoZSBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci4KKwor
ICAgICAgICBUaGUgdHdvIGdlc3R1cmUgcmVjb2duaXplcnMgY2FuIHJ1biBpbiBhbnkgb3JkZXIs
IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBvbiB3aGljaCBvbmUgcnVucyBmaXJzdC4KKyAgICAgICAg
VG8gc29sdmUgdGhlIGJ1ZywgSSBtdXN0IG1ha2Ugc3VyZSB0aGUgX1VJV2ViSGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgbmV2ZXIgdHJpZ2dlciBhIGNsaWNrCisgICAgICAgIGlm
IHRoZSBwYWdlIHdhbnQgdGhlIGV2ZW50LgorCisgICAgICAgIFRvIHNvbHZlIHRoZSBvcmRlciBw
cm9ibGVtLCBJIHVzZSB0aGUgZmFjdCB0aGF0IGV2ZW50IHJlY29nbml0aW9uIGdvZXMgaW4gdHdv
IHBoYXNlcyBmb3IKKyAgICAgICAgbm9uIGNhbmNlbGxlZCBldmVudHM6CisgICAgICAgIDEpIFVw
ZGF0ZSB0aGUgZ2VzdHVyZSByZWNvZ25pemVycy4KKyAgICAgICAgMikgVHJpZ2dlciB0aGUgYWN0
aW9ucy4KKworICAgICAgICBJIGRvIG5vdCBrbm93IHRoZSBvcmRlciBvZiByZWNvZ25pemVycyBp
biBbMV0sIGJ1dCBJIGtub3cgYm90aCBoYXZlIHJ1biBiZWZvcmUgWzJdIGlzIGV4ZWN1dGVkLgor
ICAgICAgICBJIHVzZSB0aGF0IHRvIHN0b3AgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVy
ZVJlY29nbml6ZXIgZnJvbSBlbmRpbmcgd2l0aCBhIGNsaWNrIGluIHRoZSBjYXNlIG9mIHRoZSBi
dWc6CisgICAgICAgIDEpIFdoZW4gX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXIgc3RhcnRzLCBJIHNldCBfaGlnaGxpZ2h0TG9uZ1ByZXNzQ2FuQ2xpY2sgc2lnbmFsaW5n
CisgICAgICAgICAgIHRoZSBnZXN0dXJlIGNhbiBlbmQgbm9ybWFsbHkuIFRoaXMgaXMgZG9uZSBv
biB0aW1lciBhbmQgbm90IGRpcmVjdCBpbnB1dCBzbyBJIGRvbid0IHJlYWxseSBoYXZlIHRvIHdv
cnJ5CisgICAgICAgICAgIGFib3V0IGEgcmFjZSBoZXJlLgorICAgICAgICAyKSBXaGVuIHByb2Nl
c3NpbmcgdGhlIHRvdWNoIGV2ZW50IGZvciBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6
ZXIsIEkgcmVzZXQgdGhlIGZsYWcgX2hpZ2hsaWdodExvbmdQcmVzc0NhbkNsaWNrCisgICAgICAg
ICAgIGlmIHRoZSBwYWdlIHdhbnRzIHRoZSBldmVudC4KKyAgICAgICAgMykgV2hlbiB0aGUgYWN0
aW9ucyBvZiBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBhcmUgcHJv
Y2Vzc2VkLCB0aGUgdG91Y2ggZXZlbnQKKyAgICAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBwcm9j
ZXNzZWQgYnkgdGhlIHBhZ2UgYW5kIHRoZSBmbGFnIGhhcyBiZWVuIGNsZWFyZWQgaWYgbmVlZGVk
LgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBfd2ViVG91Y2hFdmVudDpwcmV2ZW50c05hdGl2ZUdlc3R1
cmVzOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9oaWdobGlnaHRMb25nUHJlc3NSZWNv
Z25pemVkOl0pOgorCisyMDE0LTEwLTI0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBw
bGUuY29tPgorCiAgICAgICAgIEZpeCB0aGUgaU9TIGJ1aWxkCiAKICAgICAgICAgKiBDb25maWd1
cmF0aW9ucy9XZWJLaXQueGNjb25maWc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCA5MzNhMDQ1OGIwZWYy
NzE5MWY2MDE0ZDRiNTRlMGQ2ZDgyMDkyM2ZhLi5hMDY2ZTcyNjU3YTZhZjM5MGY3MzI1YzYzOGY5
MzE2ZWVlMzM4ZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTEzNiw2ICsxMzYsNyBAQCBzdHJ1Y3Qg
V0tBdXRvQ29ycmVjdGlvbkRhdGEgewogICAgIEJPT0wgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1h
dGlvbjsKICAgICBCT09MIF9pc1RhcEhpZ2hsaWdodElEVmFsaWQ7CiAgICAgQk9PTCBfcG90ZW50
aWFsVGFwSW5Qcm9ncmVzczsKKyAgICBCT09MIF9oaWdobGlnaHRMb25nUHJlc3NDYW5DbGljazsK
ICAgICBCT09MIF9oYXNUYXBIaWdobGlnaHRGb3JQb3RlbnRpYWxUYXA7CiAgICAgQk9PTCBfc2Vs
ZWN0aW9uTmVlZHNVcGRhdGU7CiAgICAgQk9PTCBfc2hvdWxkUmVzdG9yZVNlbGVjdGlvbjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0KaW5kZXggNTMzMzMzOGRhNjVmMTZiYWQ0NGYzYmI1NzY5OThmOTQ4MTVlMTIx
Mi4uZDUzOTVjYmI3MGJiYzkzOGU1NWQxMTcyZjVkMGE3M2FjYzhhOGFiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KQEAgLTUzNyw2ICs1MzcsOCBAQCBzdGF0aWMgRmxvYXRRdWFkIGluZmxhdGVRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgaW5mbGF0ZVNpemUpCiAtICh2b2lkKV93ZWJUb3Vj
aEV2ZW50Oihjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQmKXRvdWNoRXZlbnQgcHJl
dmVudHNOYXRpdmVHZXN0dXJlczooQk9PTClwcmV2ZW50c05hdGl2ZUdlc3R1cmUKIHsKICAgICBp
ZiAocHJldmVudHNOYXRpdmVHZXN0dXJlKSB7CisgICAgICAgIF9oaWdobGlnaHRMb25nUHJlc3ND
YW5DbGljayA9IE5POworCiAgICAgICAgIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNs
eSA9IFlFUzsKICAgICAgICAgW190b3VjaEV2ZW50R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVmYXVs
dFByZXZlbnRlZDpZRVNdOwogICAgIH0KQEAgLTkzNCwxOSArOTM2LDIyIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJlY29nbml6ZXIgKmEsIFVJR2VzdHVyZVJlY29n
bml6ZXIgKmIsIFVJCiAKICAgICBzd2l0Y2ggKFtnZXN0dXJlUmVjb2duaXplciBzdGF0ZV0pIHsK
ICAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuOgorICAgICAgICBfaGlnaGxp
Z2h0TG9uZ1ByZXNzQ2FuQ2xpY2sgPSBZRVM7CiAgICAgICAgIGNhbmNlbFBvdGVudGlhbFRhcElm
TmVjZXNzYXJ5KHNlbGYpOwogICAgICAgICBfcGFnZS0+dGFwSGlnaGxpZ2h0QXRQb3NpdGlvbihb
Z2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF0sICsrX2xhdGVzdFRhcEhpZ2hsaWdodElEKTsK
ICAgICAgICAgX2lzVGFwSGlnaGxpZ2h0SURWYWxpZCA9IFlFUzsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDoKLSAgICAgICAgaWYgKCFfcG9z
aXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKF9oaWdobGlnaHRMb25nUHJlc3NDYW5DbGljayAmJiAhX3Bvc2l0aW9uSW5mb3JtYXRp
b24uY2xpY2thYmxlRWxlbWVudE5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBbc2VsZiBf
YXR0ZW1wdENsaWNrQXRMb2NhdGlvbjpbZ2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF1dOwog
ICAgICAgICAgICAgW3NlbGYgX2ZpbmlzaEludGVyYWN0aW9uXTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOworICAgICAgICBfaGlnaGxpZ2h0
TG9uZ1ByZXNzQ2FuQ2xpY2sgPSBOTzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVSUdlc3R1
cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWQ6CiAgICAgICAgIFtzZWxmIF9jYW5jZWxJbnRlcmFj
dGlvbl07CisgICAgICAgIF9oaWdobGlnaHRMb25nUHJlc3NDYW5DbGljayA9IE5POwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
</data>
<flag name="review"
          id="265236"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>