Bug 940804 - Make session store tests use SSTabRestored when appropriate (r=ttaubert)

This commit is contained in:
Bill McCloskey 2013-11-23 12:13:15 -08:00
parent de66a0d956
commit 3d84c7f9ea
31 changed files with 136 additions and 194 deletions

View File

@ -28,9 +28,10 @@ function duplicate(delta, msg, cb) {
var start = gBrowser.sessionHistory.index;
duplicateTabIn(gBrowser.selectedTab, "tab", delta);
let tab = gBrowser.selectedTab;
gBrowser.selectedBrowser.addEventListener("pageshow", function () {
gBrowser.selectedBrowser.removeEventListener("pageshow", arguments.callee, false);
tab.addEventListener("SSTabRestored", function tabRestoredListener() {
tab.removeEventListener("SSTabRestored", tabRestoredListener, false);
is(gBrowser.sessionHistory.index, start + delta, msg);
executeSoon(cb);
}, false);

View File

@ -119,7 +119,7 @@ function test() {
// verify tab: (A), in undo list
let tab_A_restored = test(function() ss.undoCloseTab(aWin, 0));
ok(tab_A_restored, "a tab is in undo list");
whenBrowserLoaded(tab_A_restored.linkedBrowser, function() {
whenTabRestored(tab_A_restored, function() {
is(testURL, tab_A_restored.linkedBrowser.currentURI.spec,
"it's the same tab that we expect");
aWin.gBrowser.removeTab(tab_A_restored);
@ -137,14 +137,14 @@ function test() {
let tab_B = aWin.gBrowser.addTab(testURL2);
ss.setTabState(tab_B, JSON.stringify(state1));
whenBrowserLoaded(tab_B.linkedBrowser, function() {
whenTabRestored(tab_B, function() {
// populate tab: (B) with different form data
for (let item in fieldList)
setFormValue(tab_B, item, fieldList[item]);
// duplicate tab: (B)
let tab_C = aWin.gBrowser.duplicateTab(tab_B);
whenBrowserLoaded(tab_C.linkedBrowser, function() {
whenTabRestored(tab_C, function() {
// verify the correctness of the duplicated tab
is(ss.getTabValue(tab_C, key1), value1,
"tab successfully duplicated - correct state");

View File

@ -11,15 +11,13 @@ function test() {
"browser/components/sessionstore/test/browser_339445_sample.html";
let tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let doc = tab.linkedBrowser.contentDocument;
is(doc.getElementById("storageTestItem").textContent, "PENDING",
"sessionStorage value has been set");
let tab2 = gBrowser.duplicateTab(tab);
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
let doc2 = tab2.linkedBrowser.contentDocument;
is(doc2.getElementById("storageTestItem").textContent, "SUCCESS",
"sessionStorage value has been duplicated");
@ -29,6 +27,6 @@ function test() {
gBrowser.removeTab(tab);
finish();
}, true);
}, true);
});
});
}

View File

@ -88,14 +88,12 @@ function test() {
let rootDir = getRootDirectory(gTestPath);
let testURL = rootDir + "browser_346337_sample.html";
let tab = tabbrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
for (let xpath in fieldList)
setFormValue(tab, xpath, fieldList[xpath]);
let tab2 = tabbrowser.duplicateTab(tab);
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
for (let xpath in fieldList)
ok(compareFormValue(tab2, xpath, fieldList[xpath]),
"The value for \"" + xpath + "\" was correctly restored");
@ -105,8 +103,7 @@ function test() {
tabbrowser.removeTab(tab);
tab = undoCloseTab();
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab, function() {
for (let xpath in fieldList)
if (fieldList[xpath])
ok(!compareFormValue(tab, xpath, fieldList[xpath]),
@ -120,7 +117,7 @@ function test() {
tabbrowser.addTab();
tabbrowser.removeTab(tab);
finish();
}, true);
}, true);
}, true);
});
});
});
}

View File

@ -71,8 +71,7 @@ function test() {
// create a new tab
let testURL = "about:";
tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
// make sure that the next closed tab will increase getClosedTabCount
gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", max_tabs_undo + 1);
@ -87,15 +86,14 @@ function test() {
tab = test(function() ss.undoCloseTab(window, 0));
ok(tab, "undoCloseTab doesn't throw")
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
is(this.currentURI.spec, testURL, "correct tab was reopened");
whenTabRestored(tab, function() {
is(tab.linkedBrowser.currentURI.spec, testURL, "correct tab was reopened");
// clean up
if (gPrefService.prefHasUserValue("browser.sessionstore.max_tabs_undo"))
gPrefService.clearUserPref("browser.sessionstore.max_tabs_undo");
gBrowser.removeTab(tab);
finish();
}, true);
}, true);
});
});
}

