mshtml: Don't call CP event sinks on detached documents.
This commit is contained in:
parent
86c41dc468
commit
8086af47b5
|
@ -996,7 +996,12 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cp_container) {
|
/*
|
||||||
|
* NOTE: CP events may require doc_obj reference, which we don't own. We make sure that
|
||||||
|
* it's safe to call event handler by checking nsevent_listener, which is NULL for
|
||||||
|
* detached documents.
|
||||||
|
*/
|
||||||
|
if(cp_container && doc->nsevent_listener) {
|
||||||
ConnectionPoint *cp;
|
ConnectionPoint *cp;
|
||||||
|
|
||||||
if(cp_container->forward_container)
|
if(cp_container->forward_container)
|
||||||
|
@ -1004,7 +1009,7 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
|
||||||
|
|
||||||
for(cp = cp_container->cp_list; cp; cp = cp->next) {
|
for(cp = cp_container->cp_list; cp; cp = cp->next) {
|
||||||
if(cp->sinks_size && is_cp_event(cp->data, event_info[eid].dispid)) {
|
if(cp->sinks_size && is_cp_event(cp->data, event_info[eid].dispid)) {
|
||||||
for(i=0; i < cp->sinks_size; i++) {
|
for(i=0; doc->nsevent_listener && i < cp->sinks_size; i++) {
|
||||||
if(!cp->sinks[i].disp)
|
if(!cp->sinks[i].disp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1028,6 +1033,9 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
|
||||||
WARN("cp %s [%d] <<< %08x\n", debugstr_w(event_info[eid].name), i, hres);
|
WARN("cp %s [%d] <<< %08x\n", debugstr_w(event_info[eid].name), i, hres);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!doc->nsevent_listener)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue