<?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>205669</bug_id>
          
          <creation_ts>2019-12-31 18:28:01 -0800</creation_ts>
          <short_desc>Reflect.construct() with a the optional newTarget parameter does not work with DOM constructors</short_desc>
          <delta_ts>2020-04-17 13:42:21 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>202599</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174313</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WPTImpact</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>cdumez</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1602032</commentid>
    <comment_count>0</comment_count>
      <attachid>386567</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 18:28:01 -0800</bug_when>
    <thetext>Created attachment 386567
sub.html

Reflect.construct() with a the optional newTarget parameter does not work with DOM constructors, such as DOMParser.

For example, given a script with two access to two global objects, mainWindow and childWindow:

Whereas this works:
var value1 = Reflect.construct(window.String, [], childWindow.String);
value.constructor == childWindow.String;

this does not:

var value1 = Reflect.construct(window.DOMParser, [], childWindow.DOMParser);
value.constructor == childWindow.DOMParser;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602033</commentid>
    <comment_count>1</comment_count>
      <attachid>386568</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 18:31:37 -0800</bug_when>
    <thetext>Created attachment 386568
main.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602034</commentid>
    <comment_count>2</comment_count>
      <attachid>386569</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 18:32:19 -0800</bug_when>
    <thetext>Created attachment 386569
main.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602035</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 18:33:28 -0800</bug_when>
    <thetext>main.html demonstrates the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602036</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 18:50:28 -0800</bug_when>
    <thetext>For reference, DOMParser&apos;s binding constructor is generated as JSDOMParser.cpp and some relevant lines are:

using JSDOMParserConstructor = JSDOMConstructor&lt;JSDOMParser&gt;;

