Bug 1257583 - Add test for bypassing the cache with tabs.reload. draft
authorMatthew Wein <mwein@mozilla.com>
Thu, 07 Apr 2016 16:02:28 -0700
changeset 348769 7e80d2a27ec63da0dde7f4fc9a8b5e479193bceb
parent 348767 dfd17abadcdfecd1251371a17dac9289c80667f8
child 517932 af1158b8788371bf917745af1bba72f4ac71ba79
push id14917
push usermwein@mozilla.com
push dateFri, 08 Apr 2016 02:58:36 +0000
bugs1257583
milestone48.0a1
Bug 1257583 - Add test for bypassing the cache with tabs.reload. MozReview-Commit-ID: KuJKLWSXvSk
browser/components/extensions/test/browser/browser.ini
browser/components/extensions/test/browser/browser_ext_tabs_reload_bypass_cache.js
browser/components/extensions/test/browser/file_bypass_cache.sjs
--- a/browser/components/extensions/test/browser/browser.ini
+++ b/browser/components/extensions/test/browser/browser.ini
@@ -4,16 +4,17 @@ support-files =
   context.html
   ctxmenu-image.png
   context_tabs_onUpdated_page.html
   context_tabs_onUpdated_iframe.html
   file_popup_api_injection_a.html
   file_popup_api_injection_b.html
   file_iframe_document.html
   file_iframe_document.sjs
+  file_bypass_cache.sjs
   file_language_fr_en.html
   file_language_ja.html
 
 [browser_ext_simple.js]
 [browser_ext_currentWindow.js]
 [browser_ext_browserAction_simple.js]
 [browser_ext_browserAction_pageAction_icon.js]
 [browser_ext_browserAction_context.js]
@@ -50,16 +51,17 @@ support-files =
 [browser_ext_tabs_onUpdated.js]
 [browser_ext_tabs_sendMessage.js]
 [browser_ext_tabs_move.js]
 [browser_ext_tabs_move_window.js]
 [browser_ext_tabs_move_window_multiple.js]
 [browser_ext_tabs_move_window_pinned.js]
 [browser_ext_tabs_onHighlighted.js]
 [browser_ext_tabs_reload.js]
+[browser_ext_tabs_reload_bypass_cache.js]
 [browser_ext_windows_create.js]
 tags = fullscreen
 [browser_ext_windows_create_tabId.js]
 [browser_ext_windows.js]
 [browser_ext_windows_size.js]
 skip-if = os == 'mac' # Fails when windows are randomly opened in fullscreen mode
 [browser_ext_windows_update.js]
 tags = fullscreen
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_reload_bypass_cache.js
@@ -0,0 +1,59 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(function* () {
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      "permissions": ["tabs", "<all_urls>"],
+    },
+
+    background: function() {
+      const BASE = "http://mochi.test:8888/browser/browser/components/extensions/test/browser/";
+      const URL = BASE + "file_bypass_cache.sjs";
+
+      function awaitLoad(tabId) {
+        return new Promise(resolve => {
+          browser.tabs.onUpdated.addListener(function listener(tabId_, changed, tab) {
+            if (tabId == tabId_ && changed.status == "complete" && tab.url == URL) {
+              browser.tabs.onUpdated.removeListener(listener);
+              resolve();
+            }
+          });
+        });
+      }
+
+      let tabId;
+      browser.tabs.create({url: URL}).then((tab) => {
+        tabId = tab.id;
+        return awaitLoad(tabId);
+      }).then(() => {
+        return browser.tabs.reload(tabId, {bypassCache: false});
+      }).then(() => {
+        return awaitLoad(tabId);
+      }).then(() => {
+        return browser.tabs.executeScript(tabId, {code: "document.body.textContent"});
+      }).then(textContent => {
+        browser.test.assertEq("", textContent, "`textContent` should be empty when bypassCache=false");
+        return browser.tabs.reload(tabId, {bypassCache: true});
+      }).then(() => {
+        return awaitLoad(tabId);
+      }).then(() => {
+        return browser.tabs.executeScript(tabId, {code: "document.body.textContent"});
+      }).then(textContent => {
+        let [pragma, cacheControl] = textContent.split(":");
+        browser.test.assertEq("no-cache", pragma, "`pragma` should be set to `no-cache` when bypassCache is true");
+        browser.test.assertEq("no-cache", cacheControl, "`cacheControl` should be set to `no-cache` when bypassCache is true");
+        browser.tabs.remove(tabId);
+        browser.test.notifyPass("tabs.reload_bypass_cache");
+      }).catch(error => {
+        browser.test.fail(`${error} :: ${error.stack}`);
+        browser.test.notifyFail("tabs.reload_bypass_cache");
+      });
+    },
+  });
+
+  yield extension.startup();
+  yield extension.awaitFinish("tabs.reload_bypass_cache");
+  yield extension.unload();
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/file_bypass_cache.sjs
@@ -0,0 +1,11 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80 ft=javascript: */
+"use strict";
+
+function handleRequest(request, response) {
+  response.setHeader("Content-Type", "text/plain; charset=UTF-8", false);
+
+  if (request.hasHeader("pragma") && request.hasHeader("cache-control")) {
+    response.write(`${request.getHeader("pragma")}:${request.getHeader("cache-control")}`);
+  }
+}
\ No newline at end of file