131 lines
4.2 KiB
JavaScript
131 lines
4.2 KiB
JavaScript
//! unsupported
|
|
async_test(function () {
|
|
var test = this;
|
|
var top = require('webpage').create();
|
|
var pages_created = 0;
|
|
var expect_to_close = null;
|
|
var after_close = null;
|
|
|
|
top.onPageCreated = function (page) {
|
|
pages_created++;
|
|
page.onClosing = test.step_func(function (page) {
|
|
assert_equals(page.windowName, expect_to_close);
|
|
setTimeout(after_close, 0);
|
|
});
|
|
if (pages_created === 3) {
|
|
setTimeout(after_open_3, 0);
|
|
}
|
|
};
|
|
|
|
var after_open_3 = test.step_func(function () {
|
|
assert_equals(top.pages.length, 3);
|
|
assert_deep_equals(top.pagesWindowName, ["A", "B", "C"]);
|
|
|
|
after_close = after_close_1;
|
|
expect_to_close = "A";
|
|
top.evaluate(function () { window.wA.close(); });
|
|
});
|
|
|
|
var after_close_1 = test.step_func(function () {
|
|
assert_equals(top.pages.length, 2);
|
|
assert_deep_equals(top.pagesWindowName, ["B", "C"]);
|
|
|
|
|
|
var pageB = top.getPage("B");
|
|
assert_not_equals(pageB, null);
|
|
|
|
after_close = after_close_2;
|
|
expect_to_close = "B";
|
|
pageB.close();
|
|
});
|
|
|
|
var after_close_2 = test.step_func(function () {
|
|
assert_equals(top.pages.length, 1);
|
|
assert_deep_equals(top.pagesWindowName, ["C"]);
|
|
|
|
// Must close C as well, because its onclosing hook is a step
|
|
// function that hasn't run yet.
|
|
after_close = test.step_func_done();
|
|
expect_to_close = "C";
|
|
top.close();
|
|
});
|
|
|
|
top.evaluate(function () {
|
|
var w = window;
|
|
w.wA = w.open("data:text/html,%3Ctitle%3Epage%20A%3C/title%3E", "A");
|
|
w.wB = w.open("data:text/html,%3Ctitle%3Epage%20B%3C/title%3E", "B");
|
|
w.wC = w.open("data:text/html,%3Ctitle%3Epage%20C%3C/title%3E", "C");
|
|
});
|
|
|
|
}, "pages and pagesWindowName arrays; onPageCreated and onClosing hooks");
|
|
|
|
async_test(function () {
|
|
var test = this;
|
|
var pages_opened = 1, pages_closed = 0;
|
|
var top = require("webpage").create();
|
|
|
|
var onPageCreated = test.step_func(function onPageCreated(page) {
|
|
pages_opened++;
|
|
page.onPageCreated = onPageCreated;
|
|
page.onClosing = onClosing;
|
|
if (pages_opened === 4) {
|
|
setTimeout(after_open_4, 0);
|
|
}
|
|
});
|
|
var onClosing = test.step_func(function onClosing(page) {
|
|
pages_closed++;
|
|
if (pages_opened === pages_closed) {
|
|
test.done();
|
|
}
|
|
});
|
|
|
|
// This can't be inlined into onPageCreated because
|
|
// pagesWindowName is not quite up-to-date when that hook fires.
|
|
var after_open_4 = test.step_func(function () {
|
|
assert_equals(top.pages.length, 3);
|
|
assert_deep_equals(top.pagesWindowName, ["A", "B", "C"]);
|
|
top.close();
|
|
});
|
|
|
|
top.onPageCreated = onPageCreated;
|
|
top.onClosing = onClosing;
|
|
|
|
top.evaluate(function () {
|
|
var w = window;
|
|
w.wA = w.open("data:text/html,%3Ctitle%3Epage%20A%3C/title%3E", "A");
|
|
w.wB = w.open("data:text/html,%3Ctitle%3Epage%20B%3C/title%3E", "B");
|
|
w.wC = w.open("data:text/html,%3Ctitle%3Epage%20C%3C/title%3E", "C");
|
|
});
|
|
|
|
}, "close subwindows when parent page is closed (default behavior)");
|
|
|
|
async_test(function () {
|
|
var test = this;
|
|
var pages_opened = 1;
|
|
var top = require("webpage").create();
|
|
top.ownsPages = false;
|
|
|
|
var onPageCreated = test.step_func(function onPageCreated(page) {
|
|
pages_opened++;
|
|
page.onPageCreated = onPageCreated;
|
|
page.onClosing = test.unreached_func();
|
|
if (pages_opened === 4) {
|
|
assert_equals(top.pages.length, 0);
|
|
assert_deep_equals(top.pagesWindowName, []);
|
|
top.close();
|
|
}
|
|
});
|
|
top.onPageCreated = onPageCreated;
|
|
|
|
top.onClosing = test.step_func(function onTopClosing(page) {
|
|
setTimeout(function () { test.done(); }, 50);
|
|
});
|
|
|
|
top.evaluate(function () {
|
|
var w = window;
|
|
w.wA = w.open("data:text/html,%3Ctitle%3Epage%20A%3C/title%3E", "A");
|
|
w.wB = w.open("data:text/html,%3Ctitle%3Epage%20B%3C/title%3E", "B");
|
|
w.wC = w.open("data:text/html,%3Ctitle%3Epage%20C%3C/title%3E", "C");
|
|
});
|
|
}, "don't close subwindows when parent page is closed (ownsPages=false)");
|