From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/dispex.c | 2 ++ dlls/mshtml/tests/documentmode.js | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 03b400a383f..b1af74abc79 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -659,6 +659,8 @@ static HRESULT prop_put(jsdisp_t *This, dispex_prop_t *prop, jsval_t val) TRACE("no prop_put\n"); return S_OK; } + if(!(prop->flags & PROPF_WRITABLE)) + return S_OK; hres = This->builtin_info->prop_put(This, prop->u.id, val); if(hres != S_FALSE) return hres; diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 634f4ad3420..557c46920ab 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -4012,7 +4012,7 @@ sync_test("prototype props", function() { });
sync_test("constructors", function() { - var v = document.documentMode, i, r; + var v = document.documentMode, i, r, old; if(v < 9) return;
@@ -4038,4 +4038,27 @@ sync_test("constructors", function() { }catch(e) { ok(e.number === 0x0ffff - 0x80000000, "new XMLHttpRequest.create() threw " + e.number); } + + r = Object.getOwnPropertyDescriptor(HTMLMetaElement, "prototype"); + ok(r.value === HTMLMetaElement.prototype, "HTMLMetaElement.prototype value = " + r.value); + ok(!("get" in r), "HTMLMetaElement.prototype has getter"); + ok(!("set" in r), "HTMLMetaElement.prototype has setter"); + ok(r.writable === false, "HTMLMetaElement.prototype writable = " + r.writable); + ok(r.enumerable === false, "HTMLMetaElement.prototype enumerable = " + r.enumerable); + ok(r.configurable === false, "HTMLMetaElement.prototype configurable = " + r.configurable); + + old = HTMLMetaElement.prototype; + HTMLMetaElement.prototype = Object.prototype; + ok(HTMLMetaElement.prototype === old, "HTMLMetaElement.prototype = " + HTMLMetaElement.prototype); + + r = (delete HTMLMetaElement.prototype); + ok(r === false, "delete HTMLMetaElement.prototype returned " + r); + ok(HTMLMetaElement.hasOwnProperty("prototype"), "prototype not a prop anymore of HTMLMetaElement"); + + old = window.HTMLMetaElement; + r = (delete window.HTMLMetaElement); + ok(r === true, "delete HTMLMetaElement returned " + r); + todo_wine. + ok(!window.hasOwnProperty("HTMLMetaElement"), "HTMLMetaElement still a property of window"); + window.HTMLMetaElement = old; });