Author: beaton
Date: Sat Jul  5 13:12:28 2008
New Revision: 674232

URL: http://svn.apache.org/viewvc?rev=674232&view=rev
Log:
Clean up the caching logic in io.js, per discussion on shindig-dev:
http://mail-archives.apache.org/mod_mbox/incubator-shindig-dev/200806.mbox/[EMAIL
 PROTECTED]


Modified:
    incubator/shindig/trunk/features/core.io/io.js
    incubator/shindig/trunk/features/core.io/iotest.js

Modified: incubator/shindig/trunk/features/core.io/io.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=674232&r1=674231&r2=674232&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/io.js (original)
+++ incubator/shindig/trunk/features/core.io/io.js Sat Jul  5 13:12:28 2008
@@ -272,28 +272,31 @@
 
       var params = opt_params || {};
 
+      var httpMethod = params.METHOD || "GET";
+      var refreshInterval = params.REFRESH_INTERVAL;
+
       // Check if authorization is requested
       var auth, st;
       if (params.AUTHORIZATION && params.AUTHORIZATION !== "NONE") {
         auth = params.AUTHORIZATION.toLowerCase();
         st = shindig.auth.getSecurityToken();
       } else {
-        // Non auth'd & non post'd requests are cachable
-        if (!params.REFRESH_INTERVAL && !params.POST_DATA) {
-          params.REFRESH_INTERVAL = 3600;
-         }
+        // Unauthenticated GET requests are cacheable
+        if (httpMethod === "GET" && refreshInterval === undefined) {
+          refreshInterval = 3600;
+        }
       }
       var signOwner = params.OWNER_SIGNED;
       var signViewer = params.VIEWER_SIGNED;
 
       var headers = params.HEADERS || {};
