blob: 347b99719d0c3ffe6a97fa6062772c091fa6d89f [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/mojo-helpers.js"></script>
<script src="resources/fake-devices.js"></script>
<script src="resources/usb-helpers.js"></script>
<script>
'use strict';
function runIframeDisconnectTest(usb, onDeviceConnected) {
return new Promise((resolve, reject) => {
let mockDeviceManager = new usb.MockDeviceManager;
let opened = false;
let iframe = document.createElement('iframe');
window.onmessage = messageEvent => {
if (messageEvent.data === 'Ready') {
mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
} else if (messageEvent.data === 'Success') {
opened = true;
onDeviceConnected(iframe);
} else {
reject(messageEvent.data);
}
};
mockDeviceManager.setDeviceCloseHandler(info => {
assert_equals(info, usb.fakeDevices[0]);
assert_true(opened);
resolve();
});
iframe.src = 'resources/open-in-iframe.html';
iframe.onload = () => {
iframe.contentWindow.mojo.define(
"Mojo Service Registry",
[ 'content/public/renderer/frame_interfaces' ],
(frameInterfaces) => {
frameInterfaces.addInterfaceOverrideForTesting(
usb.DeviceManager.name,
pipe => { mockDeviceManager.bindToPipe(pipe); });
iframe.contentWindow.postMessage('Ready', '*');
});
}
document.body.appendChild(iframe);
});
}
usb_test(usb => {
return runIframeDisconnectTest(usb, iframe => {
document.body.removeChild(iframe);
});
}, 'detaching iframe disconnects device.');
usb_test(usb => {
return runIframeDisconnectTest(usb, iframe => {
iframe.src = 'about:blank';
});
}, 'navigating iframe disconnects device.');
usb_test(usb => {
return new Promise((resolve, reject) => {
let mockDeviceManager = new usb.MockDeviceManager;
let iframe = document.createElement('iframe');
window.onmessage = messageEvent => {
if (messageEvent.data === 'Ready') {
document.body.removeChild(iframe);
runGarbageCollection().then(() => {
mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
resolve();
});
} else {
reject(messageEvent.data);
}
};
iframe.src = 'resources/open-in-iframe.html';
iframe.onload = () => {
iframe.contentWindow.mojo.define(
"Mojo Service Registry",
[ 'content/public/renderer/frame_interfaces' ],
(frameInterfaces) => {
frameInterfaces.addInterfaceOverrideForTesting(
usb.DeviceManager.name,
pipe => { mockDeviceManager.bindToPipe(pipe); });
iframe.contentWindow.postMessage('Ready', '*');
});
}
document.body.appendChild(iframe);
});
}, 'events are not delivered to detached frames');
</script>