[html5] r6697 - [giow] (1) Update postMessage() to do the transfers after the cloning so that if [...]

whatwg at whatwg.org whatwg at whatwg.org
Tue Oct 18 17:46:00 PDT 2011


Author: ianh
Date: 2011-10-18 17:45:59 -0700 (Tue, 18 Oct 2011)
New Revision: 6697

Modified:
   complete.html
   index
   source
Log:
[giow] (1) Update postMessage() to do the transfers after the cloning so that if cloning fails, the transferables don't get killed.
Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=13799

Modified: complete.html
===================================================================
--- complete.html	2011-10-19 00:05:32 UTC (rev 6696)
+++ complete.html	2011-10-19 00:45:59 UTC (rev 6697)
@@ -8938,9 +8938,8 @@
   clone</dfn> of a value, optionally with a <i>transfer map</i>, it
   must run the following algorithm, which either returns a separate
   value, or throws an exception. If a <i>transfer map</i> is provided,
-  it consists of a association list of pairs of
-  <code><a href=#transferable>Transferable</a></code> objects; in each pair, one is the
-  <em>old</em> object and one is the <em>new</em> object.</p>
+  it consists of a association list of <code><a href=#transferable>Transferable</a></code>
+  objects to placeholder objects.</p>
 
   <ol><li><p>Let <var title="">input</var> be the value being
    cloned.</li>
@@ -8955,9 +8954,9 @@
    <em>source</em> object and the other the <em>destination</em>
    object.</li>
 
-   <li><p>For each pair of objects in <var title="">transfer
-   map</var>, add a mapping from the old object (the source object) to
-   the new object (the destination object) to <var title="">memory</var>.</li>
+   <li><p>For each mapping in <var title="">transfer map</var>, add a
+   mapping from the <code><a href=#transferable>Transferable</a></code> object (the source
+   object) to the placeholder object (the destination object) to <var title="">memory</var>.</li>
 
    <li><p>Let <var title="">output</var> be the value resulting from
    calling the <a href=#internal-structured-cloning-algorithm>internal structured cloning algorithm</a> with
@@ -81718,7 +81717,8 @@
    <li>
 
     <p>Let <var title="">transfer map</var> be an empty association
-    list of pairs of <code><a href=#transferable>Transferable</a></code> objects.</p>
+    list of <code><a href=#transferable>Transferable</a></code> objects to placeholder
+    objects.</p>
 
    </li>
 
@@ -81738,16 +81738,11 @@
 
      <li>
 
-      <p>If the <var title="">transfer</var> argument is present, then
-      for each object in <var title="">transfer</var> in turn, obtain
-      a new object by <a href=#transfer-a-transferable-object title="transfer a Transferable
-      object">transferring</a> the object to the
-      <code><a href=#window>Window</a></code> object on which the method was invoked, and
-      add a mapping from the old object to the new transferred object
-      to <var title="">transfer map</var>. For each new
-      <code><a href=#messageport>MessagePort</a></code> object obtained in this manner, append
-      the new transferred object to the <var title="">new ports</var>
-      array.</p>
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, add a mapping from <var title="">x</var> to a new unique placeholder object created for
+      <var title="">x</var> to <var title="">transfer map</var>, and
+      if <var title="">x</var> is a <code><a href=#messageport>MessagePort</a></code> object,
+      also append the placeholder object to the <var title="">new
+      ports</var> array.</p>
 
      </li>
 
@@ -81755,12 +81750,6 @@
 
    <li>
 
-    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
-
-   </li>
-
-   <li>
-
     <p>Let <var title="">message clone</var> be the result of
     obtaining a <a href=#structured-clone>structured clone</a> of the <var title="">message</var> argument, with <var title="">transfer
     map</var> as the <i>transfer map</i>. If this throws an exception,
@@ -81768,6 +81757,32 @@
 
    </li>
 
+    <p>If the method was invoked with a third argument <var title="">transfer</var>, run these substeps:</p>
+
+    <ol><li>
+
+      <p>Let <var title="">new owner</var> be the <code><a href=#window>Window</a></code>
+      object on which the method was invoked.</p>
+
+     </li>
+
+     <li>
+
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, obtain a new object <var title="">y</var> by <a href=#transfer-a-transferable-object title="transfer a Transferable
+      object">transferring</a> the object <var title="">x</var> to
+      <var title="">new owner</var>, and replace the placeholder
+      object that was created for the object <var title="">x</var> by
+      the new object <var title="">y</var> wherever the placeholder
+      exists (i.e. in <var title="">message clone</var> and in <var title="">new ports</var>).</p>
+
+     </li>
+
+    </ol><li>
+
+    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
+
+   </li>
+
    <li>
 
     <p>Return from the <code title=dom-window-postMessage><a href=#dom-window-postmessage>postMessage()</a></code> method, but
