<!DOCTYPE html> <meta charset=utf-8> <title>CORS - preflight cache</title> <meta name=author title="Odin Hørthe Omdal" href="mailto:odiho@opera.com"> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src=/common/utils.js></script> <script src=support.js?pipe=sub></script> <h1>Preflight cache</h1> <div id=log></div> <script> /* * Cache */ function did_preflight(expect, client, settings) { var uuid_token = (settings && settings.token) || token(); if(!settings) settings = {} set = { method: 'method' in settings ? settings.method : 'GET', extra: 'extra' in settings ? '&' + settings.extra : '' } client.open(set.method, CROSSDOMAIN + 'resources/preflight.py?token=' + uuid_token + set.extra, false) client.setRequestHeader('x-print', uuid_token) client.send() client.open('GET', 'resources/preflight.py?check&token=' + uuid_token, false) client.send() assert_equals(client.response, expect === true ? '1' : '0', "did preflight") return uuid_token; } /* * Should run preflight */ test(function() { var time = new Date().getTime() var client = new XMLHttpRequest() did_preflight(true, client); }, 'Test preflight') test(function() { var time = new Date().getTime() var client = new XMLHttpRequest() var id = did_preflight(true, client) did_preflight(false, client, {token: id}) }, 'preflight for x-print should be cached') test(function() { var time = new Date().getTime() var client = new XMLHttpRequest() var id = did_preflight(true, client, {extra:'max_age=0'}) did_preflight(true, client, {extra:'max_age=0', token: id}) }, 'age = 0, should not be cached') test(function() { var time = new Date().getTime() var client = new XMLHttpRequest() var id = did_preflight(true, client, {extra:'max_age=-1'}) did_preflight(true, client, {extra:'max_age=-1', token: id}) }, 'age = -1, should not be cached'); (function() { var test = async_test("preflight first request, second from cache, wait, third should preflight again", { timeout: 6000 }), time = new Date().getTime(), dothing = function (url, msg, set_request, func) { client = new XMLHttpRequest(), client.open('GET', url, true) if (set_request) client.setRequestHeader('x-print', msg) client.onload = test.step_func(function() { assert_equals(client.response, msg, "response " + url) if (func) test.step(func) }) client.onerror = test.step_func(function(e) { assert_unreached("Got unexpected error event on the XHR object") }) client.send() } var token1 = token(); test.step(function() { /* First cycle, gets x-print into the cache, with timeout 1 */ var request_url = CROSSDOMAIN + 'resources/preflight.py?max_age=1&token=' + token1; dothing(request_url, 'first', true, function() { test = test; /* Check if we did a preflight like we expected */ dothing('resources/preflight.py?check&1&token=' + token1, '1', false, function() { test = test; dothing(request_url, 'second', true, function() { test = test; /* Check that we didn't do a preflight (hasn't gone 1 second yet) */ dothing('resources/preflight.py?check&2&token=' + token1, '0', false, function() { test = test; /* Wait until the preflight cache age is old (and thus cleared) */ setTimeout(test.step_func(function(){ dothing(request_url, 'third', true, function() { test = test; /* Expect that we did indeed do a preflight */ dothing('resources/preflight.py?check&3&token=' + token1, '1', false, function() { test.done() }) }) }), 1500) }) }) }) }) }) })(); </script>