106 lines
3.7 KiB
HTML
106 lines
3.7 KiB
HTML
<!doctype html>
|
|
<meta charset=utf-8>
|
|
<title>Test focus and blur event after switching focus from an iframe to another iframe</title>
|
|
<script src=/resources/testharness.js></script>
|
|
<script src=/resources/testharnessreport.js></script>
|
|
<script src="/resources/testdriver.js"></script>
|
|
<script src="/resources/testdriver-actions.js"></script>
|
|
<script src="/resources/testdriver-vendor.js"></script>
|
|
<body></body>
|
|
<script>
|
|
function waitForBothIFramesLoaded() {
|
|
let count = 0;
|
|
return new Promise(resolve => {
|
|
window.addEventListener("message", function handler(e) {
|
|
if (e.data == "ready") {
|
|
count += 1;
|
|
}
|
|
if (count == 2) {
|
|
window.removeEventListener("message", handler);
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function waitForIframeFocus(w) {
|
|
return new Promise(resolve => {
|
|
window.addEventListener("message", function handler(e) {
|
|
if (e.data == "focus" &&
|
|
e.source == w) {
|
|
window.removeEventListener("message", handler);
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function clickFocusIFrame(w) {
|
|
w.postMessage("focus", "*");
|
|
}
|
|
|
|
// This will send message to the inner frame to ask it
|
|
// send the log they collect back.
|
|
async function getLog(w) {
|
|
w.postMessage("getlog", "*");
|
|
let log = await new Promise( r=> {
|
|
window.addEventListener("message", function handler(e) {
|
|
window.removeEventListener("message", handler);
|
|
r(e.data);
|
|
});
|
|
});
|
|
return log;
|
|
}
|
|
|
|
async function runTest(t, urlForFrame1, urlForFrame2) {
|
|
const iframe1 = document.createElement("iframe");
|
|
iframe1.src = urlForFrame1;
|
|
const iframe2 = document.createElement("iframe");
|
|
iframe2.src = urlForFrame2;
|
|
document.body.appendChild(iframe1);
|
|
document.body.appendChild(iframe2);
|
|
|
|
t.add_cleanup(() => { iframe1.remove(); iframe2.remove() });
|
|
|
|
await waitForBothIFramesLoaded();
|
|
iframe1.focus();
|
|
await waitForIframeFocus(iframe1.contentWindow);
|
|
// Ask the iframe2 to be focused by using test_driver to simulate
|
|
// a click.
|
|
clickFocusIFrame(iframe2.contentWindow);
|
|
await waitForIframeFocus(iframe2.contentWindow);
|
|
assert_equals(await getLog(iframe1.contentWindow), 'innerlog:windowfocus,windowblur,');
|
|
}
|
|
|
|
// Both inner frames are different sites.
|
|
promise_test(async t => {
|
|
await runTest(
|
|
t,
|
|
"http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/focus-event-after-switching-iframes-inner.html",
|
|
"http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/focus-event-after-switching-iframes-inner.html");
|
|
}, "Check focus and blur events after switching from a different site iframe to a different site iframe");
|
|
|
|
// The one that expects to focus and blur is same site, the other one is different site.
|
|
promise_test(async t => {
|
|
await runTest(
|
|
t,
|
|
"/focus/support/focus-event-after-switching-iframes-inner.html",
|
|
"http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/focus-event-after-switching-iframes-inner.html");
|
|
}, "Check focus and blur events after switching from a same site iframe to a different site iframe");
|
|
|
|
// Both inner frames are same site
|
|
promise_test(async t => {
|
|
await runTest(
|
|
t,
|
|
"/focus/support/focus-event-after-switching-iframes-inner.html",
|
|
"/focus/support/focus-event-after-switching-iframes-inner.html");
|
|
}, "Check focus and blur events after switching from a same site iframe to a same site iframe");
|
|
|
|
// The one that expects to focus and blur is different site, the other one is same site
|
|
promise_test(async t => {
|
|
await runTest(
|
|
t,
|
|
"http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/focus-event-after-switching-iframes-inner.html",
|
|
"/focus/support/focus-event-after-switching-iframes-inner.html");
|
|
}, "Check focus and blur events after switching from a different site iframe to a same site iframe");
|
|
</script>
|