View File

@ -14,15 +14,12 @@ function test() {
// restore a blank tab
let tab = gBrowser.addTab("about:");
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let history = tab.linkedBrowser.webNavigation.sessionHistory;
ok(history.count >= 1, "the new tab does have at least one history entry");
ss.setTabState(tab, JSON.stringify({ entries: [] }));
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab, function() {
ok(history.count == 0, "the tab was restored without any history whatsoever");
gBrowser.removeTab(tab);
@ -33,6 +30,6 @@ function test() {
if (gPrefService.prefHasUserValue("browser.sessionstore.max_tabs_undo"))
gPrefService.clearUserPref("browser.sessionstore.max_tabs_undo");
finish();
}, true);
}, true);
});
});
}

View File

@ -13,8 +13,7 @@ function test() {
// create a new tab
let tab = gBrowser.addTab(testURL);
ss.setTabValue(tab, key, value);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
// get the tab's state
let state = ss.getTabState(tab);
ok(state, "get the tab's state");
@ -30,7 +29,7 @@ function test() {
// clean up
gBrowser.removeTab(tab);
}, true);
});
//////////////////////////////////
// setTabState and duplicateTab //
@ -44,31 +43,30 @@ function test() {
let tab2 = gBrowser.addTab();
// set the tab's state
ss.setTabState(tab2, JSON.stringify(state));
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
// verify the correctness of the restored tab
ok(ss.getTabValue(tab2, key2) == value2 && this.currentURI.spec == testURL,
ok(ss.getTabValue(tab2, key2) == value2 && tab2.linkedBrowser.currentURI.spec == testURL,
"the tab's state was correctly restored");
// add text data
let textbox = this.contentDocument.getElementById("textbox");
let textbox = tab2.linkedBrowser.contentDocument.getElementById("textbox");
textbox.value = value3;
// duplicate the tab
let duplicateTab = ss.duplicateTab(window, tab2);
gBrowser.removeTab(tab2);
duplicateTab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenTabRestored(duplicateTab, function() {
// verify the correctness of the duplicated tab
ok(ss.getTabValue(duplicateTab, key2) == value2 && this.currentURI.spec == testURL,
ok(ss.getTabValue(duplicateTab, key2) == value2 &&
duplicateTab.linkedBrowser.currentURI.spec == testURL,
"correctly duplicated the tab's state");
let textbox = this.contentDocument.getElementById("textbox");
let textbox = duplicateTab.linkedBrowser.contentDocument.getElementById("textbox");
is(textbox.value, value3, "also duplicated text data");
// clean up
gBrowser.removeTab(duplicateTab);
finish();
}, true);
}, true);
});
});
}

View File

@ -28,8 +28,7 @@ function test() {
function testOpenCloseWindow(aIsPrivate, aTest, aCallback) {
whenNewWindowLoaded({ private: aIsPrivate }, function(win) {
win.gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
win.gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
whenBrowserLoaded(win.gBrowser.selectedBrowser, function() {
executeSoon(function() {
// Mark the window with some unique data to be restored later on.
ss.setWindowValue(win, aTest.key, aTest.value);
@ -37,7 +36,7 @@ function test() {
win.close();
aCallback();
});
}, true);
});
win.gBrowser.selectedBrowser.loadURI(aTest.url);
});
}

