Commit a58aca05 authored by reillyg's avatar reillyg Committed by Commit Bot

Migrate WebUSB LayoutTests into external/wpt

This test moves all the tests from third_party/WebKit/LayoutTests/usb
to third_party/WebKit/LayoutTests/external/wpt/webusb. The WebUSB Test
API polyfill is included in a new resources/chromium directory and
loaded automatically when the tests are run in a Chromium-based browser
with the --enable-blink-features=MojoJS,MojoJSTest flag set.

BUG=705734

Review-Url: https://codereview.chromium.org/2789723003
Cr-Commit-Position: refs/heads/master@{#481732}
parent bedb4b20
...@@ -1524,11 +1524,15 @@ Bug(none) external/wpt/webmessaging/broadcastchannel/blobs.html [ Failure Timeou ...@@ -1524,11 +1524,15 @@ Bug(none) external/wpt/webmessaging/broadcastchannel/blobs.html [ Failure Timeou
Bug(none) external/wpt/websockets/Secure-Send-binary-blob.htm [ Failure Timeout ] Bug(none) external/wpt/websockets/Secure-Send-binary-blob.htm [ Failure Timeout ]
Bug(none) external/wpt/websockets/Send-binary-blob.htm [ Failure Timeout ] Bug(none) external/wpt/websockets/Send-binary-blob.htm [ Failure Timeout ]
Bug(none) external/wpt/webusb/idlharness.https.html [ Failure Timeout ] Bug(none) external/wpt/webusb/idlharness.https.html [ Failure Timeout ]
Bug(none) external/wpt/webusb/usbConnectionEvent.https.html [ Timeout ]
Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Timeout ] Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Timeout ]
Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy-attribute.https.sub.html [ Failure Timeout ] Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy-attribute.https.sub.html [ Failure Timeout ]
Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy.https.sub.html [ Failure Timeout ] Bug(none) external/wpt/webusb/usb-allowed-by-feature-policy.https.sub.html [ Failure Timeout ]
Bug(none) external/wpt/webusb/usb-default-feature-policy.https.sub.html [ Failure Timeout ] Bug(none) external/wpt/webusb/usb-default-feature-policy.https.sub.html [ Failure Timeout ]
Bug(none) external/wpt/webusb/usb-disabled-by-feature-policy.https.sub.html [ Failure Timeout ] Bug(none) external/wpt/webusb/usb-disabled-by-feature-policy.https.sub.html [ Failure Timeout ]
Bug(none) external/wpt/webusb/usb-manual.https.html [ Timeout ]
Bug(none) external/wpt/webusb/usbDevice-iframe.https.html [ Timeout ]
Bug(none) external/wpt/webusb/usbDevice.https.html [ Timeout ]
Bug(none) external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future.html [ Failure Timeout ] Bug(none) external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/class_object/class_timestamp_future.html [ Failure Timeout ]
Bug(none) external/wpt/workers/SharedWorker_blobUrl.html [ Failure Timeout ] Bug(none) external/wpt/workers/SharedWorker_blobUrl.html [ Failure Timeout ]
Bug(none) external/wpt/workers/constructors/Worker/Blob-url.html [ Failure Timeout ] Bug(none) external/wpt/workers/constructors/Worker/Blob-url.html [ Failure Timeout ]
...@@ -3245,11 +3249,6 @@ Bug(none) tables/mozilla/core/col_widths_fix_autoFixPer.html [ Timeout ] ...@@ -3245,11 +3249,6 @@ Bug(none) tables/mozilla/core/col_widths_fix_autoFixPer.html [ Timeout ]
Bug(none) tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ] Bug(none) tables/mozilla_expected_failures/marvin/backgr_fixed-bg.html [ Failure ]
Bug(none) traversal/node-iterator-009.html [ Failure ] Bug(none) traversal/node-iterator-009.html [ Failure ]
Bug(none) traversal/tree-walker-006.html [ Failure ] Bug(none) traversal/tree-walker-006.html [ Failure ]
Bug(none) usb/test-polyfil.html [ Timeout ]
Bug(none) usb/usb-connection-event.html [ Timeout ]
Bug(none) usb/usb.html [ Timeout ]
Bug(none) usb/usbDevice-iframe.html [ Timeout ]
Bug(none) usb/usbDevice.html [ Timeout ]
Bug(none) vibration/vibration-iframe.html [ Timeout ] Bug(none) vibration/vibration-iframe.html [ Timeout ]
Bug(none) vibration/vibration.html [ Timeout ] Bug(none) vibration/vibration.html [ Timeout ]
Bug(none) virtual [ Crash Failure Timeout ] Bug(none) virtual [ Crash Failure Timeout ]
......
...@@ -63,7 +63,6 @@ Bug(none) touchadjustment/ [ Skip ] ...@@ -63,7 +63,6 @@ Bug(none) touchadjustment/ [ Skip ]
Bug(none) transforms/ [ Skip ] Bug(none) transforms/ [ Skip ]
Bug(none) traversal/ [ Skip ] Bug(none) traversal/ [ Skip ]
Bug(none) typedcssom/ [ Skip ] Bug(none) typedcssom/ [ Skip ]
Bug(none) usb/ [ Skip ]
Bug(none) vibration/ [ Skip ] Bug(none) vibration/ [ Skip ]
Bug(none) wake_lock/ [ Skip ] Bug(none) wake_lock/ [ Skip ]
Bug(none) webaudio/ [ Skip ] Bug(none) webaudio/ [ Skip ]
......
...@@ -345,7 +345,7 @@ crbug.com/697735 external/wpt/editing/run/unlink.html [ Slow ] ...@@ -345,7 +345,7 @@ crbug.com/697735 external/wpt/editing/run/unlink.html [ Slow ]
crbug.com/584807 printing/webgl-oversized-printing.html [ Slow ] crbug.com/584807 printing/webgl-oversized-printing.html [ Slow ]
crbug.com/584807 virtual/threaded/printing/webgl-oversized-printing.html [ Slow ] crbug.com/584807 virtual/threaded/printing/webgl-oversized-printing.html [ Slow ]
crbug.com/592183 usb/usbDevice.html [ Slow ] crbug.com/592183 external/wpt/webusb/usbDevice.https.html [ Slow ]
crbug.com/594189 virtual/spv2/fast/overflow/lots-of-sibling-inline-boxes.html [ Slow ] crbug.com/594189 virtual/spv2/fast/overflow/lots-of-sibling-inline-boxes.html [ Slow ]
......
This directory contains Chromium-specific test resources.
The files `mojo_bindings.js` and `*.mojom.js` are automatically generated by the
Chromium build process and should not be edited manually.
This source diff could not be displayed because it is too large. You can view the blob instead.
# TEAM: device-dev@chromium.org
# COMPONENT: Blink>USB # COMPONENT: Blink>USB
# TEAM: device-dev@chromium.org
...@@ -8,14 +8,24 @@ ...@@ -8,14 +8,24 @@
<script src=/resources/testharnessreport.js></script> <script src=/resources/testharnessreport.js></script>
<script src=/resources/WebIDLParser.js></script> <script src=/resources/WebIDLParser.js></script>
<script src=/resources/idlharness.js></script> <script src=/resources/idlharness.js></script>
<script src=resources/fake-devices.js></script>
<script src=resources/usb-helpers.js></script>
</head> </head>
<body> <body>
<script> <script>
'use strict'; 'use strict';
// Object instances used by the IDL test.
var usbDevice;
var usbConfiguration;
var usbInterface;
var usbAlternateInterface;
var usbEndpoint;
var usbConnectionEvent;
promise_test(async () => { promise_test(async () => {
let response = await fetch('/interfaces/webusb.idl'); let response = await fetch('/interfaces/webusb.idl');
let idl_text = response.text(); let idl_text = await response.text();
let idl_array = new IdlArray(); let idl_array = new IdlArray();
idl_array.add_idls(idl_text); idl_array.add_idls(idl_text);
...@@ -37,6 +47,34 @@ ...@@ -37,6 +47,34 @@
USBIsochronousOutTransferPacket: ['new USBIsochronousOutTransferPacket("ok")'], USBIsochronousOutTransferPacket: ['new USBIsochronousOutTransferPacket("ok")'],
}); });
// If the WebUSB Test API is available then interfaces requiring an
// instance of USBDevice can be tested.
try {
await navigator.usb.test.initialize();
navigator.usb.test.addFakeDevice(fakeDeviceInit);
usbDevice = await new Promise(resolve => {
navigator.usb.onconnect = e => resolve(e.device);
});
usbConfiguration = usbDevice.configurations[0];
usbInterface = usbConfiguration.interfaces[0];
usbAlternateInterface = usbInterface.alternates[0];
usbEndpoint = usbAlternateInterface.endpoints[0];
usbConnectionEvent =
new USBConnectionEvent('connect', { device: usbDevice })
idl_array.add_objects({
USBAlternateInterface: ['usbAlternateInterface'],
USBConfiguration: ['usbConfiguration'],
USBConnectionEvent: ['usbConnectionEvent'],
USBDevice: ['usbDevice'],
USBEndpoint: ['usbEndpoint'],
USBInterface: ['usbInterface']
});
} catch (e) {
// Do nothing.
}
idl_array.test(); idl_array.test();
}, 'WebUSB IDL test'); }, 'WebUSB IDL test');
</script> </script>
......
...@@ -7,7 +7,6 @@ window.onmessage = messageEvent => { ...@@ -7,7 +7,6 @@ window.onmessage = messageEvent => {
connectEvent.device.open().then(() => { connectEvent.device.open().then(() => {
parent.postMessage('Success', '*'); parent.postMessage('Success', '*');
}).catch(error => { }).catch(error => {
console.log(error);
parent.postMessage('FAIL: open rejected ' + error, '*'); parent.postMessage('FAIL: open rejected ' + error, '*');
}); });
}); });
......
'use strict'; 'use strict';
// These tests rely on the User Agent providing an implementation of the
// WebUSB Testing API (https://wicg.github.io/webusb/test/).
//
// In Chromium-based browsers this implementation is provided by a polyfill
// in order to reduce the amount of test-only code shipped to users. To enable
// these tests the browser must be run with these options:
//
// --enable-blink-features=MojoJS,MojoJSTest
let loadChromiumResources = Promise.resolve().then(() => {
if (!MojoInterfaceInterceptor) {
// Do nothing on non-Chromium-based browsers or when the Mojo bindings are
// not present in the global namespace.
return;
}
let chain = Promise.resolve();
[
'/resources/chromium/mojo_bindings.js',
'/resources/chromium/device.mojom.js',
'/resources/chromium/device_manager.mojom.js',
'/resources/chromium/chooser_service.mojom.js',
'/resources/chromium/webusb-test.js',
].forEach(path => {
let script = document.createElement('script');
script.src = path;
script.async = false;
chain = chain.then(() => new Promise(resolve => {
script.onload = () => resolve();
}));
document.head.appendChild(script);
});
return chain;
});
function usb_test(func, name, properties) { function usb_test(func, name, properties) {
promise_test(async () => { promise_test(async () => {
await navigator.usb.test.initialize() if (navigator.usb.test === undefined) {
// Try loading a polyfill for the WebUSB Testing API.
await loadChromiumResources;
}
await navigator.usb.test.initialize();
try { try {
await func(); await func();
} finally { } finally {
...@@ -72,24 +112,17 @@ function assertDeviceInfoEquals(usbDevice, deviceInit) { ...@@ -72,24 +112,17 @@ function assertDeviceInfoEquals(usbDevice, deviceInit) {
} }
} }
// TODO(reillyg): Remove when jyasskin upstreams this to testharness.js: function callWithTrustedClick(callback) {
// https://crbug.com/509058.
function callWithKeyDown(functionCalledOnKeyPress) {
return new Promise(resolve => { return new Promise(resolve => {
function onKeyPress() { let button = document.createElement('button');
document.removeEventListener('keypress', onKeyPress, false); button.textContent = 'click to continue test';
resolve(functionCalledOnKeyPress()); button.style.display = 'block';
} button.style.fontSize = '20px';
document.addEventListener('keypress', onKeyPress, false); button.style.padding = '10px';
button.onclick = () => {
eventSender.keyDown(' ', []); resolve(callback());
}); document.body.removeChild(button);
} };
document.body.appendChild(button);
function runGarbageCollection() {
// Run gc() as a promise.
return new Promise((resolve, reject) => {
GCController.collect();
setTimeout(resolve, 0);
}); });
} }
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="resources/fake-devices.js"></script> <script src="resources/fake-devices.js"></script>
<script src="resources/usb-helpers.js"></script> <script src="resources/usb-helpers.js"></script>
<script src="resources/webusb-test.js"></script>
<script> <script>
'use strict'; 'use strict';
...@@ -39,7 +38,7 @@ usb_test(() => { ...@@ -39,7 +38,7 @@ usb_test(() => {
}, 'requestDevice rejects when called without a user gesture'); }, 'requestDevice rejects when called without a user gesture');
usb_test(() => { usb_test(() => {
return callWithKeyDown(() => navigator.usb.requestDevice({ filters: [] }) return callWithTrustedClick(() => navigator.usb.requestDevice({ filters: [] })
.then(device => { .then(device => {
assert_unreachable('requestDevice should reject when no device selected'); assert_unreachable('requestDevice should reject when no device selected');
}) })
...@@ -52,7 +51,7 @@ usb_test(() => { ...@@ -52,7 +51,7 @@ usb_test(() => {
usb_test(() => { usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => { return getFakeDevice().then(({ device, fakeDevice }) => {
navigator.usb.test.chosenDevice = fakeDevice; navigator.usb.test.chosenDevice = fakeDevice;
return callWithKeyDown(() => { return callWithTrustedClick(() => {
return navigator.usb.requestDevice({ filters: [] }).then(chosenDevice => { return navigator.usb.requestDevice({ filters: [] }).then(chosenDevice => {
assert_equals(chosenDevice, device); assert_equals(chosenDevice, device);
}); });
...@@ -63,7 +62,7 @@ usb_test(() => { ...@@ -63,7 +62,7 @@ usb_test(() => {
usb_test(() => { usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => { return getFakeDevice().then(({ device, fakeDevice }) => {
navigator.usb.test.chosenDevice = fakeDevice; navigator.usb.test.chosenDevice = fakeDevice;
return callWithKeyDown(() => { return callWithTrustedClick(() => {
return navigator.usb.requestDevice({ filters: [] }).then(chosenDevice => { return navigator.usb.requestDevice({ filters: [] }).then(chosenDevice => {
assert_equals(chosenDevice, device); assert_equals(chosenDevice, device);
return navigator.usb.getDevices().then(devices => { return navigator.usb.getDevices().then(devices => {
...@@ -81,18 +80,19 @@ usb_test(() => { ...@@ -81,18 +80,19 @@ usb_test(() => {
{ vendorId: 5678, productId: 0xF00F } { vendorId: 5678, productId: 0xF00F }
]; ];
return callWithKeyDown(() => navigator.usb.requestDevice({ filters: expectedFilters }) return callWithTrustedClick(() => {
.then(device => { return navigator.usb.requestDevice({ filters: expectedFilters })
assert_unreachable('requestDevice should reject because no device selected'); .then(device => {
}) assert_unreachable('requestDevice should reject because no device selected');
.catch(error => { })
assert_equals(error.code, DOMException.NOT_FOUND_ERR); .catch(error => {
let actualFilters = navigator.usb.test.lastFilters; assert_equals(error.code, DOMException.NOT_FOUND_ERR);
assert_equals(actualFilters.length, expectedFilters.length); let actualFilters = navigator.usb.test.lastFilters;
for (var i = 0; i < actualFilters.length; ++i) assert_equals(actualFilters.length, expectedFilters.length);
assert_object_equals(actualFilters[i], expectedFilters[i]); for (var i = 0; i < actualFilters.length; ++i)
}) assert_object_equals(actualFilters[i], expectedFilters[i]);
); });
});
}, 'filters are sent correctly'); }, 'filters are sent correctly');
usb_test(() => { usb_test(() => {
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="resources/fake-devices.js"></script> <script src="resources/fake-devices.js"></script>
<script src="resources/usb-helpers.js"></script> <script src="resources/usb-helpers.js"></script>
<script src="resources/webusb-test.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/fake-devices.js"></script>
<script src="resources/usb-helpers.js"></script>
<script>
'use strict';
function runIframeDisconnectTest(onDeviceConnected) {
return new Promise((resolve, reject) => {
let opened = false;
let iframe = document.createElement('iframe');
iframe.src = 'resources/open-in-iframe.html';
iframe.onload = () => {
navigator.usb.test.attachToWindow(iframe.contentWindow).then(() => {
iframe.contentWindow.postMessage('Ready', '*');
});
};
window.onmessage = messageEvent => {
if (messageEvent.data == 'Ready') {
let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit);
fakeDevice.onclose = () => {
assert_true(opened);
resolve();
};
} else if (messageEvent.data == 'Success') {
opened = true;
onDeviceConnected(iframe);
} else {
reject(messageEvent.data);
}
};
document.body.appendChild(iframe);
});
}
usb_test(() => {
return runIframeDisconnectTest(iframe => {
document.body.removeChild(iframe);
});
}, 'detaching iframe disconnects device.');
usb_test(() => {
return runIframeDisconnectTest(iframe => {
iframe.src = 'about:blank';
});
}, 'navigating iframe disconnects device.');
</script>
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="resources/fake-devices.js"></script> <script src="resources/fake-devices.js"></script>
<script src="resources/usb-helpers.js"></script> <script src="resources/usb-helpers.js"></script>
<script src="resources/webusb-test.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> <script>
'use strict'; 'use strict';
......
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script> <script>
'use strict'; 'use strict';
......
...@@ -78,9 +78,11 @@ ...@@ -78,9 +78,11 @@
function isWPTManualTest() { function isWPTManualTest() {
var path = location.pathname; var path = location.pathname;
if (location.hostname == 'web-platform.test' && path.endsWith('-manual.html')) if (location.hostname == 'web-platform.test'
&& /.*-manual(\.https)?\.html$/.test(path)) {
return true; return true;
return /\/external\/wpt\/.*-manual\.html$/.test(path); }
return /\/external\/wpt\/.*-manual(\.https)?\.html$/.test(path);
} }
// Returns a directory part relative to WPT root and a basename part of the // Returns a directory part relative to WPT root and a basename part of the
...@@ -113,8 +115,10 @@ ...@@ -113,8 +115,10 @@
} }
var src; var src;
if (pathAndBase.startsWith('/fullscreen/')) { if (pathAndBase.startsWith('/fullscreen/')
// Fullscreen tests all use the same automation script. || pathAndBase.startsWith('/webusb/')) {
// Fullscreen tests all use the same automation script and WebUSB
// tests borrow it.
src = automationPath + '/fullscreen/auto-click.js'; src = automationPath + '/fullscreen/auto-click.js';
} else if (pathAndBase.startsWith('/pointerevents/') } else if (pathAndBase.startsWith('/pointerevents/')
|| pathAndBase.startsWith('/uievents/') || pathAndBase.startsWith('/uievents/')
...@@ -268,5 +272,4 @@ ...@@ -268,5 +272,4 @@
window.addEventListener('load', done); window.addEventListener('load', done);
} }
}); });
})(); })();
'use strict';
(() => {
let dependencies = [
"file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js",
"file:///gen/device/usb/public/interfaces/device.mojom.js",
"file:///gen/device/usb/public/interfaces/device_manager.mojom.js",
"file:///gen/device/usb/public/interfaces/chooser_service.mojom.js",
"resources/webusb-test-impl.js",
];
for (let dep of dependencies)
document.write("<script src='" + dep + "'></script>");
})();
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/webusb-test.js"></script>
<script>
'use strict';
promise_test(() => {
return navigator.usb.test.initialize();
}, 'WebUSB Test API available');
</script>
<!DOCTYPE html> <!DOCTYPE html>
<script src="../resources/testharness.js"></script> <script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script> <script src="../resources/testharnessreport.js"></script>
<script src="resources/fake-devices.js"></script> <script src="../external/wpt/webusb/resources/fake-devices.js"></script>
<script src="resources/usb-helpers.js"></script> <script src="../external/wpt/resources/chromium/mojo_bindings.js"></script>
<script src="resources/webusb-test.js"></script> <script src="../external/wpt/resources/chromium/device.mojom.js"></script>
<script src="../external/wpt/resources/chromium/device_manager.mojom.js"></script>
<script src="../external/wpt/resources/chromium/chooser_service.mojom.js"></script>
<script src="../external/wpt/resources/chromium/webusb-test.js"></script>
<body> <body>
<script> <script>
'use strict'; 'use strict';
function runIframeDisconnectTest(onDeviceConnected) {
return navigator.usb.test.initialize().then(() => {
return new Promise((resolve, reject) => {
let opened = false;
let iframe = document.createElement('iframe');
iframe.src = 'resources/open-in-iframe.html';
iframe.onload = () => {
navigator.usb.test.attachToWindow(iframe.contentWindow).then(() => {
iframe.contentWindow.postMessage('Ready', '*');
});
};
window.onmessage = messageEvent => {
if (messageEvent.data == 'Ready') {
let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit);
fakeDevice.onclose = () => {
assert_true(opened);
resolve();
};
} else if (messageEvent.data == 'Success') {
opened = true;
onDeviceConnected(iframe);
} else {
reject(messageEvent.data);
}
};
document.body.appendChild(iframe);
});
});
}
promise_test(() => {
return runIframeDisconnectTest(iframe => {
document.body.removeChild(iframe);
});
}, 'detaching iframe disconnects device.');
promise_test(() => {
return runIframeDisconnectTest(iframe => {
iframe.src = 'about:blank';
});
}, 'navigating iframe disconnects device.');
promise_test(() => { promise_test(() => {
return navigator.usb.test.initialize().then(() => { return navigator.usb.test.initialize().then(() => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -60,7 +18,7 @@ promise_test(() => { ...@@ -60,7 +18,7 @@ promise_test(() => {
let fakeDeviceGuid = null; let fakeDeviceGuid = null;
let iframe = document.createElement('iframe'); let iframe = document.createElement('iframe');
iframe.src = 'resources/open-in-iframe.html'; iframe.src = '../external/wpt/webusb/resources/open-in-iframe.html';
iframe.onload = () => { iframe.onload = () => {
navigator.usb.test.attachToWindow(iframe.contentWindow).then(() => { navigator.usb.test.attachToWindow(iframe.contentWindow).then(() => {
iframe.contentWindow.postMessage('Ready', '*'); iframe.contentWindow.postMessage('Ready', '*');
...@@ -70,10 +28,9 @@ promise_test(() => { ...@@ -70,10 +28,9 @@ promise_test(() => {
window.onmessage = messageEvent => { window.onmessage = messageEvent => {
if (messageEvent.data == 'Ready') { if (messageEvent.data == 'Ready') {
document.body.removeChild(iframe); document.body.removeChild(iframe);
runGarbageCollection().then(() => { GCController.collect();
navigator.usb.test.addFakeDevice(fakeDeviceInit); navigator.usb.test.addFakeDevice(fakeDeviceInit);
resolve(); resolve();
});
} else { } else {
reject(messageEvent.data); reject(messageEvent.data);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment