Nikolay Sivov (@nsivov) commented about dlls/hhctrl.ocx/help.c:
- if (index) - ActivateContentTopic(info->tabs[TAB_CONTENTS].hwnd, index + 3, info->content); /* skip over ::/ */ + hres = IConnectionPointContainer_FindConnectionPoint(container, &DIID_DWebBrowserEvents2, &point); + IConnectionPointContainer_Release(container); + if (FAILED(hres)) + return; + + if (init) + { + info->navigate_sink = malloc(sizeof(*(info->navigate_sink))); + info->navigate_sink->iface.lpVtbl = &WebBrowserEvents2Vtbl; + info->navigate_sink->info = (struct HHInfo *)info; + info->navigate_sink->ref = 1; + IConnectionPoint_Advise(point, (IUnknown *)info->navigate_sink, &info->navigate_sink->cookie); + }
This creates problems with lifetime management. Referencing window data in it, which is not refcounted, is not safe usually. I think webbrowser container is a better place for it. When it's time to detach the container, you would Unadvise and Release, this will cleanup properly I think. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8526#note_109301