View File

@ -12,8 +12,7 @@ function test() {
let testUrl = rootDir + "browser_408470_sample.html";
let tab = gBrowser.addTab(testUrl);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
// enable all stylesheets and verify that they're correctly persisted
Array.forEach(tab.linkedBrowser.contentDocument.styleSheets, function(aSS, aIx) {
pendingCount++;
@ -21,8 +20,7 @@ function test() {
gPageStyleMenu.switchStyleSheet(ssTitle, tab.linkedBrowser.contentWindow);
let newTab = gBrowser.duplicateTab(tab);
newTab.linkedBrowser.addEventListener("load", function(aEvent) {
newTab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(newTab, function() {
let states = Array.map(newTab.linkedBrowser.contentDocument.styleSheets,
function(aSS) !aSS.disabled);
let correct = states.indexOf(true) == aIx && states.indexOf(true, aIx + 1) == -1;
@ -35,22 +33,21 @@ function test() {
gBrowser.removeTab(newTab);
if (--pendingCount == 0)
finish();
}, true);
});
});
// disable all styles and verify that this is correctly persisted
tab.linkedBrowser.markupDocumentViewer.authorStyleDisabled = true;
let newTab = gBrowser.duplicateTab(tab);
newTab.linkedBrowser.addEventListener("load", function(aEvent) {
newTab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(newTab, function() {
is(newTab.linkedBrowser.markupDocumentViewer.authorStyleDisabled, true,
"disabled all stylesheets");
gBrowser.removeTab(newTab);
if (--pendingCount == 0)
finish();
}, true);
});
gBrowser.removeTab(tab);
}, true);
});
}

View File

@ -27,9 +27,7 @@ function test() {
newWin.gBrowser.loadURI(testURL, null, null);
newWin.gBrowser.addEventListener("load", function (aEvent) {
newWin.gBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(newWin.gBrowser.selectedBrowser, function() {
// get the sessionstore state for the window
let state = ss.getWindowState(newWin);
@ -67,7 +65,7 @@ function test() {
cs.removeAll();
newWin.close();
finish();
}, true);
});
}, false);
}

View File

@ -10,17 +10,14 @@ function test() {
"browser/components/sessionstore/test/browser_447951_sample.html#";
let tab = gBrowser.addTab();
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let tabState = { entries: [] };
let max_entries = gPrefService.getIntPref("browser.sessionhistory.max_entries");
for (let i = 0; i < max_entries; i++)
tabState.entries.push({ url: baseURL + i });
ss.setTabState(tab, JSON.stringify(tabState));
tab.addEventListener("SSTabRestored", function(aEvent) {
tab.removeEventListener("SSTabRestored", arguments.callee, false);
whenTabRestored(tab, function() {
tabState = JSON.parse(ss.getTabState(tab));
is(tabState.entries.length, max_entries, "session history filled to the limit");
is(tabState.entries[0].url, baseURL + 0, "... but not more");
@ -32,8 +29,15 @@ function test() {
0, 0, 0, 0, false, false, false, false, 0, null);
doc.querySelector("a").dispatchEvent(event);
executeSoon(function() {
function check() {
tabState = JSON.parse(ss.getTabState(tab));
if (tabState.entries[tabState.entries.length - 1].url != baseURL + "end") {
// It may take a few passes through the event loop before we
// get the right URL.
executeSoon(check);
return;
}
is(tab.linkedBrowser.currentURI.spec, baseURL + "end",
"the new anchor was loaded");
is(tabState.entries[tabState.entries.length - 1].url, baseURL + "end",
@ -44,7 +48,9 @@ function test() {
// clean up
gBrowser.removeTab(tab);
finish();
});
}, false);
}, true);
}
check();
});
});
}

View File

