зеркало из https://github.com/mozilla/gecko-dev.git
Backing out bug 761620 due to Add-on SDK test failures.
This commit is contained in:
Родитель
4b599bd464
Коммит
cce6a2f627
|
@ -117,7 +117,7 @@ MSG_DEF(JSMSG_TOO_BIG_TO_ENCODE, 63, 0, JSEXN_INTERNALERR, "data are to bi
|
||||||
MSG_DEF(JSMSG_ARG_INDEX_OUT_OF_RANGE, 64, 1, JSEXN_RANGEERR, "argument {0} accesses an index that is out of range")
|
MSG_DEF(JSMSG_ARG_INDEX_OUT_OF_RANGE, 64, 1, JSEXN_RANGEERR, "argument {0} accesses an index that is out of range")
|
||||||
MSG_DEF(JSMSG_SPREAD_TOO_LARGE, 65, 0, JSEXN_RANGEERR, "array too large due to spread operand(s)")
|
MSG_DEF(JSMSG_SPREAD_TOO_LARGE, 65, 0, JSEXN_RANGEERR, "array too large due to spread operand(s)")
|
||||||
MSG_DEF(JSMSG_SOURCE_TOO_LONG, 66, 0, JSEXN_RANGEERR, "source is too long")
|
MSG_DEF(JSMSG_SOURCE_TOO_LONG, 66, 0, JSEXN_RANGEERR, "source is too long")
|
||||||
MSG_DEF(JSMSG_BAD_WEAKMAP_KEY, 67, 0, JSEXN_TYPEERR, "cannot use the given object as a weak map key")
|
MSG_DEF(JSMSG_UNUSED67, 67, 0, JSEXN_NONE, "")
|
||||||
MSG_DEF(JSMSG_BAD_SCRIPT_MAGIC, 68, 0, JSEXN_INTERNALERR, "bad script XDR magic number")
|
MSG_DEF(JSMSG_BAD_SCRIPT_MAGIC, 68, 0, JSEXN_INTERNALERR, "bad script XDR magic number")
|
||||||
MSG_DEF(JSMSG_PAREN_BEFORE_FORMAL, 69, 0, JSEXN_SYNTAXERR, "missing ( before formal parameters")
|
MSG_DEF(JSMSG_PAREN_BEFORE_FORMAL, 69, 0, JSEXN_SYNTAXERR, "missing ( before formal parameters")
|
||||||
MSG_DEF(JSMSG_MISSING_FORMAL, 70, 0, JSEXN_SYNTAXERR, "missing formal parameter")
|
MSG_DEF(JSMSG_MISSING_FORMAL, 70, 0, JSEXN_SYNTAXERR, "missing formal parameter")
|
||||||
|
|
|
@ -249,20 +249,19 @@ WeakMap_set_impl(JSContext *cx, CallArgs args)
|
||||||
thisObj->setPrivate(map);
|
thisObj->setPrivate(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preserve wrapped native keys to prevent wrapper optimization.
|
|
||||||
if (key->getClass()->ext.isWrappedNative) {
|
|
||||||
MOZ_ASSERT(cx->runtime->preserveWrapperCallback, "wrapped native weak map key needs preserveWrapperCallback");
|
|
||||||
if (!cx->runtime->preserveWrapperCallback(cx, key)) {
|
|
||||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BAD_WEAKMAP_KEY);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!map->put(key, value)) {
|
if (!map->put(key, value)) {
|
||||||
JS_ReportOutOfMemory(cx);
|
JS_ReportOutOfMemory(cx);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Preserve wrapped native keys to prevent wrapper optimization.
|
||||||
|
if (key->getClass()->ext.isWrappedNative) {
|
||||||
|
if (!cx->runtime->preserveWrapperCallback ||
|
||||||
|
!cx->runtime->preserveWrapperCallback(cx, key)) {
|
||||||
|
JS_ReportWarning(cx, "Failed to preserve wrapper of wrapped native weak map key.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
args.rval().setUndefined();
|
args.rval().setUndefined();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,32 +213,14 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=668855
|
||||||
|
|
||||||
make_live_map();
|
make_live_map();
|
||||||
|
|
||||||
let unpreservable_native_key = function () {
|
|
||||||
// We only allow natives that support wrapper preservation to be used as weak
|
|
||||||
// map keys. We should be able to try to add unpreservable natives as keys without
|
|
||||||
// crashing (bug 711616), but we should throw an error (bug 761620).
|
|
||||||
|
|
||||||
let dummy_test_map = new WeakMap;
|
let dummy_test_map = new WeakMap;
|
||||||
|
// bug 711616: should be able to do this without crashing. JS warning is expected.
|
||||||
|
dummy_test_map.set(document.createElement("div").style, 1);
|
||||||
|
|
||||||
let div_fail = false;
|
// JS warning is expected.
|
||||||
try {
|
dummy_test_map.set(window.navigator, 1);
|
||||||
dummy_test_map.set(document.createElement("div").style, 1);
|
|
||||||
} catch (e) {
|
|
||||||
div_fail = true;
|
|
||||||
}
|
|
||||||
ok(div_fail, "Using elem.style as a weak map key should produce an exception because it can't be wrapper preserved.");
|
|
||||||
|
|
||||||
let navi_fail = false;
|
|
||||||
try {
|
|
||||||
dummy_test_map.set(window.navigator, 1);
|
|
||||||
} catch (e) {
|
|
||||||
navi_fail = true;
|
|
||||||
}
|
|
||||||
ok(navi_fail, "Using window.navigator as a weak map key should produce an exception because it can't be wrapper preserved.");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
unpreservable_native_key();
|
|
||||||
|
|
||||||
/* set up for running precise GC/CC then checking the results */
|
/* set up for running precise GC/CC then checking the results */
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче