servo/tests/wpt/web-platform-tests/sms/sms_provider.js

76 lines
1.8 KiB
JavaScript

let interceptor = (async function() {
let load = Promise.resolve();
[
'/gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js',
'/gen/mojo/public/mojom/base/big_buffer.mojom-lite.js',
'/gen/mojo/public/mojom/base/string16.mojom-lite.js',
'/gen/mojo/public/mojom/base/time.mojom-lite.js',
'/gen/third_party/blink/public/mojom/sms/sms_manager.mojom-lite.js',
].forEach(path => {
let script = document.createElement('script');
script.src = path;
script.async = false;
load = load.then(() => new Promise(resolve => {
script.onload = resolve;
}));
document.head.appendChild(script);
});
return load.then(intercept);
})();
class SmsProvider {
getNextMessage(timeout) {
return this.handler.getNextMessage(timeout);
}
setHandler(handler) {
this.handler = handler;
return this;
}
setBinding(binding) {
this.binding = binding;
return this;
}
close() {
this.binding.close();
}
}
function getNextMessage(timeout, callback) {
throw new Error("expected to be overriden by tests");
}
async function close() {
let provider = await interceptor;
provider.close();
}
function expect(call) {
return {
async andReturn(callback) {
let handler = {};
handler[call.name] = callback;
let provider = await interceptor;
provider.setHandler(handler);
}
}
}
const Status = {};
function intercept() {
let provider = new SmsProvider();
let interceptor = new MojoInterfaceInterceptor(blink.mojom.SmsManager.$interfaceName);
interceptor.oninterfacerequest = (e) => {
let impl = new blink.mojom.SmsManager(provider);
impl.bindHandle(e.handle);
}
interceptor.start();
Status.kSuccess = blink.mojom.SmsStatus.kSuccess;
Status.kTimeout = blink.mojom.SmsStatus.kTimeout;
return provider;
}