-      if (params.METHOD === "POST" && !headers["Content-Type"]) {
+      if (httpMethod === "POST" && !headers["Content-Type"]) {
         headers["Content-Type"] = "application/x-www-form-urlencoded";
       }
 
       var paramData = {
         url: url,
-        httpMethod : params.METHOD || "GET",
+        httpMethod : httpMethod,
         headers: gadgets.io.encodeValues(headers, false),
         postData : params.POST_DATA || "",
         authz : auth || "",
@@ -303,7 +306,7 @@
         getSummaries : !!params.GET_SUMMARIES,
         signOwner : signOwner || "true",
         signViewer : signViewer || "true",
-        gadget : gadgets.util.getUrlParameters()["url"],
+        gadget : gadgets.util.getUrlParameters().url,
 
         // should we bypass gadget spec cache (e.g. to read OAuth provider 
URLs)
         bypassSpecCache : gadgets.util.getUrlParameters().nocache || ""
@@ -321,9 +324,7 @@
       }
 
       if (!respondWithPreload(paramData, params, callback, processResponse)) {
-        var refreshInterval = params.REFRESH_INTERVAL || 0;
-
-        if (refreshInterval > 0) {
+        if (httpMethod === "GET" && refreshInterval > 0) {
           // this content should be cached
           // Add paramData to the URL
           var extraparams = "?refresh=" + refreshInterval + '&'
@@ -402,7 +403,10 @@
      */
     getProxyUrl : function (url, opt_params) {
       var params = opt_params || {};
-      var refresh = params['REFRESH_INTERVAL'] || '3600';
+      var refresh = params.REFRESH_INTERVAL;
+      if (refresh === undefined) {
+        refresh = "3600";
+      }
 
       return config.proxyUrl.replace("%url%", encodeURIComponent(url)).
           replace("%rawurl%", url).

Modified: incubator/shindig/trunk/features/core.io/iotest.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/iotest.js?rev=674232&r1=674231&r2=674232&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/iotest.js (original)
+++ incubator/shindig/trunk/features/core.io/iotest.js Sat Jul  5 13:12:28 2008
@@ -39,6 +39,7 @@
   gadgets.config.init({ "core.io" : {
       "proxyUrl" : "http://www.example.com/proxy?url=%url%&refresh=%refresh%";,
       "jsonProxyUrl" : "http://www.example.com/json"; }}); 
+  gadgets.io.preloaded_ = {};
 };
 
 IoTest.prototype.tearDown = function() {
@@ -46,15 +47,6 @@
   window.XMLHttpRequest = this.oldXMLHTTPRequest;
 };
 
-IoTest.prototype.testEncodeDecode = function() {
-  // BEE: remove this, just testing workaround for
-  // https://bugzilla.mozilla.org/show_bug.cgi?id=217257
-  var s = "http://www.example.com/somepage";;
-  var enc = encodeURIComponent(s);
-  var dec = unescape(enc);
-  this.assertEquals(s, dec);
-};
-
 IoTest.prototype.testGetProxyUrl = function() {
   var proxied = gadgets.io.getProxyUrl("http://target.example.com/image.gif";);
   this.assertEquals(
@@ -72,10 +64,6 @@
       proxied);
 };
 
-// Disabling this test for now, because it uncovered a bug ingadgets.io.js, but
-// I don't want to make functional changes at the same time as I refactor
-// it for testing.
-/*
 IoTest.prototype.testGetProxyUrl_disableCache = function() {
   var proxied = gadgets.io.getProxyUrl("http://target.example.com/image.gif";,
       { 'REFRESH_INTERVAL' : 0 });
@@ -84,7 +72,6 @@
           "image.gif&refresh=0",
       proxied);
 };
-*/
 
 IoTest.prototype.testEncodeValues = function() {
   var x = gadgets.io.encodeValues({ 'foo' : 'bar' });
@@ -137,6 +124,51 @@
   this.assertEquals('some data', resp.text);
 };
 
+IoTest.prototype.testNoMethod_nonDefaultRefresh = function() {
+  var req = new fakeXhr.Expectation("GET", "http://www.example.com/json";);
+  this.setStandardArgs(req, false);
+  req.setQueryArg("url", "http://target.example.com/somepage";);
+  req.setQueryArg("refresh", "1800");
+
+  var resp = this.makeFakeResponse(
+      "{ 'http://target.example.com/somepage' : { 'body' : 'some data' }}");
+
+  this.fakeXhrs.expect(req, resp);
+
+  var resp = null;
+  gadgets.io.makeRequest("http://target.example.com/somepage";,
+      function(data) {
+        resp = data;
+      },
+      {
+        "REFRESH_INTERVAL" : 1800,
+      });
+  this.assertEquals('some data', resp.text);
+};
+
+IoTest.prototype.testNoMethod_disableRefresh = function() {
+  var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
+  this.setStandardArgs(req, true);
+  req.setBodyArg("url", "http://target.example.com/somepage";);
+  req.setBodyArg("refresh", null);
+  req.setHeader("Content-Type", "application/x-www-form-urlencoded");
+
+  var resp = this.makeFakeResponse(
+      "{ 'http://target.example.com/somepage' : { 'body' : 'some data' }}");
+
+  this.fakeXhrs.expect(req, resp);
+
+  var resp = null;
+  gadgets.io.makeRequest("http://target.example.com/somepage";,
+      function(data) {
+        resp = data;
+      },
+      {
+        "REFRESH_INTERVAL" : 0,
+      });
+  this.assertEquals('some data', resp.text);
+};
+
 IoTest.prototype.testPost = function() {
   var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
   this.setStandardArgs(req, true);
@@ -165,6 +197,61 @@
   this.assertEquals('some data', resp.text);
 };
 
+IoTest.prototype.testPost_noBody = function() {
+  var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
+  this.setStandardArgs(req, true);
+  req.setBodyArg("httpMethod", "POST");
+  req.setBodyArg("postData", "");
+  req.setBodyArg("url", "http://target.example.com/somepage";);
+  req.setBodyArg("refresh", null);
+  req.setBodyArg("headers", 
"Content-Type=application%2fx-www-form-urlencoded");
+  req.setHeader("Content-Type", "application/x-www-form-urlencoded");
+
+  var resp = this.makeFakeResponse(
+      "{ 'http://target.example.com/somepage' : { 'body' : 'some data' }}");
+
+  this.fakeXhrs.expect(req, resp);
+
+  var resp = null;
+  var params = {};
+  params[gadgets.io.RequestParameters.METHOD] = "POST";
+  gadgets.io.makeRequest(
+      "http://target.example.com/somepage";,
+      function(data) {
+        resp = data;
+      },
+      params);
+  this.assertEquals('some data', resp.text);
+};
+
+IoTest.prototype.testPost_emptyBody = function() {
+  var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
+  this.setStandardArgs(req, true);
+  req.setBodyArg("httpMethod", "POST");
+  req.setBodyArg("postData", "");
+  req.setBodyArg("url", "http://target.example.com/somepage";);
+  req.setBodyArg("refresh", null);
+  req.setBodyArg("headers", 
"Content-Type=application%2fx-www-form-urlencoded");
+  req.setHeader("Content-Type", "application/x-www-form-urlencoded");
+
+  var resp = this.makeFakeResponse(
+      "{ 'http://target.example.com/somepage' : { 'body' : 'some data' }}");
+
+  this.fakeXhrs.expect(req, resp);
+
+  var resp = null;
+  var params = {};
+  params[gadgets.io.RequestParameters.METHOD] = "POST";
+  params[gadgets.io.RequestParameters.POST_DATA] = "";
+  gadgets.io.makeRequest(
+      "http://target.example.com/somepage";,
+      function(data) {
+        resp = data;
+      },
+      params);
+  this.assertEquals('some data', resp.text);
+};
+
 IoTest.prototype.testPut = function() {
   var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
   this.setStandardArgs(req, true);
@@ -192,6 +279,32 @@
   this.assertEquals('some data', resp.text);
 };
 
+IoTest.prototype.testPut_noBody = function() {
+  var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
+  this.setStandardArgs(req, true);
+  req.setBodyArg("httpMethod", "PUT");
+  req.setBodyArg("postData", "");
+  req.setBodyArg("url", "http://target.example.com/somepage";);
+  req.setBodyArg("refresh", null);
+  req.setHeader("Content-Type", "application/x-www-form-urlencoded");
+
+  var resp = this.makeFakeResponse(
+      "{ 'http://target.example.com/somepage' : { 'body' : 'some data' }}");
+
+  this.fakeXhrs.expect(req, resp);
+
+  var resp = null;
+  var params = {};
+  params[gadgets.io.RequestParameters.METHOD] = "PUT";
+  gadgets.io.makeRequest(
+      "http://target.example.com/somepage";,
+      function(data) {
+        resp = data;
+      },
+      params);
+  this.assertEquals('some data', resp.text);
+};
+
 IoTest.prototype.testSignedGet = function() {
   var req = new fakeXhr.Expectation("POST", "http://www.example.com/json";);
   this.setStandardArgs(req, true);


Reply via email to