Index: LayoutTests/http/tests/serviceworker/resources/fetch-worker.js |
diff --git a/LayoutTests/http/tests/serviceworker/resources/fetch-worker.js b/LayoutTests/http/tests/serviceworker/resources/fetch-worker.js |
index 7f5d401c3f0a3e618eefac237f462b0fb9ee5b2c..ac6bae7f0a49ee6024a5487447eb9934d57157b0 100644 |
--- a/LayoutTests/http/tests/serviceworker/resources/fetch-worker.js |
+++ b/LayoutTests/http/tests/serviceworker/resources/fetch-worker.js |
@@ -1,34 +1,79 @@ |
self.onmessage = function(e) { |
- var message = e.data; |
- if ('port' in message) { |
- port = message.port; |
- doNextFetchTest(port); |
- } |
+ var message = e.data; |
+ if ('port' in message) { |
+ port = message.port; |
+ doNextFetchTest(port); |
+ } |
}; |
+var shouldBeResolved = function (status, statusText, type, url, target, resolved, data) { |
+ if (!resolved) { |
+ port.postMessage('FAILED: \'' + JSON.stringify(target) + '\' should be resolved, but rejected with an error \'' + data.name + '\''); |
+ } |
+ if (data.status != status) { |
+ port.postMessage('FAILED: Responce.status should be ' + status + ' but was ' + data.status); |
+ } |
+ if (data.statusText != statusText) { |
+ port.postMessage('FAILED: Responce.statusText should be \'' + statusText + '\' but was \'' + data.statusText + '\''); |
+ } |
+ if (data.type != type) { |
+ port.postMessage('FAILED: Responce.type should be \'' + type + '\' but was \'' + data.type + '\''); |
+ } |
+ if (data.url != url) { |
+ port.postMessage('FAILED: Responce.url should be \'' + url + '\' but was \'' + data.url + '\''); |
+ } |
+}; |
+ |
+var shouldBeRejected = function (target, resolved, data) { |
+ if (resolved) { |
+ port.postMessage('FAILED: request \'' + JSON.stringify(target) + '\' should be rejected, but resolved with the response \'' + JSON.stringify(data) + '\''); |
+ } |
+}; |
+ |
+ |
+var baseUrl = 'http://127.0.0.1:8000/serviceworker/resources/'; |
+var corsBaseUrl = 'http://localhost:8000/xmlhttprequest/resources/'; |
var testTargets = [ |
- 'other.html', |
- 'http://', |
- 'http://www.example.com/foo', |
- 'fetch-status.php?status=200', |
- 'fetch-status.php?status=404' |
+ [['other.html'], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'cors', baseUrl + 'other.html')]], |
+ [['other.html', {mode: 'same-origin'}], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'basic', baseUrl + 'other.html')]], |
+ [['other.html', {mode: 'no-cors'}], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'basic', baseUrl + 'other.html')]], |
+ [['other.html', {mode: 'cors'}], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'cors', baseUrl + 'other.html')]], |
+ [['http://'], [shouldBeRejected]], |
+ [['http://www.example.com/foo'], [shouldBeRejected]], |
+ [['fetch-status.php?status=200'], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'cors', baseUrl + 'fetch-status.php?status=200')]], |
+ [['fetch-status.php?status=404'], |
+ [shouldBeResolved.bind(this, 404, 'Not Found', 'cors', baseUrl + 'fetch-status.php?status=404')]], |
+ [[corsBaseUrl + 'access-control-basic-allow.cgi'], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'cors', corsBaseUrl + 'access-control-basic-allow.cgi')]], |
+ [[new Request(corsBaseUrl + 'access-control-basic-allow.cgi')], |
+ [shouldBeResolved.bind(this, 200, 'OK', 'cors', corsBaseUrl + 'access-control-basic-allow.cgi')]], |
+ [[corsBaseUrl + 'access-control-basic-denied.cgi'], [shouldBeRejected]] |
]; |
function doNextFetchTest(port) { |
- if (testTargets.length == 0) { |
- port.postMessage('quit'); |
- // Destroying the execution context while fetch is happening should not cause a crash. |
- fetch('dummy.html').then(function() {}).catch(function() {}); |
- self.close(); |
- return; |
- } |
- var target = testTargets.shift(); |
- fetch(target) |
- .then(function(response) { |
- port.postMessage('Resolved: ' + target + ' [' + response.status + ']' + response.statusText); |
- doNextFetchTest(port); |
- }).catch(function(e) { |
- port.postMessage('Rejected: ' + target + ' : '+ e.message); |
- doNextFetchTest(port); |
+ if (testTargets.length == 0) { |
+ port.postMessage('quit'); |
+ // Destroying the execution context while fetch is happening should not cause a crash. |
+ fetch('dummy.html').then(function() {}).catch(function() {}); |
+ self.close(); |
+ return; |
+ } |
+ var target = testTargets.shift(); |
+ fetch.apply(this, target[0]) |
+ .then(function(response) { |
+ target[1].forEach(function(checkFunc) { |
+ checkFunc.call(this, target[0], true, response); |
+ }); |
+ doNextFetchTest(port); |
+ }).catch(function(e) { |
+ target[1].forEach(function(checkFunc) { |
+ checkFunc.call(this, target[0], false, e); |
}); |
+ doNextFetchTest(port); |
+ }); |
}; |