| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| function waitFor(duration) |
| { |
| return new Promise((resolve) => setTimeout(resolve, duration)); |
| } |
| |
| var resolveCallback, rejectCallback; |
| var promise = new Promise((resolve, reject) => { |
| resolveCallback = resolve; |
| rejectCallback = reject; |
| }); |
| |
| async function done() |
| { |
| try { |
| const frameIdentifier = internals.documentIdentifier(iframe.contentDocument); |
| iframe.src = "non-existent-frame"; |
| let counter = 0; |
| while (++counter < 50) { |
| if (!internals.isDocumentAlive(frameIdentifier)) { |
| resolveCallback(); |
| return; |
| } |
| if (window.GCController) |
| GCController.collect(); |
| |
| await waitFor(50); |
| } |
| rejectCallback("Test failed"); |
| } catch (e) { |
| rejectCallback("Test failed: exception " + e); |
| } |
| } |
| |
| window.addEventListener("message", done); |
| |
| promise_test((test) => { |
| if (!window.internals) |
| rejectCallback("Test require internals API"); |
| return promise; |
| }, "Ensuring frame document gets collected after being stopped in the middle of IDB operations"); |
| |
| </script> |
| <iframe src="resources/myidbframe.htm" id="iframe"></iframe> |