From 58de0da3015abf44deda675d2ae69ecb00d65844 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Tue, 30 Sep 2014 18:52:26 +0000 Subject: [PATCH] Windows: Fix cancellation of drag&drop when using off-screen rendering and multi-threaded message loop and returning false from CefRenderHandler::StartDragging (issue #1364). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1853 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- libcef/browser/browser_host_impl.cc | 14 ++++++-------- libcef/browser/web_contents_view_osr.cc | 12 ++++++++---- libcef/browser/web_contents_view_osr.h | 5 +++-- tests/cefclient/client_handler.cpp | 1 - 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/libcef/browser/browser_host_impl.cc b/libcef/browser/browser_host_impl.cc index 55db34d6a..b74b1148a 100644 --- a/libcef/browser/browser_host_impl.cc +++ b/libcef/browser/browser_host_impl.cc @@ -409,16 +409,16 @@ CefRefPtr CefBrowserHostImpl::CreateInternal( content::WebContents::CreateParams create_params( browser_context); + CefWebContentsViewOSR* view_or = NULL; if (window_info.windowless_rendering_enabled) { // Use the OSR view instead of the default view. - CefWebContentsViewOSR* view_or = new CefWebContentsViewOSR( - web_contents, - CefContentBrowserClient::Get()->GetWebContentsViewDelegate( - web_contents)); + view_or = new CefWebContentsViewOSR(); create_params.view = view_or; create_params.delegate_view = view_or; } web_contents = content::WebContents::Create(create_params); + if (view_or) + view_or->set_web_contents(web_contents); } CefRefPtr browser = @@ -2101,10 +2101,8 @@ bool CefBrowserHostImpl::ShouldCreateWebContents( DCHECK(pending_popup_info_.get()); if (pending_popup_info_->window_info.windowless_rendering_enabled) { // Use the OSR view instead of the default view. - CefWebContentsViewOSR* view_or = new CefWebContentsViewOSR( - web_contents, - CefContentBrowserClient::Get()->GetWebContentsViewDelegate( - web_contents)); + CefWebContentsViewOSR* view_or = new CefWebContentsViewOSR(); + view_or->set_web_contents(web_contents); *view = view_or; *delegate_view = view_or; } diff --git a/libcef/browser/web_contents_view_osr.cc b/libcef/browser/web_contents_view_osr.cc index cd111cb15..bb8f3dfac 100644 --- a/libcef/browser/web_contents_view_osr.cc +++ b/libcef/browser/web_contents_view_osr.cc @@ -10,16 +10,20 @@ #include "content/public/browser/render_widget_host.h" -CefWebContentsViewOSR::CefWebContentsViewOSR( - content::WebContents* web_contents, - content::WebContentsViewDelegate* delegate) - : web_contents_(web_contents), +CefWebContentsViewOSR::CefWebContentsViewOSR() + : web_contents_(NULL), view_(NULL) { } CefWebContentsViewOSR::~CefWebContentsViewOSR() { } +void CefWebContentsViewOSR::set_web_contents( + content::WebContents* web_contents) { + DCHECK(!web_contents_); + web_contents_ = web_contents; +} + gfx::NativeView CefWebContentsViewOSR::GetNativeView() const { return gfx::NativeView(); } diff --git a/libcef/browser/web_contents_view_osr.h b/libcef/browser/web_contents_view_osr.h index d7795a31b..de23ee3c8 100644 --- a/libcef/browser/web_contents_view_osr.h +++ b/libcef/browser/web_contents_view_osr.h @@ -20,10 +20,11 @@ class CefRenderWidgetHostViewOSR; class CefWebContentsViewOSR : public content::WebContentsView, public content::RenderViewHostDelegateView { public: - CefWebContentsViewOSR(content::WebContents* web_contents, - content::WebContentsViewDelegate* delegate); + CefWebContentsViewOSR(); virtual ~CefWebContentsViewOSR(); + void set_web_contents(content::WebContents* web_contents); + // WebContentsView methods. virtual gfx::NativeView GetNativeView() const OVERRIDE; virtual gfx::NativeView GetContentNativeView() const OVERRIDE; diff --git a/tests/cefclient/client_handler.cpp b/tests/cefclient/client_handler.cpp index 39e789dc4..e8b869e22 100644 --- a/tests/cefclient/client_handler.cpp +++ b/tests/cefclient/client_handler.cpp @@ -725,7 +725,6 @@ void ClientHandler::SetOSRHandler(CefRefPtr handler) { } CefRefPtr ClientHandler::GetOSRHandler() const { - CEF_REQUIRE_UI_THREAD(); return osr_handler_; }