| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="support/test_utils.js"></script> |
| </head> |
| |
| <body> |
| <script> |
| /** |
| * @param Array.<Array.<Datatype>> combination A combination of datatypes. |
| * @param Dict.<string, boolean> report A map between a datatype name and |
| * whether it is empty. |
| * @return boolean Whether all datatypes are still nonempty. |
| */ |
| function verifyDatatypes(report) { |
| TestUtils.DATATYPES.forEach(function(datatype) { |
| assert_false( |
| report[datatype.name], |
| datatype.name + " should NOT have been cleared."); |
| }); |
| } |
| |
| TestUtils.COMBINATIONS.forEach(function(combination) { |
| var test_name = |
| "Do not clear datatypes on insecure navigation (header: " + |
| combination.map(function(e) { return e.name; }).join(", ") + |
| ")"; |
| |
| promise_test(function(test) { |
| return new Promise(function(resolve_test, reject_test) { |
| TestUtils.populateDatatypes() |
| .then(function() { |
| // Navigate to a resource with a Clear-Site-Data header in |
| // an iframe, then verify that no data have been deleted. |
| return new Promise(function(resolve, reject) { |
| window.addEventListener("message", resolve); |
| var iframe = document.createElement("iframe"); |
| iframe.src = TestUtils.getClearSiteDataUrl(combination); |
| document.body.appendChild(iframe); |
| }).then(function(messageEvent) { |
| verifyDatatypes(messageEvent.data); |
| resolve_test(); |
| }); |
| }); |
| }); |
| }, test_name); |
| }); |
| </script> |
| </body> |
| </html> |