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.