Title: [175053] trunk
Revision
175053
Author
[email protected]
Date
2014-10-22 10:16:44 -0700 (Wed, 22 Oct 2014)

Log Message

XMLHttpRequest should support attribute responseURL as per latest XHR spec.
https://bugs.webkit.org/show_bug.cgi?id=136938

Patch by Shivakumar JM <[email protected]> on 2014-10-22
Reviewed by Alexey Proskuryakov.

Source/WebCore:

Tests: http/tests/xmlhttprequest/basic-auth-responseURL.html
       http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html
       http/tests/xmlhttprequest/redirect-credentials-responseURL.html
       http/tests/xmlhttprequest/xmlhttprequest-responseURL.html

XMLHttpRequest should support attribute responseURL

* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::responseURL):
* xml/XMLHttpRequest.h:
* xml/XMLHttpRequest.idl:

LayoutTests:

Added test to check responseURL attribute in XMLHttpRequest.

* http/tests/xmlhttprequest/basic-auth-responseURL-expected.txt: Added.
* http/tests/xmlhttprequest/basic-auth-responseURL.html: Added.
* http/tests/xmlhttprequest/cross-origin-redirect-responseURL-expected.txt: Added.
* http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html: Added.
* http/tests/xmlhttprequest/redirect-credentials-responseURL-expected.txt: Added.
* http/tests/xmlhttprequest/redirect-credentials-responseURL.html: Added.
* http/tests/xmlhttprequest/xmlhttprequest-responseURL-expected.txt: Added.
* http/tests/xmlhttprequest/xmlhttprequest-responseURL.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (175052 => 175053)


--- trunk/LayoutTests/ChangeLog	2014-10-22 16:56:36 UTC (rev 175052)
+++ trunk/LayoutTests/ChangeLog	2014-10-22 17:16:44 UTC (rev 175053)
@@ -1,3 +1,21 @@
+2014-10-22  Shivakumar JM  <[email protected]>
+
+        XMLHttpRequest should support attribute responseURL as per latest XHR spec.
+        https://bugs.webkit.org/show_bug.cgi?id=136938
+
+        Reviewed by Alexey Proskuryakov.
+
+        Added test to check responseURL attribute in XMLHttpRequest.
+
+        * http/tests/xmlhttprequest/basic-auth-responseURL-expected.txt: Added.
+        * http/tests/xmlhttprequest/basic-auth-responseURL.html: Added.
+        * http/tests/xmlhttprequest/cross-origin-redirect-responseURL-expected.txt: Added.
+        * http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html: Added.
+        * http/tests/xmlhttprequest/redirect-credentials-responseURL-expected.txt: Added.
+        * http/tests/xmlhttprequest/redirect-credentials-responseURL.html: Added.
+        * http/tests/xmlhttprequest/xmlhttprequest-responseURL-expected.txt: Added.
+        * http/tests/xmlhttprequest/xmlhttprequest-responseURL.html: Added.
+
 2014-10-22  Carlos Garcia Campos  <[email protected]>
 
         [GStreamer] Do not use CachedResourceLoader, SecurityOrigin, ResourceBuffer and other WebCore types

