blob: 09cea09c6fe0c1fb20c707a766e746b8246cfc02 [file] [log] [blame]
'use strict';
// These tests rely on the User Agent providing an implementation of
// platform shape detection backends.
//
// 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;
}
const prefix = '/gen/services/shape_detection/public/mojom';
let chain = Promise.resolve();
[
'/gen/layout_test_data/mojo/public/js/mojo_bindings.js',
'/gen/mojo/public/mojom/base/big_buffer.mojom.js',
'/gen/skia/public/interfaces/image_info.mojom.js',
'/gen/skia/public/interfaces/bitmap.mojom.js',
'/gen/ui/gfx/geometry/mojo/geometry.mojom.js',
`${prefix}/barcodedetection.mojom.js`,
`${prefix}/barcodedetection_provider.mojom.js`,
`${prefix}/facedetection.mojom.js`,
`${prefix}/facedetection_provider.mojom.js`,
'/resources/chromium/mock-barcodedetection.js',
'/resources/chromium/mock-facedetection.js',
].forEach(path => {
// Use importScripts for workers.
if (typeof document === 'undefined') {
chain = chain.then(() => importScripts(path));
return;
}
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;
});
/**
* @param {String} detectionTestName
* name of mock shape detection test interface,
* must be the item of ["FaceDetectionTest", "BarcodeDetectionTest"]
*/
async function initialize_detection_tests(detectionTestName) {
let detectionTest;
// Use 'self' for workers.
if (typeof document === 'undefined') {
if (typeof self[detectionTestName] === 'undefined') {
await loadChromiumResources;
}
detectionTest = new self[detectionTestName]();
} else {
if (typeof window[detectionTestName] === 'undefined') {
await loadChromiumResources;
}
detectionTest = new window[detectionTestName]();
}
await detectionTest.initialize();
return detectionTest;
}
function detection_test(detectionTestName, func, name, properties) {
promise_test(async t => {
let detectionTest = await initialize_detection_tests(detectionTestName);
try {
await func(t, detectionTest);
} finally {
await detectionTest.reset();
};
}, name, properties);
}
function getArrayBufferFromBigBuffer(bigBuffer) {
if (bigBuffer.$tag == mojoBase.mojom.BigBuffer.Tags.bytes) {
return new Uint8Array(bigBuffer.bytes).buffer;
}
return bigBuffer.sharedMemory.bufferHandle.mapBuffer(0,
bigBuffer.sharedMemory.size).buffer;
}