chromium/third_party/blink/web_tests/fast/dom/custom/testutils.js

(function () {

function isParentFrame() {
    return window.parent === window;
}

var childDoneMessage = 'PASS child done';

fork = function () {
    if (isParentFrame()) {
        window.addEventListener('message', function (event) {
            debug(event.data);
            if (event.data == childDoneMessage)
                finishJSTest();
        });

        var iframe = document.createElement('iframe');
        iframe.src = window.location;
        document.body.appendChild(iframe);
        iframe = null;
    }

    return isParentFrame();
};

if (!isParentFrame()) {
    var parent = window.parent;
    log = function (msg) {
        parent.postMessage(msg, '*');
    };

    done = function () {
        log(childDoneMessage);
    };

    destroyContext = function () {
        // This function can be called more than once so we need to check whether the iframe exists.
        var frame = parent.document.querySelector('iframe');
        if (frame) {
            frame.remove();
            log('PASS destroyed context');
        }
    };
}

withFrame = function (f) {
    var frame = document.createElement('iframe');
    frame.onload = function () {
        try {
            f(frame);
        } catch (e) {
            testFailed(e);
        }
    };
    frame.src = 'about:blank';
    document.body.appendChild(frame);
};

})();