chromium/third_party/blink/web_tests/editing/undo/undo-iframe-location-change.html

<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<iframe id="iframe1" src="../resources/undo-iframe-location-change-src.html"></iframe>
<script>
const t = async_test();

const iframe1 = document.getElementById('iframe1');

// Note: "load" event for "iframe1" is dispatched twice:
//  1. Main document load
//  2. Set window1.location
iframe1.addEventListener('load', t.step_func(() => {
    const window1 = iframe1.contentWindow;
    const document1 = window1.document;

    const iframe2 = document1.getElementById('iframe2');
    const window2 = iframe2.contentWindow;
    const document2 = window2.document;
    const target = document2.getElementById('target');

    if (window1.location.toString().indexOf('?part2') === -1) {
        // Checks with modification in the subframe
        target.focus();
        document2.execCommand('InsertText', false, 'x');
        assert_equals(target.innerText, 'x',
                     'Text should be inserted into the subframe.');
        assert_false(document.queryCommandEnabled('Undo'),
                    'Undo should not be enabled in main document');
        assert_false(document1.queryCommandEnabled('Undo'),
                    'Undo should not be enabled in outer IFRAME');
        window1.location = window1.location.toString() + '?part2';
        return;
    }

    // Checks after the subframe has navigated
    assert_equals(target.innerText, '',
                 'IFRAME should not have old content after navigation.');
    assert_false(document2.queryCommandEnabled('Undo'),
                'Undo should not be enabled after the location changed');
    assert_false(document1.queryCommandEnabled('Undo'),
                'Undo should not be enabled in outer IFRAME after navigation');
    t.done();
}));
</script>