about summary refs log tree commit diff
path: root/src/librustdoc/html/static
diff options
context:
space:
mode:
authorRoy Wellington Ⅳ <cactus_hugged@yahoo.com>2018-10-15 20:38:51 -0700
committerRoy Wellington Ⅳ <cactus_hugged@yahoo.com>2018-10-15 20:39:16 -0700
commit8362aa2178959186c09899ca173ffb296fb3445e (patch)
treef5531e3f7c8f3b408bfb5835b7c90707b052efd0 /src/librustdoc/html/static
parentd4e2dcaff1bb957f41384e9e6a0dbb830dffe09c (diff)
downloadrust-8362aa2178959186c09899ca173ffb296fb3445e.tar.gz
rust-8362aa2178959186c09899ca173ffb296fb3445e.zip
Extract localStorage tests out into a helper method; use in getCurrentValue()
1. Extract the tests for whether or not we have workable localStorage out into
   a helper method, so it can be more easily reused
2. Use it in getCurrentValue() too, for the same reasons, as suggested in code
   review
Diffstat (limited to 'src/librustdoc/html/static')
-rw-r--r--src/librustdoc/html/static/storage.js28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/librustdoc/html/static/storage.js b/src/librustdoc/html/static/storage.js
index 9dc78f7beb6..206b3128eb3 100644
--- a/src/librustdoc/html/static/storage.js
+++ b/src/librustdoc/html/static/storage.js
@@ -27,13 +27,7 @@ function onEach(arr, func) {
 }
 
 function updateLocalStorage(name, value) {
-    if (typeof(Storage) !== "undefined") {
-        try {
-            window.localStorage;
-        } catch(err) {
-            // Storage is supported, but browser preferences deny access to it.
-            return;
-        }
+    if (usableLocalStorage()) {
         localStorage[name] = value;
     } else {
         // No Web Storage support so we do nothing
@@ -41,12 +35,30 @@ function updateLocalStorage(name, value) {
 }
 
 function getCurrentValue(name) {
-    if (typeof(Storage) !== "undefined" && localStorage[name] !== undefined) {
+    if (usableLocalStorage() && localStorage[name] !== undefined) {
         return localStorage[name];
     }
     return null;
 }
 
+function usableLocalStorage() {
+    // Check if the browser supports localStorage at all:
+    if (typeof(Storage) === "undefined") {
+        return false;
+    }
+    // Check if we can access it; this access will fail if the browser
+    // preferences deny access to localStorage, e.g., to prevent storage of
+    // "cookies" (or cookie-likes, as is the case here).
+    try {
+        window.localStorage;
+    } catch(err) {
+        // Storage is supported, but browser preferences deny access to it.
+        return false;
+    }
+
+    return true;
+}
+
 function switchTheme(styleElem, mainStyleElem, newTheme) {
     var fullBasicCss = "rustdoc" + resourcesSuffix + ".css";
     var fullNewTheme = newTheme + resourcesSuffix + ".css";