template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSDOMParserConstructor::construct(JSGlobalObject* lexicalGlobalObject, CallFrame* callFrame)
{
    VM&amp; vm = lexicalGlobalObject-&gt;vm();
    auto throwScope = DECLARE_THROW_SCOPE(vm);
    UNUSED_PARAM(throwScope);
    auto* castedThis = jsCast&lt;JSDOMParserConstructor*&gt;(callFrame-&gt;jsCallee());
    ASSERT(castedThis);
    auto* context = castedThis-&gt;scriptExecutionContext();
    if (UNLIKELY(!context))
        return throwConstructorScriptExecutionContextUnavailableError(*lexicalGlobalObject, throwScope, &quot;DOMParser&quot;);
    ASSERT(context-&gt;isDocument());
    auto&amp; document = downcast&lt;Document&gt;(*context);
    auto object = DOMParser::create(document);
    return JSValue::encode(toJSNewlyCreated&lt;IDLInterface&lt;DOMParser&gt;&gt;(*lexicalGlobalObject, *castedThis-&gt;globalObject(), WTFMove(object)));
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602040</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 19:44:37 -0800</bug_when>
    <thetext>My guess, though it has been a while since I did too much in here, is that we should probably be using callFrame-&gt;newTarget() in some fashion, probably in place of callFrame-&gt;jsCallee() in most places. 

We&apos;ll need to do a bit more digging in the WebIDL spec to figure out which document the DOMParser should be created with, though I suspect it is the document of newTarget.

We can test what other browsers do by looking at document.url of a document produced by the constructed DOMParser, as it will match it&apos;s owner&apos;s url.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602041</commentid>
    <comment_count>6</comment_count>
      <attachid>386571</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 19:57:17 -0800</bug_when>
    <thetext>Created attachment 386571
main.html

Updated main.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602047</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-31 20:21:42 -0800</bug_when>
    <thetext>Looks like Firefox uses the document of the main window. I don&apos;t have Chrome installed at the moment to check what it does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602797</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-04 16:30:26 -0800</bug_when>
    <thetext>This causes failures in http://wpt.live/WebIDL/ecmascript-binding/constructors.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629657</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-03-13 09:57:53 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; This causes failures in
&gt; http://wpt.live/WebIDL/ecmascript-binding/constructors.html

Most of the test cases (except for bound/proxied NewTarget values) are now fixed by https://bugs.webkit.org/show_bug.cgi?id=174313.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642801</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-17 13:42:21 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #9)
&gt; Most of the test cases (except for bound/proxied NewTarget values) are now
&gt; fixed by https://bugs.webkit.org/show_bug.cgi?id=174313.

Please follow https://webkit.org/b/202599: it fixes remaining failures.

*** This bug has been marked as a duplicate of bug 202599 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>386567</attachid>
            <date>2019-12-31 18:28:01 -0800</date>
            <delta_ts>2019-12-31 18:28:01 -0800</delta_ts>
            <desc>sub.html</desc>
            <filename>sub.html</filename>
            <type>text/html</type>
            <size>75</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KCiAgICBwYXJlbnQuc3RhcnQod2luZG93KQogICAgCjwvc2NyaXB0PgogICAgCjxk
aXY+U3ViZnJhbWU8L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>386568</attachid>
            <date>2019-12-31 18:31:37 -0800</date>
            <delta_ts>2019-12-31 18:31:56 -0800</delta_ts>
            <desc>main.html</desc>
            <filename>main.html</filename>
            <type>text/html</type>
            <size>993</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHByZSBpZD0ibG9nIj48L3ByZT4KPHNjcmlwdD4KCiAgICBmdW5jdGlvbiBsb2cobXNnKQogICAg
ewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmQobXNnICsgIlxu
IikKICAgIH0KCiAgICBmdW5jdGlvbiBzdGFydChjaGlsZFdpbmRvdykKICAgIHsKICAgICAgICBs
b2coIlRlc3RpbmcgdmFsdWUxID0gUmVmbGVjdC5jb25zdHJ1Y3Qod2luZG93LlN0cmluZywgW10s
IGNoaWxkV2luZG93LlN0cmluZykiKQogICAgICAgIHZhciB2YWx1ZTEgPSBSZWZsZWN0LmNvbnN0
cnVjdCh3aW5kb3cuU3RyaW5nLCBbXSwgY2hpbGRXaW5kb3cuU3RyaW5nKTsKICAgICAgICBpZiAo
dmFsdWUxLmNvbnN0cnVjdG9yID09IGNoaWxkV2luZG93LlN0cmluZykgewogICAgICAgICAgICBs
b2coIlBBU1M6IHZhbHVlMS5jb25zdHJ1Y3RvciA9PSBjaGlsZFdpbmRvdy5TdHJpbmciKQogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvZygiRkFJTDogdmFsdWUxLmNvbnN0cnVjdG9yICE9
IGNoaWxkV2luZG93LlN0cmluZyIpCiAgICAgICAgfQoKICAgICAgICBsb2coIlRlc3RpbmcgdmFs
dWUyID0gUmVmbGVjdC5jb25zdHJ1Y3Qod2luZG93LkRPTVBhcnNlciwgW10sIGNoaWxkV2luZG93
LkRPTVBhcnNlcikiKQogICAgICAgIHZhciB2YWx1ZTIgPSBSZWZsZWN0LmNvbnN0cnVjdCh3aW5k
b3cuRE9NUGFyc2VyLCBbXSwgY2hpbGRXaW5kb3cuRE9NUGFyc2VyKTsKICAgICAgICBpZiAodmFs
dWUyLmNvbnN0cnVjdG9yID09IGNoaWxkV2luZG93LkRPTVBhcnNlcikgewogICAgICAgICAgICBs
b2coIlBBU1M6IHZhbHVlMi5jb25zdHJ1Y3RvciA9PSBjaGlsZFdpbmRvdy5ET01QYXJzZXIiKQog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvZygiRkFJTDogdmFsdWUyLmNvbnN0cnVjdG9y
ICE9IGNoaWxkV2luZG93LkRPTVBhcnNlciIpCiAgICAgICAgfQoKICAgIH0KCjwvc2NyaXB0Pgo8
aWZyYW1lIHNyYz0ic3ViLmh0bWwiPgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>386569</attachid>
            <date>2019-12-31 18:32:19 -0800</date>
            <delta_ts>2019-12-31 19:57:17 -0800</delta_ts>
            <desc>main.html</desc>
            <filename>main.html</filename>
            <type>text/html</type>
            <size>1051</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHByZSBpZD0ibG9nIj48L3ByZT4KPHNjcmlwdD4KCiAgICBmdW5jdGlvbiBsb2cobXNnKQogICAg
ewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmQobXNnICsgIlxu
IikKICAgIH0KCiAgICBmdW5jdGlvbiBzdGFydChjaGlsZFdpbmRvdykKICAgIHsKICAgICAgICBs
b2coIlRlc3RpbmcgdmFsdWUxID0gUmVmbGVjdC5jb25zdHJ1Y3Qod2luZG93LlN0cmluZywgW10s
IGNoaWxkV2luZG93LlN0cmluZykiKQogICAgICAgIHZhciB2YWx1ZTEgPSBSZWZsZWN0LmNvbnN0
cnVjdCh3aW5kb3cuU3RyaW5nLCBbXSwgY2hpbGRXaW5kb3cuU3RyaW5nKTsKICAgICAgICBpZiAo
dmFsdWUxLmNvbnN0cnVjdG9yID09IGNoaWxkV2luZG93LlN0cmluZykgewogICAgICAgICAgICBs
b2coIlBBU1M6IHZhbHVlMS5jb25zdHJ1Y3RvciA9PSBjaGlsZFdpbmRvdy5TdHJpbmciKQogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvZygiRkFJTDogdmFsdWUxLmNvbnN0cnVjdG9yICE9
IGNoaWxkV2luZG93LlN0cmluZyIpCiAgICAgICAgfQoKICAgICAgICBsb2coIlRlc3RpbmcgdmFs
dWUyID0gUmVmbGVjdC5jb25zdHJ1Y3Qod2luZG93LkRPTVBhcnNlciwgW10sIGNoaWxkV2luZG93
LkRPTVBhcnNlcikiKQogICAgICAgIHZhciB2YWx1ZTIgPSBSZWZsZWN0LmNvbnN0cnVjdCh3aW5k
b3cuRE9NUGFyc2VyLCBbXSwgY2hpbGRXaW5kb3cuRE9NUGFyc2VyKTsKICAgICAgICBpZiAodmFs
dWUyLmNvbnN0cnVjdG9yID09IGNoaWxkV2luZG93LkRPTVBhcnNlcikgewogICAgICAgICAgICBs
b2coIlBBU1M6IHZhbHVlMi5jb25zdHJ1Y3RvciA9PSBjaGlsZFdpbmRvdy5ET01QYXJzZXIiKQog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvZygiRkFJTDogdmFsdWUyLmNvbnN0cnVjdG9y
ICE9IGNoaWxkV2luZG93LkRPTVBhcnNlciIpCiAgICAgICAgfQoKICAgIH0KCjwvc2NyaXB0Pgo8
aWZyYW1lIHNyYz0iaHR0cHM6Ly9idWctMjA1NjY5LWF0dGFjaG1lbnRzLndlYmtpdC5vcmcvYXR0
YWNobWVudC5jZ2k/aWQ9Mzg2NTY3Ij4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>386571</attachid>
            <date>2019-12-31 19:57:17 -0800</date>
            <delta_ts>2019-12-31 19:57:17 -0800</delta_ts>
            <desc>main.html</desc>
            <filename>main.html</filename>
            <type>text/html</type>
            <size>1249</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHByZSBpZD0ibG9nIj48L3ByZT4KPHNjcmlwdD4KCiAgICBmdW5jdGlvbiBsb2cobXNnKQogICAg
ewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmQobXNnICsgIlxu
IikKICAgIH0KCiAgICBmdW5jdGlvbiBzdGFydChjaGlsZFdpbmRvdykKICAgIHsKICAgICAgICBs
b2coIlRlc3RpbmcgdmFsdWUxID0gUmVmbGVjdC5jb25zdHJ1Y3Qod2luZG93LlN0cmluZywgW10s
IGNoaWxkV2luZG93LlN0cmluZykiKQogICAgICAgIHZhciB2YWx1ZTEgPSBSZWZsZWN0LmNvbnN0
cnVjdCh3aW5kb3cuU3RyaW5nLCBbXSwgY2hpbGRXaW5kb3cuU3RyaW5nKTsKICAgICAgICBpZiAo
dmFsdWUxLmNvbnN0cnVjdG9yID09IGNoaWxkV2luZG93LlN0cmluZykgewogICAgICAgICAgICBs
b2coIlBBU1M6IHZhbHVlMS5jb25zdHJ1Y3RvciA9PSBjaGlsZFdpbmRvdy5TdHJpbmciKTsKICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2coIkZBSUw6IHZhbHVlMS5jb25zdHJ1Y3RvciAh
PSBjaGlsZFdpbmRvdy5TdHJpbmciKTsKICAgICAgICB9CgogICAgICAgIGxvZygiVGVzdGluZyB2
YWx1ZTIgPSBSZWZsZWN0LmNvbnN0cnVjdCh3aW5kb3cuRE9NUGFyc2VyLCBbXSwgY2hpbGRXaW5k
b3cuRE9NUGFyc2VyKSIpCiAgICAgICAgdmFyIHZhbHVlMiA9IFJlZmxlY3QuY29uc3RydWN0KHdp
bmRvdy5ET01QYXJzZXIsIFtdLCBjaGlsZFdpbmRvdy5ET01QYXJzZXIpOwogICAgICAgIGlmICh2
YWx1ZTIuY29uc3RydWN0b3IgPT0gY2hpbGRXaW5kb3cuRE9NUGFyc2VyKSB7CiAgICAgICAgICAg
IGxvZygiUEFTUzogdmFsdWUyLmNvbnN0cnVjdG9yID09IGNoaWxkV2luZG93LkRPTVBhcnNlciIp
OwogICAgICAgICAgICB2YXIgZ2VuZXJhdGVkRG9jdW1lbnQgPSB2YWx1ZTIucGFyc2VGcm9tU3Ry
aW5nKCI8ZGl2PkhlbGxvPC9kaXY+IiwgInRleHQvaHRtbCIpOwogICAgICAgICAgICBsb2coIiAg
PiBBbmQgdGhlIFVSTCBhc3NvY2lhdGVkIHdpdGggZG9jdW1lbnRzIGNyZWF0ZWQgd2l0aCB0aGlz
IERPTVBhcnNlciBpczogIiArIGdlbmVyYXRlZERvY3VtZW50LlVSTCk7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgbG9nKCJGQUlMOiB2YWx1ZTIuY29uc3RydWN0b3IgIT0gY2hpbGRXaW5k
b3cuRE9NUGFyc2VyIik7CiAgICAgICAgfQoKICAgIH0KCjwvc2NyaXB0Pgo8aWZyYW1lIHNyYz0i
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9Mzg2NTY3Ij4KCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>