<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[203470] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/203470">203470</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-07-20 15:03:36 -0700 (Wed, 20 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Get rid of custom bindings code for XMLHttpRequest.open()
https://bugs.webkit.org/show_bug.cgi?id=159984

Reviewed by Ryosuke Niwa.

Get rid of custom bindings code for XMLHttpRequest.open() as the
bindings generator is able to generate it.

Relevant specification:
- https://xhr.spec.whatwg.org/#xmlhttprequest

The issue is that legacy content prevents treating the 'async' argument
being undefined identical from it being omitted. However, this can be
achieved by using overloading in IDL, like in the specification.

No new tests, already covered by the following tests:
- http/tests/xmlhttprequest/basic-auth.html
- http/tests/xmlhttprequest/open-async-overload.html

* bindings/js/JSXMLHttpRequestCustom.cpp:
(WebCore::SendFunctor::SendFunctor): Deleted.
(WebCore::SendFunctor::line): Deleted.
(WebCore::SendFunctor::column): Deleted.
(WebCore::SendFunctor::url): Deleted.
(WebCore::SendFunctor::operator()): Deleted.
* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::open):
* xml/XMLHttpRequest.h:
* xml/XMLHttpRequest.idl:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSXMLHttpRequestCustomcpp">trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorexmlXMLHttpRequestcpp">trunk/Source/WebCore/xml/XMLHttpRequest.cpp</a></li>
<li><a href="#trunkSourceWebCorexmlXMLHttpRequesth">trunk/Source/WebCore/xml/XMLHttpRequest.h</a></li>
<li><a href="#trunkSourceWebCorexmlXMLHttpRequestidl">trunk/Source/WebCore/xml/XMLHttpRequest.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203469 => 203470)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-20 21:21:21 UTC (rev 203469)
+++ trunk/Source/WebCore/ChangeLog        2016-07-20 22:03:36 UTC (rev 203470)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2016-07-20  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Get rid of custom bindings code for XMLHttpRequest.open()
+        https://bugs.webkit.org/show_bug.cgi?id=159984
+
+        Reviewed by Ryosuke Niwa.
+
+        Get rid of custom bindings code for XMLHttpRequest.open() as the
+        bindings generator is able to generate it.
+
+        Relevant specification:
+        - https://xhr.spec.whatwg.org/#xmlhttprequest
+
+        The issue is that legacy content prevents treating the 'async' argument
+        being undefined identical from it being omitted. However, this can be
+        achieved by using overloading in IDL, like in the specification.
+
+        No new tests, already covered by the following tests:
+        - http/tests/xmlhttprequest/basic-auth.html
+        - http/tests/xmlhttprequest/open-async-overload.html
+
+        * bindings/js/JSXMLHttpRequestCustom.cpp:
+        (WebCore::SendFunctor::SendFunctor): Deleted.
+        (WebCore::SendFunctor::line): Deleted.
+        (WebCore::SendFunctor::column): Deleted.
+        (WebCore::SendFunctor::url): Deleted.
+        (WebCore::SendFunctor::operator()): Deleted.
+        * xml/XMLHttpRequest.cpp:
+        (WebCore::XMLHttpRequest::open):
+        * xml/XMLHttpRequest.h:
+        * xml/XMLHttpRequest.idl:
+
</ins><span class="cx"> 2016-07-20  Rawinder Singh  &lt;rawinder.singh-webkit@cisra.canon.com.au&gt;
</span><span class="cx"> 
</span><span class="cx">         Mark overriden methods in WebCore/svg final classes as final
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSXMLHttpRequestCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp (203469 => 203470)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp        2016-07-20 21:21:21 UTC (rev 203469)
+++ trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp        2016-07-20 22:03:36 UTC (rev 203470)
</span><span class="lines">@@ -71,35 +71,6 @@
</span><span class="cx">         visitor.addOpaqueRoot(responseBlob);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// Custom functions
-JSValue JSXMLHttpRequest::open(ExecState&amp; state)
-{
-    if (state.argumentCount() &lt; 2)
-        return state.vm().throwException(&amp;state, createNotEnoughArgumentsError(&amp;state));
-
-    const URL&amp; url = wrapped().scriptExecutionContext()-&gt;completeURL(state.uncheckedArgument(1).toString(&amp;state)-&gt;value(&amp;state));
-    String method = state.uncheckedArgument(0).toString(&amp;state)-&gt;value(&amp;state);
-
-    ExceptionCode ec = 0;
-    if (state.argumentCount() &gt;= 3) {
-        bool async = state.uncheckedArgument(2).toBoolean(&amp;state);
-        if (!state.argument(3).isUndefined()) {
-            String user = valueToStringWithNullCheck(&amp;state, state.uncheckedArgument(3));
-
-            if (!state.argument(4).isUndefined()) {
-                String password = valueToStringWithNullCheck(&amp;state, state.uncheckedArgument(4));
-                wrapped().open(method, url, async, user, password, ec);
-            } else
-                wrapped().open(method, url, async, user, ec);
-        } else
-            wrapped().open(method, url, async, ec);
-    } else
-        wrapped().open(method, url, ec);
-
-    setDOMException(&amp;state, ec);
-    return jsUndefined();
-}
-
</del><span class="cx"> class SendFunctor {
</span><span class="cx"> public:
</span><span class="cx">     SendFunctor()
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXMLHttpRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (203469 => 203470)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp        2016-07-20 21:21:21 UTC (rev 203469)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp        2016-07-20 22:03:36 UTC (rev 203470)
</span><span class="lines">@@ -421,9 +421,10 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void XMLHttpRequest::open(const String&amp; method, const URL&amp; url, ExceptionCode&amp; ec)
</del><ins>+void XMLHttpRequest::open(const String&amp; method, const String&amp; url, ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><del>-    open(method, url, true, ec);
</del><ins>+    // If the async argument is omitted, set async to true.
+    return open(method, scriptExecutionContext()-&gt;completeURL(url), true, ec);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void XMLHttpRequest::open(const String&amp; method, const URL&amp; url, bool async, ExceptionCode&amp; ec)
</span><span class="lines">@@ -495,23 +496,18 @@
</span><span class="cx">         m_state = OPENED;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void XMLHttpRequest::open(const String&amp; method, const URL&amp; url, bool async, const String&amp; user, ExceptionCode&amp; ec)
</del><ins>+void XMLHttpRequest::open(const String&amp; method, const String&amp; url, bool async, const String&amp; user, const String&amp; password, ExceptionCode&amp; ec)
</ins><span class="cx"> {
</span><del>-    URL urlWithCredentials(url);
-    urlWithCredentials.setUser(user);
</del><ins>+    URL urlWithCredentials = scriptExecutionContext()-&gt;completeURL(url);
+    if (!user.isNull()) {
+        urlWithCredentials.setUser(user);
+        if (!password.isNull())
+            urlWithCredentials.setPass(password);
+    }
</ins><span class="cx"> 
</span><span class="cx">     open(method, urlWithCredentials, async, ec);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void XMLHttpRequest::open(const String&amp; method, const URL&amp; url, bool async, const String&amp; user, const String&amp; password, ExceptionCode&amp; ec)
-{
-    URL urlWithCredentials(url);
-    urlWithCredentials.setUser(user);
-    urlWithCredentials.setPass(password);
-
-    open(method, urlWithCredentials, async, ec);
-}
-
</del><span class="cx"> bool XMLHttpRequest::initSend(ExceptionCode&amp; ec)
</span><span class="cx"> {
</span><span class="cx">     if (!scriptExecutionContext())
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXMLHttpRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XMLHttpRequest.h (203469 => 203470)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XMLHttpRequest.h        2016-07-20 21:21:21 UTC (rev 203469)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.h        2016-07-20 22:03:36 UTC (rev 203470)
</span><span class="lines">@@ -69,10 +69,9 @@
</span><span class="cx">     State readyState() const;
</span><span class="cx">     bool withCredentials() const { return m_includeCredentials; }
</span><span class="cx">     void setWithCredentials(bool, ExceptionCode&amp;);
</span><del>-    void open(const String&amp; method, const URL&amp;, ExceptionCode&amp;);
</del><ins>+    void open(const String&amp; method, const String&amp; url, ExceptionCode&amp;);
</ins><span class="cx">     void open(const String&amp; method, const URL&amp;, bool async, ExceptionCode&amp;);
</span><del>-    void open(const String&amp; method, const URL&amp;, bool async, const String&amp; user, ExceptionCode&amp;);
-    void open(const String&amp; method, const URL&amp;, bool async, const String&amp; user, const String&amp; password, ExceptionCode&amp;);
</del><ins>+    void open(const String&amp; method, const String&amp;, bool async, const String&amp; user, const String&amp; password, ExceptionCode&amp;);
</ins><span class="cx">     void send(ExceptionCode&amp;);
</span><span class="cx">     void send(Document*, ExceptionCode&amp;);
</span><span class="cx">     void send(const String&amp;, ExceptionCode&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorexmlXMLHttpRequestidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/xml/XMLHttpRequest.idl (203469 => 203470)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/xml/XMLHttpRequest.idl        2016-07-20 21:21:21 UTC (rev 203469)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.idl        2016-07-20 22:03:36 UTC (rev 203470)
</span><span class="lines">@@ -59,7 +59,9 @@
</span><span class="cx"> 
</span><span class="cx">     [SetterRaisesException] attribute boolean withCredentials;
</span><span class="cx"> 
</span><del>-    [Custom, RaisesException] void open(DOMString method, DOMString url, optional boolean async, optional DOMString user, optional DOMString password);
</del><ins>+    // Use overloading rather than &quot;boolean async = true&quot; because legacy content prevents treating the 'async' argument being undefined identical from it being omitted.
+    [RaisesException] void open(DOMString method, DOMString url);
+    [RaisesException] void open(DOMString method, DOMString url, boolean async, optional DOMString? user = null, optional DOMString? password = null);
</ins><span class="cx"> 
</span><span class="cx">     [RaisesException] void setRequestHeader(DOMString header, DOMString value);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>