mirror of
https://gitlab.winehq.org/wine/wine.git
synced 2024-11-19 17:06:04 -07:00
mshtml: Forward deletion for GLOBAL_SCRIPTVAR to the script's object.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
This commit is contained in:
parent
9b264c948f
commit
38f1ce3210
Notes:
Alexandre Julliard
2024-11-14 23:12:21 +01:00
Approved-by: Jacek Caban (@jacek) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/wine/merge_requests/6721
2 changed files with 39 additions and 3 deletions
|
@ -3974,6 +3974,44 @@ HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags,
|
|||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT HTMLWindow_delete(DispatchEx *dispex, DISPID id)
|
||||
{
|
||||
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
|
||||
DWORD idx = id - MSHTML_DISPID_CUSTOM_MIN;
|
||||
global_prop_t *prop;
|
||||
HRESULT hres = S_OK;
|
||||
|
||||
if(idx >= This->global_prop_cnt)
|
||||
return DISP_E_MEMBERNOTFOUND;
|
||||
|
||||
prop = This->global_props + idx;
|
||||
switch(prop->type) {
|
||||
case GLOBAL_SCRIPTVAR: {
|
||||
IDispatchEx *iface;
|
||||
IDispatch *disp;
|
||||
|
||||
disp = get_script_disp(prop->script_host);
|
||||
if(!disp)
|
||||
return E_UNEXPECTED;
|
||||
|
||||
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&iface);
|
||||
if(SUCCEEDED(hres)) {
|
||||
hres = IDispatchEx_DeleteMemberByDispID(iface, prop->id);
|
||||
IDispatchEx_Release(iface);
|
||||
}else {
|
||||
WARN("No IDispatchEx, so can't delete\n");
|
||||
hres = S_OK;
|
||||
}
|
||||
IDispatch_Release(disp);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT HTMLWindow_next_dispid(DispatchEx *dispex, DISPID id, DISPID *pid)
|
||||
{
|
||||
DWORD idx = (id == DISPID_STARTENUM) ? 0 : id - MSHTML_DISPID_CUSTOM_MIN + 1;
|
||||
|
@ -4200,6 +4238,7 @@ static const event_target_vtbl_t HTMLWindow_event_target_vtbl = {
|
|||
.lookup_dispid = HTMLWindow_lookup_dispid,
|
||||
.find_dispid = HTMLWindow_find_dispid,
|
||||
.invoke = HTMLWindow_invoke,
|
||||
.delete = HTMLWindow_delete,
|
||||
.next_dispid = HTMLWindow_next_dispid,
|
||||
.get_prop_desc = HTMLWindow_get_prop_desc,
|
||||
.get_script_global = HTMLWindow_get_script_global,
|
||||
|
|
|
@ -1386,7 +1386,6 @@ sync_test("delete_prop", function() {
|
|||
r = (delete window.encodeURIComponent);
|
||||
ok(v >= 9, "did not get an expect exception deleting encodeURIComponent");
|
||||
ok(r, "delete returned " + r);
|
||||
todo_wine.
|
||||
ok(!("encodeURIComponent" in obj), "encodeURIComponent is still in obj");
|
||||
window.encodeURIComponent = prop;
|
||||
}catch(ex) {
|
||||
|
@ -1424,7 +1423,6 @@ sync_test("delete_prop", function() {
|
|||
ok(r, "did not get an expected globalprop2 exception");
|
||||
}else {
|
||||
ok(!r, "got an unexpected exception");
|
||||
todo_wine.
|
||||
ok(!("globalprop2" in obj), "globalprop2 is still in obj");
|
||||
}
|
||||
|
||||
|
@ -1457,7 +1455,6 @@ sync_test("delete_prop", function() {
|
|||
r = (delete window.globalprop5);
|
||||
ok(v >= 9, "did not get an expected exception deleting globalprop5");
|
||||
ok(r, "delete returned " + r);
|
||||
todo_wine.
|
||||
ok(!("globalprop5" in obj), "globalprop5 is still in obj");
|
||||
}catch(ex) {
|
||||
ok(v < 9, "expected exception deleting globalprop5");
|
||||
|
|
Loading…
Reference in a new issue