@@ -82170,14 +82185,6 @@
   <ol><!-- a lot of this is similar or identical to window.postMessage --><li><p>Let <var title="">target port</var> be the port with which
    <var title="">source port</var> is entangled, if any.</li>
 
-   <li><p>Let <var title="">new owner</var> be the owner of <var title="">target port</var>, if there is a <var title="">target
-   port</var>, or else some arbitrary owner. (This <var title="">new
-   owner</var> is used when transfering objects below. If there is no
-   <var title="">target port</var>, the <code><a href=#transferable>Transferable</a></code>
-   objects given in the second argument, if any, are still <a href=#transfer-a-transferable-object title="transfer a Transferable object">transfered</a>, but since
-   they are then discarded, it doesn't matter where they are
-   transfered to.)</li>
-
    <li>
 
     <p>Let <var title="">new ports</var> be an empty array.</p>
@@ -82187,7 +82194,8 @@
    <li>
 
     <p>Let <var title="">transfer map</var> be an empty association
-    list of pairs of <code><a href=#transferable>Transferable</a></code> objects.</p>
+    list of <code><a href=#transferable>Transferable</a></code> objects to placeholder
+    objects.</p>
 
    </li>
 
@@ -82216,15 +82224,11 @@
 
      <li>
 
-      <p>If the <var title="">transfer</var> argument is present, then
-      for each object in <var title="">transfer</var> in turn, obtain
-      a new object by <a href=#transfer-a-transferable-object title="transfer a Transferable
-      object">transferring</a> the object to <var title="">new
-      owner</var>, and add a mapping from the old object to the new
-      transferred object to <var title="">transfer map</var>. If the
-      objects are <code><a href=#messageport>MessagePort</a></code> objects, also append the
-      new transferred object to the <var title="">new ports</var>
-      array.</p>
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, add a mapping from <var title="">x</var> to a new unique placeholder object created for
+      <var title="">x</var> to <var title="">transfer map</var>, and
+      if <var title="">x</var> is a <code><a href=#messageport>MessagePort</a></code> object,
+      also append the placeholder object to the <var title="">new
+      ports</var> array.</p>
 
      </li>
 
@@ -82232,19 +82236,46 @@
 
    <li>
 
-    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
+    <p>Let <var title="">message clone</var> be the result of
+    obtaining a <a href=#structured-clone>structured clone</a> of the <var title="">message</var> argument, with <var title="">transfer
+    map</var> as the <i>transfer map</i>. If this throws an exception,
+    then throw that exception and abort these steps.</p>
 
    </li>
 
-   <li><p>Let <var title="">message</var> be the method's first
-   argument.</li>
+   <li>
 
