changeset 75:312d4af344c2

Fixed cache.js for iPad.
author Atul Varma <avarma@mozilla.com>
date Sun, 25 Apr 2010 19:31:19 -0700
parents 1a0a3abbba93
children ea27d04a6522
files js/modules/cache.js
diffstat 1 files changed, 13 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/js/modules/cache.js	Sun Apr 25 18:58:56 2010 -0700
+++ b/js/modules/cache.js	Sun Apr 25 19:31:19 2010 -0700
@@ -1,15 +1,23 @@
 Require.modules["cache"] = function(exports, require) {
   var window = require("window");
-  var cache;
+  var cache = window.localStorage.getItem("cache");
 
-  if (window.localStorage["cache"]) {
-    cache = JSON.parse(window.localStorage["cache"]);
-  } else
+  if (cache)
+    cache = JSON.parse(cache);
+  else
     cache = {};
 
   exports.set = function set(key, value) {
     cache[key] = value;
-    window.localStorage["cache"] = JSON.stringify(cache);
+
+    // Remove the key first, to get around a strange iPad
+    // issue: http://stackoverflow.com/questions/2603682/is-anyone-else-receiving-a-quota-exceeded-err-on-their-ipad-when-accessing-locals
+    window.localStorage.removeItem("cache");
+
+    // TODO: We should really catch QUOTA_EXCEEDED_ERR here,
+    // which could be thrown if the user is in private
+    // browsing mode.
+    window.localStorage.setItem("cache", JSON.stringify(cache));
   };
   exports.get = function get(key) {
     return cache[key];