Except for nodes with custom properties, those still need more work on the infrastructure. jscript change is just minimum needed to allow objects with only builtin properties to preserve their current behavior, I have more tweaks for that area queued for "async" custom properties.
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/dispex.c | 4 ++-- dlls/mshtml/htmlelem.c | 13 +++---------- dlls/mshtml/mshtml_private.h | 4 ++++ 3 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 72eb8db40a7..ccba451507b 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -1914,7 +1914,7 @@ static HRESULT WINAPI DispatchEx_GetDispID(IWineJSDispatchHost *iface, BSTR bstr return S_OK; }
-static HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EXCEPINFO *ei, IServiceProvider *caller) +HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EXCEPINFO *ei, IServiceProvider *caller) { switch(get_dispid_type(id)) { case DISPEXPROP_CUSTOM: { @@ -1950,7 +1950,7 @@ static HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT } }
-static HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EXCEPINFO *ei, IServiceProvider *caller) +HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EXCEPINFO *ei, IServiceProvider *caller) { static DISPID propput_dispid = DISPID_PROPERTYPUT;
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 470b718523b..750bc8f2428 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1161,8 +1161,6 @@ static inline WCHAR *translate_attr_name(WCHAR *attr_name, compat_mode_t compat_
static HRESULT set_elem_attr_value_by_dispid(HTMLElement *elem, DISPID dispid, VARIANT *v) { - DISPID propput_dispid = DISPID_PROPERTYPUT; - DISPPARAMS dp = {v, &propput_dispid, 1, 1}; EXCEPINFO ei;
if(dispid == DISPID_IHTMLELEMENT_STYLE) { @@ -1170,8 +1168,7 @@ static HRESULT set_elem_attr_value_by_dispid(HTMLElement *elem, DISPID dispid, V return S_OK; }
- return IWineJSDispatchHost_InvokeEx(&elem->node.event_target.dispex.IWineJSDispatchHost_iface, dispid, - LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, &dp, NULL, &ei, NULL); + return dispex_prop_put(&elem->node.event_target.dispex, dispid, LOCALE_SYSTEM_DEFAULT, v, &ei, NULL); }
static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttributeName, @@ -1238,11 +1235,8 @@ done:
HRESULT get_elem_attr_value_by_dispid(HTMLElement *elem, DISPID dispid, VARIANT *ret) { - DISPPARAMS dispParams = {NULL, NULL, 0, 0}; EXCEPINFO excep; - - return IWineJSDispatchHost_InvokeEx(&elem->node.event_target.dispex.IWineJSDispatchHost_iface, dispid, LOCALE_SYSTEM_DEFAULT, - DISPATCH_PROPERTYGET, &dispParams, ret, &excep, NULL); + return dispex_prop_get(&elem->node.event_target.dispex, dispid, LOCALE_SYSTEM_DEFAULT, ret, &excep, NULL); }
HRESULT attr_value_to_string(VARIANT *v) @@ -2483,8 +2477,7 @@ static HRESULT WINAPI HTMLElement_toString(IHTMLElement *iface, BSTR *String) if(!String) return E_INVALIDARG;
- hres = IWineJSDispatchHost_InvokeEx(&This->node.event_target.dispex.IWineJSDispatchHost_iface, DISPID_VALUE, - LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, NULL, &var, NULL, NULL); + hres = dispex_prop_get(&This->node.event_target.dispex, DISPID_VALUE, LOCALE_SYSTEM_DEFAULT, &var, NULL, NULL); if(SUCCEEDED(hres)) { assert(V_VT(&var) == VT_BSTR); *String = V_BSTR(&var); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 0bce00762b7..dffb191f13c 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -508,6 +508,10 @@ compat_mode_t dispex_compat_mode(DispatchEx*); HRESULT dispex_to_string(DispatchEx*,BSTR*); HRESULT dispex_call_builtin(DispatchEx *dispex, DISPID id, DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller); +HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EXCEPINFO *ei, + IServiceProvider *caller); +HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EXCEPINFO *ei, + IServiceProvider *caller);
typedef enum { DISPEXPROP_CUSTOM,
From: Jacek Caban jacek@codeweavers.com
And use it in get_attr_dispid_by_relative_idx. --- dlls/mshtml/dispex.c | 45 ++++++++++++++++++++---------------- dlls/mshtml/htmlelem.c | 3 +-- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index ccba451507b..75738455d10 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2215,41 +2215,33 @@ static HRESULT next_dynamic_id(DispatchEx *dispex, DWORD idx, DISPID *ret_id) return S_OK; }
-static HRESULT WINAPI DispatchEx_GetNextDispID(IWineJSDispatchHost *iface, DWORD grfdex, DISPID id, DISPID *pid) +HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret) { - DispatchEx *This = impl_from_IWineJSDispatchHost(iface); func_info_t *func; HRESULT hres;
- TRACE("%s (%p)->(%lx %lx %p)\n", This->info->desc->name, This, grfdex, id, pid); - - if(!ensure_real_info(This)) - return E_OUTOFMEMORY; - if(This->jsdisp) - return IWineJSDispatch_GetNextDispID(This->jsdisp, grfdex, id, pid); - if(is_dynamic_dispid(id)) { DWORD idx = id - DISPID_DYNPROP_0;
- if(!get_dynamic_data(This) || This->dynamic_data->prop_cnt <= idx) + if(!get_dynamic_data(dispex) || dispex->dynamic_data->prop_cnt <= idx) return DISP_E_MEMBERNOTFOUND;
- return next_dynamic_id(This, idx+1, pid); + return next_dynamic_id(dispex, idx+1, ret); }
if(!is_custom_dispid(id)) { if(id == DISPID_STARTENUM) { - func = This->info->funcs; + func = dispex->info->funcs; }else { - hres = get_builtin_func(This->info, id, &func); + hres = get_builtin_func(dispex->info, id, &func); if(FAILED(hres)) return hres; func++; }
- while(func < This->info->funcs + This->info->func_cnt) { + while(func < dispex->info->funcs + dispex->info->func_cnt) { if(func->func_disp_idx == -1) { - *pid = func->id; + *ret = func->id; return S_OK; } func++; @@ -2258,19 +2250,32 @@ static HRESULT WINAPI DispatchEx_GetNextDispID(IWineJSDispatchHost *iface, DWORD id = DISPID_STARTENUM; }
- if(This->info->desc->vtbl->next_dispid) { - hres = This->info->desc->vtbl->next_dispid(This, id, pid); + if(dispex->info->desc->vtbl->next_dispid) { + hres = dispex->info->desc->vtbl->next_dispid(dispex, id, ret); if(hres != S_FALSE) return hres; }
- if(get_dynamic_data(This) && This->dynamic_data->prop_cnt) - return next_dynamic_id(This, 0, pid); + if(get_dynamic_data(dispex) && dispex->dynamic_data->prop_cnt) + return next_dynamic_id(dispex, 0, ret);
- *pid = DISPID_STARTENUM; + *ret = DISPID_STARTENUM; return S_FALSE; }
+static HRESULT WINAPI DispatchEx_GetNextDispID(IWineJSDispatchHost *iface, DWORD grfdex, DISPID id, DISPID *pid) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + TRACE("%s (%p)->(%lx %lx %p)\n", This->info->desc->name, This, grfdex, id, pid); + + if(!ensure_real_info(This)) + return E_OUTOFMEMORY; + if(This->jsdisp) + return IWineJSDispatch_GetNextDispID(This->jsdisp, grfdex, id, pid); + return dispex_next_id(This, id, pid); +} + static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IWineJSDispatchHost *iface, IUnknown **ppunk) { DispatchEx *This = impl_from_IWineJSDispatchHost(iface); diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 750bc8f2428..b26b8eac40e 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -7538,7 +7538,6 @@ static HRESULT create_filters_collection(compat_mode_t compat_mode, IHTMLFilters
static HRESULT get_attr_dispid_by_relative_idx(HTMLAttributeCollection *This, LONG *idx, DISPID start, DISPID *dispid) { - IWineJSDispatchHost *dispex = &This->elem->node.event_target.dispex.IWineJSDispatchHost_iface; DISPID id = start; LONG len = -1; HRESULT hres; @@ -7546,7 +7545,7 @@ static HRESULT get_attr_dispid_by_relative_idx(HTMLAttributeCollection *This, LO FIXME("filter non-enumerable attributes out\n");
while(1) { - hres = IWineJSDispatchHost_GetNextDispID(dispex, fdexEnumAll, id, &id); + hres = dispex_next_id(&This->elem->node.event_target.dispex, id, &id); if(FAILED(hres)) return hres; else if(hres == S_FALSE) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index dffb191f13c..fd1eb9f4822 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -512,6 +512,7 @@ HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EX IServiceProvider *caller); HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EXCEPINFO *ei, IServiceProvider *caller); +HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret);
typedef enum { DISPEXPROP_CUSTOM,
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmldoc.c | 2 +- dlls/mshtml/htmlwindow.c | 10 +++++----- dlls/mshtml/mshtml_private.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index a5f4f558bdd..75b2b0b831d 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5389,7 +5389,7 @@ static HRESULT HTMLDocumentNode_get_dispid(DispatchEx *dispex, BSTR name, DWORD return hres; }
-static HRESULT HTMLDocumentNode_find_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLDocumentNode_find_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLDocumentNode *This = impl_from_DispatchEx(dispex); HRESULT hres = DISP_E_UNKNOWNNAME; diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index af2a0e83d66..e53d9cacd42 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3309,7 +3309,7 @@ static ULONG WINAPI WindowDispEx_Release(IWineJSDispatchHost *iface) DISPEX_IDISPATCH_NOUNK_IMPL(WindowDispEx, IWineJSDispatchHost, impl_from_IWineJSDispatchHost(iface)->base.inner_window->event_target.dispex)
-static global_prop_t *alloc_global_prop(HTMLInnerWindow *This, global_prop_type_t type, BSTR name) +static global_prop_t *alloc_global_prop(HTMLInnerWindow *This, global_prop_type_t type, const WCHAR *name) { if(This->global_prop_cnt == This->global_prop_size) { global_prop_t *new_props; @@ -3781,12 +3781,12 @@ static HRESULT HTMLWindow_lookup_dispid(DispatchEx *dispex, BSTR name, DWORD grf return search_window_props(This, name, grfdex, dispid); }
-static HRESULT HTMLWindow_find_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLWindow_find_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); HTMLOuterWindow *frame; global_prop_t *prop; - IHTMLElement *elem; + HTMLElement *elem; HRESULT hres;
hres = get_frame_by_name(This->base.outer_window, name, FALSE, &frame); @@ -3799,9 +3799,9 @@ static HRESULT HTMLWindow_find_dispid(DispatchEx *dispex, BSTR name, DWORD grfde return S_OK; }
- hres = IHTMLDocument3_getElementById(&This->doc->IHTMLDocument3_iface, name, &elem); + hres = get_doc_elem_by_id(This->doc, name, &elem); if(SUCCEEDED(hres) && elem) { - IHTMLElement_Release(elem); + IHTMLElement_Release(&elem->IHTMLElement_iface);
prop = alloc_global_prop(This, GLOBAL_ELEMENTVAR, name); if(!prop) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index fd1eb9f4822..d79c8b6a24e 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -382,7 +382,7 @@ typedef struct { HRESULT (*get_dispid)(DispatchEx*,BSTR,DWORD,DISPID*);
/* Similar to get_dispid, but called only when a dynamic property can't be found */ - HRESULT (*find_dispid)(DispatchEx*,BSTR,DWORD,DISPID*); + HRESULT (*find_dispid)(DispatchEx*,const WCHAR*,DWORD,DISPID*);
/* Similar to get_dispid, but called before any other lookup */ HRESULT (*lookup_dispid)(DispatchEx*,BSTR,DWORD,DISPID*);
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlscript.h | 2 +- dlls/mshtml/htmlwindow.c | 10 +++++----- dlls/mshtml/mshtml_private.h | 4 ++-- dlls/mshtml/script.c | 10 ++++++++-- 4 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/dlls/mshtml/htmlscript.h b/dlls/mshtml/htmlscript.h index 37a7b8d1f50..6d608d525a1 100644 --- a/dlls/mshtml/htmlscript.h +++ b/dlls/mshtml/htmlscript.h @@ -47,7 +47,7 @@ void doc_insert_script(HTMLInnerWindow*,HTMLScriptElement*,BOOL); IDispatch *script_parse_event(HTMLInnerWindow*,LPCWSTR); HRESULT exec_script(HTMLInnerWindow*,const WCHAR*,const WCHAR*,VARIANT*); void update_browser_script_mode(GeckoBrowser*,IUri*); -BOOL find_global_prop(HTMLInnerWindow*,BSTR,DWORD,ScriptHost**,DISPID*); +BOOL find_global_prop(HTMLInnerWindow*,const WCHAR*,DWORD,ScriptHost**,DISPID*); IDispatch *get_script_disp(ScriptHost*); IActiveScriptSite *get_first_script_site(HTMLInnerWindow*); void initialize_script_global(HTMLInnerWindow*); diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index e53d9cacd42..b936a9a844a 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3341,7 +3341,7 @@ static inline DWORD prop_to_dispid(HTMLInnerWindow *This, global_prop_t *prop) return MSHTML_DISPID_CUSTOM_MIN + (prop-This->global_props); }
-HRESULT search_window_props(HTMLInnerWindow *This, BSTR bstrName, DWORD grfdex, DISPID *pid) +HRESULT search_window_props(HTMLInnerWindow *This, const WCHAR *name, DWORD grfdex, DISPID *pid) { DWORD i; ScriptHost *script_host; @@ -3349,16 +3349,16 @@ HRESULT search_window_props(HTMLInnerWindow *This, BSTR bstrName, DWORD grfdex,
for(i=0; i < This->global_prop_cnt; i++) { /* FIXME: case sensitivity */ - if(!wcscmp(This->global_props[i].name, bstrName)) { + if(!wcscmp(This->global_props[i].name, name)) { *pid = MSHTML_DISPID_CUSTOM_MIN+i; return S_OK; } }
- if(find_global_prop(This->base.inner_window, bstrName, grfdex, &script_host, &id)) { + if(find_global_prop(This->base.inner_window, name, grfdex, &script_host, &id)) { global_prop_t *prop;
- prop = alloc_global_prop(This, GLOBAL_SCRIPTVAR, bstrName); + prop = alloc_global_prop(This, GLOBAL_SCRIPTVAR, name); if(!prop) return E_OUTOFMEMORY;
@@ -3774,7 +3774,7 @@ static HRESULT HTMLWindow_get_name(DispatchEx *dispex, DISPID id, BSTR *name) return (*name = SysAllocString(This->global_props[idx].name)) ? S_OK : E_OUTOFMEMORY; }
-static HRESULT HTMLWindow_lookup_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLWindow_lookup_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index d79c8b6a24e..620b4986dc6 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -385,7 +385,7 @@ typedef struct { HRESULT (*find_dispid)(DispatchEx*,const WCHAR*,DWORD,DISPID*);
/* Similar to get_dispid, but called before any other lookup */ - HRESULT (*lookup_dispid)(DispatchEx*,BSTR,DWORD,DISPID*); + HRESULT (*lookup_dispid)(DispatchEx*,const WCHAR*,DWORD,DISPID*);
/* These are called when the object implements GetMemberName, InvokeEx, DeleteMemberByDispID and GetNextDispID for custom props */ HRESULT (*get_name)(DispatchEx*,DISPID,BSTR*); @@ -1277,7 +1277,7 @@ HRESULT get_document_node(nsIDOMDocument*,HTMLDocumentNode**);
HTMLElement *unsafe_impl_from_IHTMLElement(IHTMLElement*);
-HRESULT search_window_props(HTMLInnerWindow*,BSTR,DWORD,DISPID*); +HRESULT search_window_props(HTMLInnerWindow*,const WCHAR*,DWORD,DISPID*); HRESULT get_frame_by_name(HTMLOuterWindow*,const WCHAR*,BOOL,HTMLOuterWindow**); HRESULT get_doc_elem_by_id(HTMLDocumentNode*,const WCHAR*,HTMLElement**); HTMLOuterWindow *get_target_window(HTMLOuterWindow*,nsAString*,BOOL*); diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c index 6a542defa8c..295c8a0dc15 100644 --- a/dlls/mshtml/script.c +++ b/dlls/mshtml/script.c @@ -1770,13 +1770,17 @@ void bind_event_scripts(HTMLDocumentNode *doc) nsIDOMNodeList_Release(node_list); }
-BOOL find_global_prop(HTMLInnerWindow *window, BSTR name, DWORD flags, ScriptHost **ret_host, DISPID *ret_id) +BOOL find_global_prop(HTMLInnerWindow *window, const WCHAR *name, DWORD flags, ScriptHost **ret_host, DISPID *ret_id) { IDispatchEx *dispex; IDispatch *disp; ScriptHost *iter; + BSTR str; HRESULT hres;
+ if(!(str = SysAllocString(name))) + return E_OUTOFMEMORY; + LIST_FOR_EACH_ENTRY(iter, &window->script_hosts, ScriptHost, entry) { disp = get_script_disp(iter); if(!disp) @@ -1784,7 +1788,7 @@ BOOL find_global_prop(HTMLInnerWindow *window, BSTR name, DWORD flags, ScriptHos
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); if(SUCCEEDED(hres)) { - hres = IDispatchEx_GetDispID(dispex, name, flags & (~fdexNameEnsure), ret_id); + hres = IDispatchEx_GetDispID(dispex, str, flags & (~fdexNameEnsure), ret_id); IDispatchEx_Release(dispex); }else { FIXME("No IDispatchEx\n"); @@ -1793,11 +1797,13 @@ BOOL find_global_prop(HTMLInnerWindow *window, BSTR name, DWORD flags, ScriptHos
IDispatch_Release(disp); if(SUCCEEDED(hres)) { + SysFreeString(str); *ret_host = iter; return TRUE; } }
+ SysFreeString(str); return FALSE; }
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/dispex.c | 8 +++----- dlls/mshtml/htmldoc.c | 2 +- dlls/mshtml/htmlelem.c | 16 ++++++++-------- dlls/mshtml/htmlelemcol.c | 4 ++-- dlls/mshtml/htmlform.c | 2 +- dlls/mshtml/htmlframe.c | 4 ++-- dlls/mshtml/htmlnode.c | 4 ++-- dlls/mshtml/htmlobject.c | 2 +- dlls/mshtml/htmlselect.c | 2 +- dlls/mshtml/htmlstorage.c | 2 +- dlls/mshtml/htmlstyle.c | 2 +- dlls/mshtml/htmlstyle.h | 2 +- dlls/mshtml/htmlstylesheet.c | 8 ++++---- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/pluginhost.c | 4 ++-- dlls/mshtml/pluginhost.h | 2 +- 16 files changed, 32 insertions(+), 34 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 75738455d10..5ebd1fa52e8 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -999,7 +999,7 @@ static HRESULT function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR return hres; }
-static HRESULT function_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT function_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { DWORD i;
@@ -1173,7 +1173,7 @@ static HRESULT get_builtin_func(dispex_data_t *data, DISPID id, func_info_t **re return DISP_E_MEMBERNOTFOUND; }
-static HRESULT get_builtin_id(DispatchEx *This, BSTR name, DWORD grfdex, DISPID *ret) +static HRESULT get_builtin_id(DispatchEx *This, const WCHAR *name, DWORD grfdex, DISPID *ret) { int min, max, n, c; HRESULT hres; @@ -2304,9 +2304,7 @@ static HRESULT WINAPI JSDispatchHost_LookupProperty(IWineJSDispatchHost *iface,
TRACE("%s (%p)->(%s)\n", This->info->desc->name, This, debugstr_w(name));
- /* FIXME: name cast works as long as the object doesn't require the actual BSTR for its custom - * properties, we will need to fix it properly. */ - hres = get_builtin_id(This, (BSTR)name, flags, &id); + hres = get_builtin_id(This, name, flags, &id); if(FAILED(hres)) return hres;
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 75b2b0b831d..6fe1516a720 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5375,7 +5375,7 @@ static HRESULT HTMLDocumentNode_get_name(DispatchEx *dispex, DISPID id, BSTR *na return (*name = SysAllocString(This->elem_vars[idx])) ? S_OK : E_OUTOFMEMORY; }
-static HRESULT HTMLDocumentNode_get_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLDocumentNode_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLDocumentNode *This = impl_from_DispatchEx(dispex); HRESULT hres = DISP_E_UNKNOWNNAME; diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index b26b8eac40e..0b08b0e4995 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1052,12 +1052,12 @@ static void HTMLRectCollection_destructor(DispatchEx *dispex) free(This); }
-static HRESULT HTMLRectCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLRectCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLRectCollection *This = HTMLRectCollection_from_DispatchEx(dispex); + const WCHAR *ptr; UINT32 len = 0; DWORD idx = 0; - WCHAR *ptr;
for(ptr = name; *ptr && is_digit(*ptr); ptr++) idx = idx*10 + (*ptr-'0'); @@ -7086,7 +7086,7 @@ static HRESULT token_list_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPP return S_OK; }
-static HRESULT token_list_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT token_list_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { WCHAR *end; LONG idx; @@ -7464,9 +7464,9 @@ static void HTMLFiltersCollection_destructor(DispatchEx *dispex) free(This); }
-static HRESULT HTMLFiltersCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLFiltersCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { - WCHAR *ptr; + const WCHAR *ptr; int idx = 0;
for(ptr = name; *ptr && is_digit(*ptr); ptr++) @@ -7570,7 +7570,7 @@ static HRESULT get_attr_dispid_by_idx(HTMLAttributeCollection *This, LONG *idx, return get_attr_dispid_by_relative_idx(This, idx, DISPID_STARTENUM, dispid); }
-static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, BSTR name, DISPID *id) +static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, const WCHAR *name, DISPID *id) { HRESULT hres;
@@ -7587,7 +7587,7 @@ static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, BST }
hres = IWineJSDispatchHost_GetDispID(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, - name, fdexNameCaseInsensitive, id); + (BSTR)name, fdexNameCaseInsensitive, id); return hres; }
@@ -8052,7 +8052,7 @@ static void HTMLAttributeCollection_destructor(DispatchEx *dispex) free(This); }
-static HRESULT HTMLAttributeCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLAttributeCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); HTMLDOMAttribute *attr; diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c index 92ea4584aa4..a264813f9bb 100644 --- a/dlls/mshtml/htmlelemcol.c +++ b/dlls/mshtml/htmlelemcol.c @@ -506,10 +506,10 @@ static void HTMLElementCollection_destructor(DispatchEx *dispex)
#define DISPID_ELEMCOL_0 MSHTML_DISPID_CUSTOM_MIN
-static HRESULT HTMLElementCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLElementCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLElementCollection *This = impl_from_DispatchEx(dispex); - WCHAR *ptr; + const WCHAR *ptr; DWORD idx=0;
if(!*name) diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index 7be9c1c95d7..b9ed7eabe51 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -750,7 +750,7 @@ static void HTMLFormElement_unlink(DispatchEx *dispex) unlink_ref(&This->nsform); }
-static HRESULT HTMLFormElement_get_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLFormElement_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLFormElement *This = impl_from_DispatchEx(dispex); nsIDOMHTMLCollection *elements; diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index 953add5672d..78890b43e05 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -860,7 +860,7 @@ static void HTMLFrameElement_destructor(DispatchEx *dispex) HTMLFrameBase_destructor(&This->framebase); }
-static HRESULT HTMLFrameElement_get_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLFrameElement_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLFrameElement *This = frame_from_DispatchEx(dispex);
@@ -1297,7 +1297,7 @@ static void HTMLIFrame_destructor(DispatchEx *dispex) HTMLFrameBase_destructor(&This->framebase); }
-static HRESULT HTMLIFrame_get_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLIFrame_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLIFrame *This = iframe_from_DispatchEx(dispex);
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 36e89818bb3..f549999b429 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -317,10 +317,10 @@ static void HTMLDOMChildrenCollection_destructor(DispatchEx *dispex)
#define DISPID_CHILDCOL_0 MSHTML_DISPID_CUSTOM_MIN
-static HRESULT HTMLDOMChildrenCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLDOMChildrenCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLDOMChildrenCollection *This = impl_from_DispatchEx(dispex); - WCHAR *ptr; + const WCHAR *ptr; DWORD idx=0; UINT32 len = 0;
diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 471ea764da8..7c9892ce999 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -663,7 +663,7 @@ static void HTMLObjectElement_destructor(DispatchEx *dispex) HTMLElement_destructor(&This->plugin_container.element.node.event_target.dispex); }
-static HRESULT HTMLObjectElement_get_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *dispid) +static HRESULT HTMLObjectElement_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLObjectElement *This = impl_from_DispatchEx(dispex);
diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index e85ed53c3d5..8cfbbe58c45 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -1215,7 +1215,7 @@ static void HTMLSelectElement_unlink(DispatchEx *dispex)
#define DISPID_OPTIONCOL_0 MSHTML_DISPID_CUSTOM_MIN
-static HRESULT HTMLSelectElement_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLSelectElement_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { const WCHAR *ptr; DWORD idx = 0; diff --git a/dlls/mshtml/htmlstorage.c b/dlls/mshtml/htmlstorage.c index d4a84a05a3c..9920a641957 100644 --- a/dlls/mshtml/htmlstorage.c +++ b/dlls/mshtml/htmlstorage.c @@ -1100,7 +1100,7 @@ static HRESULT get_prop(HTMLStorage *This, const WCHAR *name, DISPID *dispid) return S_OK; }
-static HRESULT HTMLStorage_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLStorage_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLStorage *This = impl_from_DispatchEx(dispex); HRESULT hres; diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index def56f7aedb..cfc50f150ba 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -9549,7 +9549,7 @@ void CSSStyle_destructor(DispatchEx *dispex) free(This); }
-HRESULT CSSStyle_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +HRESULT CSSStyle_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { CSSStyle *This = impl_from_DispatchEx(dispex); const style_tbl_entry_t *style_entry; diff --git a/dlls/mshtml/htmlstyle.h b/dlls/mshtml/htmlstyle.h index f6d5ea7c5bb..0818e555cb9 100644 --- a/dlls/mshtml/htmlstyle.h +++ b/dlls/mshtml/htmlstyle.h @@ -155,7 +155,7 @@ void *CSSStyle_query_interface(DispatchEx*,REFIID); void CSSStyle_traverse(DispatchEx*,nsCycleCollectionTraversalCallback*); void CSSStyle_unlink(DispatchEx*); void CSSStyle_destructor(DispatchEx*); -HRESULT CSSStyle_get_dispid(DispatchEx*,BSTR,DWORD,DISPID*); +HRESULT CSSStyle_get_dispid(DispatchEx*,const WCHAR*,DWORD,DISPID*); void CSSStyle_init_dispex_info(dispex_data_t *info, compat_mode_t mode);
HRESULT get_style_property(CSSStyle*,styleid_t,BSTR*); diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c index 711ef8b4042..1e8982ee098 100644 --- a/dlls/mshtml/htmlstylesheet.c +++ b/dlls/mshtml/htmlstylesheet.c @@ -292,12 +292,12 @@ static void HTMLStyleSheetRulesCollection_destructor(DispatchEx *dispex) free(This); }
-static HRESULT HTMLStyleSheetRulesCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLStyleSheetRulesCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLStyleSheetRulesCollection *This = HTMLStyleSheetRulesCollection_from_DispatchEx(dispex); + const WCHAR *ptr; UINT32 len = 0; DWORD idx = 0; - WCHAR *ptr;
for(ptr = name; *ptr && is_digit(*ptr); ptr++) idx = idx*10 + (*ptr-'0'); @@ -669,12 +669,12 @@ static void HTMLStyleSheetsCollection_destructor(DispatchEx *dispex) free(This); }
-static HRESULT HTMLStyleSheetsCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +static HRESULT HTMLStyleSheetsCollection_get_dispid(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *dispid) { HTMLStyleSheetsCollection *This = HTMLStyleSheetsCollection_from_DispatchEx(dispex); + const WCHAR *ptr; UINT32 len = 0; DWORD idx = 0; - WCHAR *ptr;
for(ptr = name; *ptr && is_digit(*ptr); ptr++) idx = idx*10 + (*ptr-'0'); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 620b4986dc6..0f986afbb57 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -379,7 +379,7 @@ typedef struct { HRESULT (*value)(DispatchEx*,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*);
/* Used when the object has custom props, and this returns DISPIDs for them */ - HRESULT (*get_dispid)(DispatchEx*,BSTR,DWORD,DISPID*); + HRESULT (*get_dispid)(DispatchEx*,const WCHAR*,DWORD,DISPID*);
/* Similar to get_dispid, but called only when a dynamic property can't be found */ HRESULT (*find_dispid)(DispatchEx*,const WCHAR*,DWORD,DISPID*); diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c index 5f9e3588239..ce184315127 100644 --- a/dlls/mshtml/pluginhost.c +++ b/dlls/mshtml/pluginhost.c @@ -704,7 +704,7 @@ HRESULT get_plugin_disp(HTMLPluginContainer *plugin_container, IDispatch **ret) return S_OK; }
-HRESULT get_plugin_dispid(HTMLPluginContainer *plugin_container, WCHAR *name, DISPID *ret) +HRESULT get_plugin_dispid(HTMLPluginContainer *plugin_container, const WCHAR *name, DISPID *ret) { IDispatch *disp; DISPID id; @@ -720,7 +720,7 @@ HRESULT get_plugin_dispid(HTMLPluginContainer *plugin_container, WCHAR *name, DI if(!disp) return DISP_E_UNKNOWNNAME;
- hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &name, 1, 0, &id); + hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, (WCHAR **)&name, 1, 0, &id); if(FAILED(hres)) { TRACE("no prop %s\n", debugstr_w(name)); return DISP_E_UNKNOWNNAME; diff --git a/dlls/mshtml/pluginhost.h b/dlls/mshtml/pluginhost.h index 0aa70991f68..bdef901bc80 100644 --- a/dlls/mshtml/pluginhost.h +++ b/dlls/mshtml/pluginhost.h @@ -67,7 +67,7 @@ void update_plugin_window(PluginHost*,HWND,const RECT*); void detach_plugin_host(PluginHost*);
HRESULT get_plugin_disp(HTMLPluginContainer*,IDispatch**); -HRESULT get_plugin_dispid(HTMLPluginContainer*,WCHAR*,DISPID*); +HRESULT get_plugin_dispid(HTMLPluginContainer*,const WCHAR*,DISPID*); HRESULT invoke_plugin_prop(HTMLPluginContainer*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*); void notif_container_change(HTMLPluginContainer*,DISPID); void bind_activex_event(HTMLDocumentNode*,HTMLPluginContainer*,WCHAR*,IDispatch*);
From: Jacek Caban jacek@codeweavers.com
And use it in HTMLElement implementation. --- dlls/mshtml/dispex.c | 43 ++++++++++++++++++++---------------- dlls/mshtml/htmlelem.c | 28 +++++++++-------------- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 5ebd1fa52e8..97f50a8810b 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -1877,43 +1877,48 @@ static HRESULT WINAPI DispatchEx_Invoke(IWineJSDispatchHost *iface, DISPID dispI pVarResult, pExcepInfo, NULL); }
-static HRESULT WINAPI DispatchEx_GetDispID(IWineJSDispatchHost *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *pid) { - DispatchEx *This = impl_from_IWineJSDispatchHost(iface); dynamic_prop_t *dprop = NULL; HRESULT hres;
- TRACE("%s (%p)->(%s %lx %p)\n", This->info->desc->name, This, debugstr_w(bstrName), grfdex, pid); - - if(grfdex & ~(fdexNameCaseSensitive|fdexNameCaseInsensitive|fdexNameEnsure|fdexNameImplicit|FDEX_VERSION_MASK)) - FIXME("Unsupported grfdex %lx\n", grfdex); - - if(!ensure_real_info(This)) - return E_OUTOFMEMORY; - if(This->jsdisp) - return IWineJSDispatch_GetDispID(This->jsdisp, bstrName, grfdex, pid); - - hres = get_builtin_id(This, bstrName, grfdex, pid); + hres = get_builtin_id(dispex, name, flags, pid); if(hres != DISP_E_UNKNOWNNAME) return hres;
- hres = get_dynamic_prop(This, bstrName, grfdex & ~fdexNameEnsure, &dprop); + hres = get_dynamic_prop(dispex, name, flags & ~fdexNameEnsure, &dprop); if(FAILED(hres)) { - if(This->info->desc->vtbl->find_dispid) { - hres = This->info->desc->vtbl->find_dispid(This, bstrName, grfdex, pid); + if(dispex->info->desc->vtbl->find_dispid) { + hres = dispex->info->desc->vtbl->find_dispid(dispex, name, flags, pid); if(SUCCEEDED(hres)) return hres; } - if(grfdex & fdexNameEnsure) - hres = alloc_dynamic_prop(This, bstrName, dprop, &dprop); + if(flags & fdexNameEnsure) + hres = alloc_dynamic_prop(dispex, name, dprop, &dprop); if(FAILED(hres)) return hres; }
- *pid = DISPID_DYNPROP_0 + (dprop - This->dynamic_data->props); + *pid = DISPID_DYNPROP_0 + (dprop - dispex->dynamic_data->props); return S_OK; }
+static HRESULT WINAPI DispatchEx_GetDispID(IWineJSDispatchHost *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + TRACE("%s (%p)->(%s %lx %p)\n", This->info->desc->name, This, debugstr_w(bstrName), grfdex, pid); + + if(grfdex & ~(fdexNameCaseSensitive|fdexNameCaseInsensitive|fdexNameEnsure|fdexNameImplicit|FDEX_VERSION_MASK)) + FIXME("Unsupported grfdex %lx\n", grfdex); + + if(!ensure_real_info(This)) + return E_OUTOFMEMORY; + if(This->jsdisp) + return IWineJSDispatch_GetDispID(This->jsdisp, bstrName, grfdex, pid); + return dispex_get_id(This, bstrName, grfdex, pid); +} + HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EXCEPINFO *ei, IServiceProvider *caller) { switch(get_dispid_type(id)) { diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 0b08b0e4995..3e45ab5cb0e 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1149,14 +1149,11 @@ static dispex_static_data_t HTMLRectCollection_dispex = { DISPEX_IDISPATCH_IMPL(HTMLElement, IHTMLElement, impl_from_IHTMLElement(iface)->node.event_target.dispex)
-static inline WCHAR *translate_attr_name(WCHAR *attr_name, compat_mode_t compat_mode) +static inline const WCHAR *translate_attr_name(const WCHAR *attr_name, compat_mode_t compat_mode) { - static WCHAR classNameW[] = L"className"; - WCHAR *ret = attr_name; - if(compat_mode >= COMPAT_MODE_IE8 && !wcsicmp(attr_name, L"class")) - ret = classNameW; - return ret; + return L"className"; + return attr_name; }
static HRESULT set_elem_attr_value_by_dispid(HTMLElement *elem, DISPID dispid, VARIANT *v) @@ -1186,7 +1183,7 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr TRACE("(%p)->(%s %s %08lx)\n", This, debugstr_w(strAttributeName), debugstr_variant(&AttributeValue), lFlags);
if(compat_mode < COMPAT_MODE_IE9 || !This->dom_element) { - hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, translate_attr_name(strAttributeName, compat_mode), + hres = dispex_get_id(&This->node.event_target.dispex, translate_attr_name(strAttributeName, compat_mode), (lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive) | fdexNameEnsure, &dispid); if(FAILED(hres)) return hres; @@ -1282,8 +1279,8 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr FIXME("Unsupported flags %lx\n", lFlags);
if(compat_mode < COMPAT_MODE_IE9 || !This->dom_element) { - hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, translate_attr_name(strAttributeName, compat_mode), - lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid); + hres = dispex_get_id(&This->node.event_target.dispex, translate_attr_name(strAttributeName, compat_mode), + lFlags & ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid); if(FAILED(hres)) { V_VT(AttributeValue) = VT_NULL; return (hres == DISP_E_UNKNOWNNAME) ? S_OK : hres; @@ -1330,8 +1327,8 @@ static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strA TRACE("(%p)->(%s %lx %p)\n", This, debugstr_w(strAttributeName), lFlags, pfSuccess);
if(compat_mode < COMPAT_MODE_IE9 || !This->dom_element) { - hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, translate_attr_name(strAttributeName, compat_mode), - lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &id); + hres = dispex_get_id(&This->node.event_target.dispex, translate_attr_name(strAttributeName, compat_mode), + lFlags & ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &id); if(hres == DISP_E_UNKNOWNNAME) { *pfSuccess = VARIANT_FALSE; return S_OK; @@ -4423,8 +4420,7 @@ static HRESULT WINAPI HTMLElement4_setAttributeNode(IHTMLElement4 *iface, IHTMLD return E_INVALIDARG; }
- hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, - attr->name, fdexNameCaseInsensitive|fdexNameEnsure, &dispid); + hres = dispex_get_id(&This->node.event_target.dispex, attr->name, fdexNameCaseInsensitive | fdexNameEnsure, &dispid); if(FAILED(hres)) return hres;
@@ -6393,7 +6389,7 @@ HRESULT HTMLElement_populate_props(DispatchEx *dispex) continue; }
- hres = IWineJSDispatchHost_GetDispID(&dispex->IWineJSDispatchHost_iface, name, fdexNameCaseInsensitive, &id); + hres = dispex_get_id(dispex, name, fdexNameCaseInsensitive, &id); if(hres != DISP_E_UNKNOWNNAME) { nsIDOMAttr_Release(attr); SysFreeString(name); @@ -7586,9 +7582,7 @@ static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, con } }
- hres = IWineJSDispatchHost_GetDispID(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, - (BSTR)name, fdexNameCaseInsensitive, id); - return hres; + return dispex_get_id(&This->elem->node.event_target.dispex, name, fdexNameCaseInsensitive, id); }
static inline HRESULT get_domattr(HTMLAttributeCollection *This, DISPID id, LONG *list_pos, HTMLDOMAttribute **attr) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 0f986afbb57..38cf4e06282 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -512,6 +512,7 @@ HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EX IServiceProvider *caller); HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EXCEPINFO *ei, IServiceProvider *caller); +HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *pid); HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret);
typedef enum {
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlattr.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 4f58926d237..829c3ffa842 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -61,10 +61,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeName(IHTMLDOMAttribute *iface, BS static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, VARIANT v) { HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute(iface); - DISPID dispidNamed = DISPID_PROPERTYPUT; - DISPPARAMS dp = {&v, &dispidNamed, 1, 1}; EXCEPINFO ei; - VARIANT ret;
TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
@@ -72,9 +69,7 @@ static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, V return VariantCopy(&This->value, &v);
memset(&ei, 0, sizeof(ei)); - - return IWineJSDispatchHost_InvokeEx(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, This->dispid, LOCALE_SYSTEM_DEFAULT, - DISPATCH_PROPERTYPUT, &dp, &ret, &ei, NULL); + return dispex_prop_put(&This->elem->node.event_target.dispex, This->dispid, LOCALE_SYSTEM_DEFAULT, &v, &ei, NULL); }
static HRESULT WINAPI HTMLDOMAttribute_get_nodeValue(IHTMLDOMAttribute *iface, VARIANT *p)
From: Jacek Caban jacek@codeweavers.com
And use it in HTMLDOMAttribute implementation. --- dlls/mshtml/dispex.c | 42 ++++++++++++++++++------------------ dlls/mshtml/htmlattr.c | 4 ++-- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 97f50a8810b..54e54cfdc96 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2163,46 +2163,46 @@ static HRESULT WINAPI DispatchEx_GetMemberProperties(IWineJSDispatchHost *iface, return E_NOTIMPL; }
-static HRESULT WINAPI DispatchEx_GetMemberName(IWineJSDispatchHost *iface, DISPID id, BSTR *pbstrName) +HRESULT dispex_prop_name(DispatchEx *dispex, DISPID id, BSTR *ret) { - DispatchEx *This = impl_from_IWineJSDispatchHost(iface); func_info_t *func; HRESULT hres;
- TRACE("%s (%p)->(%lx %p)\n", This->info->desc->name, This, id, pbstrName); - - if(!ensure_real_info(This)) - return E_OUTOFMEMORY; - if(This->jsdisp) - return IWineJSDispatch_GetMemberName(This->jsdisp, id, pbstrName); - if(is_custom_dispid(id)) { - if(This->info->desc->vtbl->get_name) - return This->info->desc->vtbl->get_name(This, id, pbstrName); + if(dispex->info->desc->vtbl->get_name) + return dispex->info->desc->vtbl->get_name(dispex, id, ret); return DISP_E_MEMBERNOTFOUND; }
if(is_dynamic_dispid(id)) { DWORD idx = id - DISPID_DYNPROP_0;
- if(!get_dynamic_data(This) || This->dynamic_data->prop_cnt <= idx) + if(!get_dynamic_data(dispex) || dispex->dynamic_data->prop_cnt <= idx) return DISP_E_MEMBERNOTFOUND;
- *pbstrName = SysAllocString(This->dynamic_data->props[idx].name); - if(!*pbstrName) - return E_OUTOFMEMORY; - - return S_OK; + *ret = SysAllocString(dispex->dynamic_data->props[idx].name); + return *ret ? S_OK : E_OUTOFMEMORY; }
- hres = get_builtin_func(This->info, id, &func); + hres = get_builtin_func(dispex->info, id, &func); if(FAILED(hres)) return hres;
- *pbstrName = SysAllocString(func->name); - if(!*pbstrName) + *ret = SysAllocString(func->name); + return *ret ? S_OK : E_OUTOFMEMORY; +} + +static HRESULT WINAPI DispatchEx_GetMemberName(IWineJSDispatchHost *iface, DISPID id, BSTR *pbstrName) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + TRACE("%s (%p)->(%lx %p)\n", This->info->desc->name, This, id, pbstrName); + + if(!ensure_real_info(This)) return E_OUTOFMEMORY; - return S_OK; + if(This->jsdisp) + return IWineJSDispatch_GetMemberName(This->jsdisp, id, pbstrName); + return dispex_prop_name(This, id, pbstrName); }
static HRESULT next_dynamic_id(DispatchEx *dispex, DWORD idx, DISPID *ret_id) diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index 829c3ffa842..31837f06284 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -55,7 +55,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_nodeName(IHTMLDOMAttribute *iface, BS return *p ? S_OK : E_OUTOFMEMORY; }
- return IWineJSDispatchHost_GetMemberName(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, This->dispid, p); + return dispex_prop_name(&This->elem->node.event_target.dispex, This->dispid, p); }
static HRESULT WINAPI HTMLDOMAttribute_put_nodeValue(IHTMLDOMAttribute *iface, VARIANT v) @@ -105,7 +105,7 @@ static HRESULT WINAPI HTMLDOMAttribute_get_specified(IHTMLDOMAttribute *iface, V return S_OK; }
- hres = IWineJSDispatchHost_GetMemberName(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, This->dispid, &name); + hres = dispex_prop_name(&This->elem->node.event_target.dispex, This->dispid, &name); if(FAILED(hres)) return hres;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 38cf4e06282..a7a6a2ed0a2 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -514,6 +514,7 @@ HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EX IServiceProvider *caller); HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *pid); HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret); +HRESULT dispex_prop_name(DispatchEx *dispex, DISPID id, BSTR *ret);
typedef enum { DISPEXPROP_CUSTOM,
From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/dispex.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 517859433f2..79aea60de9c 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -325,13 +325,12 @@ static HRESULT find_prop_name(jsdisp_t *This, unsigned hash, const WCHAR *name, HRESULT hres;
prop = lookup_dispex_prop(This, hash, name, case_insens); - if(prop) { + if(prop && prop->type != PROP_DELETED) { *ret = prop; return S_OK; }
- builtin = find_builtin_prop(This, name, case_insens); - if(builtin) { + if(!prop && (builtin = find_builtin_prop(This, name, case_insens))) { unsigned flags = builtin->flags; if(flags & PROPF_METHOD) { jsdisp_t *obj; @@ -362,7 +361,10 @@ static HRESULT find_prop_name(jsdisp_t *This, unsigned hash, const WCHAR *name, return S_OK; }
- return find_external_prop(This, name, case_insens, ret); + hres = find_external_prop(This, name, case_insens, ret); + if(hres == S_OK && !*ret) + *ret = prop; + return hres; }
static HRESULT find_prop_name_prot(jsdisp_t *This, unsigned hash, const WCHAR *name, BOOL case_insens, dispex_prop_t **ret)
From: Jacek Caban jacek@codeweavers.com
--- dlls/mshtml/htmlevent.c | 3 +- dlls/mshtml/htmlnode.c | 6 +- dlls/mshtml/tests/documentmode.js | 160 +++++++++++++++--------------- 3 files changed, 87 insertions(+), 82 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 68f20607c7b..6489c557def 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -5141,7 +5141,8 @@ void EventTarget_Init(EventTarget *event_target, dispex_static_data_t *dispex_da
void init_event_target(EventTarget *event_target, dispex_static_data_t *dispex_data, HTMLInnerWindow *script_global) { - init_dispatch(&event_target->dispex, dispex_data, script_global, dispex_compat_mode(&script_global->event_target.dispex)); + compat_mode_t compat_mode = script_global && script_global->doc ? script_global->doc->document_mode : COMPAT_MODE_NONE; + init_dispatch(&event_target->dispex, dispex_data, script_global, compat_mode); event_target->IEventTarget_iface.lpVtbl = &EventTargetVtbl; wine_rb_init(&event_target->handler_map, event_id_cmp); } diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index f549999b429..f752d2595d0 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1288,7 +1288,11 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno node->IHTMLDOMNode2_iface.lpVtbl = &HTMLDOMNode2Vtbl; node->IHTMLDOMNode3_iface.lpVtbl = &HTMLDOMNode3Vtbl;
- EventTarget_Init(&node->event_target, dispex_data, doc->document_mode); + /* FIXME: We can't use new bindings for nodes with custom properties yet */ + if(dispex_data->vtbl->get_name) + EventTarget_Init(&node->event_target, dispex_data, doc->document_mode); + else + init_event_target(&node->event_target, dispex_data, doc->script_global);
if(&doc->node != node) IHTMLDOMNode_AddRef(&doc->node.IHTMLDOMNode_iface); diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 867130aec3d..016b51c9eda 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -107,126 +107,126 @@ sync_test("page transition events", function() {
sync_test("builtin_toString", function() { var tags = [ - [ "abbr", "Phrase" ], - [ "acronym", "Phrase" ], - [ "address", "Block" ], + [ "abbr", "Phrase", -1 ], + [ "acronym", "Phrase", -1 ], + [ "address", "Block", -1 ], // [ "applet", "Applet" ], // makes Windows pop up a dialog box [ "article", "" ], [ "aside", "" ], - [ "audio", "Audio" ], - [ "b", "Phrase" ], - [ "base", "Base" ], - [ "basefont", "BaseFont" ], + [ "audio", "Audio", -1 ], + [ "b", "Phrase", -1 ], + [ "base", "Base", -1 ], + [ "basefont", "BaseFont", -1 ], [ "bdi", "Unknown" ], - [ "bdo", "Phrase" ], - [ "big", "Phrase" ], - [ "blockquote", "Block" ], + [ "bdo", "Phrase", -1 ], + [ "big", "Phrase", -1 ], + [ "blockquote", "Block", -1 ], [ "body", "Body" ], - [ "br", "BR" ], + [ "br", "BR", -1 ], [ "button", "Button" ], - [ "canvas", "Canvas" ], - [ "caption", "TableCaption" ], - [ "center", "Block" ], - [ "cite", "Phrase" ], - [ "code", "Phrase" ], - [ "col", "TableCol" ], - [ "colgroup", "TableCol" ], + [ "canvas", "Canvas", -1 ], + [ "caption", "TableCaption", -1 ], + [ "center", "Block", -1 ], + [ "cite", "Phrase", -1 ], + [ "code", "Phrase", -1 ], + [ "col", "TableCol", -1 ], + [ "colgroup", "TableCol", -1 ], [ "data", "Unknown" ], [ "datalist", "DataList", 10 ], - [ "dd", "DD" ], - [ "del", "Mod" ], + [ "dd", "DD", -1 ], + [ "del", "Mod", -1 ], [ "details", "Unknown" ], - [ "dfn", "Phrase" ], + [ "dfn", "Phrase", -1 ], [ "dialog", "Unknown" ], - [ "dir", "Directory" ], - [ "div", "Div" ], - [ "dl", "DList" ], - [ "dt", "DT" ], - [ "em", "Phrase" ], + [ "dir", "Directory", -1 ], + [ "div", "Div", -1 ], + [ "dl", "DList", -1 ], + [ "dt", "DT", -1 ], + [ "em", "Phrase", -1 ], [ "embed", "Embed" ], - [ "fieldset", "FieldSet" ], + [ "fieldset", "FieldSet", -1 ], [ "figcaption", "" ], [ "figure", "" ], - [ "font", "Font" ], + [ "font", "Font", -1 ], [ "footer", "" ], - [ "form", "Form" ], - [ "frame", "Frame" ], - [ "frameset", "FrameSet" ], - [ "h1", "Heading" ], - [ "h2", "Heading" ], - [ "h3", "Heading" ], - [ "h4", "Heading" ], - [ "h5", "Heading" ], - [ "h6", "Heading" ], + [ "form", "Form", -1 ], + [ "frame", "Frame", -1 ], + [ "frameset", "FrameSet", -1 ], + [ "h1", "Heading", -1 ], + [ "h2", "Heading", -1 ], + [ "h3", "Heading", -1 ], + [ "h4", "Heading", -1 ], + [ "h5", "Heading", -1 ], + [ "h6", "Heading", -1 ], [ "h7", "Unknown" ], [ "head", "Head" ], [ "header", "" ], - [ "hr", "HR" ], + [ "hr", "HR", -1 ], [ "html", "Html" ], - [ "i", "Phrase" ], - [ "iframe", "IFrame" ], + [ "i", "Phrase", -1 ], + [ "iframe", "IFrame", -1 ], [ "img", "Image" ], [ "input", "Input" ], - [ "ins", "Mod" ], - [ "kbd", "Phrase" ], + [ "ins", "Mod", -1 ], + [ "kbd", "Phrase", -1 ], [ "label", "Label" ], - [ "legend", "Legend" ], - [ "li", "LI" ], + [ "legend", "Legend", -1 ], + [ "li", "LI", -1 ], [ "link", "Link" ], [ "main", "Unknown" ], - [ "map", "Map" ], + [ "map", "Map", -1 ], [ "mark", "" ], [ "meta", "Meta" ], [ "meter", "Unknown" ], [ "nav", "" ], [ "noframes", "" ], [ "noscript", "" ], - [ "object", "Object" ], - [ "ol", "OList" ], - [ "optgroup", "OptGroup" ], + [ "object", "Object", -1 ], + [ "ol", "OList", -1 ], + [ "optgroup", "OptGroup", -1 ], [ "option", "Option" ], [ "output", "Unknown" ], - [ "p", "Paragraph" ], - [ "param", "Param" ], + [ "p", "Paragraph", -1 ], + [ "param", "Param", -1 ], [ "picture", "Unknown" ], - [ "pre", "Pre" ], + [ "pre", "Pre", -1 ], [ "progress", "Progress", 10 ], - [ "q", "Quote" ], - [ "rp", "Phrase" ], - [ "rt", "Phrase" ], - [ "ruby", "Phrase" ], - [ "s", "Phrase" ], - [ "samp", "Phrase" ], + [ "q", "Quote", -1 ], + [ "rp", "Phrase", -1 ], + [ "rt", "Phrase", -1 ], + [ "ruby", "Phrase", -1 ], + [ "s", "Phrase", -1 ], + [ "samp", "Phrase", -1 ], [ "script", "Script" ], [ "section", "" ], - [ "select", "Select" ], - [ "small", "Phrase" ], - [ "source", "Source" ], - [ "span", "Span" ], - [ "strike", "Phrase" ], - [ "strong", "Phrase" ], + [ "select", "Select", -1 ], + [ "small", "Phrase", -1 ], + [ "source", "Source", -1 ], + [ "span", "Span", -1 ], + [ "strike", "Phrase", -1 ], + [ "strong", "Phrase", -1 ], [ "style", "Style" ], - [ "sub", "Phrase" ], + [ "sub", "Phrase", -1 ], [ "summary", "Unknown" ], - [ "sup", "Phrase" ], + [ "sup", "Phrase", -1 ], [ "svg", "Unknown" ], [ "table", "Table" ], - [ "tbody", "TableSection" ], + [ "tbody", "TableSection", -1 ], [ "td", "TableDataCell" ], [ "template", "Unknown" ], [ "textarea", "TextArea" ], - [ "tfoot", "TableSection" ], - [ "th", "TableHeaderCell" ], - [ "thead", "TableSection" ], + [ "tfoot", "TableSection", -1 ], + [ "th", "TableHeaderCell", -1 ], + [ "thead", "TableSection", -1 ], [ "time", "Unknown" ], [ "title", "Title" ], [ "tr", "TableRow" ], [ "track", "Track", 10 ], - [ "tt", "Phrase" ], - [ "u", "Phrase" ], - [ "ul", "UList" ], - [ "var", "Phrase" ], - [ "video", "Video" ], + [ "tt", "Phrase", -1 ], + [ "u", "Phrase", -1 ], + [ "ul", "UList", -1 ], + [ "var", "Phrase", -1 ], + [ "video", "Video", -1 ], [ "wbr", "" ], [ "winetest", "Unknown" ] ]; @@ -246,17 +246,17 @@ sync_test("builtin_toString", function() {
for(var i = 0; i < tags.length; i++) if(tags[i].length < 3 || v >= tags[i][2]) - test("tag '" + tags[i][0] + "'", document.createElement(tags[i][0]), "HTML" + tags[i][1] + "Element", null, true); + test("tag '" + tags[i][0] + "'", document.createElement(tags[i][0]), "HTML" + tags[i][1] + "Element", null, tags[i].length > 2);
e = document.createElement("a"); ok(e.toString() === "", "tag 'a' (without href) toString returned " + e.toString()); e.href = "https://www.winehq.org/"; - test("tag 'a'", e, "HTMLAnchorElement", "https://www.winehq.org/", true); + test("tag 'a'", e, "HTMLAnchorElement", "https://www.winehq.org/");
e = document.createElement("area"); ok(e.toString() === "", "tag 'area' (without href) toString returned " + e.toString()); e.href = "https://www.winehq.org/"; - test("tag 'area'", e, "HTMLAreaElement", "https://www.winehq.org/", true); + test("tag 'area'", e, "HTMLAreaElement", "https://www.winehq.org/");
e = document.createElement("style"); document.body.appendChild(e); @@ -315,7 +315,7 @@ sync_test("builtin_toString", function() { test("styleSheetRule", sheet.rules[0], "CSSStyleRule", null, true); test("styleSheetRules", sheet.rules, "MSCSSRuleList", null, true); test("styleSheets", document.styleSheets, "StyleSheetList", null, true); - test("textNode", document.createTextNode("testNode"), "Text", v < 9 ? "testNode" : null, true); + test("textNode", document.createTextNode("testNode"), "Text", v < 9 ? "testNode" : null); test("textRange", txtRange, "TextRange"); test("window", window, "Window", "[object Window]", true); test("xmlHttpRequest", new XMLHttpRequest(), "XMLHttpRequest"); @@ -328,7 +328,7 @@ sync_test("builtin_toString", function() { } if(v >= 9) { test("computedStyle", window.getComputedStyle(e), "CSSStyleDeclaration", null, true); - test("doctype", document.doctype, "DocumentType", null, true); + test("doctype", document.doctype, "DocumentType");
test("Event", document.createEvent("Event"), "Event"); test("CustomEvent", document.createEvent("CustomEvent"), "CustomEvent"); @@ -346,7 +346,7 @@ sync_test("builtin_toString", function() { } if(v >= 9) { document.body.innerHTML = "<!--...-->"; - test("comment", document.body.firstChild, "Comment", null, true); + test("comment", document.body.firstChild, "Comment"); } });
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=147136
Your paranoid android.
=== debian11b (64 bit WoW report) ===
ddraw: ddraw1.c:3645: Test failed: Expected (0,0)-(640,480), got (-32000,-32000)-(-31840,-31969).