+    <p>If the method was invoked with a second argument <var title="">transfer</var>, run these substeps:</p>
+
+    <ol><li>
+
+      <p>Let <var title="">new owner</var> be the owner of <var title="">target port</var>, if there is a <var title="">target
+      port</var>, or else some arbitrary owner. (This <var title="">new owner</var> is used when transfering objects below.
+      If there is no <var title="">target port</var>, the
+      <code><a href=#transferable>Transferable</a></code> objects given in the second argument,
+      if any, are still <a href=#transfer-a-transferable-object title="transfer a Transferable
+      object">transfered</a>, but since they are then discarded, it
+      doesn't matter where they are transfered to.)</p>
+
+     </li>
+
+
+     <li>
+
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, obtain a new object <var title="">y</var> by <a href=#transfer-a-transferable-object title="transfer a Transferable
+      object">transferring</a> the object <var title="">x</var> to
+      <var title="">new owner</var>, and replace the placeholder
+      object that was created for the object <var title="">x</var> by
+      the new object <var title="">y</var> wherever the placeholder
+      exists (i.e. in <var title="">message clone</var> and in <var title="">new ports</var>).</p>
+
+     </li>
+
+    </ol></li>
+
    <li>
 
-    <p>Let <var title="">message clone</var> be the result of
-    obtaining a <a href=#structured-clone>structured clone</a> of the <var title="">message</var> argument, with <var title="">transfer
-    map</var> as the <i>transfer map</i>. If this throws an exception,
-    then throw that exception and abort these steps.</p>
+    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
 
    </li>
 

Modified: index
===================================================================
--- index	2011-10-19 00:05:32 UTC (rev 6696)
+++ index	2011-10-19 00:45:59 UTC (rev 6697)
@@ -8938,9 +8938,8 @@
   clone</dfn> of a value, optionally with a <i>transfer map</i>, it
   must run the following algorithm, which either returns a separate
   value, or throws an exception. If a <i>transfer map</i> is provided,
-  it consists of a association list of pairs of
-  <code><a href=#transferable>Transferable</a></code> objects; in each pair, one is the
-  <em>old</em> object and one is the <em>new</em> object.</p>
+  it consists of a association list of <code><a href=#transferable>Transferable</a></code>
+  objects to placeholder objects.</p>
 
   <ol><li><p>Let <var title="">input</var> be the value being
    cloned.</li>
@@ -8955,9 +8954,9 @@
    <em>source</em> object and the other the <em>destination</em>
    object.</li>
 
-   <li><p>For each pair of objects in <var title="">transfer
-   map</var>, add a mapping from the old object (the source object) to
-   the new object (the destination object) to <var title="">memory</var>.</li>
+   <li><p>For each mapping in <var title="">transfer map</var>, add a
+   mapping from the <code><a href=#transferable>Transferable</a></code> object (the source
+   object) to the placeholder object (the destination object) to <var title="">memory</var>.</li>
 
    <li><p>Let <var title="">output</var> be the value resulting from
    calling the <a href=#internal-structured-cloning-algorithm>internal structured cloning algorithm</a> with
@@ -81718,7 +81717,8 @@
    <li>
 
     <p>Let <var title="">transfer map</var> be an empty association
-    list of pairs of <code><a href=#transferable>Transferable</a></code> objects.</p>
+    list of <code><a href=#transferable>Transferable</a></code> objects to placeholder
+    objects.</p>
 
    </li>
 
@@ -81738,16 +81738,11 @@
 
      <li>
 
-      <p>If the <var title="">transfer</var> argument is present, then
-      for each object in <var title="">transfer</var> in turn, obtain
-      a new object by <a href=#transfer-a-transferable-object title="transfer a Transferable
-      object">transferring</a> the object to the
-      <code><a href=#window>Window</a></code> object on which the method was invoked, and
-      add a mapping from the old object to the new transferred object
-      to <var title="">transfer map</var>. For each new
-      <code><a href=#messageport>MessagePort</a></code> object obtained in this manner, append
-      the new transferred object to the <var title="">new ports</var>
-      array.</p>
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, add a mapping from <var title="">x</var> to a new unique placeholder object created for
+      <var title="">x</var> to <var title="">transfer map</var>, and
+      if <var title="">x</var> is a <code><a href=#messageport>MessagePort</a></code> object,
+      also append the placeholder object to the <var title="">new
+      ports</var> array.</p>
 
      </li>
 
@@ -81755,12 +81750,6 @@
 
    <li>
 
-    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
-
-   </li>
-
-   <li>
-
     <p>Let <var title="">message clone</var> be the result of
     obtaining a <a href=#structured-clone>structured clone</a> of the <var title="">message</var> argument, with <var title="">transfer
     map</var> as the <i>transfer map</i>. If this throws an exception,
@@ -81768,6 +81757,32 @@
 
    </li>
 
+    <p>If the method was invoked with a third argument <var title="">transfer</var>, run these substeps:</p>
+
+    <ol><li>
+
+      <p>Let <var title="">new owner</var> be the <code><a href=#window>Window</a></code>
+      object on which the method was invoked.</p>
+
+     </li>
+
+     <li>
+
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, obtain a new object <var title="">y</var> by <a href=#transfer-a-transferable-object title="transfer a Transferable
+      object">transferring</a> the object <var title="">x</var> to
+      <var title="">new owner</var>, and replace the placeholder
+      object that was created for the object <var title="">x</var> by
+      the new object <var title="">y</var> wherever the placeholder
+      exists (i.e. in <var title="">message clone</var> and in <var title="">new ports</var>).</p>
+
+     </li>
+
+    </ol><li>
+
+    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
+
+   </li>
+
    <li>
 
     <p>Return from the <code title=dom-window-postMessage><a href=#dom-window-postmessage>postMessage()</a></code> method, but