Added: trunk/LayoutTests/http/tests/xmlhttprequest/basic-auth-responseURL-expected.txt (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/basic-auth-responseURL-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/basic-auth-responseURL-expected.txt	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,18 @@
+Test XMLHttpRequest responseURL.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+req.readyState = 0: responseURL = 
+PASS req.responseURL is ""
+req.readyState = 1: responseURL = 
+PASS req.responseURL is ""
+req.readyState = 1: responseURL = 
+PASS req.responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth/basic-auth.php?uid=async
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth/basic-auth.php?uid=async
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth/basic-auth.php?uid=async
+PASS req.responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth/basic-auth.php?uid=async"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/xmlhttprequest/basic-auth-responseURL.html (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/basic-auth-responseURL.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/basic-auth-responseURL.html	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,33 @@
+<html>
+<body>
+<script src=""
+<div id="description"></div>
+<div id="console"></div>
+<script type="text/_javascript_">
+description("Test XMLHttpRequest responseURL.");
+window.jsTestIsAsync = true;
+    
+//async
+req = new XMLHttpRequest;
+debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+shouldBeEqualToString('req.responseURL', '');
+req.open("GET", "resources/basic-auth/basic-auth.php?uid=async", true, "async", "123");
+debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+shouldBeEqualToString('req.responseURL', '');
+req._onreadystatechange_ = processStateChange;
+req.send("");
+debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+shouldBeEqualToString('req.responseURL', '');
+
+function processStateChange() {
+    debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+
+    if (req.readyState == 4) {
+        shouldBeEqualToString('req.responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth/basic-auth.php?uid=async');
+        finishJSTest();
+    }
+}
+
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL-expected.txt (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL-expected.txt	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,49 @@
+Test XMLHttpRequest responseURL.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect-cors.php
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/redirect-cors.php
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/redirect-cors.php"
+req.readyState = 1: responseURL = 
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,63 @@
+<html>
+<head></head>
+<body>
+<script src=""
+<script>
+
+description('Test XMLHttpRequest responseURL.');
+
+window.jsTestIsAsync = true;
+
+function runTest(url, type) {
+    return new Promise(function(resolve, reject) {
+        var req = new XMLHttpRequest();
+        window.responseURL = req.responseURL;
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        shouldBeEqualToString('responseURL', '');
+
+        req.open('GET', url);
+        req.responseType = type;
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        window.responseURL = req.responseURL;
+        shouldBeEqualToString('responseURL', '');
+
+        req._onreadystatechange_ = function() {
+            debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+            if (req.readyState == req.DONE)
+                resolve(req);
+        }	
+
+        req.send();
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        window.responseURL = req.responseURL;
+        shouldBeEqualToString('responseURL', '');
+    });
+}
+
+runTest('resources/redirect.php?url="" 'text').then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+
+    return runTest('resources/redirect.php?url="" 'document');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+
+    return runTest('resources/redirect.php?url="" 'text');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/redirect.php?url=""
+
+    return runTest('resources/redirect-cors.php', 'text');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/redirect-cors.php');
+
+    req.open('GET', 'http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt');
+}).catch(function(reason) {
+    testFailed(String(reason));
+}).then(finishJSTest, finishJSTest);
+
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/http/tests/xmlhttprequest/redirect-credentials-responseURL-expected.txt (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/redirect-credentials-responseURL-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/redirect-credentials-responseURL-expected.txt	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,30 @@
+Test XMLHttpRequest responseURL.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir1/basic-auth.php
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir1/basic-auth.php
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir1/basic-auth.php
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir1/basic-auth.php"
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir2/basic-auth.php
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir2/basic-auth.php
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir2/basic-auth.php
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir2/basic-auth.php"
+req.readyState = 1: responseURL = 
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/xmlhttprequest/redirect-credentials-responseURL.html (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/redirect-credentials-responseURL.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/redirect-credentials-responseURL.html	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,53 @@
+<html>
+<head></head>
+<body>
+<script src=""
+<script>
+
+description('Test XMLHttpRequest responseURL.');
+
+window.jsTestIsAsync = true;
+
+function runTest(url, type, async, user, pwd) {
+    return new Promise(function(resolve, reject) {
+        var req = new XMLHttpRequest();
+        window.responseURL = req.responseURL;
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        shouldBeEqualToString('responseURL', '');
+
+        req.open('GET', url, async, user, pwd);
+        req.responseType = type;
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        window.responseURL = req.responseURL;
+        shouldBeEqualToString('responseURL', '');
+
+        req._onreadystatechange_ = function() {
+            debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+            if (req.readyState == req.DONE)
+                resolve(req);
+        }	
+
+        req.send();
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        window.responseURL = req.responseURL;
+        shouldBeEqualToString('responseURL', '');
+    });
+}
+
+runTest('resources/basic-auth-default/dir1/basic-auth.php', true, "test", "test", 'text').then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir1/basic-auth.php');
+
+    return runTest('resources/basic-auth-default/dir2/basic-auth.php', true, 'text');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/basic-auth-default/dir2/basic-auth.php');
+
+    req.open('GET', 'http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt');
+}).catch(function(reason) {
+    testFailed(String(reason));
+}).then(finishJSTest, finishJSTest);
+
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL-expected.txt (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL-expected.txt	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,70 @@
+Test XMLHttpRequest responseURL.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/reply.txt
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/reply.txt
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/reply.txt
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/reply.txt"
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/reply.xml
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/reply.xml
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/reply.xml
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/reply.xml"
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt"
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/cross-site-progress-events.cgi
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/cross-site-progress-events.cgi
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/cross-site-progress-events.cgi
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/cross-site-progress-events.cgi"
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/network-simulator.php?command=connect/
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/network-simulator.php?command=connect/
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/network-simulator.php?command=connect/
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/network-simulator.php?command=connect/"
+req.readyState = 0: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 1: responseURL = 
+PASS responseURL is ""
+req.readyState = 2: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/supported-xml-content-types.cgi?type=foo
+req.readyState = 3: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/supported-xml-content-types.cgi?type=foo
+req.readyState = 4: responseURL = http://127.0.0.1:8000/xmlhttprequest/resources/supported-xml-content-types.cgi?type=foo
+PASS responseURL is "http://127.0.0.1:8000/xmlhttprequest/resources/supported-xml-content-types.cgi?type=foo"
+req.readyState = 1: responseURL = 
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL.html (0 => 175053)


--- trunk/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL.html	2014-10-22 17:16:44 UTC (rev 175053)
@@ -0,0 +1,73 @@
+<html>
+<head></head>
+<body>
+<script src=""
+<script>
+
+description('Test XMLHttpRequest responseURL.');
+
+window.jsTestIsAsync = true;
+
+function runTest(url, type) {
+    return new Promise(function(resolve, reject) {
+        var req = new XMLHttpRequest();
+        window.responseURL = req.responseURL;
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        shouldBeEqualToString('responseURL', '');
+
+        req.open('GET', url);
+        req.responseType = type;
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        window.responseURL = req.responseURL;
+        shouldBeEqualToString('responseURL', '');
+
+        req._onreadystatechange_ = function() {
+            debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+            if (req.readyState == req.DONE)
+                resolve(req);
+        }	
+
+        req.send();
+        debug('req.readyState = ' + req.readyState + ': responseURL = ' + req.responseURL);
+        window.responseURL = req.responseURL;
+        shouldBeEqualToString('responseURL', '');
+    });
+}
+
+runTest('resources/reply.txt', 'text').then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/reply.txt');
+
+    return runTest('resources/redirect_methods.php?url="" 'document');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/reply.xml');
+
+    return runTest('resources/redirect_methods.php?url="" 'text');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt');
+
+    return runTest('resources/cross-site-progress-events.cgi', 'text');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/cross-site-progress-events.cgi');
+
+    return runTest('resources/network-simulator.php?command=connect/', 'text');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/network-simulator.php?command=connect/');
+
+    return runTest("resources/supported-xml-content-types.cgi?type=foo#bar/baz+xml", 'xml');
+}).then(function(req) {
+    window.responseURL = req.responseURL;
+    shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/supported-xml-content-types.cgi?type=foo');
+
+    req.open('GET', 'http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt');
+}).catch(function(reason) {
+    testFailed(String(reason));
+}).then(finishJSTest, finishJSTest);
+
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (175052 => 175053)


--- trunk/Source/WebCore/ChangeLog	2014-10-22 16:56:36 UTC (rev 175052)
+++ trunk/Source/WebCore/ChangeLog	2014-10-22 17:16:44 UTC (rev 175053)
@@ -1,3 +1,22 @@
+2014-10-22  Shivakumar JM  <[email protected]>
+
+        XMLHttpRequest should support attribute responseURL as per latest XHR spec.
+        https://bugs.webkit.org/show_bug.cgi?id=136938
+
+        Reviewed by Alexey Proskuryakov.
+
+        Tests: http/tests/xmlhttprequest/basic-auth-responseURL.html
+               http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html
+               http/tests/xmlhttprequest/redirect-credentials-responseURL.html
+               http/tests/xmlhttprequest/xmlhttprequest-responseURL.html
+
+        XMLHttpRequest should support attribute responseURL
+
+        * xml/XMLHttpRequest.cpp:
+        (WebCore::XMLHttpRequest::responseURL):
+        * xml/XMLHttpRequest.h:
+        * xml/XMLHttpRequest.idl:
+
 2014-10-22  Chris Dumez  <[email protected]>
 
         Add initial support for generating the StyleBuilder from CSSPropertyNames.in

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (175052 => 175053)


--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp	2014-10-22 16:56:36 UTC (rev 175052)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp	2014-10-22 17:16:44 UTC (rev 175053)
@@ -335,6 +335,14 @@
     return "";
 }
 
+String XMLHttpRequest::responseURL() const
+{
+    URL responseURL(m_response.url());
+    responseURL.removeFragmentIdentifier();
+
+    return responseURL.string();
+}
+
 void XMLHttpRequest::setLastSendLineAndColumnNumber(unsigned lineNumber, unsigned columnNumber)
 {
     m_lastSendLineNumber = lineNumber;

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.h (175052 => 175053)


--- trunk/Source/WebCore/xml/XMLHttpRequest.h	2014-10-22 16:56:36 UTC (rev 175052)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.h	2014-10-22 17:16:44 UTC (rev 175053)
@@ -132,6 +132,8 @@
     String responseType();
     ResponseTypeCode responseTypeCode() const { return m_responseTypeCode; }
 
+    String responseURL() const;
+
     // response attribute has custom getter.
     JSC::ArrayBuffer* responseArrayBuffer();
     JSC::ArrayBuffer* optionalResponseArrayBuffer() const { return m_responseArrayBuffer.get(); }

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.idl (175052 => 175053)


--- trunk/Source/WebCore/xml/XMLHttpRequest.idl	2014-10-22 16:56:36 UTC (rev 175052)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.idl	2014-10-22 17:16:44 UTC (rev 175053)
@@ -89,6 +89,7 @@
 
     readonly attribute unsigned short status;
     readonly attribute DOMString statusText;
+    readonly attribute DOMString responseURL;
 
     // Extension
     [RaisesException] void overrideMimeType(DOMString override);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to