diff --git a/src/librustdoc/html/static/storage.js b/src/librustdoc/html/static/storage.js
index 9dc78f7beb61..206b3128eb35 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";