diff options
| author | mrmr1993 | 2014-12-28 19:41:30 +0000 | 
|---|---|---|
| committer | mrmr1993 | 2014-12-28 19:41:30 +0000 | 
| commit | 020331fd8e120eee1fcb80ad05f7fcde33f3e981 (patch) | |
| tree | cbb4ac4d997f198659626bc93e8376fa17d72089 /pages/ui_component_server.coffee | |
| parent | b26f4aed8585418d18dfc43262070c8c8741e5e3 (diff) | |
| download | vimium-020331fd8e120eee1fcb80ad05f7fcde33f3e981.tar.bz2 | |
Create a script for connecting UIComponent iframes with their parents
Diffstat (limited to 'pages/ui_component_server.coffee')
| -rw-r--r-- | pages/ui_component_server.coffee | 41 | 
1 files changed, 41 insertions, 0 deletions
| 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 | 
