[PATCH 0/11] MR6167: mshtml: Use JS bindings for window objects.
Based on patch by Gabriel Ivăncescu. The part allowing properties to disappear as part of enumeration (as well as similar changes from previous MR) is not quite optimal. I think we will want to avoid it once host prototypes are supported. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/mshtml/dispex.c | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index d9d7b35526f..c34ff889b11 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2391,31 +2391,16 @@ static HRESULT WINAPI JSDispatchHost_LookupProperty(IWineJSDispatchHost *iface, static HRESULT WINAPI JSDispatchHost_NextProperty(IWineJSDispatchHost *iface, DISPID id, struct property_info *desc) { DispatchEx *This = impl_from_IWineJSDispatchHost(iface); - func_info_t *func; + DISPID next; HRESULT hres; TRACE("%s (%p)->(%lx)\n", This->info->desc->name, This, id); - if(id == DISPID_STARTENUM) { - func = This->info->funcs; - }else { - hres = get_builtin_func(This->info, id, &func); - if(FAILED(hres)) - return hres; - func++; - } + hres = dispex_next_id(This, id, &next); + if(hres != S_OK) + return hres; - while(func < This->info->funcs + This->info->func_cnt) { - if(func->func_disp_idx == -1) { - desc->id = func->id; - desc->name = func->name; - desc->flags = PROPF_WRITABLE | PROPF_CONFIGURABLE | PROPF_ENUMERABLE; - desc->func_iid = 0; - return S_OK; - } - func++; - } - return S_FALSE; + return get_host_property_descriptor(This, next, desc); } static HRESULT WINAPI JSDispatchHost_GetProperty(IWineJSDispatchHost *iface, DISPID id, LCID lcid, VARIANT *r, -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/jscript/dispex.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 3859f4c9a30..1b61ba531e9 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -3033,6 +3033,12 @@ HRESULT jsdisp_next_prop(jsdisp_t *obj, DISPID id, enum jsdisp_enum_type enum_ty } for(iter = &obj->props[idx]; iter < obj->props + obj->prop_cnt; iter++) { + if(iter->type == PROP_EXTERN) { + dispex_prop_t *prop; + hres = find_external_prop(obj, iter->name, FALSE, iter, &prop); + if(FAILED(hres) || prop != iter) + iter->type = PROP_DELETED; + } if(iter->type == PROP_DELETED) continue; if(enum_type != JSDISP_ENUM_ALL && iter->type == PROP_PROTREF) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> Based on patch by Gabriel Ivăncescu. --- dlls/mshtml/htmlstorage.c | 26 +++++++++++++------------- dlls/mshtml/tests/documentmode.js | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dlls/mshtml/htmlstorage.c b/dlls/mshtml/htmlstorage.c index 9920a641957..05ef086a814 100644 --- a/dlls/mshtml/htmlstorage.c +++ b/dlls/mshtml/htmlstorage.c @@ -1117,17 +1117,6 @@ static HRESULT HTMLStorage_get_dispid(DispatchEx *dispex, const WCHAR *name, DWO return get_prop(This, name, dispid); } -static HRESULT HTMLStorage_get_name(DispatchEx *dispex, DISPID id, BSTR *name) -{ - HTMLStorage *This = impl_from_DispatchEx(dispex); - DWORD idx = id - MSHTML_DISPID_CUSTOM_MIN; - - if(idx >= This->num_props) - return DISP_E_MEMBERNOTFOUND; - - return (*name = SysAllocString(This->props[idx])) ? S_OK : E_OUTOFMEMORY; -} - static HRESULT HTMLStorage_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) { @@ -1278,16 +1267,27 @@ static HRESULT HTMLStorage_next_dispid(DispatchEx *dispex, DISPID id, DISPID *pi return S_OK; } +static HRESULT HTMLStorage_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc) +{ + HTMLStorage *This = impl_from_DispatchEx(dispex); + + desc->name = This->props[id - MSHTML_DISPID_CUSTOM_MIN]; + desc->id = id; + desc->flags = PROPF_WRITABLE | PROPF_CONFIGURABLE | PROPF_ENUMERABLE; + desc->func_iid = 0; + return S_OK; +} + static const dispex_static_data_vtbl_t HTMLStorage_dispex_vtbl = { .query_interface = HTMLStorage_query_interface, .destructor = HTMLStorage_destructor, .traverse = HTMLStorage_traverse, .unlink = HTMLStorage_unlink, .get_dispid = HTMLStorage_get_dispid, - .get_name = HTMLStorage_get_name, .invoke = HTMLStorage_invoke, .delete = HTMLStorage_delete, .next_dispid = HTMLStorage_next_dispid, + .get_prop_desc = HTMLStorage_get_prop_desc, }; static const tid_t HTMLStorage_iface_tids[] = { @@ -1451,7 +1451,7 @@ HRESULT create_html_storage(HTMLInnerWindow *window, BOOL local, IHTMLStorage ** storage->window = window; IHTMLWindow2_AddRef(&window->base.IHTMLWindow2_iface); - init_dispatch(&storage->dispex, &HTMLStorage_dispex, NULL, + init_dispatch(&storage->dispex, &HTMLStorage_dispex, window, dispex_compat_mode(&window->event_target.dispex)); *p = &storage->IHTMLStorage_iface; diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 5fada630a51..3fb0fbab1d9 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -300,7 +300,7 @@ sync_test("builtin_toString", function() { test("elements", document.getElementsByTagName("body"), "HTMLCollection", null, true); test("history", window.history, "History"); test("implementation", document.implementation, "DOMImplementation"); - if(localStorage) test("localStorage", localStorage, "Storage", null, true); + if(localStorage) test("localStorage", localStorage, "Storage"); test("location", window.location, "Object", window.location.href, null, true); if(v >= 11 /* todo_wine */) test("mimeTypes", window.navigator.mimeTypes, v < 11 ? "MSMimeTypesCollection" : "MimeTypeArray"); test("navigator", window.navigator, "Navigator"); @@ -309,7 +309,7 @@ sync_test("builtin_toString", function() { test("performanceTiming", window.performance.timing, "PerformanceTiming"); if(v >= 11 /* todo_wine */) test("plugins", window.navigator.plugins, v < 11 ? "MSPluginsCollection" : "PluginArray"); test("screen", window.screen, "Screen"); - test("sessionStorage", window.sessionStorage, "Storage", null, true); + test("sessionStorage", window.sessionStorage, "Storage"); test("style", document.body.style, "MSStyleCSSProperties", null, true); test("styleSheet", sheet, "CSSStyleSheet", null, true); test("styleSheetRule", sheet.rules[0], "CSSStyleRule", null, true); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> Based on patch by Gabriel Ivăncescu. --- dlls/mshtml/htmlframe.c | 16 +++++++--------- dlls/mshtml/htmlwindow.c | 22 ++++++++++++++++++++-- dlls/mshtml/mshtml_private.h | 4 ++++ dlls/mshtml/tests/documentmode.js | 2 +- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index 78890b43e05..b9f92bb5563 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -870,17 +870,15 @@ static HRESULT HTMLFrameElement_get_dispid(DispatchEx *dispex, const WCHAR *name return search_window_props(This->framebase.content_window->base.inner_window, name, grfdex, dispid); } -static HRESULT HTMLFrameElement_get_name(DispatchEx *dispex, DISPID id, BSTR *name) +static HRESULT HTMLFrameElement_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc) { HTMLFrameElement *This = frame_from_DispatchEx(dispex); - DWORD idx = id - MSHTML_DISPID_CUSTOM_MIN; - if(!This->framebase.content_window || - idx >= This->framebase.content_window->base.inner_window->global_prop_cnt) + if(!This->framebase.content_window) return DISP_E_MEMBERNOTFOUND; - *name = SysAllocString(This->framebase.content_window->base.inner_window->global_props[idx].name); - return *name ? S_OK : E_OUTOFMEMORY; + return HTMLWindow_get_prop_desc(&This->framebase.content_window->base.inner_window->event_target.dispex, + id, desc); } static HRESULT HTMLFrameElement_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, @@ -893,8 +891,8 @@ static HRESULT HTMLFrameElement_invoke(DispatchEx *dispex, DISPID id, LCID lcid, return E_FAIL; } - return IWineJSDispatchHost_InvokeEx(&This->framebase.content_window->IWineJSDispatchHost_iface, id, lcid, - flags, params, res, ei, caller); + return HTMLWindow_invoke(&This->framebase.content_window->base.inner_window->event_target.dispex, + id, lcid, flags, params, res, ei, caller); } static const NodeImplVtbl HTMLFrameElementImplVtbl = { @@ -915,7 +913,7 @@ static const event_target_vtbl_t HTMLFrameElement_event_target_vtbl = { .traverse = HTMLFrameElement_traverse, .unlink = HTMLFrameElement_unlink, .get_dispid = HTMLFrameElement_get_dispid, - .get_name = HTMLFrameElement_get_name, + .get_prop_desc = HTMLFrameElement_get_prop_desc, .invoke = HTMLFrameElement_invoke }, HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index ceac07e4dd3..a7a6b0df383 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3830,8 +3830,8 @@ static HRESULT HTMLWindow_find_dispid(DispatchEx *dispex, const WCHAR *name, DWO return DISP_E_UNKNOWNNAME; } -static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, - VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) +HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, + VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); global_prop_t *prop; @@ -3946,6 +3946,24 @@ static HRESULT HTMLWindow_next_dispid(DispatchEx *dispex, DISPID id, DISPID *pid return S_OK; } +HRESULT HTMLWindow_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc) +{ + HTMLInnerWindow *This = impl_from_DispatchEx(dispex); + global_prop_t *prop; + + if(id - MSHTML_DISPID_CUSTOM_MIN >= This->global_prop_cnt) + return DISP_E_MEMBERNOTFOUND; + + prop = &This->global_props[id - MSHTML_DISPID_CUSTOM_MIN]; + desc->name = prop->name; + desc->id = id; + desc->flags = PROPF_WRITABLE | PROPF_CONFIGURABLE; + if(prop->type == GLOBAL_DISPEXVAR) + desc->flags |= PROPF_ENUMERABLE; + desc->func_iid = 0; + return S_OK; +} + static compat_mode_t HTMLWindow_get_compat_mode(DispatchEx *dispex, HTMLInnerWindow **script_global) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 04c51fb2503..9d84cbabe55 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1069,6 +1069,10 @@ void HTMLDocumentObj_Service_Init(HTMLDocumentObj*); void HTMLDocumentObj_OleCmd_Init(HTMLDocumentObj*); void TargetContainer_Init(HTMLDocumentObj*); +HRESULT HTMLWindow_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc); +HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, + VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller); + void HTMLDocumentNode_Persist_Init(HTMLDocumentNode*); void HTMLDocumentNode_Service_Init(HTMLDocumentNode*); void HTMLDocumentNode_OleCmd_Init(HTMLDocumentNode*); diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 3fb0fbab1d9..f608e573a34 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -150,7 +150,7 @@ sync_test("builtin_toString", function() { [ "font", "Font", -1 ], [ "footer", "" ], [ "form", "Form" ], - [ "frame", "Frame", -1 ], + [ "frame", "Frame" ], [ "frameset", "FrameSet", -1 ], [ "h1", "Heading", -1 ], [ "h2", "Heading", -1 ], -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> Based on patch by Gabriel Ivăncescu. --- dlls/mshtml/htmlframe.c | 16 +++++++--------- dlls/mshtml/tests/documentmode.js | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index b9f92bb5563..8082af43be5 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -1305,17 +1305,15 @@ static HRESULT HTMLIFrame_get_dispid(DispatchEx *dispex, const WCHAR *name, DWOR return search_window_props(This->framebase.content_window->base.inner_window, name, grfdex, dispid); } -static HRESULT HTMLIFrame_get_name(DispatchEx *dispex, DISPID id, BSTR *name) +static HRESULT HTMLIFrame_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_info *desc) { HTMLIFrame *This = iframe_from_DispatchEx(dispex); - DWORD idx = id - MSHTML_DISPID_CUSTOM_MIN; - if(!This->framebase.content_window || - idx >= This->framebase.content_window->base.inner_window->global_prop_cnt) + if(!This->framebase.content_window) return DISP_E_MEMBERNOTFOUND; - *name = SysAllocString(This->framebase.content_window->base.inner_window->global_props[idx].name); - return *name ? S_OK : E_OUTOFMEMORY; + return HTMLWindow_get_prop_desc(&This->framebase.content_window->base.inner_window->event_target.dispex, + id, desc); } static HRESULT HTMLIFrame_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, @@ -1328,8 +1326,8 @@ static HRESULT HTMLIFrame_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD return E_FAIL; } - return IWineJSDispatchHost_InvokeEx(&This->framebase.content_window->IWineJSDispatchHost_iface, id, lcid, - flags, params, res, ei, caller); + return HTMLWindow_invoke(&This->framebase.content_window->base.inner_window->event_target.dispex, + id, lcid, flags, params, res, ei, caller); } static const NodeImplVtbl HTMLIFrameImplVtbl = { @@ -1350,7 +1348,7 @@ static const event_target_vtbl_t HTMLIFrame_event_target_vtbl = { .traverse = HTMLIFrame_traverse, .unlink = HTMLIFrame_unlink, .get_dispid = HTMLIFrame_get_dispid, - .get_name = HTMLIFrame_get_name, + .get_prop_desc = HTMLIFrame_get_prop_desc, .invoke = HTMLIFrame_invoke }, HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index f608e573a34..ff4fbdf306b 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -164,7 +164,7 @@ sync_test("builtin_toString", function() { [ "hr", "HR", -1 ], [ "html", "Html" ], [ "i", "Phrase", -1 ], - [ "iframe", "IFrame", -1 ], + [ "iframe", "IFrame" ], [ "img", "Image" ], [ "input", "Input" ], [ "ins", "Mod", -1 ], -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/mshtml/dispex.c | 9 +++++++++ dlls/mshtml/htmlevent.c | 19 +++++++------------ dlls/mshtml/htmlevent.h | 1 - dlls/mshtml/htmlwindow.c | 13 ++++++++++--- dlls/mshtml/mshtml_private.h | 4 ++++ 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index c34ff889b11..61c86ec47df 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -745,6 +745,15 @@ HRESULT dispex_get_dynid(DispatchEx *This, const WCHAR *name, BOOL hidden, DISPI return S_OK; } +IWineJSDispatchHost *dispex_outer_iface(DispatchEx *dispex) +{ + if(dispex->info->desc->vtbl->get_outer_iface) + return dispex->info->desc->vtbl->get_outer_iface(dispex); + + IWineJSDispatchHost_AddRef(&dispex->IWineJSDispatchHost_iface); + return &dispex->IWineJSDispatchHost_iface; +} + static HRESULT dispex_value(DispatchEx *This, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) { diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 6eed0916117..8125a3eebc8 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -321,12 +321,13 @@ static void remove_event_listener(EventTarget *event_target, const WCHAR *type_n static IEventTarget *get_event_target_iface(EventTarget *event_target) { - const event_target_vtbl_t *vtbl = dispex_get_vtbl(&event_target->dispex); + const dispex_static_data_vtbl_t *vtbl = dispex_get_vtbl(&event_target->dispex); IEventTarget *ret; - if(vtbl->get_dispatch_this) { - IDispatch *disp = vtbl->get_dispatch_this(&event_target->dispex); - IDispatch_QueryInterface(disp, &IID_IEventTarget, (void**)&ret); + if(vtbl->get_outer_iface) { + IWineJSDispatchHost *disp = vtbl->get_outer_iface(&event_target->dispex); + IWineJSDispatchHost_QueryInterface(disp, &IID_IEventTarget, (void**)&ret); + IWineJSDispatchHost_Release(disp); }else { ret = &event_target->IEventTarget_iface; IEventTarget_AddRef(ret); @@ -4191,11 +4192,8 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp skip_onevent_listener = TRUE; V_VT(&arg) = VT_DISPATCH; - V_DISPATCH(&arg) = (IDispatch*)&event_target->dispex.IWineJSDispatchHost_iface; + V_DISPATCH(&arg) = (IDispatch*)dispex_outer_iface(&event_target->dispex); V_VT(&v) = VT_EMPTY; - if(vtbl->get_dispatch_this) - V_DISPATCH(&arg) = vtbl->get_dispatch_this(&event_target->dispex); - IDispatch_AddRef(V_DISPATCH(&arg)); TRACE("%p %s >>>\n", event_target, debugstr_w(event->type)); hres = call_disp_func(listener->function, &dp, &v); @@ -4272,10 +4270,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp DISPPARAMS dp = {args, &named_arg, 2, 1}; V_VT(args) = VT_DISPATCH; - V_DISPATCH(args) = (IDispatch*)&event_target->dispex.IWineJSDispatchHost_iface; - if(vtbl->get_dispatch_this) - V_DISPATCH(args) = vtbl->get_dispatch_this(&event_target->dispex); - IDispatch_AddRef(V_DISPATCH(args)); + V_DISPATCH(args) = (IDispatch *)dispex_outer_iface(&event_target->dispex); V_VT(args+1) = VT_DISPATCH; V_DISPATCH(args+1) = dispatch_mode == DISPATCH_LEGACY diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index 324f39ea746..6dec8cf9a9a 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -127,7 +127,6 @@ void detach_nsevent(HTMLDocumentNode*,const WCHAR*); /* We extend dispex vtbl for EventTarget functions to avoid separated vtbl. */ typedef struct { dispex_static_data_vtbl_t dispex_vtbl; - IDispatch *(*get_dispatch_this)(DispatchEx*); nsISupports *(*get_gecko_target)(DispatchEx*); void (*bind_event)(DispatchEx*,eventid_t); EventTarget *(*get_parent_event_target)(DispatchEx*); diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index a7a6b0df383..534a0bae9d2 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3970,10 +3970,17 @@ static compat_mode_t HTMLWindow_get_compat_mode(DispatchEx *dispex, HTMLInnerWin return lock_document_mode(This->doc); } -static IDispatch *HTMLWindow_get_dispatch_this(DispatchEx *dispex) +static IWineJSDispatchHost *HTMLWindow_get_outer_iface(DispatchEx *dispex) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); - return (IDispatch*)&This->base.outer_window->base.IHTMLWindow2_iface; + IWineJSDispatchHost *ret; + + if(This->base.outer_window) + ret = &This->base.outer_window->IWineJSDispatchHost_iface; + else + ret = &This->event_target.dispex.IWineJSDispatchHost_iface; + IWineJSDispatchHost_AddRef(ret); + return ret; } static nsISupports *HTMLWindow_get_gecko_target(DispatchEx *dispex) @@ -4152,8 +4159,8 @@ static const event_target_vtbl_t HTMLWindow_event_target_vtbl = { .invoke = HTMLWindow_invoke, .next_dispid = HTMLWindow_next_dispid, .get_compat_mode = HTMLWindow_get_compat_mode, + .get_outer_iface = HTMLWindow_get_outer_iface, }, - .get_dispatch_this = HTMLWindow_get_dispatch_this, .get_gecko_target = HTMLWindow_get_gecko_target, .bind_event = HTMLWindow_bind_event, .set_current_event = HTMLWindow_set_current_event diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 9d84cbabe55..2952149d881 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -375,6 +375,9 @@ typedef struct { /* Called on the last release, when the refcount reaches 0 */ void (*last_release)(DispatchEx*); + /* Called to get outer interface when it may be different than DispatchEx */ + IWineJSDispatchHost *(*get_outer_iface)(DispatchEx*); + /* Called when the object wants to handle DISPID_VALUE invocations */ HRESULT (*value)(DispatchEx*,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); @@ -517,6 +520,7 @@ HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret); HRESULT dispex_prop_name(DispatchEx *dispex, DISPID id, BSTR *ret); HRESULT dispex_index_prop_desc(DispatchEx*,DISPID,struct property_info*); +IWineJSDispatchHost *dispex_outer_iface(DispatchEx *dispex); typedef enum { DISPEXPROP_CUSTOM, -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/jscript/dispex.c | 5 +++-- dlls/jscript/jsdisp.idl | 1 + dlls/mshtml/dispex.c | 9 +++++++++ dlls/mshtml/htmlwindow.c | 10 ++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 1b61ba531e9..bd509a2e6f2 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -3515,6 +3515,7 @@ HRESULT init_host_object(script_ctx_t *ctx, IWineJSDispatchHost *host_iface, IWi IWineJSDispatchHost *get_host_dispatch(IDispatch *disp) { + IWineJSDispatchHost *ret; HostObject *host_obj; jsdisp_t *jsdisp; @@ -3524,6 +3525,6 @@ IWineJSDispatchHost *get_host_dispatch(IDispatch *disp) return NULL; host_obj = HostObject_from_jsdisp(jsdisp); - IWineJSDispatchHost_AddRef(host_obj->host_iface); - return host_obj->host_iface; + IWineJSDispatchHost_GetOuterDispatch(host_obj->host_iface, &ret); + return ret; } diff --git a/dlls/jscript/jsdisp.idl b/dlls/jscript/jsdisp.idl index a2b8762b2c0..518edabba9d 100644 --- a/dlls/jscript/jsdisp.idl +++ b/dlls/jscript/jsdisp.idl @@ -64,6 +64,7 @@ interface IWineJSDispatchHost : IDispatchEx HRESULT DeleteProperty(DISPID id); HRESULT ConfigureProperty(DISPID id, UINT32 flags); HRESULT CallFunction(DISPID id, UINT32 iid, DISPPARAMS *dp, VARIANT *ret, EXCEPINFO *ei, IServiceProvider *caller); + HRESULT GetOuterDispatch(IWineJSDispatchHost **ret); HRESULT ToString(BSTR *str); } diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 61c86ec47df..4a0e6a68403 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2475,6 +2475,14 @@ static HRESULT WINAPI JSDispatchHost_CallFunction(IWineJSDispatchHost *iface, DI return call_builtin_function(This, func, dp, ret, ei, caller); } +static HRESULT WINAPI JSDispatchHost_GetOuterDispatch(IWineJSDispatchHost *iface, IWineJSDispatchHost **ret) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + *ret = dispex_outer_iface(This); + return S_OK; +} + static HRESULT WINAPI JSDispatchHost_ToString(IWineJSDispatchHost *iface, BSTR *str) { DispatchEx *This = impl_from_IWineJSDispatchHost(iface); @@ -2508,6 +2516,7 @@ static IWineJSDispatchHostVtbl JSDispatchHostVtbl = { JSDispatchHost_DeleteProperty, JSDispatchHost_ConfigureProperty, JSDispatchHost_CallFunction, + JSDispatchHost_GetOuterDispatch, JSDispatchHost_ToString, }; diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 534a0bae9d2..588d10a1e56 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3508,6 +3508,15 @@ static HRESULT WINAPI WindowDispEx_CallFunction(IWineJSDispatchHost *iface, DISP id, iid, dp, ret, ei, caller); } +static HRESULT WINAPI WindowDispEx_GetOuterDispatch(IWineJSDispatchHost *iface, IWineJSDispatchHost **ret) +{ + HTMLOuterWindow *This = impl_from_IWineJSDispatchHost(iface); + + *ret = &This->IWineJSDispatchHost_iface; + IWineJSDispatchHost_AddRef(*ret); + return S_OK; +} + static HRESULT WINAPI WindowDispEx_ToString(IWineJSDispatchHost *iface, BSTR *str) { HTMLOuterWindow *This = impl_from_IWineJSDispatchHost(iface); @@ -3539,6 +3548,7 @@ static const IWineJSDispatchHostVtbl WindowDispExVtbl = { WindowDispEx_DeleteProperty, WindowDispEx_ConfigureProperty, WindowDispEx_CallFunction, + WindowDispEx_GetOuterDispatch, WindowDispEx_ToString, }; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/mshtml/dispex.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 4a0e6a68403..57c9cf8bcf5 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2468,9 +2468,7 @@ static HRESULT WINAPI JSDispatchHost_CallFunction(IWineJSDispatchHost *iface, DI TRACE("%s (%p)->(%lx %x %p %p %p %p)\n", This->info->desc->name, This, id, iid, dp, ret, ei, caller); hres = get_builtin_func(This->info, id, &func); - if(FAILED(hres)) - return hres; - if(func->tid != iid || func->func_disp_idx < 0) + if(FAILED(hres) || func->tid != iid || func->func_disp_idx < 0) return E_UNEXPECTED; return call_builtin_function(This, func, dp, ret, ei, caller); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/mshtml/htmlwindow.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 588d10a1e56..27d99f19ff6 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3789,17 +3789,6 @@ static void HTMLWindow_last_release(DispatchEx *dispex) remove_target_tasks(This->task_magic); } -static HRESULT HTMLWindow_get_name(DispatchEx *dispex, DISPID id, BSTR *name) -{ - HTMLInnerWindow *This = impl_from_DispatchEx(dispex); - DWORD idx = id - MSHTML_DISPID_CUSTOM_MIN; - - if(idx >= This->global_prop_cnt) - return DISP_E_MEMBERNOTFOUND; - - return (*name = SysAllocString(This->global_props[idx].name)) ? S_OK : E_OUTOFMEMORY; -} - static HRESULT HTMLWindow_lookup_dispid(DispatchEx *dispex, const WCHAR *name, DWORD grfdex, DISPID *dispid) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); @@ -3905,7 +3894,7 @@ HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, prop->type = GLOBAL_DISPEXVAR; prop->id = dispex_id; - return IWineJSDispatchHost_InvokeEx(&This->event_target.dispex.IWineJSDispatchHost_iface, dispex_id, 0, flags, params, res, ei, caller); + return dispex_prop_put(&This->event_target.dispex, dispex_id, 0, params->rgvarg, ei, caller); } default: FIXME("Not supported flags: %x\n", flags); @@ -4163,11 +4152,11 @@ static const event_target_vtbl_t HTMLWindow_event_target_vtbl = { .traverse = HTMLWindow_traverse, .unlink = HTMLWindow_unlink, .last_release = HTMLWindow_last_release, - .get_name = HTMLWindow_get_name, .lookup_dispid = HTMLWindow_lookup_dispid, .find_dispid = HTMLWindow_find_dispid, .invoke = HTMLWindow_invoke, .next_dispid = HTMLWindow_next_dispid, + .get_prop_desc = HTMLWindow_get_prop_desc, .get_compat_mode = HTMLWindow_get_compat_mode, .get_outer_iface = HTMLWindow_get_outer_iface, }, -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> Based on patch by Gabriel Ivăncescu. --- dlls/jscript/dispex.c | 3 ++- dlls/mshtml/dispex.c | 2 +- dlls/mshtml/htmlwindow.c | 22 ++++++++--------- dlls/mshtml/script.c | 41 ++++++++++++++++++++----------- dlls/mshtml/tests/documentmode.js | 2 +- dlls/mshtml/tests/es5.js | 2 -- 6 files changed, 41 insertions(+), 31 deletions(-) diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index bd509a2e6f2..95954866345 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -2362,7 +2362,8 @@ static HRESULT WINAPI WineJSDispatch_GetScriptGlobal(IWineJSDispatch *iface, IWi if(!(disp = lookup_global_host(This->ctx))) return E_NOINTERFACE; - return IDispatch_QueryInterface(disp, &IID_IWineJSDispatchHost, (void **)ret); + *ret = get_host_dispatch(disp); + return S_OK; } static IWineJSDispatchVtbl DispatchExVtbl = { diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 57c9cf8bcf5..f26789f49e7 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -1730,7 +1730,7 @@ static dispex_data_t *ensure_dispex_info(DispatchEx *dispex, dispex_static_data_ if(compat_mode >= COMPAT_MODE_IE9 && script_global) { if(!script_global->jscript) initialize_script_global(script_global); - if(script_global->jscript) { + if(script_global->jscript && !dispex->jsdisp) { hres = IWineJScript_InitHostObject(script_global->jscript, &dispex->IWineJSDispatchHost_iface, &dispex->jsdisp); if(FAILED(hres)) diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 27d99f19ff6..a428158f4ac 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -2151,17 +2151,14 @@ static IHTMLWindow2 *get_source_window(IServiceProvider *caller, compat_mode_t c if(hres != S_OK) cmdtarget = NULL; - if(compat_mode < COMPAT_MODE_IE9) { - /* Legacy modes query caller unconditionally, and use it instead, if it has a command target */ - hres = IServiceProvider_QueryService(caller, &SID_GetCaller, &IID_IServiceProvider, (void**)&parent); - if(hres == S_OK && parent) { - hres = IServiceProvider_QueryService(parent, &IID_IActiveScriptSite, &IID_IOleCommandTarget, (void**)&parent_cmdtarget); - IServiceProvider_Release(parent); - if(hres == S_OK && parent_cmdtarget) { - if(cmdtarget) - IOleCommandTarget_Release(cmdtarget); - cmdtarget = parent_cmdtarget; - } + hres = IServiceProvider_QueryService(caller, &SID_GetCaller, &IID_IServiceProvider, (void**)&parent); + if(hres == S_OK && parent) { + hres = IServiceProvider_QueryService(parent, &IID_IActiveScriptSite, &IID_IOleCommandTarget, (void**)&parent_cmdtarget); + IServiceProvider_Release(parent); + if(hres == S_OK && parent_cmdtarget) { + if(cmdtarget) + IOleCommandTarget_Release(cmdtarget); + cmdtarget = parent_cmdtarget; } } @@ -3966,6 +3963,7 @@ HRESULT HTMLWindow_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_ static compat_mode_t HTMLWindow_get_compat_mode(DispatchEx *dispex, HTMLInnerWindow **script_global) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); + *script_global = This; return lock_document_mode(This->doc); } @@ -4310,7 +4308,7 @@ static HRESULT create_inner_window(HTMLOuterWindow *outer_window, IMoniker *mon, window->base.outer_window = outer_window; window->base.inner_window = window; - EventTarget_Init(&window->event_target, &HTMLWindow_dispex, COMPAT_MODE_NONE); + init_event_target(&window->event_target, &HTMLWindow_dispex, NULL); window->task_magic = get_task_target_magic(); diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c index 295c8a0dc15..e985912c526 100644 --- a/dlls/mshtml/script.c +++ b/dlls/mshtml/script.c @@ -199,6 +199,27 @@ static BOOL init_script_engine(ScriptHost *script_host, IActiveScript *script) return FALSE; } + if(compat_mode >= COMPAT_MODE_IE9 && IsEqualGUID(&CLSID_JScript, &script_host->guid)) { + IWineJScript *jscript; + hres = IActiveScript_QueryInterface(script, &IID_IWineJScript, (void **)&jscript); + if(SUCCEEDED(hres)) { + assert(!script_host->window->jscript); + assert(!script_host->window->event_target.dispex.jsdisp); + script_host->window->jscript = jscript; + + hres = IWineJScript_InitHostObject(jscript, + &script_host->window->event_target.dispex.IWineJSDispatchHost_iface, + &script_host->window->event_target.dispex.jsdisp); + if(FAILED(hres)) + ERR("Could not initialize script global: %08lx\n", hres); + + /* make sure that script global is fully initialized */ + dispex_compat_mode(&script_host->window->event_target.dispex); + }else { + ERR("Could not get IWineJScript, don't use native jscript.dll\n"); + } + } + hres = IActiveScript_AddNamedItem(script, L"window", SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS); if(SUCCEEDED(hres)) { @@ -381,8 +402,10 @@ static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPC if(!This->window || !This->window->base.outer_window) return E_FAIL; - /* FIXME: Return proxy object */ - *ppiunkItem = (IUnknown*)&This->window->base.outer_window->base.IHTMLWindow2_iface; + if(dispex_compat_mode(&This->window->event_target.dispex) >= COMPAT_MODE_IE9) + *ppiunkItem = (IUnknown*)This->window->event_target.dispex.jsdisp; + else + *ppiunkItem = (IUnknown*)&This->window->base.outer_window->base.IHTMLWindow2_iface; IUnknown_AddRef(*ppiunkItem); return S_OK; @@ -1390,19 +1413,9 @@ static ScriptHost *get_script_host(HTMLInnerWindow *window, const GUID *guid) void initialize_script_global(HTMLInnerWindow *script_global) { - ScriptHost *script_host; - HRESULT hres; - - if(script_global->jscript) + if(!script_global->base.outer_window) return; - - script_host = get_script_host(script_global, &CLSID_JScript); - if(!script_host) - return; - - hres = IActiveScript_QueryInterface(script_host->script, &IID_IWineJScript, (void **)&script_global->jscript); - if(FAILED(hres)) - ERR("Could not get IWineJScript, don't use native jscript.dll\n"); + get_script_host(script_global, &CLSID_JScript); } static ScriptHost *get_elem_script_host(HTMLInnerWindow *window, HTMLScriptElement *script_elem) diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index ff4fbdf306b..ec670ec0756 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -317,7 +317,7 @@ sync_test("builtin_toString", function() { test("styleSheets", document.styleSheets, "StyleSheetList", null, true); test("textNode", document.createTextNode("testNode"), "Text", v < 9 ? "testNode" : null); test("textRange", txtRange, "TextRange"); - test("window", window, "Window", "[object Window]", true); + test("window", window, "Window", "[object Window]"); test("xmlHttpRequest", new XMLHttpRequest(), "XMLHttpRequest"); if(v < 10) { test("namespaces", document.namespaces, "MSNamespaceInfoCollection"); diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index ddffea263a6..0b22861fb34 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -1151,7 +1151,6 @@ sync_test("toString", function() { todo_wine. ok(tmp === "[object Arguments]", "toString.call(arguments) = " + tmp); tmp = Object.prototype.toString.call(this); - todo_wine. ok(tmp === "[object Window]", "toString.call(null) = " + tmp); tmp = Object.prototype.toString.call(null); ok(tmp === "[object Null]", "toString.call(null) = " + tmp); @@ -2297,7 +2296,6 @@ sync_test("substituted this", function() { ok(r === "[object Undefined]", "detached scope Object.toString returned " + r); var r = (function() { this.f = Object.prototype.toString; return this.f(); })(); - todo_wine. ok(r === "[object Window]", "Object.toString returned " + r); var r = (function() { var f = Object.prototype.toString; return f(); })(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
From: Jacek Caban <jacek(a)codeweavers.com> --- dlls/mshtml/dispex.c | 10 +++++----- dlls/mshtml/htmldoc.c | 10 +++++----- dlls/mshtml/htmlwindow.c | 8 ++++---- dlls/mshtml/mshtml_private.h | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index f26789f49e7..24cba0a9be7 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -1743,14 +1743,14 @@ static dispex_data_t *ensure_dispex_info(DispatchEx *dispex, dispex_static_data_ static BOOL ensure_real_info(DispatchEx *dispex) { - HTMLInnerWindow *script_global = NULL; - compat_mode_t compat_mode; + HTMLInnerWindow *script_global; if(dispex->info != dispex->info->desc->delayed_init_info) return TRUE; - compat_mode = dispex->info->desc->vtbl->get_compat_mode(dispex, &script_global); - dispex->info = ensure_dispex_info(dispex, dispex->info->desc, compat_mode, script_global); + script_global = dispex->info->desc->vtbl->get_script_global(dispex); + dispex->info = ensure_dispex_info(dispex, dispex->info->desc, + script_global->doc->document_mode, script_global); return dispex->info != NULL; } @@ -2652,7 +2652,7 @@ void init_dispatch(DispatchEx *dispex, dispex_static_data_t *data, HTMLInnerWind dispex->jsdisp = NULL; ccref_init(&dispex->ccref, 1); - if(data->vtbl->get_compat_mode) { + if(data->vtbl->get_script_global) { /* delayed init */ if(!data->delayed_init_info) { EnterCriticalSection(&cs_dispex_static_data); diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 0eb2bc3bcda..eaf3b352006 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5535,14 +5535,14 @@ static HRESULT HTMLDocumentNode_get_prop_desc(DispatchEx *dispex, DISPID id, str return S_OK; } -static compat_mode_t HTMLDocumentNode_get_compat_mode(DispatchEx *dispex, HTMLInnerWindow **script_global) +static HTMLInnerWindow *HTMLDocumentNode_get_script_global(DispatchEx *dispex) { HTMLDocumentNode *This = impl_from_DispatchEx(dispex); - TRACE("(%p) returning %u\n", This, This->document_mode); + TRACE("(%p) using %u compat mode\n", This, This->document_mode); - *script_global = This->script_global; - return lock_document_mode(This); + lock_document_mode(This); + return This->script_global; } static nsISupports *HTMLDocumentNode_get_gecko_target(DispatchEx *dispex) @@ -5639,7 +5639,7 @@ static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = { .invoke = HTMLDocumentNode_invoke, .disp_invoke = HTMLDocumentNode_disp_invoke, .next_dispid = HTMLDocumentNode_next_dispid, - .get_compat_mode = HTMLDocumentNode_get_compat_mode, + .get_script_global = HTMLDocumentNode_get_script_global, }, .get_gecko_target = HTMLDocumentNode_get_gecko_target, .bind_event = HTMLDocumentNode_bind_event, diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index a428158f4ac..445be60fba8 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3960,11 +3960,11 @@ HRESULT HTMLWindow_get_prop_desc(DispatchEx *dispex, DISPID id, struct property_ return S_OK; } -static compat_mode_t HTMLWindow_get_compat_mode(DispatchEx *dispex, HTMLInnerWindow **script_global) +static HTMLInnerWindow *HTMLWindow_get_script_global(DispatchEx *dispex) { HTMLInnerWindow *This = impl_from_DispatchEx(dispex); - *script_global = This; - return lock_document_mode(This->doc); + lock_document_mode(This->doc); + return This; } static IWineJSDispatchHost *HTMLWindow_get_outer_iface(DispatchEx *dispex) @@ -4155,7 +4155,7 @@ static const event_target_vtbl_t HTMLWindow_event_target_vtbl = { .invoke = HTMLWindow_invoke, .next_dispid = HTMLWindow_next_dispid, .get_prop_desc = HTMLWindow_get_prop_desc, - .get_compat_mode = HTMLWindow_get_compat_mode, + .get_script_global = HTMLWindow_get_script_global, .get_outer_iface = HTMLWindow_get_outer_iface, }, .get_gecko_target = HTMLWindow_get_gecko_target, diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 2952149d881..35cb705d0a5 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -401,7 +401,7 @@ typedef struct { HRESULT (*disp_invoke)(DispatchEx*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); /* Used by objects that want to delay their compat mode initialization until actually needed */ - compat_mode_t (*get_compat_mode)(DispatchEx*,HTMLInnerWindow**); + HTMLInnerWindow *(*get_script_global)(DispatchEx*); /* Used by objects that want to populate some dynamic props on initialization */ HRESULT (*populate_props)(DispatchEx*); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6167
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=147390 Your paranoid android. === debian11 (build log) === error: patch failed: dlls/mshtml/htmlstorage.c:1117 error: patch failed: dlls/mshtml/tests/documentmode.js:300 error: patch failed: dlls/mshtml/htmlframe.c:870 error: patch failed: dlls/mshtml/htmlwindow.c:3830 error: patch failed: dlls/mshtml/mshtml_private.h:1069 error: patch failed: dlls/mshtml/tests/documentmode.js:150 error: patch failed: dlls/mshtml/htmlframe.c:1305 error: patch failed: dlls/mshtml/tests/documentmode.js:164 error: patch failed: dlls/jscript/dispex.c:2362 error: patch failed: dlls/mshtml/dispex.c:1730 error: patch failed: dlls/mshtml/htmlwindow.c:2151 error: patch failed: dlls/mshtml/script.c:199 error: patch failed: dlls/mshtml/tests/documentmode.js:317 error: patch failed: dlls/mshtml/tests/es5.js:1151 error: patch failed: dlls/mshtml/htmlwindow.c:3960 Task: Patch failed to apply === debian11b (build log) === error: patch failed: dlls/mshtml/htmlstorage.c:1117 error: patch failed: dlls/mshtml/tests/documentmode.js:300 error: patch failed: dlls/mshtml/htmlframe.c:870 error: patch failed: dlls/mshtml/htmlwindow.c:3830 error: patch failed: dlls/mshtml/mshtml_private.h:1069 error: patch failed: dlls/mshtml/tests/documentmode.js:150 error: patch failed: dlls/mshtml/htmlframe.c:1305 error: patch failed: dlls/mshtml/tests/documentmode.js:164 error: patch failed: dlls/jscript/dispex.c:2362 error: patch failed: dlls/mshtml/dispex.c:1730 error: patch failed: dlls/mshtml/htmlwindow.c:2151 error: patch failed: dlls/mshtml/script.c:199 error: patch failed: dlls/mshtml/tests/documentmode.js:317 error: patch failed: dlls/mshtml/tests/es5.js:1151 error: patch failed: dlls/mshtml/htmlwindow.c:3960 Task: Patch failed to apply
participants (3)
-
Jacek Caban -
Jacek Caban (@jacek) -
Marvin