@ -18,8 +18,7 @@ function test() {
let rootDir = getRootDirectory(gTestPath);
let testURL = rootDir + "browser_454908_sample.html";
let tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let doc = tab.linkedBrowser.contentDocument;
for (let id in fieldValues)
doc.getElementById(id).value = fieldValues[id];
@ -27,8 +26,7 @@ function test() {
gBrowser.removeTab(tab);
tab = undoCloseTab();
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab, function() {
let doc = tab.linkedBrowser.contentDocument;
for (let id in fieldValues) {
let node = doc.getElementById(id);
@ -47,6 +45,6 @@ function test() {
gBrowser.addTab();
gBrowser.removeTab(tab);
finish();
}, true);
}, true);
});
});
}

View File

@ -13,13 +13,11 @@ function test() {
let rootDir = getRootDirectory(gTestPath);
let testURL = rootDir + "browser_456342_sample.xhtml";
let tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
this.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let expectedValue = "try to save me";
// Since bug 537289 we only save non-default values, so we need to set each
// form field's value after load.
let formEls = aEvent.originalTarget.forms[0].elements;
let formEls = tab.linkedBrowser.contentDocument.forms[0].elements;
for (let i = 0; i < formEls.length; i++)
formEls[i].value = expectedValue;
@ -49,5 +47,5 @@ function test() {
if (gPrefService.prefHasUserValue("browser.sessionstore.privacy_level"))
gPrefService.clearUserPref("browser.sessionstore.privacy_level");
finish();
}, true);
});
}

View File

@ -31,14 +31,8 @@ function test() {
typeText(doc.getElementsByName("1|#out2")[0], Math.random());
typeText(doc.defaultView.frames[0].frames[1].document.getElementById("in1"), new Date());
frameCount = 0;
let tab2 = gBrowser.duplicateTab(tab);
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
// wait for all frames to load completely
if (frameCount++ < 5)
return;
tab2.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
let doc = tab2.linkedBrowser.contentDocument;
let win = tab2.linkedBrowser.contentWindow;
isnot(doc.getElementById("out1").value,
@ -59,6 +53,6 @@ function test() {
gBrowser.removeTab(tab);
finish();
}, true);
});
}, true);
}

View File

@ -13,8 +13,7 @@ function test() {
// set a unique value on a new, blank tab
let tab1 = gBrowser.addTab();
tab1.linkedBrowser.addEventListener("load", function() {
tab1.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab1.linkedBrowser, function() {
ss.setTabValue(tab1, uniqueName, uniqueValue1);
// duplicate the tab with that value
@ -26,14 +25,13 @@ function test() {
// overwrite the tab with the value which should remove it
ss.setTabState(tab1, JSON.stringify({ entries: [] }));
tab1.linkedBrowser.addEventListener("load", function() {
tab1.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab1, function() {
is(ss.getTabValue(tab1, uniqueName), "", "tab value was cleared");
// clean up
gBrowser.removeTab(tab2);
gBrowser.removeTab(tab1);
finish();
}, true);
}, true);
});
});
}

View File

@ -18,15 +18,13 @@ function test() {
"browser/components/sessionstore/test/browser_466937_sample.html";
let tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let doc = tab.linkedBrowser.contentDocument;
doc.getElementById("reverse_thief").value = "/home/user/secret2";
doc.getElementById("bystander").value = testPath;
let tab2 = gBrowser.duplicateTab(tab);
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
tab2.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
doc = tab2.linkedBrowser.contentDocument;
is(doc.getElementById("thief").value, "",
"file path wasn't set to text field value");
@ -40,6 +38,6 @@ function test() {
gBrowser.removeTab(tab);
finish();
}, true);
}, true);
});
});
}

View File

