summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_bug678392.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/general/browser_bug678392.js')
-rw-r--r--browser/base/content/test/general/browser_bug678392.js191
1 files changed, 191 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_bug678392.js b/browser/base/content/test/general/browser_bug678392.js
new file mode 100644
index 000000000..6aedeefdf
--- /dev/null
+++ b/browser/base/content/test/general/browser_bug678392.js
@@ -0,0 +1,191 @@
+/* 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/. */
+
+var HTTPROOT = "http://example.com/browser/browser/base/content/test/general/";
+
+function maxSnapshotOverride() {
+ return 5;
+}
+
+function test() {
+ waitForExplicitFinish();
+
+ BrowserOpenTab();
+ let tab = gBrowser.selectedTab;
+ registerCleanupFunction(function () { gBrowser.removeTab(tab); });
+
+ ok(gHistorySwipeAnimation, "gHistorySwipeAnimation exists.");
+
+ if (!gHistorySwipeAnimation._isSupported()) {
+ is(gHistorySwipeAnimation.active, false, "History swipe animation is not " +
+ "active when not supported by the platform.");
+ finish();
+ return;
+ }
+
+ gHistorySwipeAnimation._getMaxSnapshots = maxSnapshotOverride;
+ gHistorySwipeAnimation.init();
+
+ is(gHistorySwipeAnimation.active, true, "History swipe animation support " +
+ "was successfully initialized when supported.");
+
+ cleanupArray();
+ load(gBrowser.selectedTab, HTTPROOT + "browser_bug678392-2.html", test0);
+}
+
+function load(aTab, aUrl, aCallback) {
+ aTab.linkedBrowser.addEventListener("load", function onload(aEvent) {
+ aEvent.currentTarget.removeEventListener("load", onload, true);
+ waitForFocus(aCallback, content);
+ }, true);
+ aTab.linkedBrowser.loadURI(aUrl);
+}
+
+function cleanupArray() {
+ let arr = gHistorySwipeAnimation._trackedSnapshots;
+ while (arr.length > 0) {
+ delete arr[0].browser.snapshots[arr[0].index]; // delete actual snapshot
+ arr.splice(0, 1);
+ }
+}
+
+function testArrayCleanup() {
+ // Test cleanup of array of tracked snapshots.
+ let arr = gHistorySwipeAnimation._trackedSnapshots;
+ is(arr.length, 0, "Snapshots were removed correctly from the array of " +
+ "tracked snapshots.");
+}
+
+function test0() {
+ // Test growing of array of tracked snapshots.
+ let tab = gBrowser.selectedTab;
+
+ load(tab, HTTPROOT + "browser_bug678392-1.html", function() {
+ ok(gHistorySwipeAnimation._trackedSnapshots, "Array for snapshot " +
+ "tracking is initialized.");
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 1, "Snapshot array " +
+ "has correct length of 1 after loading one page.");
+ load(tab, HTTPROOT + "browser_bug678392-2.html", function() {
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 2, "Snapshot array " +
+ " has correct length of 2 after loading two pages.");
+ load(tab, HTTPROOT + "browser_bug678392-1.html", function() {
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 3, "Snapshot " +
+ "array has correct length of 3 after loading three pages.");
+ load(tab, HTTPROOT + "browser_bug678392-2.html", function() {
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 4, "Snapshot " +
+ "array has correct length of 4 after loading four pages.");
+ cleanupArray();
+ testArrayCleanup();
+ test1();
+ });
+ });
+ });
+ });
+}
+
+function verifyRefRemoved(aIndex, aBrowser) {
+ let wasFound = false;
+ let arr = gHistorySwipeAnimation._trackedSnapshots;
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i].index == aIndex && arr[i].browser == aBrowser)
+ wasFound = true;
+ }
+ is(wasFound, false, "The reference that was previously removed was " +
+ "still found in the array of tracked snapshots.");
+}
+
+function test1() {
+ // Test presence of snpashots in per-tab array of snapshots and removal of
+ // individual snapshots (and corresponding references in the array of
+ // tracked snapshots).
+ let tab = gBrowser.selectedTab;
+
+ load(tab, HTTPROOT + "browser_bug678392-1.html", function() {
+ var historyIndex = gBrowser.webNavigation.sessionHistory.index - 1;
+ load(tab, HTTPROOT + "browser_bug678392-2.html", function() {
+ load(tab, HTTPROOT + "browser_bug678392-1.html", function() {
+ load(tab, HTTPROOT + "browser_bug678392-2.html", function() {
+ let browser = gBrowser.selectedBrowser;
+ ok(browser.snapshots, "Array of snapshots exists in browser.");
+ ok(browser.snapshots[historyIndex], "First page exists in snapshot " +
+ "array.");
+ ok(browser.snapshots[historyIndex + 1], "Second page exists in " +
+ "snapshot array.");
+ ok(browser.snapshots[historyIndex + 2], "Third page exists in " +
+ "snapshot array.");
+ ok(browser.snapshots[historyIndex + 3], "Fourth page exists in " +
+ "snapshot array.");
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 4, "Length of " +
+ "array of tracked snapshots is equal to 4 after loading four " +
+ "pages.");
+
+ // Test removal of reference in the middle of the array.
+ gHistorySwipeAnimation._removeTrackedSnapshot(historyIndex + 1,
+ browser);
+ verifyRefRemoved(historyIndex + 1, browser);
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 3, "Length of " +
+ "array of tracked snapshots is equal to 3 after removing one" +
+ "reference from the array with length 4.");
+
+ // Test removal of reference at end of array.
+ gHistorySwipeAnimation._removeTrackedSnapshot(historyIndex + 3,
+ browser);
+ verifyRefRemoved(historyIndex + 3, browser);
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 2, "Length of " +
+ "array of tracked snapshots is equal to 2 after removing two" +
+ "references from the array with length 4.");
+
+ // Test removal of reference at head of array.
+ gHistorySwipeAnimation._removeTrackedSnapshot(historyIndex,
+ browser);
+ verifyRefRemoved(historyIndex, browser);
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 1, "Length of " +
+ "array of tracked snapshots is equal to 1 after removing three" +
+ "references from the array with length 4.");
+
+ cleanupArray();
+ test2();
+ });
+ });
+ });
+ });
+}
+
+function test2() {
+ // Test growing of snapshot array across tabs.
+ let tab = gBrowser.selectedTab;
+
+ load(tab, HTTPROOT + "browser_bug678392-1.html", function() {
+ load(tab, HTTPROOT + "browser_bug678392-2.html", function() {
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 2, "Length of " +
+ "snapshot array is equal to 2 after loading two pages");
+ let prevTab = tab;
+ tab = gBrowser.addTab("about:newtab");
+ gBrowser.selectedTab = tab;
+ load(tab, HTTPROOT + "browser_bug678392-2.html" /* initial page */,
+ function() {
+ load(tab, HTTPROOT + "browser_bug678392-1.html", function() {
+ load(tab, HTTPROOT + "browser_bug678392-2.html", function() {
+ is(gHistorySwipeAnimation._trackedSnapshots.length, 4, "Length " +
+ "of snapshot array is equal to 4 after loading two pages in " +
+ "two tabs each.");
+ gBrowser.removeCurrentTab();
+ gBrowser.selectedTab = prevTab;
+ cleanupArray();
+ test3();
+ });
+ });
+ });
+ });
+ });
+}
+
+function test3() {
+ // Test uninit of gHistorySwipeAnimation.
+ // This test MUST be the last one to execute.
+ gHistorySwipeAnimation.uninit();
+ is(gHistorySwipeAnimation.active, false, "History swipe animation support " +
+ "was successfully uninitialized");
+ finish();
+}