diff options
Diffstat (limited to 'browser/base/content/test/general/browser_bug678392.js')
-rw-r--r-- | browser/base/content/test/general/browser_bug678392.js | 191 |
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(); +} |