@ -13,14 +13,12 @@ function test() {
let tab = gBrowser.addTab("about:sessionrestore");
gBrowser.selectedTab = tab;
let browser = tab.linkedBrowser;
browser.addEventListener("load", function(aEvent) {
browser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(browser, function() {
let doc = browser.contentDocument;
// click on the "Start New Session" button after about:sessionrestore is loaded
doc.getElementById("errorCancel").click();
browser.addEventListener("load", function(aEvent) {
browser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(browser, function() {
let doc = browser.contentDocument;
is(doc.URL, "about:blank", "loaded page is about:blank");
@ -31,14 +29,12 @@ function test() {
gPrefService.setCharPref("browser.startup.homepage", homepage);
gPrefService.setIntPref("browser.startup.page", 1);
gBrowser.loadURI("about:sessionrestore");
browser.addEventListener("load", function(aEvent) {
browser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(browser, function() {
let doc = browser.contentDocument;
// click on the "Start New Session" button after about:sessionrestore is loaded
doc.getElementById("errorCancel").click();
browser.addEventListener("load", function(aEvent) {
browser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(browser, function() {
let doc = browser.contentDocument;
is(doc.URL, homepage, "loaded page is the homepage");
@ -48,8 +44,8 @@ function test() {
gPrefService.clearUserPref("browser.startup.page");
gPrefService.clearUserPref("browser.startup.homepage");
finish();
}, true);
}, true);
}, true);
}, true);
});
});
});
});
}

View File

@ -12,15 +12,13 @@ function test() {
let rootDir = getRootDirectory(gTestPath);
let testURL = rootDir + "browser_485482_sample.html";
let tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let doc = tab.linkedBrowser.contentDocument;
doc.querySelector("input[type=text]").value = uniqueValue;
doc.querySelector("input[type=checkbox]").checked = true;
let tab2 = gBrowser.duplicateTab(tab);
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
tab2.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
doc = tab2.linkedBrowser.contentDocument;
is(doc.querySelector("input[type=text]").value, uniqueValue,
"generated XPath expression was valid");
@ -31,6 +29,6 @@ function test() {
gBrowser.removeTab(tab2);
gBrowser.removeTab(tab);
finish();
}, true);
}, true);
});
});
}

View File

@ -10,8 +10,7 @@ function test() {
let uniqueValue = Math.random() + "\u2028Second line\u2029Second paragraph\u2027";
let tab = gBrowser.addTab();
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
ss.setTabValue(tab, "bug485563", uniqueValue);
let tabState = JSON.parse(ss.getTabState(tab));
is(tabState.extData["bug485563"], uniqueValue,
@ -23,5 +22,5 @@ function test() {
gBrowser.removeTab(tab);
finish();
}, true);
});
}

View File

@ -14,9 +14,7 @@ function test() {
gBrowser.selectedTab = tab;
let browser = tab.linkedBrowser;
browser.addEventListener("load", function() {
browser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(browser, function() {
let tabState = JSON.parse(ss.getTabState(tab));
is(tabState.entries[0].referrer, REFERRER1,
"Referrer retrieved via getTabState matches referrer set via loadURI.");
@ -24,29 +22,20 @@ function test() {
tabState.entries[0].referrer = REFERRER2;
ss.setTabState(tab, JSON.stringify(tabState));
tab.addEventListener("SSTabRestored", function(e) {
tab.removeEventListener("SSTabRestored", arguments.callee, true);
whenTabRestored(tab, function(e) {
is(window.content.document.referrer, REFERRER2, "document.referrer matches referrer set via setTabState.");
gBrowser.removeTab(tab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
e.stopPropagation();
let newTab = ss.undoCloseTab(window, 0);
newTab.addEventListener("SSTabRestored", function(e) {
newTab.removeEventListener("SSTabRestored", arguments.callee, true);
whenTabRestored(newTab, function() {
is(window.content.document.referrer, REFERRER2, "document.referrer is still correct after closing and reopening the tab.");
gBrowser.removeTab(newTab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
e.stopPropagation();
finish();
}, true);
}, true);
},true);
});
});
});
let referrerURI = Services.io.newURI(REFERRER1, null, null);
browser.loadURI("http://example.org", referrerURI, null);

View File

@ -72,16 +72,12 @@ function test() {
// http://example.com. We need to load the blank window first, otherwise the
// docshell gets confused and doesn't have a current history entry.
let tab = gBrowser.addTab("about:blank");
let tabBrowser = tab.linkedBrowser;
let browser = tab.linkedBrowser;
tabBrowser.addEventListener("load", function(aEvent) {
tabBrowser.removeEventListener("load", arguments.callee, true);
tabBrowser.loadURI("http://example.com", null, null);
tabBrowser.addEventListener("load", function(aEvent) {
tabBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(browser, function() {
browser.loadURI("http://example.com", null, null);
whenBrowserLoaded(browser, function() {
// After these push/replaceState calls, the window should have three
// history entries:
// testURL (state object: null) <-- oldest
@ -102,13 +98,12 @@ function test() {
ss.setTabState(tab2, state, true);
// Run checkState() once the tab finishes loading its restored state.
tab2.linkedBrowser.addEventListener("load", function() {
tab2.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
SimpleTest.executeSoon(function() {
checkState(tab2);
});
}, true);
});
}, true);
}, true);
});
});
}

View File

@ -47,9 +47,7 @@ function test() {
// create and select a first tab
let tab = gBrowser.addTab(TEST_URL);
tab.linkedBrowser.addEventListener("load", function loadListener(e) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
// step1: the above has triggered some saveStateDelayed(), sleep until
// it's done, and get the initial sessionstore.js mtime
setTimeout(function step1(e) {
@ -72,5 +70,5 @@ function test() {
finish();
}, 3500); // end of sleep after tab selection and scrolling
}, 3500); // end of sleep after initial saveStateDelayed()
}, true);
});
}

