Author: lindner
Date: Wed Jul 29 21:14:20 2009
New Revision: 799082

URL: http://svn.apache.org/viewvc?rev=799082&view=rev
Log:
SHINDIG-822 | Patch from Jasvir Nagra | Remove caja's dependence on opensocial 
feature

Added:
    incubator/shindig/trunk/features/src/main/javascript/features/caja/taming.js
Modified:
    
incubator/shindig/trunk/features/src/main/javascript/features/caja/feature.xml
    
incubator/shindig/trunk/features/src/main/javascript/features/opensocial-reference/container.js
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
    
incubator/shindig/trunk/javascript/samplecontainer/examples/SocialCajaWorld.xml

Modified: 
incubator/shindig/trunk/features/src/main/javascript/features/caja/feature.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/caja/feature.xml?rev=799082&r1=799081&r2=799082&view=diff
==============================================================================
--- 
incubator/shindig/trunk/features/src/main/javascript/features/caja/feature.xml 
(original)
+++ 
incubator/shindig/trunk/features/src/main/javascript/features/caja/feature.xml 
Wed Jul 29 21:14:20 2009
@@ -24,5 +24,6 @@
     <script src="res://com/google/caja/plugin/domita-minified.js"/>
     <script src="caja.js"/>
     <script src="res://com/google/caja/plugin/valija.co.js"/>
+    <script src="taming.js"/>
   </gadget>
 </feature>

