'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 async function loadChromiumResources() { await import('/resources/chromium/mock-barcodedetection.js'); await import('/resources/chromium/mock-facedetection.js'); await import('/resources/chromium/mock-textdetection.js'); } /** * @param {String} detectionTestName * name of mock shape detection test interface, * must be the item of ["FaceDetectionTest", "BarcodeDetectionTest", * "TextDetectionTest"] */ async function initialize_detection_tests(detectionTestName) { let detectionTest; if (typeof document === 'undefined') { // Use 'self' for workers. if (typeof self[detectionTestName] === 'undefined') { // test-only-api.js is already loaded in worker.js if (isChromiumBased) { await loadChromiumResources(); } } detectionTest = new self[detectionTestName](); } else { if (typeof window[detectionTestName] === 'undefined') { const script = document.createElement('script'); script.src = '/resources/test-only-api.js'; script.async = false; const p = new Promise((resolve, reject) => { script.onload = () => { resolve(); }; script.onerror = e => { reject(e); }; }) document.head.appendChild(script); await p; if (isChromiumBased) { 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.bytes !== undefined) { return new Uint8Array(bigBuffer.bytes).buffer; } return bigBuffer.sharedMemory.bufferHandle.mapBuffer(0, bigBuffer.sharedMemory.size).buffer; }