Index: LayoutTests/fast/files/resources/apply-blob-url-to-xhr.js |
diff --git a/LayoutTests/fast/files/resources/apply-blob-url-to-xhr.js b/LayoutTests/fast/files/resources/apply-blob-url-to-xhr.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..463704be76b1f352b2e914b0e2d2bf5420a2a5ec |
--- /dev/null |
+++ b/LayoutTests/fast/files/resources/apply-blob-url-to-xhr.js |
@@ -0,0 +1,97 @@ |
+function log(message) |
+{ |
+ if (self.importScripts) { |
+ postMessage(message); |
+ } else { |
+ document.getElementById('console').appendChild(document.createTextNode(message + "\n")); |
+ } |
+} |
+ |
+var uuidRegex = new RegExp('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'); |
+ |
+function replaceUUID(s) |
+{ |
+ return s.replace(uuidRegex, 'UUID'); |
+} |
+ |
+function sendXMLHttpRequestSync(method, url) |
+{ |
+ var xhr = new XMLHttpRequest(); |
+ xhr.open(method, url, false); |
+ try { |
+ xhr.send(); |
+ log("Status: " + xhr.status); |
+ log("Response: " + xhr.responseText); |
+ } catch (error) { |
+ log("Received exception, code: " + error.code + ", name: " + error.name + ", message: " + replaceUUID(error.message)); |
+ } |
+} |
+ |
+function sendXMLHttpRequestAsync(method, url) |
+{ |
+ return new Promise(function (resolve) { |
+ var xhr = new XMLHttpRequest(); |
+ |
+ xhr.onload = function() |
+ { |
+ log("Status: " + xhr.status); |
+ log("Response: " + xhr.responseText); |
+ }; |
+ xhr.onerror = function() |
+ { |
+ log("Error event is dispatched"); |
+ }; |
+ xhr.onloadend = function() |
+ { |
+ resolve(); |
+ }; |
+ |
+ xhr.open(method, url, true); |
+ try { |
+ xhr.send(); |
+ } catch (error) { |
+ log("Received exception, code: " + error.code + ", name: " + error.name + ", message: " + replaceUUID(error.message)); |
+ } |
+ }); |
+} |
+ |
+function runXHRs(file) |
+{ |
+ var fileURL = URL.createObjectURL(file); |
+ |
+ log("Test that sync XMLHttpRequest GET succeeds."); |
+ sendXMLHttpRequestSync("GET", fileURL); |
+ |
+ log("Test that sync XMLHttpRequest POST fails."); |
+ sendXMLHttpRequestSync("POST", fileURL); |
+ |
+ log("Test that sync XMLHttpRequest GET fails after the blob URL is revoked."); |
+ URL.revokeObjectURL(fileURL); |
+ sendXMLHttpRequestSync("GET", fileURL); |
+ |
+ fileURL = URL.createObjectURL(file); |
+ |
+ log("Test that async XMLHttpRequest GET succeeds."); |
+ sendXMLHttpRequestAsync("GET", fileURL).then(function() |
+ { |
+ log("Test that async XMLHttpRequest POST fails."); |
+ return sendXMLHttpRequestAsync("POST", fileURL); |
+ }).then(function() |
+ { |
+ log("Test that async XMLHttpRequest GET fails after the blob URL is revoked."); |
+ URL.revokeObjectURL(fileURL); |
+ return sendXMLHttpRequestAsync("GET", fileURL); |
+ }).then(function() |
+ { |
+ log("DONE"); |
+ if (!self.importScripts && testRunner.notifyDone) |
+ testRunner.notifyDone(); |
+ }); |
+} |
+ |
+if (self.importScripts) { |
+ onmessage = function(event) |
+ { |
+ runXHRs(event.data); |
+ }; |
+} |