Added: 
incubator/shindig/trunk/features/src/main/javascript/features/caja/taming.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/caja/taming.js?rev=799082&view=auto
==============================================================================
--- 
incubator/shindig/trunk/features/src/main/javascript/features/caja/taming.js 
(added)
+++ 
incubator/shindig/trunk/features/src/main/javascript/features/caja/taming.js 
Wed Jul 29 21:14:20 2009
@@ -0,0 +1,763 @@
+/*
+ * 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.
+ */
+
+/**
+ * @fileoverview Caja is a whitelisting javascript sanitizing rewriter.
+ * This file tames the APIs that are exposed to a gadget
+ */
+
+___.enableCaja = (function() {
+
+    // URI policy: Rewrites all uris in a cajoled gadget
+  var uriCallback = {
+    rewrite: function rewrite(uri, mimeTypes) {
+      uri = String(uri);
+      // By default, only allow references to anchors.
+      if (/^#/.test(uri)) {
+        return '#' + encodeURIComponent(decodeURIComponent(uri.substring(1)));
+        // and files on the same host
+      } else if (/^\/(?:[^\/][^?#]*)?$/.test(uri)) {
+        return encodeURI(decodeURI(uri));
+      }
+      // This callback can be replaced with one that passes the URL through
+      // a proxy that checks the mimetype.
+      return null;
+    }
+  };
+    
+  // Take a valija function and wrap it in a plain function so uncajoled
+  // code can call it.
+  // TODO(benl): what if we're called from cajita code??? In this case
+  // we want to do callback.CALL__() instead of $v.cf(callback). But how
+  // do we know?
+  function tameCallback($v, callback) {
+    return callback && function tamedCallback() {
+      return $v.cf(callback, Array.slice(arguments, 0));
+    };
+  };
+  
+  // Warning: multiple taming styles ahead...
+  var taming = {
+    flash: {
+      embedFlash: function(orig) {
+        return ___.frozenFunc(function tamedEmbedFlash(swfUrl, swfContainer,
+                                                         swfVersion, 
opt_params) {
+      return orig.call(this, swfUrl, swfContainer.node___, swfVersion,
+                       opt_params);
+      });
+      }
+    },
+
+    MiniMessage: function($vs) {
+      var untamedMiniMessage = gadgets.MiniMessage;
+      var tamedMiniMessage = function(opt_moduleId, opt_container) {
+        this.mm_ = new untamedMiniMessage(opt_moduleId, opt_container);
+      };
+
+      tamedMiniMessage.prototype.createDismissibleMessage = function(message,
+                                                                     
opt_callback) {
+        message = html_sanitize(message);
+        return this.mm_.createDismissibleMessage(message,
+                                                 tameCallback($vs, 
opt_callback));
+      };
+      tamedMiniMessage.prototype.createStaticMessage = function(message,
+                                                                opt_callback) {
+        message = html_sanitize(message);
+        return this.mm_.createStaticMessage(message,
+                                            tameCallback($vs, opt_callback));
+      };
+      tamedMiniMessage.prototype.createTimerMessage = function(message, 
seconds,
+                                                               opt_callback) {
+        message = html_sanitize(message);
+        return this.mm_.createTimerMessage(message, seconds,
+                                           tameCallback($vs, opt_callback));
+      };
+      // FIXME: message should be a DOM element within our tree, other
+      // than the root (dismissMessage deletes it).
+      tamedMiniMessage.prototype.dismissMessage = function(message) {
+        return this.mm_.dismissMessage(message);
+      };
+      return tamedMiniMessage;
+    },
+    
+    newDataRequest: function($v, orig) {
+      return function tamedNewDataRequest() {
+        var dr = {
+          super_: orig(),
+
+          add: ___.frozenFunc(
+              function(thing, str) {
+                return this.super_.add(thing, str);
+              }),
+          newFetchPersonAppDataRequest: ___.frozenFunc(
+              function(person, what) {
+                return this.super_.newFetchPersonAppDataRequest(person, what);
+              }),
+          newFetchPersonRequest: ___.frozenFunc(
+              function(person, opts) {
+                return this.super_.newFetchPersonRequest(person, opts);
+              }),
+          newFetchPeopleRequest: ___.frozenFunc(
+              function(person, opts) {
+                return this.super_.newFetchPeopleRequest(person, opts);
+              }),
+          newUpdatePersonAppDataRequest: ___.frozenFunc(
+              function(person, opts) {
+                return this.super_.newUpdatePersonAppDataRequest(person, opts);
+              }),
+          send: ___.frozenFunc(
+              function(callback) {
+                return this.super_.send(tameCallback($v, callback));
+              })
+        };
+        return dr;
+      };
+    },
+
+    TabSet: function($v, orig) {
+      var tamedTabSet = function(opt_moduleId, opt_defaultTab, opt_container) {
+        this.ts_ = new orig(opt_moduleId, opt_defaultTab, opt_container);
+      };
+      
+      tamedTabSet.prototype.addTab = function(tabName, opt_params) {
+        // TODO(benl): tame the rest of opt_params
+        if (opt_params) {
+          opt_params.contentContainer = opt_params.contentContainer ?
+          undefined : ___.guard(blah) && opt_params.contentContainer.node___;
+        }
+        this.ts_.addTab(html_sanitize(tabName), opt_params);
+      };
+      
+      tamedTabSet.prototype.alignTabs = function(align, opt_offset) {
+        this.ts_.alignTabs(String(align), Number(opt_offset));
+      };
+      
+      tamedTabSet.prototype.displayTabs = function(display) {
+        this.ts_.displayTabs(Boolean(display));
+      };
+      
+      return tamedTabSet;
+    },
+    
+    util: {
+      registerOnLoadHandler: function($v, orig) {
+        return function tamedRegisterOnLoadHandler(callback) {
+          orig(tameCallback($v, callback));
+        };
+      }
+    },
+    
+    views: {
+      // note, we are going to monkey-patch just this function instead of 
wrapping the whole of views...
+      getCurrentView: function(orig) {
+        return function tamedGetCurrentView() {
+          // Note, taming decision was s_, so maybe we don't need this?
+          var view = orig.call(this);
+          ___.grantGeneric(view, 'getName');
+          ___.grantGeneric(view, 'isOnlyVisibleGadget');
+          return view;
+        };
+      }
+    }
+  };
+  
+  return function() {
+    var imports = ___.copy(___.sharedImports);
+    imports.outers = imports;
+    
+    var gadgetRoot = document.getElementById('cajoled-output');
+    gadgetRoot.className = 'g___';
+    document.body.appendChild(gadgetRoot);
+    
+    imports.htmlEmitter___ = new HtmlEmitter(gadgetRoot);
+    attachDocumentStub('-g___', uriCallback, imports, gadgetRoot);
+    
+    imports.$v = valijaMaker.CALL___(imports.outers);
+    
+    ___.getNewModuleHandler().setImports(imports);
+    
+    // Taming
+    if (gadgets.flash)
+      gadgets.flash.embedFlash
+          = taming.flash.embedFlash(gadgets.flash.embedFlash);
+    gadgets.util.registerOnLoadHandler
+      = taming.util.registerOnLoadHandler(imports.$v,
+                                          gadgets.util.registerOnLoadHandler);
+    if (gadgets.views)
+      gadgets.views.getCurrentView
+          = taming.views.getCurrentView(gadgets.views.getCurrentView);
+      opensocial.newDataRequest = taming.newDataRequest(imports.$v,
+                                                        
opensocial.newDataRequest);
+      if (gadgets.MiniMessage)
+        gadgets.MiniMessage = taming.MiniMessage(imports.$v);
+      if (gadgets.TabSet)
+        gadgets.TabSet = taming.TabSet(imports.$v, gadgets.TabSet);
+      
+      // Add the opensocial APIs and mark them callable and readable.
+      imports.outers.gadgets = gadgets;
+      imports.outers.opensocial = opensocial;
+      
+      // The below described the opensocial reference APIs.
+      // A prefix of "c_" specifies a class, "m_" a method, "f_" a field,
+      // and "s_" a static member.
+      // Derived from 
http://code.google.com/apis/opensocial/docs/0.8/reference/ .
+      var opensocialSchema = {
+        c_gadgets: {
+          c_MiniMessage: {
+            m_createDismissibleMessage: 0,
+            m_createStaticMessage: 0,
+            m_createTimerMessage: 0,
+            m_dismissMessage: 0
+          },
+          c_Prefs: {
+            m_getArray: 0,
+            m_getBool: 0,
+            m_getCountry: 0,
+            m_getFloat: 0,
+            m_getInt: 0,
+            m_getLang: 0,
+            m_getMsg: 0,
+            m_getString: 0,
+            m_set: 0,
+            m_setArray: 0
+          },
+          c_Tab: {
+            m_getCallback: 0,
+            m_getContentContainer: 0,
+            m_getIndex: 0,
+            m_getName: 0,
+            m_getNameContainer: 0
+          },
+          c_TabSet: {
+            m_addTab: 0
+            //        m_alignTabs: 0,
+            //        m_displayTabs: 0,
+            //        m_getHeaderContainer: 0,
+            //        m_getSelectedTab: 0,
+            //        m_getTabs: 0,
+            //        m_removeTab: 0,
+            //        m_setSelectedTab: 0,
+            //        m_swapTabs: 0
+          },
+          c_flash: {
+            s_embedCachedFlash: 0,
+            s_embedFlash: 0,
+            s_getMajorVersion: 0
+          },
+          c_io: {
+            c_AuthorizationType: {
+              s_NONE: 0,
+              s_OAUTH: 0,
+              s_SIGNED: 0
+            },
+            c_ContentType: {
+              s_DOM: 0,
+              s_FEED: 0,
+              s_JSON: 0,
+              s_TEXT: 0
+            },
+            c_MethodType: {
+              s_DELETE: 0,
+              s_GET: 0,
+              s_HEAD: 0,
+              s_POST: 0,
+              s_PUT: 0
+            },
+            c_ProxyUrlRequestParameters: {
+              s_REFRESH_INTERVAL: 0
+            },
+            c_RequestParameters: {
+              s_AUTHORIZATION: 0,
+              s_CONTENT_TYPE: 0,
+              s_GET_SUMMARIES: 0,
+              s_HEADERS: 0,
+              s_METHOD: 0,
+              s_NUM_ENTRIES: 0,
+              s_POST_DATA: 0
+            },
+            s_encodeValues: 0,
+            s_getProxyUrl: 0,
+            s_makeRequest: 0
+          },
+          c_json: {
+            s_parse: 0,
+            s_stringify: 0
+          },
+          c_pubsub: {
+            s_publish: 0,
+            s_subscribe: 0,
+            s_unsubscribe: 0
+          },
+          c_rpc: {
+            s_call: 0,
+            s_register: 0,
+            s_registerDefault: 0,
+            s_unregister: 0,
+            s_unregisterDefault: 0
+          },
+          c_skins: {
+            c_Property: {
+              s_ANCHOR_COLOR: 0,
+              s_BG_COLOR: 0,
+              s_BG_IMAGE: 0,
+              s_FONT_COLOR: 0
+            },
+            s_getProperty: 0
+          },
+          c_util: {
+            s_escapeString: 0,
+            s_getFeatureParameters: 0,
+            s_hasFeature: 0,
+            s_registerOnLoadHandler: 0,
+            s_unescapeString: 0
+          },
+          c_views: {
+            c_View: {
+              m_bind: 0,
+              m_getUrlTemplate: 0,
+              m_isOnlyVisibleGadget: 0
+            },
+            c_ViewType: {
+              s_CANVAS: 0,
+              s_HOME: 0,
+              s_PREVIEW: 0,
+              s_PROFILE: 0
+            },
+            s_bind: 0,
+            // FIXME(benl): Why do we think getCurrentView does not use "this"?
+            s_getCurrentView: 0,
+            s_getParams: 0,
+            s_requestNavigateTo: 0
+          },
+          c_window: {
+            s_adjustHeight: 0,
+            s_getViewportDimensions: 0,
+            s_setTitle: 0
+          }
+        },
+        c_opensocial: {
+          c_Activity: {
+            c_Field: {
+              s_APP_ID: 0,
+              s_BODY: 0,
+              s_BODY_ID: 0,
+              s_EXTERNAL_ID: 0,
+              s_ID: 0,
+              s_MEDIA_ITEMS: 0,
+              s_POSTED_TIME: 0,
+              s_PRIORITY: 0,
+              s_STREAM_FAVICON_URL: 0,
+              s_STREAM_SOURCE_URL: 0,
+              s_STREAM_TITLE: 0,
+              s_STREAM_URL: 0,
+              s_TEMPLATE_PARAMS: 0,
+              s_TITLE: 0,
+              s_TITLE_ID: 0,
+              s_URL: 0,
+              s_USER_ID: 0
+            },
+            m_getField: 0,
+            m_getId: 0,
+            m_setField: 0
+          },
+          c_Address: {
+            c_Field: {
+              s_COUNTRY: 0,
+              s_EXTENDED_ADDRESS: 0,
+              s_LATITUDE: 0,
+              s_LOCALITY: 0,
+              s_LONGITUDE: 0,
+              s_POSTAL_CODE: 0,
+              s_PO_BOX: 0,
+              s_REGION: 0,
+              s_STREET_ADDRESS: 0,
+              s_TYPE: 0,
+              s_UNSTRUCTURED_ADDRESS: 0
+            },
+            m_getField: 0
+          },
+          c_BodyType: {
+            c_Field: {
+              s_BUILD: 0,
+              s_EYE_COLOR: 0,
+              s_HAIR_COLOR: 0,
+              s_HEIGHT: 0,
+              s_WEIGHT: 0
+            },
+            m_getField: 0
+          },
+          c_Collection: {
+            m_asArray: 0,
+            m_each: 0,
+            m_getById: 0,
+            m_getOffset: 0,
+            m_getTotalSize: 0,
+            m_size: 0
+          },
+          c_CreateActivityPriority: {
+            s_HIGH: 0,
+            s_LOW: 0
+          },
+          c_DataRequest: {
+            c_DataRequestFields: {
+              s_ESCAPE_TYPE: 0
+            },
+            c_FilterType: {
+              s_ALL: 0,
+              s_HAS_APP: 0,
+              s_TOP_FRIENDS: 0
+            },
+            c_PeopleRequestFields: {
+              s_FILTER: 0,
+              s_FILTER_OPTIONS: 0,
+              s_FIRST: 0,
+              s_MAX: 0,
+              s_PROFILE_DETAILS: 0,
+              s_SORT_ORDER: 0
+            },
+            c_SortOrder: {
+              s_NAME: 0,
+              s_TOP_FRIENDS: 0
+            },
+            m_add: 0,
+            m_newFetchActivitiesRequest: 0,
+            m_newFetchPeopleRequest: 0,
+            m_newFetchPersonAppDataRequest: 0,
+            m_newFetchPersonRequest: 0,
+            m_newRemovePersonAppDataRequest: 0,
+            m_newUpdatePersonAppDataRequest: 0,
+            m_send: 0
+          },
+          c_DataResponse: {
+            m_get: 0,
+            m_getErrorMessage: 0,
+            m_hadError: 0
+          },
+          c_Email: {
+            c_Field: {
+              s_ADDRESS: 0,
+              s_TYPE: 0
+            },
+            m_getField: 0
+          },
+          c_Enum: {
+            c_Drinker: {
+              s_HEAVILY: 0,
+              s_NO: 0,
+              s_OCCASIONALLY: 0,
+              s_QUIT: 0,
+              s_QUITTING: 0,
+              s_REGULARLY: 0,
+              s_SOCIALLY: 0,
+              s_YES: 0
+            },
+            c_Gender: {
+              s_FEMALE: 0,
+              s_MALE: 0
+            },
+            c_LookingFor: {
+              s_ACTIVITY_PARTNERS: 0,
+              s_DATING: 0,
+              s_FRIENDS: 0,
+              s_NETWORKING: 0,
+              s_RANDOM: 0,
+              s_RELATIONSHIP: 0
+            },
+            c_Presence: {
+              s_AWAY: 0,
+              s_CHAT: 0,
+              s_DND: 0,
+              s_OFFLINE: 0,
+              s_ONLINE: 0,
+              s_XA: 0
+            },
+            c_Smoker: {
+              s_HEAVILY: 0,
+              s_NO: 0,
+              s_OCCASIONALLY: 0,
+              s_QUIT: 0,
+              s_QUITTING: 0,
+              s_REGULARLY: 0,
+              s_SOCIALLY: 0,
+              s_YES: 0
+            },
+            m_getDisplayValue: 0,
+            m_getKey: 0
+          },
+          c_Environment: {
+            c_ObjectType: {
+              s_ACTIVITY: 0,
+              s_ACTIVITY_MEDIA_ITEM: 0,
+              s_ADDRESS: 0,
+              s_BODY_TYPE: 0,
+              s_EMAIL: 0,
+              s_FILTER_TYPE: 0,
+              s_MESSAGE: 0,
+              s_MESSAGE_TYPE: 0,
+              s_NAME: 0,
+              s_ORGANIZATION: 0,
+              s_PERSON: 0,
+              s_PHONE: 0,
+              s_SORT_ORDER: 0,
+              s_URL: 0
+            },
+            m_getDomain: 0,
+            m_supportsField: 0
+          },
+          c_EscapeType: {
+            s_HTML_ESCAPE: 0,
+            s_NONE: 0
+          },
+          c_IdSpec: {
+            c_Field: {
+              s_GROUP_ID: 0,
+              s_NETWORK_DISTANCE: 0,
+              s_USER_ID: 0
+            },
+            c_PersonId: {
+              s_OWNER: 0,
+              s_VIEWER: 0
+            },
+            m_getField: 0,
+            m_setField: 0
+          },
+          c_MediaItem: {
+            c_Field: {
+              s_MIME_TYPE: 0,
+              s_TYPE: 0,
+              s_URL: 0
+            },
+            c_Type: {
+              s_AUDIO: 0,
+              s_IMAGE: 0,
+              s_VIDEO: 0
+            },
+            m_getField: 0,
+            m_setField: 0
+          },
+          c_Message: {
+            c_Field: {
+              s_BODY: 0,
+              s_BODY_ID: 0,
+              s_TITLE: 0,
+              s_TITLE_ID: 0,
+              s_TYPE: 0
+            },
+            c_Type: {
+              s_EMAIL: 0,
+              s_NOTIFICATION: 0,
+              s_PRIVATE_MESSAGE: 0,
+              s_PUBLIC_MESSAGE: 0
+            },
+            m_getField: 0,
+            m_setField: 0
+          },
+          c_Name: {
+            c_Field: {
+              s_ADDITIONAL_NAME: 0,
+              s_FAMILY_NAME: 0,
+              s_GIVEN_NAME: 0,
+              s_HONORIFIC_PREFIX: 0,
+              s_HONORIFIC_SUFFIX: 0,
+              s_UNSTRUCTURED: 0
+            },
+            m_getField: 0
+          },
+          c_NavigationParameters: {
+            c_DestinationType: {
+              s_RECIPIENT_DESTINATION: 0,
+              s_VIEWER_DESTINATION: 0
+            },
+            c_Field: {
+              s_OWNER: 0,
+              s_PARAMETERS: 0,
+              s_VIEW: 0
+            },
+            m_getField: 0,
+            m_setField: 0
+          },
+          c_Organization: {
+            c_Field: {
+              s_ADDRESS: 0,
+              s_DESCRIPTION: 0,
+              s_END_DATE: 0,
+              s_FIELD: 0,
+              s_NAME: 0,
+              s_SALARY: 0,
+              s_START_DATE: 0,
+              s_SUB_FIELD: 0,
+              s_TITLE: 0,
+              s_WEBPAGE: 0
+            },
+            m_getField: 0
+          },
+          c_Permission: {
+            s_VIEWER: 0
+          },
+          c_Person: {
+            c_Field: {
+              s_ABOUT_ME: 0,
+              s_ACTIVITIES: 0,
+              s_ADDRESSES: 0,
+              s_AGE: 0,
+              s_BODY_TYPE: 0,
+              s_BOOKS: 0,
+              s_CARS: 0,
+              s_CHILDREN: 0,
+              s_CURRENT_LOCATION: 0,
+              s_DATE_OF_BIRTH: 0,
+              s_DRINKER: 0,
+              s_EMAILS: 0,
+              s_ETHNICITY: 0,
+              s_FASHION: 0,
+              s_FOOD: 0,
+              s_GENDER: 0,
+              s_HAPPIEST_WHEN: 0,
+              s_HAS_APP: 0,
+              s_HEROES: 0,
+              s_HUMOR: 0,
+              s_ID: 0,
+              s_INTERESTS: 0,
+              s_JOBS: 0,
+              s_JOB_INTERESTS: 0,
+              s_LANGUAGES_SPOKEN: 0,
+              s_LIVING_ARRANGEMENT: 0,
+              s_LOOKING_FOR: 0,
+              s_MOVIES: 0,
+              s_MUSIC: 0,
+              s_NAME: 0,
+              s_NETWORK_PRESENCE: 0,
+              s_NICKNAME: 0,
+              s_PETS: 0,
+              s_PHONE_NUMBERS: 0,
+              s_POLITICAL_VIEWS: 0,
+              s_PROFILE_SONG: 0,
+              s_PROFILE_URL: 0,
+              s_PROFILE_VIDEO: 0,
+              s_QUOTES: 0,
+              s_RELATIONSHIP_STATUS: 0,
+              s_RELIGION: 0,
+              s_ROMANCE: 0,
+              s_SCARED_OF: 0,
+              s_SCHOOLS: 0,
+              s_SEXUAL_ORIENTATION: 0,
+              s_SMOKER: 0,
+              s_SPORTS: 0,
+              s_STATUS: 0,
+              s_TAGS: 0,
+              s_THUMBNAIL_URL: 0,
+              s_TIME_ZONE: 0,
+              s_TURN_OFFS: 0,
+              s_TURN_ONS: 0,
+              s_TV_SHOWS: 0,
+              s_URLS: 0
+            },
+            m_getDisplayName: 0,
+            m_getField: 0,
+            m_getId: 0,
+            m_isOwner: 0,
+            m_isViewer: 0
+          },
+          c_Phone: {
+            c_Field: {
+              s_NUMBER: 0,
+              s_TYPE: 0
+            },
+            m_getField: 0
+          },
+          c_ResponseItem: {
+            c_Error: {
+              s_BAD_REQUEST: 0,
+              s_FORBIDDEN: 0,
+              s_INTERNAL_ERROR: 0,
+              s_LIMIT_EXCEEDED: 0,
+              s_NOT_IMPLEMENTED: 0,
+              s_UNAUTHORIZED: 0
+            },
+            m_getData: 0,
+            m_getErrorCode: 0,
+            m_getErrorMessage: 0,
+            m_getOriginalDataRequest: 0,
+            m_hadError: 0
+          },
+          c_Url: {
+            c_Field: {
+              s_ADDRESS: 0,
+              s_LINK_TEXT: 0,
+              s_TYPE: 0
+            },
+            m_getField: 0
+          },
+          s_getEnvironment: 0,
+          s_hasPermission: 0,
+          s_newActivity: 0,
+          s_newDataRequest: 0,
+          s_newIdSpec: 0,
+          s_newMediaItem: 0,
+          s_newMessage: 0,
+          s_newNavigationParameters: 0,
+          s_requestCreateActivity: 0,
+          s_requestPermission: 0,
+          s_requestSendMessage: 0,
+          s_requestShareApp: 0
+        }
+      };
+      
+      function whitelist(schema, obj) {
+        if (!obj) { return; }  // Occurs for optional features
+        for (var k in schema) {
+          if (schema.hasOwnProperty(k)) {
+            var m = k.match(/^([mcsa])_(\w+)$/);
+            var type = m[1], name = m[2];
+            switch (type) {
+              case 'c':
+                ___.grantRead(obj, name);
+                whitelist(schema[k], obj[name]);
+                break;
+                // grant access to a function that uses "this"
+              case 'm':
+                ___.grantGeneric(obj.prototype, name);
+                break;
+              case 'f':
+                ___.grantRead(obj.prototype, name);
+                break;
+              case 'a': // attenuate function
+                if ('function' === typeof obj[name] && schema[k]) {
+                  ___.handleGeneric(obj, name, schema[k](obj[name]));
+                }
+                break;
+                // grant access to a variable or an instance
+                // of a function that does not use "this"
+              case 's':
+                if ('function' === typeof obj[name]) {
+                  ___.grantFunc(obj, name);
+                } else {
+                  ___.grantRead(obj, name);
+                }
+                break;
+            }
+          }
+        }
+      }
+      whitelist(opensocialSchema, imports.outers);
+      if (gadgets.MiniMessage)
+        ___.ctor(gadgets.MiniMessage, Object, 'MiniMessage');
+      if (gadgets.TabSet)
+        ___.ctor(gadgets.TabSet, Object, 'TabSet');
+  };
+})();

Modified: 
incubator/shindig/trunk/features/src/main/javascript/features/opensocial-reference/container.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/opensocial-reference/container.js?rev=799082&r1=799081&r2=799082&view=diff
==============================================================================
--- 
incubator/shindig/trunk/features/src/main/javascript/features/opensocial-reference/container.js
 (original)
+++ 
incubator/shindig/trunk/features/src/main/javascript/features/opensocial-reference/container.js
 Wed Jul 29 21:14:20 2009
@@ -508,766 +508,4 @@
   } else {
     return gadgets.util.escape(value, opt_escapeObjects);
   }
-};
-
-
-/**
- * Caja Support.  See features/caja/*.js
- */
-var cajita;
-var ___;
-var attachDocumentStub;
-// See features/caja/domita.js for uriCallback's contract.
-var uriCallback = {
-  rewrite: function rewrite(uri, mimeTypes) {
-    uri = String(uri);
-    // By default, only allow references to anchors.
-    if (/^#/.test(uri)) {
-      return '#' + encodeURIComponent(decodeURIComponent(uri.substring(1)));
-    // and files on the same host
-    } else if (/^\/(?:[^\/][^?#]*)?$/.test(uri)) {
-      return encodeURI(decodeURI(uri));
-    }
-    // This callback can be replaced with one that passes the URL through
-    // a proxy that checks the mimetype.
-    return null;
-  }
-};
-
-// Take a valija function and wrap it in a plain function so uncajoled
-// code can call it.
-// TODO(benl): what if we're called from cajita code??? In this case
-// we want to do callback.CALL__() instead of $v.cf(callback). But how
-// do we know?
-function tameCallback($v, callback) {
-  return callback && function tamedCallback() {
-    return $v.cf(callback, Array.slice(arguments, 0));
-  };
-};
-
-// Warning: multiple taming styles ahead...
-var taming = {
-/*
-  flash: function() {
-    return ___.frozenFunc(function(node, flashStreamer, flwidth, flwmode,
-                                  flvars) {
-      node.node___.innerHTML = "<obj" + "ect id='flashbuddypoke' 
data='"+flashStreamer+"' height='500' width='"+flwidth+"' 
type='application/x-shockwave-flash'><param name='menu' value='false'/><param 
name='allowNetworking' value='all'/><param name='allowScriptAccess' 
value='always'/><param name='movie' value='"+flashStreamer+"'/><param 
name='movie' value='"+flashStreamer+"'/><param name='flashvars' 
value='"+flvars+"'/><param name='wmode' value='"+flwmode+"'/><param 
name='bgcolor' value='#FFFFFF'/></obj"+"ect>";
-    });
-  },
-*/
-
-  flash: {
-    embedFlash: function(orig) {
-      return ___.frozenFunc(function tamedEmbedFlash(swfUrl, swfContainer,
-                                                    swfVersion, opt_params) {
-       return orig.call(this, swfUrl, swfContainer.node___, swfVersion,
-                        opt_params);
-      });
-    }
-  },
-
-  MiniMessage: function($vs) {
-    var untamedMiniMessage = gadgets.MiniMessage;
-    var tamedMiniMessage = function(opt_moduleId, opt_container) {
-      this.mm_ = new untamedMiniMessage(opt_moduleId, opt_container);
-    };
-
-    tamedMiniMessage.prototype.createDismissibleMessage = function(message,
-                                                                opt_callback) {
-      message = html_sanitize(message);
-      return this.mm_.createDismissibleMessage(message,
-                                              tameCallback($vs, opt_callback));
-    };
-    tamedMiniMessage.prototype.createStaticMessage = function(message,
-                                                             opt_callback) {
-      message = html_sanitize(message);
-      return this.mm_.createStaticMessage(message,
-                                         tameCallback($vs, opt_callback));
-    };
-    tamedMiniMessage.prototype.createTimerMessage = function(message, seconds,
-                                                            opt_callback) {
-      message = html_sanitize(message);
-      return this.mm_.createTimerMessage(message, seconds,
-                                        tameCallback($vs, opt_callback));
-    };
-    // FIXME: message should be a DOM element within our tree, other
-    // than the root (dismissMessage deletes it).
-    tamedMiniMessage.prototype.dismissMessage = function(message) {
-      return this.mm_.dismissMessage(message);
-    };
-    return tamedMiniMessage;
-  },
-
-  newDataRequest: function($v, orig) {
-    return function tamedNewDataRequest() {
-      var dr = {
-       super_: orig(),
-
-       add: ___.frozenFunc(function(thing, str) {
-         return this.super_.add(thing, str);
-       }),
-       newFetchPersonAppDataRequest: ___.frozenFunc(function(person, what) {
-         return this.super_.newFetchPersonAppDataRequest(person, what);
-       }),
-       newFetchPersonRequest: ___.frozenFunc(function(person, opts) {
-         return this.super_.newFetchPersonRequest(person, opts);
-       }),
-       newFetchPeopleRequest: ___.frozenFunc(function(person, opts) {
-         return this.super_.newFetchPeopleRequest(person, opts);
-       }),
-       newUpdatePersonAppDataRequest: ___.frozenFunc(function(person, opts) {
-         return this.super_.newUpdatePersonAppDataRequest(person, opts);
-       }),
-       send: ___.frozenFunc(function(callback) {
-         return this.super_.send(tameCallback($v, callback));
-       })
-      };
-      return dr;
-    };
-  },
-
-  TabSet: function($v, orig) {
-    var tamedTabSet = function(opt_moduleId, opt_defaultTab, opt_container) {
-      this.ts_ = new orig(opt_moduleId, opt_defaultTab, opt_container);
-    };
-
-    tamedTabSet.prototype.addTab = function(tabName, opt_params) {
-      // TODO(benl): tame the rest of opt_params
-      if (opt_params) {
-       opt_params.contentContainer = opt_params.contentContainer ?
-         undefined : ___.guard(blah) && opt_params.contentContainer.node___;
-      }
-      this.ts_.addTab(html_sanitize(tabName), opt_params);
-    };
-
-    tamedTabSet.prototype.alignTabs = function(align, opt_offset) {
-      this.ts_.alignTabs(String(align), Number(opt_offset));
-    };
-
-    tamedTabSet.prototype.displayTabs = function(display) {
-      this.ts_.displayTabs(Boolean(display));
-    };
-
-    return tamedTabSet;
-  },
-
-  util: {
-    registerOnLoadHandler: function($v, orig) {
-      return function tamedRegisterOnLoadHandler(callback) {
-        orig(tameCallback($v, callback));
-      };
-    }
-  },
-
-  views: {
-    // note, we are going to monkey-patch just this function instead of 
wrapping the whole of views...
-    getCurrentView: function(orig) {
-      return function tamedGetCurrentView() {
-       // Note, taming decision was s_, so maybe we don't need this?
-       var view = orig.call(this);
-       ___.grantGeneric(view, 'getName');
-       ___.grantGeneric(view, 'isOnlyVisibleGadget');
-       return view;
-      };
-    }
-  }
-};
-
-/**
- * Enable Caja support
- *
- * @type Container
- * @private
- */
-
-// TODO(doll): As caja evolves this method should get a lot smaller
-opensocial.Container.prototype.enableCaja = function() {
-
-  ___ = window["___"];
-  cajita = window["cajita"];
-  valijaMaker = window["valijaMaker"];
-  attachDocumentStub = window["attachDocumentStub"];
-
-  var imports = ___.copy(___.sharedImports);
-  imports.outers = imports;
-
-  var gadgetRoot = document.getElementById('cajoled-output');
-  gadgetRoot.className = 'g___';
-  document.body.appendChild(gadgetRoot);
-
-  imports.htmlEmitter___ = new HtmlEmitter(gadgetRoot);
-  attachDocumentStub('-g___', uriCallback, imports, gadgetRoot);
-
-  imports.$v = valijaMaker.CALL___(imports.outers);
-
-  ___.getNewModuleHandler().setImports(imports);
-
-  // Taming
-  if (gadgets.flash)
-    gadgets.flash.embedFlash
-      = taming.flash.embedFlash(gadgets.flash.embedFlash);
-  gadgets.util.registerOnLoadHandler
-    = taming.util.registerOnLoadHandler(imports.$v,
-                                       gadgets.util.registerOnLoadHandler);
-  if (gadgets.views)
-    gadgets.views.getCurrentView
-      = taming.views.getCurrentView(gadgets.views.getCurrentView);
-  opensocial.newDataRequest = taming.newDataRequest(imports.$v,
-                                                   opensocial.newDataRequest);
-  if (gadgets.MiniMessage)
-    gadgets.MiniMessage = taming.MiniMessage(imports.$v);
-  if (gadgets.TabSet)
-    gadgets.TabSet = taming.TabSet(imports.$v, gadgets.TabSet);
-
-  // Add the opensocial APIs and mark them callable and readable.
-  imports.outers.gadgets = gadgets;
-  imports.outers.opensocial = opensocial;
-
-  // The below described the opensocial reference APIs.
-  // A prefix of "c_" specifies a class, "m_" a method, "f_" a field,
-  // and "s_" a static member.
-  // Derived from http://code.google.com/apis/opensocial/docs/0.8/reference/ .
-  var opensocialSchema = {
-    c_gadgets: {
-      c_MiniMessage: {
-        m_createDismissibleMessage: 0,
-        m_createStaticMessage: 0,
-        m_createTimerMessage: 0,
-        m_dismissMessage: 0
-      },
-      c_Prefs: {
-        m_getArray: 0,
-        m_getBool: 0,
-        m_getCountry: 0,
-        m_getFloat: 0,
-        m_getInt: 0,
-        m_getLang: 0,
-        m_getMsg: 0,
-        m_getString: 0,
-        m_set: 0,
-        m_setArray: 0
-      },
-      c_Tab: {
-        m_getCallback: 0,
-        m_getContentContainer: 0,
-        m_getIndex: 0,
-        m_getName: 0,
-        m_getNameContainer: 0
-      },
-      c_TabSet: {
-        m_addTab: 0
-//        m_alignTabs: 0,
-//        m_displayTabs: 0,
-//        m_getHeaderContainer: 0,
-//        m_getSelectedTab: 0,
-//        m_getTabs: 0,
-//        m_removeTab: 0,
-//        m_setSelectedTab: 0,
-//        m_swapTabs: 0
-      },
-      c_flash: {
-        s_embedCachedFlash: 0,
-        s_embedFlash: 0,
-        s_getMajorVersion: 0
-      },
-      c_io: {
-        c_AuthorizationType: {
-          s_NONE: 0,
-          s_OAUTH: 0,
-          s_SIGNED: 0
-        },
-        c_ContentType: {
-          s_DOM: 0,
-          s_FEED: 0,
-          s_JSON: 0,
-          s_TEXT: 0
-        },
-        c_MethodType: {
-          s_DELETE: 0,
-          s_GET: 0,
-          s_HEAD: 0,
-          s_POST: 0,
-          s_PUT: 0
-        },
-        c_ProxyUrlRequestParameters: {
-          s_REFRESH_INTERVAL: 0
-        },
-        c_RequestParameters: {
-          s_AUTHORIZATION: 0,
-          s_CONTENT_TYPE: 0,
-          s_GET_SUMMARIES: 0,
-          s_HEADERS: 0,
-          s_METHOD: 0,
-          s_NUM_ENTRIES: 0,
-          s_POST_DATA: 0
-        },
-        s_encodeValues: 0,
-        s_getProxyUrl: 0,
-        s_makeRequest: 0
-      },
-      c_json: {
-        s_parse: 0,
-        s_stringify: 0
-      },
-      c_pubsub: {
-        s_publish: 0,
-        s_subscribe: 0,
-        s_unsubscribe: 0
-      },
-      c_rpc: {
-        s_call: 0,
-        s_register: 0,
-        s_registerDefault: 0,
-        s_unregister: 0,
-        s_unregisterDefault: 0
-      },
-      c_skins: {
-        c_Property: {
-          s_ANCHOR_COLOR: 0,
-          s_BG_COLOR: 0,
-          s_BG_IMAGE: 0,
-          s_FONT_COLOR: 0
-        },
-        s_getProperty: 0
-      },
-      c_util: {
-        s_escapeString: 0,
-        s_getFeatureParameters: 0,
-        s_hasFeature: 0,
-        s_registerOnLoadHandler: 0,
-        s_unescapeString: 0
-      },
-      c_views: {
-        c_View: {
-          m_bind: 0,
-          m_getUrlTemplate: 0,
-          m_isOnlyVisibleGadget: 0
-        },
-        c_ViewType: {
-          s_CANVAS: 0,
-          s_HOME: 0,
-          s_PREVIEW: 0,
-          s_PROFILE: 0
-        },
-        s_bind: 0,
-       // FIXME(benl): Why do we think getCurrentView does not use "this"?
-        s_getCurrentView: 0,
-        s_getParams: 0,
-        s_requestNavigateTo: 0
-      },
-      c_window: {
-        s_adjustHeight: 0,
-        s_getViewportDimensions: 0,
-        s_setTitle: 0
-      }
-    },
-    c_opensocial: {
-      c_Activity: {
-        c_Field: {
-          s_APP_ID: 0,
-          s_BODY: 0,
-          s_BODY_ID: 0,
-          s_EXTERNAL_ID: 0,
-          s_ID: 0,
-          s_MEDIA_ITEMS: 0,
-          s_POSTED_TIME: 0,
-          s_PRIORITY: 0,
-          s_STREAM_FAVICON_URL: 0,
-          s_STREAM_SOURCE_URL: 0,
-          s_STREAM_TITLE: 0,
-          s_STREAM_URL: 0,
-          s_TEMPLATE_PARAMS: 0,
-          s_TITLE: 0,
-          s_TITLE_ID: 0,
-          s_URL: 0,
-          s_USER_ID: 0
-        },
-        m_getField: 0,
-        m_getId: 0,
-        m_setField: 0
-      },
-      c_Address: {
-        c_Field: {
-          s_COUNTRY: 0,
-          s_EXTENDED_ADDRESS: 0,
-          s_LATITUDE: 0,
-          s_LOCALITY: 0,
-          s_LONGITUDE: 0,
-          s_POSTAL_CODE: 0,
-          s_PO_BOX: 0,
-          s_REGION: 0,
-          s_STREET_ADDRESS: 0,
-          s_TYPE: 0,
-          s_UNSTRUCTURED_ADDRESS: 0
-        },
-        m_getField: 0
-      },
-      c_BodyType: {
-        c_Field: {
-          s_BUILD: 0,
-          s_EYE_COLOR: 0,
-          s_HAIR_COLOR: 0,
-          s_HEIGHT: 0,
-          s_WEIGHT: 0
-        },
-        m_getField: 0
-      },
-      c_Collection: {
-        m_asArray: 0,
-        m_each: 0,
-        m_getById: 0,
-        m_getOffset: 0,
-        m_getTotalSize: 0,
-        m_size: 0
-      },
-      c_CreateActivityPriority: {
-        s_HIGH: 0,
-        s_LOW: 0
-      },
-      c_DataRequest: {
-        c_DataRequestFields: {
-          s_ESCAPE_TYPE: 0
-        },
-        c_FilterType: {
-          s_ALL: 0,
-          s_HAS_APP: 0,
-          s_TOP_FRIENDS: 0
-        },
-        c_PeopleRequestFields: {
-          s_FILTER: 0,
-          s_FILTER_OPTIONS: 0,
-          s_FIRST: 0,
-          s_MAX: 0,
-          s_PROFILE_DETAILS: 0,
-          s_SORT_ORDER: 0
-        },
-        c_SortOrder: {
-          s_NAME: 0,
-          s_TOP_FRIENDS: 0
-        },
-        m_add: 0,
-        m_newFetchActivitiesRequest: 0,
-        m_newFetchPeopleRequest: 0,
-        m_newFetchPersonAppDataRequest: 0,
-        m_newFetchPersonRequest: 0,
-        m_newRemovePersonAppDataRequest: 0,
-        m_newUpdatePersonAppDataRequest: 0,
-        m_send: 0
-      },
-      c_DataResponse: {
-        m_get: 0,
-        m_getErrorMessage: 0,
-        m_hadError: 0
-      },
-      c_Email: {
-        c_Field: {
-          s_ADDRESS: 0,
-          s_TYPE: 0
-        },
-        m_getField: 0
-      },
-      c_Enum: {
-        c_Drinker: {
-          s_HEAVILY: 0,
-          s_NO: 0,
-          s_OCCASIONALLY: 0,
-          s_QUIT: 0,
-          s_QUITTING: 0,
-          s_REGULARLY: 0,
-          s_SOCIALLY: 0,
-          s_YES: 0
-        },
-        c_Gender: {
-          s_FEMALE: 0,
-          s_MALE: 0
-        },
-        c_LookingFor: {
-          s_ACTIVITY_PARTNERS: 0,
-          s_DATING: 0,
-          s_FRIENDS: 0,
-          s_NETWORKING: 0,
-          s_RANDOM: 0,
-          s_RELATIONSHIP: 0
-        },
-        c_Presence: {
-          s_AWAY: 0,
-          s_CHAT: 0,
-          s_DND: 0,
-          s_OFFLINE: 0,
-          s_ONLINE: 0,
-          s_XA: 0
-        },
-        c_Smoker: {
-          s_HEAVILY: 0,
-          s_NO: 0,
-          s_OCCASIONALLY: 0,
-          s_QUIT: 0,
-          s_QUITTING: 0,
-          s_REGULARLY: 0,
-          s_SOCIALLY: 0,
-          s_YES: 0
-        },
-        m_getDisplayValue: 0,
-        m_getKey: 0
-      },
-      c_Environment: {
-        c_ObjectType: {
-          s_ACTIVITY: 0,
-          s_ACTIVITY_MEDIA_ITEM: 0,
-          s_ADDRESS: 0,
-          s_BODY_TYPE: 0,
-          s_EMAIL: 0,
-          s_FILTER_TYPE: 0,
-          s_MESSAGE: 0,
-          s_MESSAGE_TYPE: 0,
-          s_NAME: 0,
-          s_ORGANIZATION: 0,
-          s_PERSON: 0,
-          s_PHONE: 0,
-          s_SORT_ORDER: 0,
-          s_URL: 0
-        },
-        m_getDomain: 0,
-        m_supportsField: 0
-      },
-      c_EscapeType: {
-        s_HTML_ESCAPE: 0,
-        s_NONE: 0
-      },
-      c_IdSpec: {
-        c_Field: {
-          s_GROUP_ID: 0,
-          s_NETWORK_DISTANCE: 0,
-          s_USER_ID: 0
-        },
-        c_PersonId: {
-          s_OWNER: 0,
-          s_VIEWER: 0
-        },
-        m_getField: 0,
-        m_setField: 0
-      },
-      c_MediaItem: {
-        c_Field: {
-          s_MIME_TYPE: 0,
-          s_TYPE: 0,
-          s_URL: 0
-        },
-        c_Type: {
-          s_AUDIO: 0,
-          s_IMAGE: 0,
-          s_VIDEO: 0
-        },
-        m_getField: 0,
-        m_setField: 0
-      },
-      c_Message: {
-        c_Field: {
-          s_BODY: 0,
-          s_BODY_ID: 0,
-          s_TITLE: 0,
-          s_TITLE_ID: 0,
-          s_TYPE: 0
-        },
-        c_Type: {
-          s_EMAIL: 0,
-          s_NOTIFICATION: 0,
-          s_PRIVATE_MESSAGE: 0,
-          s_PUBLIC_MESSAGE: 0
-        },
-        m_getField: 0,
-        m_setField: 0
-      },
-      c_Name: {
-        c_Field: {
-          s_ADDITIONAL_NAME: 0,
-          s_FAMILY_NAME: 0,
-          s_GIVEN_NAME: 0,
-          s_HONORIFIC_PREFIX: 0,
-          s_HONORIFIC_SUFFIX: 0,
-          s_UNSTRUCTURED: 0
-        },
-        m_getField: 0
-      },
-      c_NavigationParameters: {
-        c_DestinationType: {
-          s_RECIPIENT_DESTINATION: 0,
-          s_VIEWER_DESTINATION: 0
-        },
-        c_Field: {
-          s_OWNER: 0,
-          s_PARAMETERS: 0,
-          s_VIEW: 0
-        },
-        m_getField: 0,
-        m_setField: 0
-      },
-      c_Organization: {
-        c_Field: {
-          s_ADDRESS: 0,
-          s_DESCRIPTION: 0,
-          s_END_DATE: 0,
-          s_FIELD: 0,
-          s_NAME: 0,
-          s_SALARY: 0,
-          s_START_DATE: 0,
-          s_SUB_FIELD: 0,
-          s_TITLE: 0,
-          s_WEBPAGE: 0
-        },
-        m_getField: 0
-      },
-      c_Permission: {
-        s_VIEWER: 0
-      },
-      c_Person: {
-        c_Field: {
-          s_ABOUT_ME: 0,
-          s_ACTIVITIES: 0,
-          s_ADDRESSES: 0,
-          s_AGE: 0,
-          s_BODY_TYPE: 0,
-          s_BOOKS: 0,
-          s_CARS: 0,
-          s_CHILDREN: 0,
-          s_CURRENT_LOCATION: 0,
-          s_DATE_OF_BIRTH: 0,
-          s_DRINKER: 0,
-          s_EMAILS: 0,
-          s_ETHNICITY: 0,
-          s_FASHION: 0,
-          s_FOOD: 0,
-          s_GENDER: 0,
-          s_HAPPIEST_WHEN: 0,
-          s_HAS_APP: 0,
-          s_HEROES: 0,
-          s_HUMOR: 0,
-          s_ID: 0,
-          s_INTERESTS: 0,
-          s_JOBS: 0,
-          s_JOB_INTERESTS: 0,
-          s_LANGUAGES_SPOKEN: 0,
-          s_LIVING_ARRANGEMENT: 0,
-          s_LOOKING_FOR: 0,
-          s_MOVIES: 0,
-          s_MUSIC: 0,
-          s_NAME: 0,
-          s_NETWORK_PRESENCE: 0,
-          s_NICKNAME: 0,
-          s_PETS: 0,
-          s_PHONE_NUMBERS: 0,
-          s_POLITICAL_VIEWS: 0,
-          s_PROFILE_SONG: 0,
-          s_PROFILE_URL: 0,
-          s_PROFILE_VIDEO: 0,
-          s_QUOTES: 0,
-          s_RELATIONSHIP_STATUS: 0,
-          s_RELIGION: 0,
-          s_ROMANCE: 0,
-          s_SCARED_OF: 0,
-          s_SCHOOLS: 0,
-          s_SEXUAL_ORIENTATION: 0,
-          s_SMOKER: 0,
-          s_SPORTS: 0,
-          s_STATUS: 0,
-          s_TAGS: 0,
-          s_THUMBNAIL_URL: 0,
-          s_TIME_ZONE: 0,
-          s_TURN_OFFS: 0,
-          s_TURN_ONS: 0,
-          s_TV_SHOWS: 0,
-          s_URLS: 0
-        },
-        m_getDisplayName: 0,
-        m_getField: 0,
-        m_getId: 0,
-        m_isOwner: 0,
-        m_isViewer: 0
-      },
-      c_Phone: {
-        c_Field: {
-          s_NUMBER: 0,
-          s_TYPE: 0
-        },
-        m_getField: 0
-      },
-      c_ResponseItem: {
-        c_Error: {
-          s_BAD_REQUEST: 0,
-          s_FORBIDDEN: 0,
-          s_INTERNAL_ERROR: 0,
-          s_LIMIT_EXCEEDED: 0,
-          s_NOT_IMPLEMENTED: 0,
-          s_UNAUTHORIZED: 0
-        },
-        m_getData: 0,
-        m_getErrorCode: 0,
-        m_getErrorMessage: 0,
-        m_getOriginalDataRequest: 0,
-        m_hadError: 0
-      },
-      c_Url: {
-        c_Field: {
-          s_ADDRESS: 0,
-          s_LINK_TEXT: 0,
-          s_TYPE: 0
-        },
-        m_getField: 0
-      },
-      s_getEnvironment: 0,
-      s_hasPermission: 0,
-      s_newActivity: 0,
-      s_newDataRequest: 0,
-      s_newIdSpec: 0,
-      s_newMediaItem: 0,
-      s_newMessage: 0,
-      s_newNavigationParameters: 0,
-      s_requestCreateActivity: 0,
-      s_requestPermission: 0,
-      s_requestSendMessage: 0,
-      s_requestShareApp: 0
-    }
-  };
-
-  function whitelist(schema, obj) {
-    if (!obj) { return; }  // Occurs for optional features
-    for (var k in schema) {
-      if (schema.hasOwnProperty(k)) {
-        var m = k.match(/^([mcsa])_(\w+)$/);
-        var type = m[1], name = m[2];
-        switch (type) {
-          case 'c':
-            ___.grantRead(obj, name);
-            whitelist(schema[k], obj[name]);
-            break;
-          // grant access to a function that uses "this"
-          case 'm':
-            ___.grantGeneric(obj.prototype, name);
-            break;
-          case 'f':
-            ___.grantRead(obj.prototype, name);
-            break;
-          case 'a': // attenuate function
-            if ('function' === typeof obj[name] && schema[k]) {
-              ___.handleGeneric(obj, name, schema[k](obj[name]));
-            }
-            break;
-          // grant access to a variable or an instance
-          // of a function that does not use "this"
-          case 's':
-            if ('function' === typeof obj[name]) {
-              ___.grantFunc(obj, name);
-            } else {
-              ___.grantRead(obj, name);
-            }
-            break;
-        }
-      }
-    }
-  }
-  whitelist(opensocialSchema, imports.outers);
-  if (gadgets.MiniMessage)
-    ___.ctor(gadgets.MiniMessage, Object, 'MiniMessage');
-  if (gadgets.TabSet)
-    ___.ctor(gadgets.TabSet, Object, 'TabSet');
-};
+};
\ No newline at end of file

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java?rev=799082&r1=799081&r2=799082&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/CajaContentRewriter.java
 Wed Jul 29 21:14:20 2009
@@ -152,9 +152,7 @@
   }
 
   private String tameCajaClientApi() {
-    return "<script>" +
-      "opensocial.Container.get().enableCaja();" +
-      "</script>";
+    return "<script>___.enableCaja()</script>";
   }
 
     private void throwCajolingException(Exception cause, MessageQueue mq) {

Modified: 
incubator/shindig/trunk/javascript/samplecontainer/examples/SocialCajaWorld.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/javascript/samplecontainer/examples/SocialCajaWorld.xml?rev=799082&r1=799081&r2=799082&view=diff
==============================================================================
--- 
incubator/shindig/trunk/javascript/samplecontainer/examples/SocialCajaWorld.xml 
(original)
+++ 
incubator/shindig/trunk/javascript/samplecontainer/examples/SocialCajaWorld.xml 
Wed Jul 29 21:14:20 2009
@@ -5,7 +5,7 @@
     height="200" 
     author="Jasvir Nagra" 
     author_email="[email protected]"> 
-   <Require feature="opensocial-0.8"></Require>
+   <Require feature="caja"></Require>
    <Require feature="dynamic-height"></Require>
  </ModulePrefs>
  <Content type="html">


Reply via email to