Adding tests for bug 112564 and bug 92598
authorGraeme McCutcheon <graememcc_firefox@graeme-online.co.uk>
Wed, 03 Dec 2008 12:52:49 -0500
changeset 22261 f290559c01d1686789ede6c58feeaa518e79e21a
parent 22260 bfd996bd103f211492a8c4580ed9a48f337ce6ea
child 22262 4047bed537d67f61567d6fa546da47cdab3dda35
push idunknown
push userunknown
push dateunknown
bugs112564, 92598
milestone1.9.2a1pre
Adding tests for bug 112564 and bug 92598
docshell/test/chrome/112564_nocache.html
docshell/test/chrome/112564_nocache.html^headers^
docshell/test/chrome/92598_nostore.html
docshell/test/chrome/92598_nostore.html^headers^
docshell/test/chrome/Makefile.in
docshell/test/chrome/bug112564_window.xul
docshell/test/chrome/bug92598_window.xul
docshell/test/chrome/test_bug112564.xul
docshell/test/chrome/test_bug92598.xul
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/112564_nocache.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>test1</title>
+</head>
+<body>
+<p>
+This document will be sent with a no-cache cache-control header. When sent over a secure connection, it should not be stored in bfcache.
+</p>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/112564_nocache.html^headers^
@@ -0,0 +1,1 @@
+Cache-control: no-cache
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/92598_nostore.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<title>test1</title>
+</head>
+<body>
+<p>
+This document will be sent with a no-store cache-control header. It should not be stored in bfcache.
+</p>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/92598_nostore.html^headers^
@@ -0,0 +1,1 @@
+Cache-control: no-store
--- a/docshell/test/chrome/Makefile.in
+++ b/docshell/test/chrome/Makefile.in
@@ -38,23 +38,38 @@ DEPTH		= ../../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 relativesrcdir	= docshell/test/chrome 
 
 include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
+_HTTP_FILES =	\
+		92598_nostore.html \
+		92598_nostore.html^headers^ \
+		112564_nocache.html \
+		112564_nocache.html^headers^ \
+		$(NULL)
+
 _TEST_FILES =	\
+		test_bug92598.xul \
+		bug92598_window.xul \
+		92598_nostore.html \
+		test_bug112564.xul \
+		bug112564_window.xul \
 		test_bug113934.xul \
 		bug113934_window.xul \
 		test_bug364461.xul \
 		bug364461_window.xul \
 		test_bug396519.xul \
 		bug396519_window.xul \
 		test_bug428288.html \
 		test_bug454235.xul \
 		bug454235-subframe.xul \
 		test_bug456980.xul \
 		$(NULL)
 
