mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 856384 - Make outer windows always be [[Extensible]]. r=bholley, r=till
This commit is contained in:
parent
21aae31454
commit
3b503a25ed
@ -542,6 +542,9 @@ public:
|
||||
virtual void finalize(JSFreeOp *fop, JSObject *proxy) MOZ_OVERRIDE;
|
||||
|
||||
// Fundamental traps
|
||||
virtual bool isExtensible(JSObject *proxy) MOZ_OVERRIDE;
|
||||
virtual bool preventExtensions(JSContext *cx,
|
||||
JS::Handle<JSObject*> proxy) MOZ_OVERRIDE;
|
||||
virtual bool getPropertyDescriptor(JSContext* cx,
|
||||
JS::Handle<JSObject*> proxy,
|
||||
JS::Handle<jsid> id,
|
||||
@ -609,6 +612,24 @@ protected:
|
||||
JS::AutoIdVector &props);
|
||||
};
|
||||
|
||||
bool
|
||||
nsOuterWindowProxy::isExtensible(JSObject *proxy)
|
||||
{
|
||||
// If [[Extensible]] could be false, then navigating a window could navigate
|
||||
// to a window that's [[Extensible]] after being at one that wasn't: an
|
||||
// invariant violation. So always report true for this.
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
nsOuterWindowProxy::preventExtensions(JSContext *cx,
|
||||
JS::Handle<JSObject*> proxy)
|
||||
{
|
||||
// See above.
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
|
||||
JSMSG_CANT_CHANGE_EXTENSIBILITY);
|
||||
return false;
|
||||
}
|
||||
|
||||
JSString *
|
||||
nsOuterWindowProxy::obj_toString(JSContext *cx, JS::Handle<JSObject*> proxy)
|
||||
|
@ -23,6 +23,7 @@ MOCHITEST_FILES = \
|
||||
test_screen_orientation.html \
|
||||
test_window_constructor.html \
|
||||
test_window_enumeration.html \
|
||||
test_window_extensible.html \
|
||||
test_window_indexing.html \
|
||||
test_writable-replaceable.html \
|
||||
test_domcursor.html \
|
||||
|
46
dom/base/test/test_window_extensible.html
Normal file
46
dom/base/test/test_window_extensible.html
Normal file
@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=856384
|
||||
-->
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Test for Bug 856384</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=856384">Mozilla Bug 856384</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
<iframe name="constructor" src="about:blank"></iframe>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function run()
|
||||
{
|
||||
is(Object.isExtensible(window), true, "Windows are extensible by default");
|
||||
|
||||
try
|
||||
{
|
||||
Object.preventExtensions(window);
|
||||
throw "didn't throw";
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
is(e instanceof TypeError, true,
|
||||
"preventExtensions(window) should throw a TypeError, instead got: " + e);
|
||||
is(Object.isExtensible(window), true,
|
||||
'Windows are extensible after an extensibility "change" attempt');
|
||||
}
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user