in src/screencast/cdp.ts [24:54]
constructor() {
// Handle CDP messages/events routed from the extension through post message
window.addEventListener('message', e => {
parseMessageFromChannel(e.data, (eventName, args) => {
if (eventName === 'websocket') {
const { message } = JSON.parse(args) as { message: string };
if (message) {
// Handle event responses
const messageObj = JSON.parse(message) as CdpMessage;
for (const callback of this.eventCallbackMap.get(messageObj.method) || []) {
callback(messageObj.params);
}
// Handle method responses
const methodCallback = this.methodCallbackMap.get(messageObj.id);
if (methodCallback) {
methodCallback(messageObj.result);
this.methodCallbackMap.delete(messageObj.id);
}
}
return true;
}
if (eventName === 'toggleInspect') {
const { enabled } = JSON.parse(args) as { enabled: string };
for (const callback of this.eventCallbackMap.get('DevTools.toggleInspect') || []) {
callback(enabled);
}
}
return false;
});
});
}