From 020331fd8e120eee1fcb80ad05f7fcde33f3e981 Mon Sep 17 00:00:00 2001 From: mrmr1993 Date: Sun, 28 Dec 2014 19:41:30 +0000 Subject: Create a script for connecting UIComponent iframes with their parents --- pages/ui_component_server.coffee | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pages/ui_component_server.coffee (limited to 'pages/ui_component_server.coffee') diff --git a/pages/ui_component_server.coffee b/pages/ui_component_server.coffee new file mode 100644 index 00000000..240233ed --- /dev/null +++ b/pages/ui_component_server.coffee @@ -0,0 +1,41 @@ +# Register the port recieved from the parent window, and stop listening for messages on the window object. +window.addEventListener "message", (event) -> + return unless event.source == window.parent + currentFunction = arguments.callee + + # Check event.data against iframeMessageSecret so we can determine that this message hasn't been spoofed. + chrome.storage.local.get "iframeMessageSecret", ({iframeMessageSecret: secret}) -> + return unless event.data == secret + UIComponentServer.portOpen event.ports[0] + window.removeEventListener "message", currentFunction # Stop listening for message events. + +UIComponentServer = + ownerPagePort: null + messageEventListeners: [] + + portOpen: (@ownerPagePort) -> + @ownerPagePort.onmessage = (event) => @handleMessage event + + postMessage: (data) -> @ownerPagePort.postMessage data + + # Execute each event listener on the current event until we get a falsy return value. + handleMessage: (event) -> + for listener in @messageEventListeners + retVal = listener.call this, event + return false unless retVal + true + + addEventListener: (type, listener) -> + if type == "message" + @messageEventListeners.push listener + undefined + + removeEventListener: (type, listener) -> + if type == "message" + listenerIndex = @messageEventListeners.indexOf listener + if listenerIndex > -1 + @messageEventListeners = @messageEventListeners.splice listenerIndex, 1 + undefined + +root = exports ? window +root.UIComponentServer = UIComponentServer -- cgit v1.2.3