@@ -82170,14 +82185,6 @@
   <ol><!-- a lot of this is similar or identical to window.postMessage --><li><p>Let <var title="">target port</var> be the port with which
    <var title="">source port</var> is entangled, if any.</li>
 
-   <li><p>Let <var title="">new owner</var> be the owner of <var title="">target port</var>, if there is a <var title="">target
-   port</var>, or else some arbitrary owner. (This <var title="">new
-   owner</var> is used when transfering objects below. If there is no
-   <var title="">target port</var>, the <code><a href=#transferable>Transferable</a></code>
-   objects given in the second argument, if any, are still <a href=#transfer-a-transferable-object title="transfer a Transferable object">transfered</a>, but since
-   they are then discarded, it doesn't matter where they are
-   transfered to.)</li>
-
    <li>
 
     <p>Let <var title="">new ports</var> be an empty array.</p>
@@ -82187,7 +82194,8 @@
    <li>
 
     <p>Let <var title="">transfer map</var> be an empty association
-    list of pairs of <code><a href=#transferable>Transferable</a></code> objects.</p>
+    list of <code><a href=#transferable>Transferable</a></code> objects to placeholder
+    objects.</p>
 
    </li>
 
@@ -82216,15 +82224,11 @@
 
      <li>
 
-      <p>If the <var title="">transfer</var> argument is present, then
-      for each object in <var title="">transfer</var> in turn, obtain
-      a new object by <a href=#transfer-a-transferable-object title="transfer a Transferable
-      object">transferring</a> the object to <var title="">new
-      owner</var>, and add a mapping from the old object to the new
-      transferred object to <var title="">transfer map</var>. If the
-      objects are <code><a href=#messageport>MessagePort</a></code> objects, also append the
-      new transferred object to the <var title="">new ports</var>
-      array.</p>
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, add a mapping from <var title="">x</var> to a new unique placeholder object created for
+      <var title="">x</var> to <var title="">transfer map</var>, and
+      if <var title="">x</var> is a <code><a href=#messageport>MessagePort</a></code> object,
+      also append the placeholder object to the <var title="">new
+      ports</var> array.</p>
 
      </li>
 
@@ -82232,19 +82236,46 @@
 
    <li>
 
-    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
+    <p>Let <var title="">message clone</var> be the result of
+    obtaining a <a href=#structured-clone>structured clone</a> of the <var title="">message</var> argument, with <var title="">transfer
+    map</var> as the <i>transfer map</i>. If this throws an exception,
+    then throw that exception and abort these steps.</p>
 
    </li>
 
-   <li><p>Let <var title="">message</var> be the method's first
-   argument.</li>
+   <li>
 
