UNPKG

electron-devtools-vendor

Version:

<div align="center"> <h2>electron-devtools-vendor</h2> <img alt="MIT" src="https://img.shields.io/github/license/BlackHole1/electron-devtools-vendor?color=9cf&style=flat-square"> <img alt="GitHub repo size" src="https://img.shields.io/github/r

84 lines (67 loc) 2.21 kB
Modules.set('port', function() { // imports var Component = Modules.get('Component'); var u = Modules.get('utils'); var port = new (Component.extend({ // singleton isConnectedWithExtension: false, channel: undefined, extensionPortOut: undefined, extensionPortIn: undefined, initialize: function() { this.channel = new MessageChannel(); this.extensionPortOut = this.channel.port1; this.waitForExtension(); this.notifyStartToExtension(); }, waitForExtension: function() { window.addEventListener('message', u.bind(function(event) { // Only accept messages from same frame if (event.source != window) return; var message = event.data; // Only accept our messages if (!u.isObject(message) || message.target != 'extension') return; if (message.name == 'started' && !this.isConnectedWithExtension) { this.connectToExtension(); this.notifyStartToExtension(); } else if (message.name == 'connect' && !this.extensionPortIn) { this.extensionPortIn = event.ports[0]; this.listenToExtension(); } }, this)); }, notifyStartToExtension: function() { window.postMessage({ target: 'page', timestamp: new Date().getTime(), name: 'started' }, '*'); }, connectToExtension: function() { window.postMessage({ target: 'page', timestamp: new Date().getTime(), name: 'connect' }, '*', [this.channel.port2]); this.isConnectedWithExtension = true; }, listenToExtension: function() { this.extensionPortIn.addEventListener('message', u.bind(function(event) { var message = event.data; this.trigger(message.name, message); }, this)); this.extensionPortIn.start(); }, // Note: messageName is prefixed by "backboneAgent:" and can't contain spaces // (because might be transformed in a Backbone event in the Panel) sendMessage: function(messageName, messageData) { messageName = 'backboneAgent:'+messageName; this.extensionPortOut.postMessage({ target: 'page', timestamp: new Date().getTime(), name: messageName, data: messageData }); } }))(); return port; });