From b15a5ac9acad74bc4695b3e779e29c092d293d19 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Mon, 10 Sep 2012 19:48:47 +0000 Subject: [PATCH] Merge revision 776 changes: - Fix DCHECK failure when calling OnSetFocus from LoadRequest (issue #685). git-svn-id: https://chromiumembedded.googlecode.com/svn/branches/1180@777 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- cef3/libcef/browser/browser_host_impl.cc | 44 +++++++++++------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/cef3/libcef/browser/browser_host_impl.cc b/cef3/libcef/browser/browser_host_impl.cc index 816706b57..5eec8940d 100644 --- a/cef3/libcef/browser/browser_host_impl.cc +++ b/cef3/libcef/browser/browser_host_impl.cc @@ -313,12 +313,7 @@ void CefBrowserHostImpl::SetFocus(bool enable) { if (!enable) return; - if (CEF_CURRENTLY_ON_UIT()) { - OnSetFocus(FOCUS_SOURCE_SYSTEM); - } else { - CEF_POST_TASK(CEF_UIT, - base::Bind(&CefBrowserHostImpl::SetFocus, this, enable)); - } + OnSetFocus(FOCUS_SOURCE_SYSTEM); } CefWindowHandle CefBrowserHostImpl::GetWindowHandle() { @@ -839,26 +834,29 @@ GURL CefBrowserHostImpl::GetLoadingURL() { } 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 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, - // don't re-enter the callback. - if (!is_in_onsetfocus_) { - if (client_.get()) { - CefRefPtr handler = client_->GetFocusHandler(); - if (handler.get()) { - is_in_onsetfocus_ = true; - bool handled = handler->OnSetFocus(this, source); - is_in_onsetfocus_ = false; - - if (handled) - return; + if (handled) + return; + } } } - } - if (web_contents_.get()) - web_contents_->Focus(); + if (web_contents_.get()) + web_contents_->Focus(); + } else { + CEF_POST_TASK(CEF_UIT, + base::Bind(&CefBrowserHostImpl::OnSetFocus, this, source)); + } } @@ -1408,7 +1406,7 @@ CefBrowserHostImpl::CefBrowserHostImpl(const CefWindowInfo& window_info, registrar_.reset(new content::NotificationRegistrar); registrar_->Add(this, content::NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED, content::Source(web_contents)); - + response_manager_.reset(new CefResponseManager); placeholder_frame_ =