View File

@ -5,12 +5,10 @@
function test() {
let tab1 = gBrowser.addTab("about:rights");
let tab2 = gBrowser.addTab("about:mozilla");
tab1.linkedBrowser.addEventListener("load", mainPart, true);
whenBrowserLoaded(tab1.linkedBrowser, mainPart);
waitForExplicitFinish();
function mainPart() {
tab1.linkedBrowser.removeEventListener("load", mainPart, true);
// Tell the session storer that the tab is pinned
let newTabState = '{"entries":[{"url":"about:rights"}],"pinned":true,"userTypedValue":"Hello World!"}';
ss.setTabState(tab1, newTabState);

View File

@ -4,9 +4,7 @@ function test() {
var tab1 = gBrowser.addTab("data:text/plain;charset=utf-8,foo");
gBrowser.pinTab(tab1);
tab1.linkedBrowser.addEventListener("load", function () {
tab1.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab1.linkedBrowser, function() {
var tab2 = gBrowser.addTab();
gBrowser.pinTab(tab2);
@ -19,5 +17,5 @@ function test() {
gBrowser.removeTab(tab1);
gBrowser.removeTab(tab2);
finish();
}, true);
});
}

View File

@ -163,9 +163,7 @@ function onStateRestored(aSubject, aTopic, aData) {
newWin.addEventListener("load", function(aEvent) {
newWin.removeEventListener("load", arguments.callee, false);
newWin.gBrowser.selectedBrowser.addEventListener("load", function() {
newWin.gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(newWin.gBrowser.selectedBrowser, function() {
// pin this tab
if (shouldPinTab)
newWin.gBrowser.pinTab(newWin.gBrowser.selectedTab);
@ -197,7 +195,7 @@ function onStateRestored(aSubject, aTopic, aData) {
else {
newWin.BrowserTryToCloseWindow();
}
}, true);
});
}, false);
}

View File

@ -82,12 +82,10 @@ function testTabRestoreData(aFormData, aExpectedValues, aCallback) {
let tab = gBrowser.addTab(testURL);
let tabState = { entries: [{ url: testURL, formdata: aFormData}] };
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
ss.setTabState(tab, JSON.stringify(tabState));
tab.addEventListener("SSTabRestored", function(aEvent) {
tab.removeEventListener("SSTabRestored", arguments.callee);
whenTabRestored(tab, function() {
let doc = tab.linkedBrowser.contentDocument;
let select = doc.getElementById("select_id");
let value = select.options[select.selectedIndex].value;
@ -98,9 +96,7 @@ function testTabRestoreData(aFormData, aExpectedValues, aCallback) {
// clean up
gBrowser.removeTab(tab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
aEvent.stopPropagation();
aCallback();
});
@ -127,5 +123,5 @@ function testTabRestoreData(aFormData, aExpectedValues, aCallback) {
is(value, aExpectedValues[0],
"Collection has been saved correctly");
});
}, true);
});
}

View File

@ -178,9 +178,6 @@ function testOnWindow(aIsPrivate, aCallback) {
}
function waitForTabLoad(aWin, aURL, aCallback) {
aWin.gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
aWin.gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
executeSoon(aCallback);
}, true);
whenBrowserLoaded(aWin.gBrowser.selectedBrowser, aCallback);
aWin.gBrowser.selectedBrowser.loadURI(aURL);
}

