mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1177013 - Modernize test_cpows.xul (r=dvander)
This commit is contained in:
parent
45a47c6c55
commit
0b37c37a37
@ -1,38 +1,40 @@
|
||||
dump('loaded child cpow test\n');
|
||||
|
||||
content.document.title = "Hello, Kitty";
|
||||
const Cu = Components.utils;
|
||||
|
||||
var done_count = 0;
|
||||
var is_remote;
|
||||
|
||||
(function start() {
|
||||
[is_remote] = sendSyncMessage("cpows:is_remote");
|
||||
parent_test();
|
||||
error_reporting_test();
|
||||
dom_test();
|
||||
xray_test();
|
||||
if (typeof Symbol === "function") {
|
||||
symbol_test();
|
||||
[is_remote] = sendRpcMessage("cpows:is_remote");
|
||||
|
||||
var tests = [
|
||||
parent_test,
|
||||
error_reporting_test,
|
||||
dom_test,
|
||||
xray_test,
|
||||
symbol_test,
|
||||
compartment_test,
|
||||
regexp_test,
|
||||
postmessage_test,
|
||||
sync_test,
|
||||
async_test,
|
||||
rpc_test,
|
||||
lifetime_test
|
||||
];
|
||||
|
||||
function go() {
|
||||
if (tests.length == 0) {
|
||||
sendRpcMessage("cpows:done", {});
|
||||
return;
|
||||
}
|
||||
compartment_test();
|
||||
regexp_test();
|
||||
postmessage_test();
|
||||
sync_test();
|
||||
async_test();
|
||||
rpc_test();
|
||||
nested_sync_test();
|
||||
// The sync-ness of this call is important, because otherwise
|
||||
// we tear down the child's document while we are
|
||||
// still in the async test in the parent.
|
||||
// This test races with itself to be the final test.
|
||||
lifetime_test(function() {
|
||||
done_count++;
|
||||
if (done_count == 2)
|
||||
sendSyncMessage("cpows:done", {});
|
||||
|
||||
var test = tests[0];
|
||||
tests.shift();
|
||||
test(function() {
|
||||
go();
|
||||
});
|
||||
}
|
||||
)();
|
||||
|
||||
go();
|
||||
})();
|
||||
|
||||
function ok(condition, message) {
|
||||
dump('condition: ' + condition + ', ' + message + '\n');
|
||||
@ -69,6 +71,7 @@ function make_object()
|
||||
|
||||
let with_null_proto = Object.create(null);
|
||||
|
||||
content.document.title = "Hello, Kitty";
|
||||
return { "data": o,
|
||||
"throwing": throwing,
|
||||
"document": content.document,
|
||||
@ -84,7 +87,7 @@ function make_json()
|
||||
return { check: "ok" };
|
||||
}
|
||||
|
||||
function parent_test()
|
||||
function parent_test(finish)
|
||||
{
|
||||
function f(check_func) {
|
||||
let result = check_func(10);
|
||||
@ -104,38 +107,39 @@ function parent_test()
|
||||
sb.func = func;
|
||||
ok(sb.eval('func()') == 101, "can call parent's function in child");
|
||||
|
||||
done_count++;
|
||||
if (done_count == 2)
|
||||
sendSyncMessage("cpows:done", {});
|
||||
finish();
|
||||
});
|
||||
sendSyncMessage("cpows:parent_test", {}, {func: f});
|
||||
sendRpcMessage("cpows:parent_test", {}, {func: f});
|
||||
}
|
||||
|
||||
function error_reporting_test() {
|
||||
sendSyncMessage("cpows:error_reporting_test", {}, {});
|
||||
function error_reporting_test(finish) {
|
||||
sendRpcMessage("cpows:error_reporting_test", {}, {});
|
||||
finish();
|
||||
}
|
||||
|
||||
function dom_test()
|
||||
function dom_test(finish)
|
||||
{
|
||||
let element = content.document.createElement("div");
|
||||
element.id = "it_works";
|
||||
content.document.body.appendChild(element);
|
||||
|
||||
sendAsyncMessage("cpows:dom_test", {}, {element: element});
|
||||
sendRpcMessage("cpows:dom_test", {}, {element: element});
|
||||
Components.utils.schedulePreciseGC(function() {
|
||||
sendSyncMessage("cpows:dom_test_after_gc");
|
||||
sendRpcMessage("cpows:dom_test_after_gc");
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
function xray_test()
|
||||
function xray_test(finish)
|
||||
{
|
||||
let element = content.document.createElement("div");
|
||||
element.wrappedJSObject.foo = "hello";
|
||||
|
||||
sendSyncMessage("cpows:xray_test", {}, {element: element});
|
||||
sendRpcMessage("cpows:xray_test", {}, {element: element});
|
||||
finish();
|
||||
}
|
||||
|
||||
function symbol_test()
|
||||
function symbol_test(finish)
|
||||
{
|
||||
let iterator = Symbol.iterator;
|
||||
let named = Symbol.for("cpow-test");
|
||||
@ -145,16 +149,18 @@ function symbol_test()
|
||||
[named]: named,
|
||||
};
|
||||
let test = ['a'];
|
||||
sendSyncMessage("cpows:symbol_test", {}, {object: object, test: test});
|
||||
sendRpcMessage("cpows:symbol_test", {}, {object: object, test: test});
|
||||
finish();
|
||||
}
|
||||
|
||||
// Parent->Child references should go X->parent.privilegedJunkScope->child.privilegedJunkScope->Y
|
||||
// Child->Parent references should go X->child.privilegedJunkScope->parent.unprivilegedJunkScope->Y
|
||||
function compartment_test()
|
||||
function compartment_test(finish)
|
||||
{
|
||||
// This test primarily checks various compartment invariants for CPOWs, and
|
||||
// doesn't make sense to run in-process.
|
||||
if (!is_remote) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -178,41 +184,47 @@ function compartment_test()
|
||||
|
||||
return results;
|
||||
}
|
||||
sendSyncMessage("cpows:compartment_test", {}, { getUnprivilegedObject: sb.getUnprivilegedObject,
|
||||
testParentObject: testParentObject });
|
||||
sendRpcMessage("cpows:compartment_test", {}, { getUnprivilegedObject: sb.getUnprivilegedObject,
|
||||
testParentObject: testParentObject });
|
||||
finish();
|
||||
}
|
||||
|
||||
function regexp_test()
|
||||
function regexp_test(finish)
|
||||
{
|
||||
sendSyncMessage("cpows:regexp_test", {}, { regexp: /myRegExp/g });
|
||||
sendRpcMessage("cpows:regexp_test", {}, { regexp: /myRegExp/g });
|
||||
finish();
|
||||
}
|
||||
|
||||
function postmessage_test()
|
||||
function postmessage_test(finish)
|
||||
{
|
||||
sendSyncMessage("cpows:postmessage_test", {}, { win: content.window });
|
||||
sendRpcMessage("cpows:postmessage_test", {}, { win: content.window });
|
||||
finish();
|
||||
}
|
||||
|
||||
function sync_test()
|
||||
function sync_test(finish)
|
||||
{
|
||||
dump('beginning cpow sync test\n');
|
||||
sync_obj = make_object();
|
||||
sendSyncMessage("cpows:sync",
|
||||
sendRpcMessage("cpows:sync",
|
||||
make_json(),
|
||||
make_object());
|
||||
finish();
|
||||
}
|
||||
|
||||
function async_test()
|
||||
function async_test(finish)
|
||||
{
|
||||
dump('beginning cpow async test\n');
|
||||
async_obj = make_object();
|
||||
sendAsyncMessage("cpows:async",
|
||||
make_json(),
|
||||
async_obj);
|
||||
|
||||
addMessageListener("cpows:async_done", finish);
|
||||
}
|
||||
|
||||
var rpc_obj;
|
||||
|
||||
function rpc_test()
|
||||
function rpc_test(finish)
|
||||
{
|
||||
dump('beginning cpow rpc test\n');
|
||||
rpc_obj = make_object();
|
||||
@ -223,26 +235,7 @@ function rpc_test()
|
||||
sendRpcMessage("cpows:rpc",
|
||||
make_json(),
|
||||
rpc_obj);
|
||||
}
|
||||
|
||||
function nested_sync_test()
|
||||
{
|
||||
dump('beginning cpow nested sync test\n');
|
||||
sync_obj = make_object();
|
||||
sync_obj.data.reenter = function () {
|
||||
let caught = false;
|
||||
try {
|
||||
sendSyncMessage("cpows:reenter_sync", { }, { });
|
||||
} catch (e) {
|
||||
caught = true;
|
||||
}
|
||||
if (!ok(caught, "should not allow nested sync"))
|
||||
return "fail";
|
||||
return "ok";
|
||||
}
|
||||
sendSyncMessage("cpows:nested_sync",
|
||||
make_json(),
|
||||
rpc_obj);
|
||||
finish();
|
||||
}
|
||||
|
||||
function lifetime_test(finish)
|
||||
@ -257,7 +250,7 @@ function lifetime_test(finish)
|
||||
|
||||
dump("beginning lifetime test\n");
|
||||
var obj = {"will_die": {"f": 1}};
|
||||
let [result] = sendSyncMessage("cpows:lifetime_test_1", {}, {obj: obj});
|
||||
let [result] = sendRpcMessage("cpows:lifetime_test_1", {}, {obj: obj});
|
||||
ok(result == 10, "got sync result");
|
||||
ok(obj.wont_die.f == 2, "got reverse CPOW");
|
||||
obj.will_die = null;
|
||||
@ -266,6 +259,6 @@ function lifetime_test(finish)
|
||||
ok(obj.wont_die.f == 2, "reverse CPOW still works");
|
||||
finish();
|
||||
});
|
||||
sendSyncMessage("cpows:lifetime_test_2");
|
||||
sendRpcMessage("cpows:lifetime_test_2");
|
||||
});
|
||||
}
|
||||
|
@ -64,7 +64,7 @@
|
||||
"getOwnPropertyDescriptor.value works");
|
||||
let obj = new data.ctor();
|
||||
ok(obj.a === 3, "constructor call");
|
||||
ok(document.title === "Hello, Kitty", "document node");
|
||||
is(document.title, "Hello, Kitty", "document node");
|
||||
is(typeof document.cookie, "string", "can get document.cookie");
|
||||
is(typeof document.defaultView.navigator.userAgent, "string", "can get navigator.userAgent");
|
||||
|
||||
@ -141,6 +141,7 @@
|
||||
|
||||
function recvAsyncMessage(message) {
|
||||
testCpowMessage(message);
|
||||
savedMM.sendAsyncMessage("cpows:async_done");
|
||||
}
|
||||
|
||||
function recvSyncMessage(message) {
|
||||
|
Loading…
Reference in New Issue
Block a user