<?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>160857</bug_id>
          
          <creation_ts>2016-08-15 12:19:08 -0700</creation_ts>
          <short_desc>Promise API does not fully process microtask checkpoint: spec violation</short_desc>
          <delta_ts>2016-08-24 17:20:37 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=140043</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aleksandar Totic">a</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>d</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1220109</commentid>
    <comment_count>0</comment_count>
      <attachid>286076</attachid>
    <who name="Aleksandar Totic">a</who>
    <bug_when>2016-08-15 12:19:08 -0700</bug_when>
    <thetext>Created attachment 286076
This file will demonstrate the bug

Promises microtask queue does not fully process microtasks queued while microtask is running.
According to spec, microtask queue should loop until it is empty.

Why is this bug important?
Promises are often used by developers for scheduling. When they are,
developers assume Promise.resolve() means &quot;execute this function right 
after this script returns&quot;. This bug violates this promise.

FF/Edge/Chrome get this right. It&apos;d be great if all browsers worked the same.

Example:

Promise.resolved()
 .then(() =&gt; {
   console.log(&quot;Promise 1&quot;);
   return Promise.resolve();
 })
 .then(() =&gt; {
   console.log(&quot;Promise 2&quot;);
 }
window.setTimeout(function() {
  console.log(&apos;timeout&apos;);
}, 0);

Might also be related to Bug #140043. I&apos;ve attached a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220560</commentid>
    <comment_count>1</comment_count>
    <who name="Aleksandar Totic">a</who>
    <bug_when>2016-08-16 13:47:01 -0700</bug_when>
    <thetext>Noticed that my example was not clear. The example should print: 
Promise 1
Promise 2
timeout

In Safari, it prints
Promise 1
timeout
Promise 2</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>286076</attachid>
            <date>2016-08-15 12:19:08 -0700</date>
            <delta_ts>2016-08-15 12:19:08 -0700</delta_ts>
            <desc>This file will demonstrate the bug</desc>
            <filename>PromiseEventLoop.html</filename>
            <type>text/html</type>
            <size>3204</size>
            <attacher name="Aleksandar Totic">a</attacher>
            
              <data encoding="base64">PCFkb2N0eXBlIGh0bWw+CjxoZWFkPgoJPHRpdGxlPndlYmtpdCBwcm9taXNlcyBidWc8L3RpdGxl
PgoJPHN0eWxlPiAjYXNzZXJ0cyB7IGNvbG9yOiByZWQ7IH0gPC9zdHlsZT4KPC9oZWFkPgo8Ym9k
eT4KCTxoMj5Qcm9taXNlcyBhbmQgZXZlbnQgbG9vcCBpbnRlZ3JhdGlvbi48L2gyPgoJPHA+QWNj
b3JkaW5nIHRvIHNwZWM6PC9wPgoJPG9sPgoJCTxsaT5Qcm9taXNlcyBhcmUgZXhlY3V0ZWQgYXMg
bWljcm90YXNrcyBieSAibWljcm90YXNrIGNoZWNrcG9pbnQiLiA8YSBocmVmPSJodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLW9iamVjdHMiPkVDTUFTY3JpcHQgUHJv
bWlzZXMgRW5xdWV1ZUpvYjwvYT4gKyA8YSBocmVmPSJodHRwczovL2h0bWwuc3BlYy53aGF0d2cu
b3JnLyNlbnF1ZXVlam9iKHF1ZXVlbmFtZSwtam9iLC1hcmd1bWVudHMpOnF1ZXVlLWEtbWljcm90
YXNrIj5FbnF1ZXVlSm9iIGluIEhUTUwgc3BlYzwvYT48L2xpPgoJCTxsaT5NaWNyb3Rhc2sgY2hl
Y2twb2ludCBydW5zIGluIGEgbG9vcCB1bnRpbCBhbGwgbWljcm90YXNrcyBoYXZlIGJlZW4gZGVs
aXZlcmVkLiA8YSAgaHJlZj0iaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jcGVyZm9ybS1h
LW1pY3JvdGFzay1jaGVja3BvaW50Ij5IVE1MIHNwZWM6IHBlcmZvcm0gYSBtaWNyb3Rhc2sgY2hl
Y2twb2ludDwvYT48L2xpPgoJCTxsaT5NaWNyb3Rhc2sgY2hlY2twb2ludCBpcyBwZXJmb3JtZWQg
aW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyBzY3JpcHQuIDxhIGhyZWY9Imh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvI2NsZWFuLXVwLWFmdGVyLXJ1bm5pbmctc2NyaXB0PiI+SFRNTCBzcGVj
OiBjbGVhbiB1cCBhZnRlciBydW5uaW5nIHNjcmlwdDwvYT48L2xpPgoJPC9vbD4KPGRpdiBpZD0i
YXNzZXJ0cyI+PC9kaXY+Cgo8c2NyaXB0PgovKgpUZXN0MSYyOgpodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnLyNjbGVhbi11cC1hZnRlci1ydW5uaW5nLXNjcmlwdApJZiB0aGUgSmF2YVNjcmlw
dCBleGVjdXRpb24gY29udGV4dCBzdGFjayBpcyBub3cgZW1wdHksIHBlcmZvcm0gYSBtaWNyb3Rh
c2sgY2hlY2twb2ludC4KClRlc3RzIHdoZXRoZXIgbWljcm90YXNrIGNoZWNrcG9pbnQgaXMgcGVy
Zm9ybWVkIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgc2NyaXB0LgoKVGVzdDM6Cmh0dHBzOi8v
aHRtbC5zcGVjLndoYXR3Zy5vcmcvI3BlcmZvcm0tYS1taWNyb3Rhc2stY2hlY2twb2ludAoicGVy
Zm9ybSBhIG1pY3JvdGFzayBjaGVja3BvaW50IiBydW5zIGluIGEgbG9vcCB1bnRpbCBhbGwgbWlj
cm90YXNrcyBoYXZlIGJlZW4gZGVsaXZlcmVkLgoqLwoKdmFyIGNoZWNrcG9pbnRzID0gW107Cgpm
dW5jdGlvbiBhc3NlcnRUcnVlKHN0YXRlLCBtZXNzYWdlKSB7CglpZiAoIXN0YXRlKSB7CgkJbGV0
IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBlbC5pbm5lclRleHQgPSBt
ZXNzYWdlOwoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhc3NlcnRzJykuYXBwZW5kQ2hpbGQo
ZWwpOwogIH0KfQoKZnVuY3Rpb24gdmFsaWRhdGVSZXN1bHRzKCkgewoJbGV0IHAxID0gY2hlY2tw
b2ludHMuaW5kZXhPZigncHJvbWlzZSAxJyk7CiAgbGV0IHAxYyA9IGNoZWNrcG9pbnRzLmluZGV4
T2YoJ3Byb21pc2UgMSBjaGlsZCcpOwogIGxldCBwMiA9IGNoZWNrcG9pbnRzLmluZGV4T2YoJ3By
b21pc2UgMicpOwogIGFzc2VydFRydWUocDEgPT09IDAsICJ0aW1lb3V0L3Njcm9sbCBzaG91bGQg
bm90IGZpcmUgYmVmb3JlIFByb21pc2UudGhlbi4gU3BlYyAoMSkiKTsKICBhc3NlcnRUcnVlKChw
MiAtIHAxKSAgPT09IDEsICJQcm9taXNlIDIgc2hvdWxkIGZpcmUgaW1tZWRpYXRlbHkgYWZ0ZXIg
cHJvbWlzZSAxLiBTcGVjICgyKSIpOwogIGFzc2VydFRydWUoKHAxYyAtIHAyKSAgPT09IDEsICJQ
cm9taXNlIDEgY2hpbGQgc2hvdWxkIGZpcmUgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvbWlzZSAyLiBT
cGVjICgyKSIpOwogIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYXNzZXJ0cycpLmNoaWxk
Tm9kZXMubGVuZ3RoID09PSAwKSB7CiAgCWxldCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2gxJyk7CiAgICBlbC5pbm5lclRleHQgPSAiVGVzdHMgcGFzc2VkIjsKICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZWwpOwogIH0KICBlbHNlIHsKICAJbGV0IGVsID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaDInKTsKICAgIGVsLmlubmVyVGV4dCA9ICJUZXN0cyBmYWlsZWQuIgogICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7CiAgICBlbCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3ByZScpOwogICAgZWwuaW5uZXJUZXh0ID0gIkV2ZW50cyBvYnNlcnZlZFxuIiAgKyBj
aGVja3BvaW50cy5qb2luKCcsICcpOwogICAgZWwuaW5uZXJUZXh0ICs9ICJcblxuRXZlbnRzIGV4
cGVjdGVkXG4iICsgCiAgICAicHJvbWlzZSAxLCBwcm9taXNlIDIsIHByb21pc2UgMSBjaGlsZCwg
dGltZW91dCwgc2Nyb2xsIgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7CiAgfQp9
CgovLyBURVNUCgovLyBSZXNvbHZlIHByb21pc2UgMQpQcm9taXNlLnJlc29sdmUoKQogIC50aGVu
KGZ1bmN0aW9uKCkgewogICAgY2hlY2twb2ludHMucHVzaCgicHJvbWlzZSAxIik7CiAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfSkKICAudGhlbihmdW5jdGlvbigpIHsKICAJLy8gUmVz
b2x2ZSBwcm9taXNlIDEgY2hpbGQgaW5zaWRlIHByb21pc2UgMSBjYWxsYmFjawogICAgY2hlY2tw
b2ludHMucHVzaCgicHJvbWlzZSAxIGNoaWxkIik7CiAgICB2YWxpZGF0ZVJlc3VsdHMoKTsKICB9
KTsKCi8vIFJlc29sdmUgcHJvbWlzZSAyClByb21pc2UucmVzb2x2ZSgpCgkudGhlbihmdW5jdGlv
bigpIHsKICAgIGNoZWNrcG9pbnRzLnB1c2goInByb21pc2UgMiIpOwogICB9KTsKCi8vIFNldCB1
cCBldmVudHMgdGhhdCBtdXN0IGJlIGV4ZWN1dGVkIGFmdGVyIFByb21pc2UuCndpbmRvdy5zZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgewogICAgY2hlY2twb2ludHMucHVzaCgndGltZW91dCcpOwp9LCAw
KTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKCkgewogICAgY2hl
Y2twb2ludHMucHVzaCgnc2Nyb2xsJyk7Cn0pOwp3aW5kb3cuc2Nyb2xsQnkoMCwxMCk7Cjwvc2Ny
aXB0Pgo8L2JvZHk+
</data>

          </attachment>
      

    </bug>

</bugzilla>