import {TextDetection, TextDetectionReceiver} from '/gen/services/shape_detection/public/mojom/textdetection.mojom.m.js'; self.TextDetectionTest = (() => { // Class that mocks TextDetection interface defined in // https://cs.chromium.org/chromium/src/services/shape_detection/public/mojom/textdetection.mojom class MockTextDetection { constructor() { this.receiver_ = new TextDetectionReceiver(this); this.interceptor_ = new MojoInterfaceInterceptor(TextDetection.$interfaceName); this.interceptor_.oninterfacerequest = e => this.receiver_.$.bindHandle(e.handle); this.interceptor_.start(); } detect(bitmapData) { this.bufferData_ = new Uint32Array(getArrayBufferFromBigBuffer(bitmapData.pixelData)); return Promise.resolve({ results: [ { rawValue : "cats", boundingBox: { x: 1.0, y: 1.0, width: 100.0, height: 100.0 }, cornerPoints: [ { x: 1.0, y: 1.0 }, { x: 101.0, y: 1.0 }, { x: 101.0, y: 101.0 }, { x: 1.0, y: 101.0 } ] }, { rawValue : "dogs", boundingBox: { x: 2.0, y: 2.0, width: 50.0, height: 50.0 }, cornerPoints: [ { x: 2.0, y: 2.0 }, { x: 52.0, y: 2.0 }, { x: 52.0, y: 52.0 }, { x: 2.0, y: 52.0 } ] }, ], }); } getFrameData() { return this.bufferData_; } reset() { this.receiver_.$.close(); this.interceptor_.stop(); } } let testInternal = { initialized: false, MockTextDetection: null } class TextDetectionTestChromium { constructor() { Object.freeze(this); // Make it immutable. } initialize() { if (testInternal.initialized) throw new Error('Call reset() before initialize().'); testInternal.MockTextDetection = new MockTextDetection; testInternal.initialized = true; } // Resets state of text detection mocks between test runs. async reset() { if (!testInternal.initialized) throw new Error('Call initialize() before reset().'); testInternal.MockTextDetection.reset(); testInternal.MockTextDetection = null; testInternal.initialized = false; await new Promise(resolve => setTimeout(resolve, 0)); } MockTextDetection() { return testInternal.MockTextDetection; } } return TextDetectionTestChromium; })();