Bug 1321820 - Storage Inspector fails with dom.caches.enabled=false r?nchevobbe draft
authorMichael Ratcliffe <mratcliffe@mozilla.com>
Fri, 23 Dec 2016 16:53:20 +0000
changeset 453492 f6098f6f641700f08c5746c0f83ac2e4fca91ad0
parent 453490 bbbd2f7539f224a482cc6d2dd10e6a5f31c8baf3
child 540484 65abb44e7e66094e5d292b8064e54f5986a1bbdc
push id39690
push userbmo:mratcliffe@mozilla.com
push dateFri, 23 Dec 2016 17:45:44 +0000
reviewersnchevobbe
bugs1321820
milestone53.0a1
Bug 1321820 - Storage Inspector fails with dom.caches.enabled=false r?nchevobbe MozReview-Commit-ID: Gzwap5NL1w7
devtools/client/storage/test/browser.ini
devtools/client/storage/test/browser_storage_dom_cache_disabled.js
devtools/client/storage/test/head.js
devtools/client/storage/test/storage-listings.html
devtools/server/actors/storage.js
--- a/devtools/client/storage/test/browser.ini
+++ b/devtools/client/storage/test/browser.ini
@@ -25,16 +25,17 @@ support-files =
 [browser_storage_cookies_delete_all.js]
 [browser_storage_cookies_domain.js]
 [browser_storage_cookies_edit.js]
 [browser_storage_cookies_edit_keyboard.js]
 [browser_storage_cookies_tab_navigation.js]
 [browser_storage_delete.js]
 [browser_storage_delete_all.js]
 [browser_storage_delete_tree.js]
