| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../js-test-resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script type="text/javascript"> |
| description("Check that exact matching is used when comparing a request's originating url and the value provided by Access-Control-Allow-Origin."); |
| var urlTemplate = "http://127.0.0.1:8000/xmlhttprequest/resources/access-control-allow-lists.php?origin="; |
| |
| function shouldPass(origin) { |
| debug("Should allow origin: '" + origin + "'"); |
| xhr = new XMLHttpRequest(); |
| xhr.open('GET', urlTemplate + encodeURIComponent(origin), false); |
| shouldBeUndefined("xhr.send(null)"); |
| } |
| |
| function shouldFail(origin) { |
| debug("Should disallow origin: '" + origin + "'"); |
| xhr = new XMLHttpRequest(); |
| xhr.open('GET', urlTemplate + encodeURIComponent(origin), false); |
| shouldThrow("xhr.send(null)"); |
| } |
| |
| var pageOrigin = document.origin; |
| |
| shouldPass("*"); |
| shouldPass(" * "); |
| shouldPass(" *"); |
| shouldPass(pageOrigin); |
| shouldPass(" " + pageOrigin); |
| shouldPass(" " + pageOrigin + " "); |
| shouldPass(" " + pageOrigin); |
| shouldFail(location.protocol + "//www2." + location.host); |
| shouldFail("//" + location.host); |
| shouldFail("://" + location.host); |
| shouldFail("ftp://" + location.host); |
| shouldFail("http:://" + location.host); |
| shouldFail("http:/" + location.host); |
| shouldFail("http:" + location.host); |
| shouldFail(location.host); |
| shouldFail(pageOrigin + "?"); |
| shouldFail(pageOrigin + "/"); |
| shouldFail(pageOrigin + " /"); |
| shouldFail(pageOrigin + "#"); |
| shouldFail(pageOrigin + "%23"); |
| shouldFail(pageOrigin + ":80"); |
| shouldFail(pageOrigin + "\0"); |
| shouldFail(pageOrigin.toUpperCase()); |
| shouldFail(location.protocol.toUpperCase() + "//" + location.host); |
| shouldFail("-"); |
| shouldFail("**"); |
| shouldFail("\0*"); |
| shouldFail("*\0"); |
| shouldFail("'*'"); |
| shouldFail('"*"'); |
| shouldFail("* *"); |
| shouldFail("*" + location.protocol + "//" + "*"); |
| shouldFail("*" + pageOrigin); |
| shouldFail("* " + pageOrigin); |
| shouldFail("\0" + pageOrigin); |
| shouldFail("null " + pageOrigin); |
| shouldFail("http://example.net"); |
| shouldFail("null"); |
| shouldFail(""); |
| shouldFail(location.href); |
| shouldFail(location.href.replace(/\/[^\/]*$/, '/')); |
| shouldFail(location.href.replace(location.hostname, "localhost")); |
| |
| // Tests with multiple Access-Control-Allow-Origin headers (expected to fail) |
| shouldFail(pageOrigin + ", *"); |
| shouldFail(pageOrigin + ",*"); |
| shouldFail("*, " + pageOrigin); |
| shouldFail("*," + pageOrigin); |
| shouldFail(pageOrigin + "," + pageOrigin); |
| shouldFail(pageOrigin + ",http://example.net"); |
| shouldFail("http://example.net," + pageOrigin); |
| shouldFail(","); |
| shouldFail("," + pageOrigin); |
| shouldFail(pageOrigin + ","); |
| |
| </script> |
| <script src="../../js-test-resources/js-test-post.js"></script> |
| </body> |
| </html> |