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;
+ }
+ };
+}();