+libs:: $(_HTTP_FILES)
+	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
+
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir)
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/bug112564_window.xul
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+
+<!-- ***** BEGIN LICENSE BLOCK *****
+   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+   -
+   - The contents of this file are subject to the Mozilla Public License Version
+   - 1.1 (the "License"); you may not use this file except in compliance with
+   - the License. You may obtain a copy of the License at
+   - http://www.mozilla.org/MPL/
+   -
+   - Software distributed under the License is distributed on an "AS IS" basis,
+   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+   - for the specific language governing rights and limitations under the
+   - License.
+   -
+   - The Original Code is bug 112564 test code
+   -
+   - The Initial Developer of the Original Code is
+   - Graeme McCutcheon <graememcc_firefox@graeme-online.co.uk>.
+   - Portions created by the Initial Developer are Copyright (C) 2008
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s):
+   -
+   - Alternatively, the contents of this file may be used under the terms of
+   - either the GNU General Public License Version 2 or later (the "GPL"), or
+   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+   - in which case the provisions of the GPL or the LGPL are applicable instead
+   - of those above. If you wish to allow use of your version of this file only
+   - under the terms of either the GPL or the LGPL, and not to allow others to
+   - use your version of this file under the terms of the MPL, indicate your
+   - decision by deleting the provisions above and replace them with the notice
+   - and other provisions required by the LGPL or the GPL. If you do not delete
+   - the provisions above, a recipient may use your version of this file under
+   - the terms of any one of the MPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+
+<window id="112564Test"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        width="600"
+        height="600"
+        onload="onLoad();"
+        title="112564 test">
+
+  <script type="application/javascript"><![CDATA[
+    const LISTEN_EVENTS = ["load", "unload", "pageshow", "pagehide"];
+
+    var gBrowser;
+    var gTestsIterator;
+    var gExpected = [];
+
+    function ok(condition, message) {
+      window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
+    }
+
+    function is(a, b, message) {
+      window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
+    }
+
+    function finish() {
+      for each (let eventType in LISTEN_EVENTS) {
+        gBrowser.removeEventListener(eventType, eventListener, true);
+      }
+     
+      window.close();
+      window.opener.wrappedJSObject.SimpleTest.finish();
+    }
+
+    function onLoad() {
+      gBrowser = document.getElementById("content");
+      for each (let eventType in LISTEN_EVENTS) {
+        gBrowser.addEventListener(eventType, eventListener, true);
+      }
+             
+      gTestsIterator = testsIterator();
+      nextTest();
+    }
+
+    function eventListener(event) {
+      ok(gExpected.length >= 1, "Unexpected event " + event.type);
+      if (gExpected.length == 0) {
+        // in case of unexpected event, try to continue anyway
+        setTimeout(nextTest, 0);
+        return;
+      }
+
+      var exp = gExpected.shift();
+      is(event.type, exp.type, "Invalid event received");
+      if (typeof(exp.persisted) != "undefined") {
+        is(event.persisted, exp.persisted, "Invalid persisted state");
+      }
+      if (exp.title) {
+        ok(event.originalTarget instanceof HTMLDocument,
+           "originalTarget not a HTMLDocument");
+        is(event.originalTarget.title, exp.title, "titles don't match");
+      }
+
+      if (gExpected.length == 0) {
+        setTimeout(nextTest, 0);
+      }
+    }
+
+    function nextTest() {
+      try {
+        gTestsIterator.next();
+      } catch (err if err instanceof StopIteration) {
+        finish();
+      }
+    }
+
+    function testsIterator() {
+      // Load a secure page with a no-store header, followed by a simple page
+      // On pagehide, first page should report it is not being persisted
+      var test1DocURI = "https://example.com:443/tests/docshell/test/chrome/112564_nocache.html";
+
+      gExpected = [{type: "pagehide", persisted: true},
+                   {type: "load", title: "test1"},
+                   {type: "pageshow", title: "test1", persisted: false}];
+      gBrowser.loadURI(test1DocURI);
+      yield;
+
+      var test2Doc = "data:text/html,<html><head><title>test2</title></head>" +
+                     "<body>test2</body></html>";
+
+      gExpected = [{type: "pagehide", title: "test1", persisted: false},
+                   {type: "unload", title: "test1"},
+                   {type: "load", title: "test2"},
+                   {type: "pageshow", title: "test2", persisted: false}];
+      gBrowser.loadURI(test2Doc);
+      yield;
+
+      // Now go back in history. First page should not have been cached.
+      // Check persisted property to confirm
+      gExpected = [{type: "pagehide", title: "test2", persisted: true},
+                   {type: "load", title: "test1"},
+                   {type: "pageshow", title: "test1", persisted: false}];
+      gBrowser.goBack();
+      yield;
+    }
+  ]]></script>
+
+  <browser type="content-primary" flex="1" id="content" src="about:blank"/>
+</window>
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/bug92598_window.xul
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+
+<!-- ***** BEGIN LICENSE BLOCK *****
+   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+   -
+   - The contents of this file are subject to the Mozilla Public License Version
+   - 1.1 (the "License"); you may not use this file except in compliance with
+   - the License. You may obtain a copy of the License at
+   - http://www.mozilla.org/MPL/
+   -
+   - Software distributed under the License is distributed on an "AS IS" basis,
+   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+   - for the specific language governing rights and limitations under the
+   - License.
+   -
+   - The Original Code is bug 92598 test code
+   -
+   - The Initial Developer of the Original Code is
+   - Graeme McCutcheon <graememcc_firefox@graeme-online.co.uk>.
+   - Portions created by the Initial Developer are Copyright (C) 2008
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s):
+   -
+   - Alternatively, the contents of this file may be used under the terms of
+   - either the GNU General Public License Version 2 or later (the "GPL"), or
+   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+   - in which case the provisions of the GPL or the LGPL are applicable instead
+   - of those above. If you wish to allow use of your version of this file only
+   - under the terms of either the GPL or the LGPL, and not to allow others to
+   - use your version of this file under the terms of the MPL, indicate your
+   - decision by deleting the provisions above and replace them with the notice
+   - and other provisions required by the LGPL or the GPL. If you do not delete
+   - the provisions above, a recipient may use your version of this file under
+   - the terms of any one of the MPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+
+<window id="92598Test"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        width="600"
+        height="600"
+        onload="onLoad();"
+        title="92598 test">
+
+  <script type="application/javascript"><![CDATA[
+    const LISTEN_EVENTS = ["load", "unload", "pageshow", "pagehide"];
+
+    var gBrowser;
+    var gTestsIterator;
+    var gExpected = [];
+
+    function ok(condition, message) {
+      window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
+    }
+
+    function is(a, b, message) {
+      window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
+    }
+
+    function finish() {
+      for each (let eventType in LISTEN_EVENTS) {
+        gBrowser.removeEventListener(eventType, eventListener, true);
+      }
+     
+      window.close();
+      window.opener.wrappedJSObject.SimpleTest.finish();
+    }
+
+    function onLoad() {
+      gBrowser = document.getElementById("content");
+      for each (let eventType in LISTEN_EVENTS) {
+        gBrowser.addEventListener(eventType, eventListener, true);
+      }
+             
+      gTestsIterator = testsIterator();
+      nextTest();
+    }
+
+    function eventListener(event) {
+      ok(gExpected.length >= 1, "Unexpected event " + event.type);
+      if (gExpected.length == 0) {
+        // in case of unexpected event, try to continue anyway
+        setTimeout(nextTest, 0);
+        return;
+      }
+
+      var exp = gExpected.shift();
+      is(event.type, exp.type, "Invalid event received");
+      if (typeof(exp.persisted) != "undefined") {
+        is(event.persisted, exp.persisted, "Invalid persisted state");
+      }
+      if (exp.title) {
+        ok(event.originalTarget instanceof HTMLDocument,
+           "originalTarget not a HTMLDocument");
+        is(event.originalTarget.title, exp.title, "titles don't match");
+      }
+
+      if (gExpected.length == 0) {
+        setTimeout(nextTest, 0);
+      }
+    }
+
+    function nextTest() {
+      try {
+        gTestsIterator.next();
+      } catch (err if err instanceof StopIteration) {
+        finish();
+      }
+    }
+
+    function testsIterator() {
+      // Load a page with a no-cache header, followed by a simple page
+      // On pagehide, first page should report it is not being persisted
+      var test1DocURI = "http://localhost:8888/tests/docshell/test/chrome/92598_nostore.html";
+
+      gExpected = [{type: "pagehide", persisted: true},
+                   {type: "load", title: "test1"},
+                   {type: "pageshow", title: "test1", persisted: false}];
+      gBrowser.loadURI(test1DocURI);
+      yield;
+
+      var test2Doc = "data:text/html,<html><head><title>test2</title></head>" +
+                     "<body>test2</body></html>";
+
+      gExpected = [{type: "pagehide", title: "test1", persisted: false},
+                   {type: "unload", title: "test1"},
+                   {type: "load", title: "test2"},
+                   {type: "pageshow", title: "test2", persisted: false}];
+      gBrowser.loadURI(test2Doc);
+      yield;
+
+      // Now go back in history. First page should not have been cached.
+      // Check persisted property to confirm
+      gExpected = [{type: "pagehide", title: "test2", persisted: true},
+                   {type: "load", title: "test1"},
+                   {type: "pageshow", title: "test1", persisted: false}];
+      gBrowser.goBack();
+      yield;
+    }
+  ]]></script>
+
+  <browser type="content-primary" flex="1" id="content" src="about:blank"/>
+</window>
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/test_bug112564.xul
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet
+  href="chrome://mochikit/content/tests/SimpleTest/test.css"
+  type="text/css"?>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=112564
+-->
+<window title="Mozilla Bug 112564"
+  xmlns:html="http://www.w3.org/1999/xhtml"
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <title>Test for Bug 112564</title>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/MochiKit/packed.js"></script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+<body  xmlns="http://www.w3.org/1999/xhtml">
+<a target="_blank"
+   href="https://bugzilla.mozilla.org/show_bug.cgi?id=112564">Mozilla Bug 112564</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+
+<script class="testbody" type="application/javascript">
+<![CDATA[
+
+/** Test for Bug 112564 **/
+
+SimpleTest.waitForExplicitFinish();
+window.open("bug112564_window.xul", "bug112564",
+            "chrome,width=600,height=600");
+
+]]>
+</script>
+
+</window>
new file mode 100644
--- /dev/null
+++ b/docshell/test/chrome/test_bug92598.xul
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet
+  href="chrome://mochikit/content/tests/SimpleTest/test.css"
+  type="text/css"?>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=92598
+-->
+<window title="Mozilla Bug 92598"
+  xmlns:html="http://www.w3.org/1999/xhtml"
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <title>Test for Bug 92598</title>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/MochiKit/packed.js"></script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+<body  xmlns="http://www.w3.org/1999/xhtml">
+<a target="_blank"
+   href="https://bugzilla.mozilla.org/show_bug.cgi?id=92598">Mozilla Bug 92598</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+
+<script class="testbody" type="application/javascript">
+<![CDATA[
+
+/** Test for Bug 92598 **/
+
+SimpleTest.waitForExplicitFinish();
+window.open("bug92598_window.xul", "bug92598",
+            "chrome,width=600,height=600");
+
+]]>
+</script>
+
+</window>