Fix DCHECK failure when calling OnSetFocus from LoadRequest (issue #685).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@776 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt
2012-09-10 19:47:58 +00:00
parent e620a6831f
commit b7656f50fd

View File

@ -312,12 +312,7 @@ void CefBrowserHostImpl::SetFocus(bool enable) {
if (!enable) if (!enable)
return; return;
if (CEF_CURRENTLY_ON_UIT()) { OnSetFocus(FOCUS_SOURCE_SYSTEM);
OnSetFocus(FOCUS_SOURCE_SYSTEM);
} else {
CEF_POST_TASK(CEF_UIT,
base::Bind(&CefBrowserHostImpl::SetFocus, this, enable));
}
} }
CefWindowHandle CefBrowserHostImpl::GetWindowHandle() { CefWindowHandle CefBrowserHostImpl::GetWindowHandle() {
@ -838,26 +833,29 @@ GURL CefBrowserHostImpl::GetLoadingURL() {
} }
void CefBrowserHostImpl::OnSetFocus(cef_focus_source_t source) { void CefBrowserHostImpl::OnSetFocus(cef_focus_source_t source) {
CEF_REQUIRE_UIT(); if (CEF_CURRENTLY_ON_UIT()) {
// SetFocus() might be called while inside the OnSetFocus() callback. If so,
// don't re-enter the callback.
if (!is_in_onsetfocus_) {
if (client_.get()) {
CefRefPtr<CefFocusHandler> handler = client_->GetFocusHandler();
if (handler.get()) {
is_in_onsetfocus_ = true;
bool handled = handler->OnSetFocus(this, source);
is_in_onsetfocus_ = false;
// SetFocus() might be called while inside the OnSetFocus() callback. If so, if (handled)
// don't re-enter the callback. return;
if (!is_in_onsetfocus_) { }
if (client_.get()) {
CefRefPtr<CefFocusHandler> handler = client_->GetFocusHandler();
if (handler.get()) {
is_in_onsetfocus_ = true;
bool handled = handler->OnSetFocus(this, source);
is_in_onsetfocus_ = false;
if (handled)
return;
} }
} }
}
if (web_contents_.get()) if (web_contents_.get())
web_contents_->Focus(); web_contents_->Focus();
} else {
CEF_POST_TASK(CEF_UIT,
base::Bind(&CefBrowserHostImpl::OnSetFocus, this, source));
}
} }