Fixing bug 257538. Fix problem where setting a property on a scriptable plugin would cache the property so that the plugin's getter wouldn't be called again for that property. r+sr=shaver@mozilla.org
git-svn-id: svn://10.0.0.236/trunk@164535 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
7bfc89b66d
commit
ad92bef671
@ -386,6 +386,7 @@ static const char kDOMStringBundleURL[] =
|
||||
|
||||
#define EXTERNAL_OBJ_SCRIPTABLE_FLAGS \
|
||||
(ELEMENT_SCRIPTABLE_FLAGS & ~nsIXPCScriptable::USE_JSSTUB_FOR_SETPROPERTY | \
|
||||
nsIXPCScriptable::WANT_GETPROPERTY | \
|
||||
nsIXPCScriptable::WANT_SETPROPERTY | \
|
||||
nsIXPCScriptable::WANT_CALL)
|
||||
|
||||
@ -7074,27 +7075,79 @@ nsHTMLExternalObjSH::PostCreate(nsIXPConnectWrappedNative *wrapper,
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLExternalObjSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
|
||||
nsHTMLExternalObjSH::GetProperty(nsIXPConnectWrappedNative *wrapper,
|
||||
JSContext *cx, JSObject *obj, jsval id,
|
||||
jsval *vp, PRBool *_retval)
|
||||
{
|
||||
JSString *id_str = ::JS_ValueToString(cx, id);
|
||||
if (!id_str) {
|
||||
*_retval = JS_FALSE;
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
JSObject *pi_obj = ::JS_GetPrototype(cx, obj);
|
||||
const jschar *id_chars = ::JS_GetStringChars(id_str);
|
||||
size_t id_length = ::JS_GetStringLength(id_str);
|
||||
|
||||
const jschar *id_chars = nsnull;
|
||||
size_t id_length = 0;
|
||||
|
||||
JSBool found;
|
||||
if (!::JS_HasUCProperty(cx, pi_obj, id_chars, id_length, &found)) {
|
||||
|
||||
if (JSVAL_IS_STRING(id)) {
|
||||
JSString *id_str = JSVAL_TO_STRING(id);
|
||||
|
||||
id_chars = ::JS_GetStringChars(id_str);
|
||||
id_length = ::JS_GetStringLength(id_str);
|
||||
|
||||
*_retval = ::JS_HasUCProperty(cx, pi_obj, id_chars, id_length, &found);
|
||||
} else {
|
||||
*_retval = JS_HasElement(cx, pi_obj, JSVAL_TO_INT(id), &found);
|
||||
}
|
||||
|
||||
if (!*_retval) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
if (found) {
|
||||
*_retval = ::JS_SetUCProperty(cx, pi_obj, id_chars, id_length, vp);
|
||||
if (JSVAL_IS_STRING(id)) {
|
||||
*_retval = ::JS_GetUCProperty(cx, pi_obj, id_chars, id_length, vp);
|
||||
} else {
|
||||
*_retval = ::JS_GetElement(cx, pi_obj, JSVAL_TO_INT(id), vp);
|
||||
}
|
||||
|
||||
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return nsElementSH::GetProperty(wrapper, cx, obj, id, vp, _retval);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLExternalObjSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
|
||||
JSContext *cx, JSObject *obj, jsval id,
|
||||
jsval *vp, PRBool *_retval)
|
||||
{
|
||||
JSObject *pi_obj = ::JS_GetPrototype(cx, obj);
|
||||
|
||||
const jschar *id_chars = nsnull;
|
||||
size_t id_length = 0;
|
||||
|
||||
JSBool found;
|
||||
|
||||
if (JSVAL_IS_STRING(id)) {
|
||||
JSString *id_str = JSVAL_TO_STRING(id);
|
||||
|
||||
id_chars = ::JS_GetStringChars(id_str);
|
||||
id_length = ::JS_GetStringLength(id_str);
|
||||
|
||||
*_retval = ::JS_HasUCProperty(cx, pi_obj, id_chars, id_length, &found);
|
||||
} else {
|
||||
*_retval = JS_HasElement(cx, pi_obj, JSVAL_TO_INT(id), &found);
|
||||
}
|
||||
|
||||
if (!*_retval) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
if (found) {
|
||||
if (JSVAL_IS_STRING(id)) {
|
||||
*_retval = ::JS_SetUCProperty(cx, pi_obj, id_chars, id_length, vp);
|
||||
} else {
|
||||
*_retval = ::JS_SetElement(cx, pi_obj, JSVAL_TO_INT(id), vp);
|
||||
}
|
||||
|
||||
return *_retval ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
@ -864,6 +864,8 @@ protected:
|
||||
public:
|
||||
NS_IMETHOD PostCreate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj);
|
||||
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
||||
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
|
||||
NS_IMETHOD Call(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user