You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2009/05/22 21:55:03 UTC

svn commit: r777683 [2/2] - in /incubator/shindig/trunk/features/src/main/javascript/features/rpc: dpm.transport.js fe.transport.js feature.xml ifpc.transport.js nix.transport.js rmr.transport.js rpc.js wpm.transport.js

Added: incubator/shindig/trunk/features/src/main/javascript/features/rpc/wpm.transport.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/rpc/wpm.transport.js?rev=777683&view=auto
==============================================================================
--- incubator/shindig/trunk/features/src/main/javascript/features/rpc/wpm.transport.js (added)
+++ incubator/shindig/trunk/features/src/main/javascript/features/rpc/wpm.transport.js Fri May 22 19:55:02 2009
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+var gadgets = gadgets || {};
+gadgets.rpctx = gadgets.rpctx || {};
+
+/**
+ * Transport for browsers that support native messaging (various implementations
+ * of the HTML5 postMessage method). Officially defined at
+ * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html.
+ *
+ * postMessage is a native implementation of XDC. A page registers that
+ * it would like to receive messages by listening the the "message" event
+ * on the window (document in DPM) object. In turn, another page can
+ * raise that event by calling window.postMessage (document.postMessage
+ * in DPM) with a string representing the message and a string
+ * indicating on which domain the receiving page must be to receive
+ * the message. The target page will then have its "message" event raised
+ * if the domain matches and can, in turn, check the origin of the message
+ * and process the data contained within.
+ *
+ *   wpm: postMessage on the window object.
+ *      - Internet Explorer 8+
+ *      - Safari (latest nightlies as of 26/6/2008)
+ *      - Firefox 3+
+ *      - Opera 9+
+ */
+gadgets.rpctx.Wpm = function() {
+  var ready;
+
+  return {
+    getCode: function() {
+      return 'wpm';
+    },
+
+    isParentVerifiable: function() {
+      return true;
+    },
+
+    init: function(processFn, readyFn) {
+      ready = readyFn;
+      // Set up native postMessage handler.
+      window.addEventListener('message', function(packet) {
+        // TODO validate packet.domain for security reasons
+        processFn(gadgets.json.parse(packet.data));
+      }, false);
+      ready('..', true);  // Immediately ready to send to parent.
+      return true;
+    },
+
+    setup: function(receiverId, token) {
+      // If we're a gadget, send an ACK message to indicate to container
+      // that we're ready to receive messages.
+      if (receiverId === '..') {
+        gadgets.rpc.call(receiverId, gadgets.rpc.ACK);
+      }
+      return true;
+    },
+
+    call: function(targetId, from, rpc) {
+      var targetWin = targetId === '..' ? parent : frames[targetId];
+      var relay = gadgets.rpc.getRelayUrl(targetId);
+      if (relay) {
+        targetWin.postMessage(gadgets.json.stringify(rpc), relay);
+      }
+      return true;
+    }
+  };
+}();