blob: a75cd77b62e29080de37da7d161ee4385c1ff80a [file] [log] [blame]
/*
* Mock implementation of mojo PresentationService.
*/
import {PresentationConnectionRemote, PresentationConnectionState, PresentationService, PresentationServiceReceiver} from '/gen/third_party/blink/public/mojom/presentation/presentation.mojom.m.js';
export class PresentationServiceMock {
constructor() {
this.pendingResponse_ = null;
this.serviceReceiver_ = new PresentationServiceReceiver(this);
this.controllerConnectionPtr_ = null;
this.receiverConnectionRequest_ = null;
this.interceptor_ =
new MojoInterfaceInterceptor(PresentationService.$interfaceName);
this.interceptor_.oninterfacerequest =
e => this.serviceReceiver_.$.bindHandle(e.handle);
this.interceptor_.start();
this.controller_ = null;
this.onSetController = null;
this.receiver_ = null;
this.onSetReceiver = null;
}
reset() {
this.serviceReceiver_.closeBindings();
this.interceptor_.stop();
}
setController(controller) {
this.controller_ = controller;
if (this.onSetController)
this.onSetController();
}
setReceiver(receiver) {
console.log('setReceiver');
this.receiver_ = receiver;
if (this.onSetReceiver)
this.onSetReceiver();
}
setDefaultPresentationUrls(urls) {}
listenForScreenAvailability(url) {}
stopListeningForScreenAvailability(url) {}
startPresentation(urls) {
const controller_ptr = new PresentationConnectionRemote();
const receiver_ptr = new PresentationConnectionRemote();
this.controllerConnectionPtr_ = controller_ptr;
this.receiverConnectionRequest_ =
receiver_ptr.$.bindNewPipeAndPassReceiver();
return {
result: {
presentationInfo: {url: urls[0], id: 'fakePresentationId'},
connectionRemote: receiver_ptr,
connectionReceiver: controller_ptr.$.bindNewPipeAndPassReceiver(),
},
error: null,
};
}
reconnectPresentation(urls) {
const controller_ptr = new PresentationConnectionRemote();
const receiver_ptr = new PresentationConnectionRemote();
this.controllerConnectionPtr_ = controller_ptr;
this.receiverConnectionRequest_ =
receiver_ptr.$.bindNewPipeAndPassReceiver();
return {
result: {
presentationInfo: {url: urls[0], id: 'fakePresentationId'},
connectionRemote: receiver_ptr,
connectionReceiver: controller_ptr.$.bindNewPipeAndPassReceiver(),
},
error: null,
};
}
closeConnection(url, id) {}
terminate(presentationUrl, presentationId) {
this.controller_.onConnectionStateChanged(
{ url: presentationUrl, id: presentationId },
PresentationConnectionState.TERMINATED);
}
onReceiverConnectionAvailable(
strUrl, id, opt_controllerConnectionPtr, opt_receiverConnectionRequest) {
const mojoUrl = {url: strUrl}
var controllerConnectionPtr = opt_controllerConnectionPtr;
if (!controllerConnectionPtr) {
controllerConnectionPtr = new PresentationConnectionRemote();
controllerConnectionPtr.$.bindNewPipeAndPassReceiver();
}
var receiverConnectionRequest = opt_receiverConnectionRequest;
if (!receiverConnectionRequest) {
const remote = new PresentationConnectionRemote();
receiverConnectionRequest = remote.$.bindNewPipeAndPassReceiver();
}
console.log('onReceiverConnectionAvailable: ' + mojoUrl + ',' + id);
this.receiver_.onReceiverConnectionAvailable(
{ url: mojoUrl, id: id },
controllerConnectionPtr, receiverConnectionRequest);
console.log('after onReceiverConnectionAvailable');
}
getControllerConnectionPtr() {
return this.controllerConnectionPtr_;
}
getReceiverConnectionRequest() {
return this.receiverConnectionRequest_;
}
}
export function waitForClick(button) {
return new Promise(resolve => {
button.addEventListener('click', resolve, {once: true});
if (!('eventSender' in window))
return;
const boundingRect = button.getBoundingClientRect();
const x = boundingRect.left + boundingRect.width / 2;
const y = boundingRect.top + boundingRect.height / 2;
eventSender.mouseMoveTo(x, y);
eventSender.mouseDown();
eventSender.mouseUp();
});
}