forked from mirrors/gecko-dev
Backed out changeset eddfd7f32a1c (bug 1110511) Backed out changeset 0eb0dda094b3 (bug 1110511) Backed out changeset 8e20cd68ca78 (bug 1110511) Backed out changeset c7b983f65568 (bug 1110511) Backed out changeset 219d86f78b6b (bug 1110511) Backed out changeset 0e055b648e10 (bug 1110511)
112 lines
3.4 KiB
JavaScript
112 lines
3.4 KiB
JavaScript
"use strict";
|
|
|
|
const URL = "data:text/html;charset=utf-8,<a href=%23>clickme</a>";
|
|
|
|
add_task(function* test_flush() {
|
|
// Create new tab.
|
|
let tab = gBrowser.addTab(URL);
|
|
let browser = tab.linkedBrowser;
|
|
yield promiseBrowserLoaded(browser);
|
|
|
|
// Flush to empty any queued update messages.
|
|
yield TabStateFlusher.flush(browser);
|
|
|
|
// There should be one history entry.
|
|
let {entries} = JSON.parse(ss.getTabState(tab));
|
|
is(entries.length, 1, "there is a single history entry");
|
|
|
|
// Click the link to navigate, this will add second shistory entry.
|
|
yield ContentTask.spawn(browser, null, function* () {
|
|
return new Promise(resolve => {
|
|
addEventListener("hashchange", function onHashChange() {
|
|
removeEventListener("hashchange", onHashChange);
|
|
resolve();
|
|
});
|
|
|
|
// Click the link.
|
|
content.document.querySelector("a").click();
|
|
});
|
|
});
|
|
|
|
// Flush to empty any queued update messages.
|
|
yield TabStateFlusher.flush(browser);
|
|
|
|
// There should be two history entries now.
|
|
({entries} = JSON.parse(ss.getTabState(tab)));
|
|
is(entries.length, 2, "there are two shistory entries");
|
|
|
|
// Cleanup.
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
add_task(function* test_crash() {
|
|
// Create new tab.
|
|
let tab = gBrowser.addTab(URL);
|
|
let browser = tab.linkedBrowser;
|
|
yield promiseBrowserLoaded(browser);
|
|
|
|
// Flush to empty any queued update messages.
|
|
yield TabStateFlusher.flush(browser);
|
|
|
|
// There should be one history entry.
|
|
let {entries} = JSON.parse(ss.getTabState(tab));
|
|
is(entries.length, 1, "there is a single history entry");
|
|
|
|
// Click the link to navigate.
|
|
yield ContentTask.spawn(browser, null, function* () {
|
|
return new Promise(resolve => {
|
|
addEventListener("hashchange", function onHashChange() {
|
|
removeEventListener("hashchange", onHashChange);
|
|
resolve();
|
|
});
|
|
|
|
// Click the link.
|
|
content.document.querySelector("a").click();
|
|
});
|
|
});
|
|
|
|
// Crash the browser and flush. Both messages are async and will be sent to
|
|
// the content process. The "crash" message makes it first so that we don't
|
|
// get a chance to process the flush. The TabStateFlusher however should be
|
|
// notified so that the flush still completes.
|
|
let promise1 = crashBrowser(browser);
|
|
let promise2 = TabStateFlusher.flush(browser);
|
|
yield Promise.all([promise1, promise2]);
|
|
|
|
// The pending update should be lost.
|
|
({entries} = JSON.parse(ss.getTabState(tab)));
|
|
is(entries.length, 1, "still only one history entry");
|
|
|
|
// Cleanup.
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
add_task(function* test_remove() {
|
|
// Create new tab.
|
|
let tab = gBrowser.addTab(URL);
|
|
let browser = tab.linkedBrowser;
|
|
yield promiseBrowserLoaded(browser);
|
|
|
|
// Flush to empty any queued update messages.
|
|
yield TabStateFlusher.flush(browser);
|
|
|
|
// There should be one history entry.
|
|
let {entries} = JSON.parse(ss.getTabState(tab));
|
|
is(entries.length, 1, "there is a single history entry");
|
|
|
|
// Click the link to navigate.
|
|
yield ContentTask.spawn(browser, null, function* () {
|
|
return new Promise(resolve => {
|
|
addEventListener("hashchange", function onHashChange() {
|
|
removeEventListener("hashchange", onHashChange);
|
|
resolve();
|
|
});
|
|
|
|
// Click the link.
|
|
content.document.querySelector("a").click();
|
|
});
|
|
});
|
|
|
|
// Request a flush and remove the tab. The flush should still complete.
|
|
yield Promise.all([TabStateFlusher.flush(browser), promiseRemoveTab(tab)]);
|
|
})
|