+[browser_storage_dom_cache_disabled.js]
 [browser_storage_dynamic_updates_cookies.js]
 [browser_storage_dynamic_updates_localStorage.js]
 [browser_storage_dynamic_updates_sessionStorage.js]
 [browser_storage_empty_objectstores.js]
 [browser_storage_indexeddb_delete.js]
 [browser_storage_indexeddb_delete_blocked.js]
 [browser_storage_indexeddb_duplicate_names.js]
 [browser_storage_localstorage_edit.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/storage/test/browser_storage_dom_cache_disabled.js
@@ -0,0 +1,37 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* import-globals-from ../../framework/test/shared-head.js */
+
+"use strict";
+
+// Test the storage inspector when dom.caches.enabled=false.
+
+add_task(function* () {
+  // Disable the DOM cache
+  Services.prefs.setBoolPref(DOM_CACHE, false);
+
+  yield openTabAndSetupStorage(MAIN_DOMAIN + "storage-listings.html");
+
+  const state = [
+    [["localStorage", "http://test1.example.org"],
+      ["ls1", "ls2"]],
+    [["localStorage", "http://sectest1.example.org"],
+      ["iframe-u-ls1"]],
+    [["localStorage", "https://sectest1.example.org"],
+      ["iframe-s-ls1"]],
+    [["sessionStorage", "http://test1.example.org"],
+      ["ss1"]],
+    [["sessionStorage", "http://sectest1.example.org"],
+      ["iframe-u-ss1", "iframe-u-ss2"]],
+    [["sessionStorage", "https://sectest1.example.org"],
+      ["iframe-s-ss1"]],
+    [["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
+      [1, 2, 3]],
+  ];
+
+  yield checkState(state);
+
+  yield finishTests();
+});
--- a/devtools/client/storage/test/head.js
+++ b/devtools/client/storage/test/head.js
@@ -10,16 +10,17 @@
 // shared-head.js handles imports, constants, and utility functions
 Services.scriptloader.loadSubScript(
   "chrome://mochitests/content/browser/devtools/client/framework/test/shared-head.js",
   this);
 
 const {TableWidget} = require("devtools/client/shared/widgets/TableWidget");
 const SPLIT_CONSOLE_PREF = "devtools.toolbox.splitconsoleEnabled";
 const STORAGE_PREF = "devtools.storage.enabled";
+const DOM_CACHE = "dom.caches.enabled";
 const DUMPEMIT_PREF = "devtools.dump.emit";
 const DEBUGGERLOG_PREF = "devtools.debugger.log";
 // Allows Cache API to be working on usage `http` test page
 const CACHES_ON_HTTP_PREF = "dom.caches.testing.enabled";
 const PATH = "browser/devtools/client/storage/test/";
 const MAIN_DOMAIN = "http://test1.example.org/" + PATH;
 const ALT_DOMAIN = "http://sectest1.example.org/" + PATH;
 const ALT_DOMAIN_SECURED = "https://sectest1.example.org:443/" + PATH;
@@ -33,21 +34,22 @@ var gToolbox, gPanelWindow, gWindow, gUI
 
 // Services.prefs.setBoolPref(DUMPEMIT_PREF, true);
 // Services.prefs.setBoolPref(DEBUGGERLOG_PREF, true);
 
 Services.prefs.setBoolPref(STORAGE_PREF, true);
 Services.prefs.setBoolPref(CACHES_ON_HTTP_PREF, true);
 registerCleanupFunction(() => {
   gToolbox = gPanelWindow = gWindow = gUI = null;
-  Services.prefs.clearUserPref(STORAGE_PREF);
-  Services.prefs.clearUserPref(SPLIT_CONSOLE_PREF);
+  Services.prefs.clearUserPref(CACHES_ON_HTTP_PREF);
+  Services.prefs.clearUserPref(DEBUGGERLOG_PREF);
+  Services.prefs.clearUserPref(DOM_CACHE);
   Services.prefs.clearUserPref(DUMPEMIT_PREF);
-  Services.prefs.clearUserPref(DEBUGGERLOG_PREF);
-  Services.prefs.clearUserPref(CACHES_ON_HTTP_PREF);
+  Services.prefs.clearUserPref(SPLIT_CONSOLE_PREF);
+  Services.prefs.clearUserPref(STORAGE_PREF);
 });
 
 /**
  * This generator function opens the given url in a new tab, then sets up the
  * page by waiting for all cookies, indexedDB items etc. to be created; Then
  * opens the storage inspector and waits for the storage tree and table to be
  * populated.
  *
--- a/devtools/client/storage/test/storage-listings.html
+++ b/devtools/client/storage/test/storage-listings.html
@@ -105,22 +105,27 @@ async function fetchPut(cache, url) {
 let cacheGenerator = async function() {
   let cache = await caches.open("plop");
   await fetchPut(cache, "404_cached_file.js");
   await fetchPut(cache, "browser_storage_basic.js");
 };
 
 window.setup = function*() {
   yield idbGenerator();
-  yield cacheGenerator();
+
+  if (window.caches) {
+    yield cacheGenerator();
+  }
 };
 
 window.clear = function*() {
   yield deleteDB("idb1");
   yield deleteDB("idb2");
 
-  yield caches.delete("plop");
+  if (window.caches) {
+    yield caches.delete("plop");
+  }
 
   dump("removed indexedDB and cache data from " + document.location + "\n");
 };
 </script>
 </body>
 </html>
--- a/devtools/server/actors/storage.js
+++ b/devtools/server/actors/storage.js
@@ -1197,16 +1197,21 @@ StorageActors.createActor({
 
     // The first argument tells if you want to get |content| cache or |chrome|
     // cache.
     // The |content| cache is the cache explicitely named by the web content
     // (service worker or web page).
     // The |chrome| cache is the cache implicitely cached by the platform,
     // hosting the source file of the service worker.
     let { CacheStorage } = this.storageActor.window;
+
+    if (!CacheStorage) {
+      return [];
+    }
+
     let cache = new CacheStorage("content", principal);
     return cache;
   }),
 
   preListStores: Task.async(function* () {
     for (let host of this.hosts) {
       yield this.populateStoresForHost(host);
     }