+    <p>If the method was invoked with a second argument <var title="">transfer</var>, run these substeps:</p>
+
+    <ol><li>
+
+      <p>Let <var title="">new owner</var> be the owner of <var title="">target port</var>, if there is a <var title="">target
+      port</var>, or else some arbitrary owner. (This <var title="">new owner</var> is used when transfering objects below.
+      If there is no <var title="">target port</var>, the
+      <code><a href=#transferable>Transferable</a></code> objects given in the second argument,
+      if any, are still <a href=#transfer-a-transferable-object title="transfer a Transferable
+      object">transfered</a>, but since they are then discarded, it
+      doesn't matter where they are transfered to.)</p>
+
+     </li>
+
+
+     <li>
+
+      <p>For each object <var title="">x</var> in <var title="">transfer</var> in turn, obtain a new object <var title="">y</var> by <a href=#transfer-a-transferable-object title="transfer a Transferable
+      object">transferring</a> the object <var title="">x</var> to
+      <var title="">new owner</var>, and replace the placeholder
+      object that was created for the object <var title="">x</var> by
+      the new object <var title="">y</var> wherever the placeholder
+      exists (i.e. in <var title="">message clone</var> and in <var title="">new ports</var>).</p>
+
+     </li>
+
+    </ol></li>
+
    <li>
 
-    <p>Let <var title="">message clone</var> be the result of
-    obtaining a <a href=#structured-clone>structured clone</a> of the <var title="">message</var> argument, with <var title="">transfer
-    map</var> as the <i>transfer map</i>. If this throws an exception,
-    then throw that exception and abort these steps.</p>
+    <p>Make <var title="">new ports</var> into a <a href=#dfn-read-only-array title=dfn-read-only-array>read only</a> array.</p>
 
    </li>
 

Modified: source
===================================================================
--- source	2011-10-19 00:05:32 UTC (rev 6696)
+++ source	2011-10-19 00:45:59 UTC (rev 6697)
@@ -8919,9 +8919,8 @@
   clone</dfn> of a value, optionally with a <i>transfer map</i>, it
   must run the following algorithm, which either returns a separate
   value, or throws an exception. If a <i>transfer map</i> is provided,
-  it consists of a association list of pairs of
-  <code>Transferable</code> objects; in each pair, one is the
-  <em>old</em> object and one is the <em>new</em> object.</p>
+  it consists of a association list of <code>Transferable</code>
+  objects to placeholder objects.</p>
 
   <ol>
 
@@ -8938,9 +8937,9 @@
    <em>source</em> object and the other the <em>destination</em>
    object.</p></li>
 
-   <li><p>For each pair of objects in <var title="">transfer
-   map</var>, add a mapping from the old object (the source object) to
-   the new object (the destination object) to <var
+   <li><p>For each mapping in <var title="">transfer map</var>, add a
+   mapping from the <code>Transferable</code> object (the source
+   object) to the placeholder object (the destination object) to <var
    title="">memory</var>.</p></li>
 
    <li><p>Let <var title="">output</var> be the value resulting from
@@ -92600,7 +92599,8 @@
    <li>
 
     <p>Let <var title="">transfer map</var> be an empty association
-    list of pairs of <code>Transferable</code> objects.</p>
+    list of <code>Transferable</code> objects to placeholder
+    objects.</p>
 
    </li>
 
@@ -92624,16 +92624,13 @@
 
      <li>
 
-      <p>If the <var title="">transfer</var> argument is present, then
-      for each object in <var title="">transfer</var> in turn, obtain
-      a new object by <span title="transfer a Transferable
-      object">transferring</span> the object to the
-      <code>Window</code> object on which the method was invoked, and
-      add a mapping from the old object to the new transferred object
-      to <var title="">transfer map</var>. For each new
-      <code>MessagePort</code> object obtained in this manner, append
-      the new transferred object to the <var title="">new ports</var>
-      array.</p>
+      <p>For each object <var title="">x</var> in <var
+      title="">transfer</var> in turn, add a mapping from <var
+      title="">x</var> to a new unique placeholder object created for
+      <var title="">x</var> to <var title="">transfer map</var>, and
+      if <var title="">x</var> is a <code>MessagePort</code> object,
+      also append the placeholder object to the <var title="">new
+      ports</var> array.</p>
 
      </li>
 
@@ -92643,13 +92640,6 @@
 
    <li>
 
-    <p>Make <var title="">new ports</var> into a <span
-    title="dfn-read-only-array">read only</span> array.</p>
-
-   </li>
-
-   <li>
-
     <p>Let <var title="">message clone</var> be the result of
     obtaining a <span>structured clone</span> of the <var
     title="">message</var> argument, with <var title="">transfer
@@ -92658,8 +92648,45 @@
 
    </li>
 
+    <p>If the method was invoked with a third argument <var
+    title="">transfer</var>, run these substeps:</p>
+
+    <ol>
+
+     <li>
+
+      <p>Let <var title="">new owner</var> be the <code>Window</code>
+      object on which the method was invoked.</p>
+
+     </li>
+
+     <li>
+
+      <p>For each object <var title="">x</var> in <var
+      title="">transfer</var> in turn, obtain a new object <var
+      title="">y</var> by <span title="transfer a Transferable
+      object">transferring</span> the object <var title="">x</var> to
+      <var title="">new owner</var>, and replace the placeholder
+      object that was created for the object <var title="">x</var> by
+      the new object <var title="">y</var> wherever the placeholder
+      exists (i.e. in <var title="">message clone</var> and in <var
+      title="">new ports</var>).</p>
+
+     </li>
+
+    </ol>
+
+   </li>
+
    <li>
 
+    <p>Make <var title="">new ports</var> into a <span
+    title="dfn-read-only-array">read only</span> array.</p>
+
+   </li>
+
+   <li>
+
     <p>Return from the <code
     title="dom-window-postMessage">postMessage()</code> method, but
     asynchronously continue running these steps.</p>
@@ -93125,16 +93152,6 @@
    <li><p>Let <var title="">target port</var> be the port with which
    <var title="">source port</var> is entangled, if any.</p></li>
 
-   <li><p>Let <var title="">new owner</var> be the owner of <var
-   title="">target port</var>, if there is a <var title="">target
-   port</var>, or else some arbitrary owner. (This <var title="">new
-   owner</var> is used when transfering objects below. If there is no
-   <var title="">target port</var>, the <code>Transferable</code>
-   objects given in the second argument, if any, are still <span
-   title="transfer a Transferable object">transfered</span>, but since
-   they are then discarded, it doesn't matter where they are
-   transfered to.)</p></li>
-
    <li>
 
     <p>Let <var title="">new ports</var> be an empty array.</p>
@@ -93144,7 +93161,8 @@
    <li>
 
     <p>Let <var title="">transfer map</var> be an empty association
-    list of pairs of <code>Transferable</code> objects.</p>
+    list of <code>Transferable</code> objects to placeholder
+    objects.</p>
 
    </li>
 
@@ -93178,15 +93196,13 @@
 
      <li>
 
-      <p>If the <var title="">transfer</var> argument is present, then
-      for each object in <var title="">transfer</var> in turn, obtain
-      a new object by <span title="transfer a Transferable
-      object">transferring</span> the object to <var title="">new
-      owner</var>, and add a mapping from the old object to the new
-      transferred object to <var title="">transfer map</var>. If the
-      objects are <code>MessagePort</code> objects, also append the
-      new transferred object to the <var title="">new ports</var>
-      array.</p>
+      <p>For each object <var title="">x</var> in <var
+      title="">transfer</var> in turn, add a mapping from <var
+      title="">x</var> to a new unique placeholder object created for
+      <var title="">x</var> to <var title="">transfer map</var>, and
+      if <var title="">x</var> is a <code>MessagePort</code> object,
+      also append the placeholder object to the <var title="">new
+      ports</var> array.</p>
 
      </li>
 
@@ -93196,21 +93212,58 @@
 
    <li>
 
-    <p>Make <var title="">new ports</var> into a <span
-    title="dfn-read-only-array">read only</span> array.</p>
+    <p>Let <var title="">message clone</var> be the result of
+    obtaining a <span>structured clone</span> of the <var
+    title="">message</var> argument, with <var title="">transfer
+    map</var> as the <i>transfer map</i>. If this throws an exception,
+    then throw that exception and abort these steps.</p>
 
    </li>
 
-   <li><p>Let <var title="">message</var> be the method's first
-   argument.</p></li>
+   <li>
 
+    <p>If the method was invoked with a second argument <var
+    title="">transfer</var>, run these substeps:</p>
+
+    <ol>
+
+     <li>
+
+      <p>Let <var title="">new owner</var> be the owner of <var
+      title="">target port</var>, if there is a <var title="">target
+      port</var>, or else some arbitrary owner. (This <var
+      title="">new owner</var> is used when transfering objects below.
+      If there is no <var title="">target port</var>, the
+      <code>Transferable</code> objects given in the second argument,
+      if any, are still <span title="transfer a Transferable
+      object">transfered</span>, but since they are then discarded, it
+      doesn't matter where they are transfered to.)</p>
+
+     </li>
+
+
+     <li>
+
+      <p>For each object <var title="">x</var> in <var
+      title="">transfer</var> in turn, obtain a new object <var
+      title="">y</var> by <span title="transfer a Transferable
+      object">transferring</span> the object <var title="">x</var> to
+      <var title="">new owner</var>, and replace the placeholder
+      object that was created for the object <var title="">x</var> by
+      the new object <var title="">y</var> wherever the placeholder
+      exists (i.e. in <var title="">message clone</var> and in <var
+      title="">new ports</var>).</p>
+
+     </li>
+
+    </ol>
+
+   </li>
+
    <li>
 
-    <p>Let <var title="">message clone</var> be the result of
-    obtaining a <span>structured clone</span> of the <var
-    title="">message</var> argument, with <var title="">transfer
-    map</var> as the <i>transfer map</i>. If this throws an exception,
-    then throw that exception and abort these steps.</p>
+    <p>Make <var title="">new ports</var> into a <span
+    title="dfn-read-only-array">read only</span> array.</p>
 
    </li>
 




More information about the Commit-Watchers mailing list