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);