| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="support/test_utils.sub.js"></script> |
| </head> |
| |
| <body> |
| <script> |
| /** |
| * @typedef{TestCase} |
| * @type{object} |
| * @property{string} frame The scheme of the url of the iframe. |
| * @property{string} resource The scheme of the resource in the iframe. |
| * @property{boolean} deleted Whether it is expected that Clear-Site-Data |
| * will be respected when loading |resource| in |frame|. |
| */ |
| var TestCase; |
| |
| /** Array<TestCase> Test cases. */ |
| var test_cases = [ |
| { "frame": "https", "resource": "https", "deleted": true }, |
| { "frame": "http", "resource": "https", "deleted": true }, |
| { "frame": "https", "resource": "http", "deleted": false }, |
| { "frame": "http", "resource": "http", "deleted": false }, |
| ]; |
| |
| /** |
| * @param TestCase test_case The test case that is tested. |
| * @param Dict.<string, boolean> report A map between a datatype name and |
| * whether it is empty. |
| */ |
| function verifyDatatypes(test_case, report) { |
| if (test_case.deleted) { |
| assert_true( |
| report["storage"], |
| "Storage should have been cleared."); |
| } else { |
| assert_false( |
| report["storage"], |
| "Storage should NOT have been cleared."); |
| } |
| } |
| |
| test_cases.forEach(function(test_case) { |
| var test_name = |
| test_case.resource + " resource on a " + test_case.frame + " page"; |
| |
| promise_test(function(test) { |
| return new Promise(function(resolve_test, reject_test) { |
| TestUtils.populateDatatypes() |
| .then(function() { |
| // Navigate to a page with a resource that is loaded with |
| // the Clear-Site-Data header, then verify that storage |
| // has been deleted if and only if the resource was loaded |
| // via HTTPS. |
| return new Promise(function(resolve, reject) { |
| window.addEventListener("message", resolve); |
| var iframe = document.createElement("iframe"); |
| iframe.src = TestUtils.getPageWithResourceUrl( |
| test_case.frame, test_case.resource); |
| document.body.appendChild(iframe); |
| }).then(function(messageEvent) { |
| verifyDatatypes(test_case, messageEvent.data); |
| resolve_test(); |
| }); |
| }); |
| }); |
| }, test_name); |
| }); |
| </script> |
| </body> |
| </html> |