Czarek wrote:The website can destroy frames at any time, so it's not a good test.
You are right- in my real app after send all messages I startup timer which check frames existance [by CefFrame::IsValid] for pending messages, to support possibility that response is lost by frame dead. I just didn't want add too much complexity to my example. I could add this to 'main.cpp' if you need.
But the bug exists and currently I know that in this method:
- Code: Select all
// frame_host_impl.cc:
void CefFrameHostImpl::Send(IPC::Message* message) {
if (!CEF_CURRENTLY_ON_UIT()) {
CEF_POST_TASK(CEF_UIT,
base::BindOnce(base::IgnoreResult(&CefFrameHostImpl::Send),
this, message));
return;
}
if (!render_frame_host_) {
// Either we're a placeholder frame without a renderer representation, or
// we've been detached.
delete message;
return;
}
if (!is_attached_) {
// Queue messages until we're notified by the renderer that it's ready to
// handle them.
queued_messages_.push(base::WrapUnique(message));
return;
}
message->set_routing_id(render_frame_host_->GetRoutingID());
render_frame_host_->Send(message);
}
for CefFrame from other domain origin 'is_attached_' is 'false', so SendProcessMessage do only push into 'queued_messages_', so it is never send to renderer process. It seems that there is a problem with 'CefFrameHostImpl::is_attached_' variable with frames that works in extra separated renderer process. Mechanism that should set 'is_attached_' to true is broken. Tomorrow I will continue my investigation.