View File

@ -52,7 +52,7 @@ function runTests() {
// Let the pending tab load.
gBrowser.selectedTab = tab;
yield whenBrowserLoaded(tab.linkedBrowser);
yield whenTabRestored(tab);
// Ensure no 'image' or 'pending' attributes are stored.
let {attributes} = JSON.parse(ss.getTabState(tab));

View File

@ -14,8 +14,7 @@ function test() {
let testURL = "http://mochi.test:8888/browser/" +
"browser/components/sessionstore/test/browser_form_restore_events_sample.html";
let tab = gBrowser.addTab(testURL);
tab.linkedBrowser.addEventListener("load", function(aEvent) {
tab.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenBrowserLoaded(tab.linkedBrowser, function() {
let doc = tab.linkedBrowser.contentDocument;
// text fields
@ -45,8 +44,7 @@ function test() {
let tab2 = gBrowser.duplicateTab(tab);
tab2.linkedBrowser.addEventListener("load", function(aEvent) {
tab2.linkedBrowser.removeEventListener("load", arguments.callee, true);
whenTabRestored(tab2, function() {
let doc = tab2.linkedBrowser.contentDocument;
let inputFired = doc.getElementById("inputFired").textContent.trim().split();
let changeFired = doc.getElementById("changeFired").textContent.trim().split();
@ -62,6 +60,6 @@ function test() {
gBrowser.removeTab(tab);
finish();
}, true);
}, true);
});
});
}

View File

@ -137,5 +137,3 @@ add_task(function browsing() {
gBrowser.removeTab(tab2);
gBrowser.removeTab(tab1);
});

View File

@ -301,6 +301,15 @@ function whenWindowLoaded(aWindow, aCallback = next) {
}, false);
}
function whenTabRestored(aTab, aCallback = next) {
aTab.addEventListener("SSTabRestored", function onRestored(aEvent) {
aTab.removeEventListener("SSTabRestored", onRestored, true);
executeSoon(function executeWhenTabRestored() {
aCallback();
});
}, true);
}
var gUniqueCounter = 0;
function r() {
return Date.now() + "-" + (++gUniqueCounter);
@ -339,7 +348,7 @@ let gProgressListener = {
function gProgressListener_onStateChange(aBrowser, aWebProgress, aRequest,
aStateFlags, aStatus) {
if ((!this._checkRestoreState ||
aBrowser.__SS_restoreState == TAB_STATE_RESTORING) &&
(aBrowser.__SS_restoreState && aBrowser.__SS_restoreState == TAB_STATE_RESTORING)) &&
aStateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK &&
aStateFlags & Ci.nsIWebProgressListener.STATE_IS_WINDOW) {
@ -354,12 +363,12 @@ let gProgressListener = {
for (let win in BrowserWindowIterator()) {
for (let i = 0; i < win.gBrowser.tabs.length; i++) {
let browser = win.gBrowser.tabs[i].linkedBrowser;
if (browser.__SS_restoreState == TAB_STATE_RESTORING)
if (!browser.__SS_restoreState)
wasRestored++;
else if (browser.__SS_restoreState == TAB_STATE_RESTORING)
isRestoring++;
else if (browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE)
needsRestore++;
else
wasRestored++;
}
}
return [needsRestore, isRestoring, wasRestored];