Closed magreenblatt closed 5 years ago
Original comment by Salvador Diaz Fau (Bitbucket: salvadordf, GitHub: salvadordf).
The Windows version of cefclient with the --off-screen-rendering-enabled switch also freezes with online PDF files.
Tested with CEF 3.3440.1805.gbe070f9 on Windows 7 (64bit) http://opensource.spotify.com/cefbuilds/cef_binary_3.3440.1805.gbe070f9_windows32_client.tar.bz2
Original comment by Mike Wiedenbauer (Bitbucket: shagkur, GitHub: shagkur).
Here's a proposed fix for the "GetCursorManager()" crash (applied against 3440):
#!c++
diff --git a/libcef/browser/osr/render_widget_host_view_osr.cc b/libcef/browser/osr/render_widget_host_view_osr.cc
index [bb0ddbbb (bb)](https://bitbucket.org/chromiumembedded/cef/commits/bb0ddbbb)..0cb2442a [100644 (bb)](https://bitbucket.org/chromiumembedded/cef/commits/100644)
--- a/libcef/browser/osr/render_widget_host_view_osr.cc
+++ b/libcef/browser/osr/render_widget_host_view_osr.cc
@@ -27,6 +27,7 @@
#include "content/browser/bad_message.h"
#include "content/browser/compositor/image_transport_factory.h"
#include "content/browser/frame_host/render_widget_host_view_guest.h"
+#include "content/browser/renderer_host/cursor_manager.h"
#include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
@@ -277,6 +278,8 @@ CefRenderWidgetHostViewOSR::CefRenderWidgetHostViewOSR(
if (browser_impl_.get())
ResizeRootLayer(false);
+ cursor_manager_.reset(new content::CursorManager(this));
+
// Do this last because it may result in a call to SetNeedsBeginFrames.
render_widget_host_->SetView(this);
}
@@ -632,6 +635,10 @@ void CefRenderWidgetHostViewOSR::UpdateCursor(
#endif
}
+content::CursorManager* CefRenderWidgetHostViewOSR::GetCursorManager() {
+ return cursor_manager_.get();
+}
+
void CefRenderWidgetHostViewOSR::SetIsLoading(bool is_loading) {}
void CefRenderWidgetHostViewOSR::RenderProcessGone(
diff --git a/libcef/browser/osr/render_widget_host_view_osr.h b/libcef/browser/osr/render_widget_host_view_osr.h
index [a4c466d5 (bb)](https://bitbucket.org/chromiumembedded/cef/commits/a4c466d5)..9b94e672 [100644 (bb)](https://bitbucket.org/chromiumembedded/cef/commits/100644)
--- a/libcef/browser/osr/render_widget_host_view_osr.h
+++ b/libcef/browser/osr/render_widget_host_view_osr.h
@@ -38,6 +38,7 @@ class RenderWidgetHost;
class RenderWidgetHostImpl;
class RenderWidgetHostViewGuest;
class BackingStore;
+class CursorManager;
} // namespace content
class CefBeginFrameTimer;
@@ -147,6 +148,8 @@ class CefRenderWidgetHostViewOSR : public content::RenderWidgetHostViewBase,
void Destroy() override;
void SetTooltipText(const base::string16& tooltip_text) override;
+ content::CursorManager* GetCursorManager() override;
+
gfx::Size GetRequestedRendererSize() const override;
gfx::Size GetCompositorViewportPixelSize() const override;
void CopyFromSurface(
@@ -331,6 +334,9 @@ class CefRenderWidgetHostViewOSR : public content::RenderWidgetHostViewBase,
std::unique_ptr<ui::XScopedCursor> invisible_cursor_;
#endif
+
+ std::unique_ptr<content::CursorManager> cursor_manager_;
+
// Used to control the VSync rate in subprocesses when BeginFrame scheduling
// is enabled.
std::unique_ptr<CefBeginFrameTimer> begin_frame_timer_;
Original comment by Jordy Boom (Bitbucket: Jordy Boom).
I ran into this error on 3.3396.1786.gd3e36d0 on Windows 7 (x86) regardless of whether OSR is enabled or not.
@jboom_languageline It's probably not the same issue. What is the symbolized call stack for the crash that you're seeing in 3396?
Fixed in master revision c7d187a (bb), 3538 branch revision 006d062 (bb) and 3497 branch revision 004ef91 (bb).
Original comment by Jordy Boom (Bitbucket: Jordy Boom).
libcef.dll!content::CursorManager::SetTooltipTextForView(const content::RenderWidgetHostViewBase * view, const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & tooltip_text) Line 27
at Y:\work\CEF3_git\chromium\src\content\browser\renderer_host\cursor_manager.cc(27)
libcef.dll!content::RenderWidgetHostViewGuest::SetTooltipText(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & tooltip_text) Line 366
at Y:\work\CEF3_git\chromium\src\content\browser\frame_host\render_widget_host_view_guest.cc(366)
libcef.dll!content::RenderWidgetHostImpl::OnSetTooltipText(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & tooltip_text, blink::WebTextDirection text_direction_hint) Line 2084
at Y:\work\CEF3_git\chromium\src\content\browser\renderer_host\render_widget_host_impl.cc(2084)
[Inline Frame] libcef.dll!base::DispatchToMethodImpl(content::RenderWidgetHostImpl * const & method, void(content::RenderWidgetHostImpl::*)(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > &, blink::WebTextDirection)) Line 52
at Y:\work\CEF3_git\chromium\src\ipc\ipc_message_templates.h(146)
[Inline Frame] libcef.dll!base::DispatchToMethod(content::RenderWidgetHostImpl * const & method, void(content::RenderWidgetHostImpl::*)(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > &, blink::WebTextDirection)) Line 60
at Y:\work\CEF3_git\chromium\src\ipc\ipc_message_templates.h(146)
[Inline Frame] libcef.dll!IPC::DispatchToMethod(content::RenderWidgetHostImpl * method, void(content::RenderWidgetHostImpl::*)(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > &, blink::WebTextDirection)) Line 51
at Y:\work\CEF3_git\chromium\src\ipc\ipc_message_templates.h(146)
libcef.dll!IPC::MessageT<ViewHostMsg_SetTooltipText_Meta,std::tuple<std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >,blink::WebTextDirection>,void>::Dispatch<content::RenderWidgetHostImpl,content::RenderWidgetHostImpl,void,void (content::RenderWidgetHostImpl::*)(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > &, blink::WebTextDirection) __attribute__((thiscall))>(const IPC::Message * msg, content::RenderWidgetHostImpl * obj, content::RenderWidgetHostImpl * sender, void * parameter, void(content::RenderWidgetHostImpl::*)(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > &, blink::WebTextDirection) func) Line 146
at Y:\work\CEF3_git\chromium\src\ipc\ipc_message_templates.h(146)
libcef.dll!content::RenderWidgetHostImpl::OnMessageReceived(const IPC::Message & msg) Line 625
at Y:\work\CEF3_git\chromium\src\content\browser\renderer_host\render_widget_host_impl.cc(625)
libcef.dll!content::RenderProcessHostImpl::OnMessageReceived(const IPC::Message & msg) Line 3089
at Y:\work\CEF3_git\chromium\src\content\browser\renderer_host\render_process_host_impl.cc(3089)
libcef.dll!IPC::ChannelProxy::Context::OnDispatchMessage(const IPC::Message & message) Line 321
at Y:\work\CEF3_git\chromium\src\ipc\ipc_channel_proxy.cc(321)
[Inline Frame] libcef.dll!base::internal::FunctorTraits<void (content::SpeechRecognizerImpl::*)(const content::SpeechRecognizerImpl::FSMEventArgs &) __attribute__((thiscall)),void>::Invoke(void(content::SpeechRecognizerImpl::*)(const content::SpeechRecognizerImpl::FSMEventArgs &) receiver_ptr, scoped_refptr<content::SpeechRecognizerImpl> && args, content::SpeechRecognizerImpl::FSMEventArgs &&) Line 447
at Y:\work\CEF3_git\chromium\src\base\bind_internal.h(576)
[Inline Frame] libcef.dll!base::internal::InvokeHelper<0,void>::MakeItSo(void(content::SpeechRecognizerImpl::*)(const content::SpeechRecognizerImpl::FSMEventArgs &) && args, scoped_refptr<content::SpeechRecognizerImpl> && args, content::SpeechRecognizerImpl::FSMEventArgs &&) Line 530
at Y:\work\CEF3_git\chromium\src\base\bind_internal.h(576)
[Inline Frame] libcef.dll!base::internal::Invoker<base::internal::BindState<void (content::SpeechRecognizerImpl::*)(const content::SpeechRecognizerImpl::FSMEventArgs &) __attribute__((thiscall)),scoped_refptr<content::SpeechRecognizerImpl>,content::SpeechRecognizerImpl::FSMEventArgs>,void ()>::RunImpl(void(content::SpeechRecognizerImpl::*)(const content::SpeechRecognizerImpl::FSMEventArgs &) && bound, std::tuple<scoped_refptr<content::SpeechRecognizerImpl>,content::SpeechRecognizerImpl::FSMEventArgs> &&) Line 604
at Y:\work\CEF3_git\chromium\src\base\bind_internal.h(576)
libcef.dll!base::internal::Invoker<base::internal::BindState<void (content::SpeechRecognizerImpl::*)(const content::SpeechRecognizerImpl::FSMEventArgs &) __attribute__((thiscall)),scoped_refptr<content::SpeechRecognizerImpl>,content::SpeechRecognizerImpl::FSMEventArgs>,void ()>::RunOnce(base::internal::BindStateBase * base) Line 576
at Y:\work\CEF3_git\chromium\src\base\bind_internal.h(576)
[Inline Frame] libcef.dll!base::OnceCallback<void ()>::Run() Line 95
at Y:\work\CEF3_git\chromium\src\base\debug\task_annotator.cc(101)
libcef.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function, base::PendingTask * pending_task) Line 101
at Y:\work\CEF3_git\chromium\src\base\debug\task_annotator.cc(101)
libcef.dll!base::internal::IncomingTaskQueue::RunTask(base::PendingTask * pending_task) Line 125
at Y:\work\CEF3_git\chromium\src\base\message_loop\incoming_task_queue.cc(125)
libcef.dll!base::MessageLoop::RunTask(base::PendingTask * pending_task) Line 355
at Y:\work\CEF3_git\chromium\src\base\message_loop\message_loop.cc(355)
libcef.dll!base::MessageLoop::DeferOrRunPendingTask(base::PendingTask pending_task) Line 364
at Y:\work\CEF3_git\chromium\src\base\message_loop\message_loop.cc(364)
libcef.dll!base::MessageLoop::DoWork() Line 408
at Y:\work\CEF3_git\chromium\src\base\message_loop\message_loop.cc(408)
libcef.dll!base::MessagePumpForUI::DoRunLoop() Line 175
at Y:\work\CEF3_git\chromium\src\base\message_loop\message_pump_win.cc(175)
libcef.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate) Line 59
at Y:\work\CEF3_git\chromium\src\base\message_loop\message_pump_win.cc(59)
libcef.dll!base::MessageLoop::Run(bool) Line 306
at Y:\work\CEF3_git\chromium\src\base\message_loop\message_loop.cc(306)
libcef.dll!base::RunLoop::Run() Line 136
at Y:\work\CEF3_git\chromium\src\base\run_loop.cc(136)
libcef.dll!base::Thread::Run(base::RunLoop * run_loop) Line 256
at Y:\work\CEF3_git\chromium\src\base\threading\thread.cc(256)
libcef.dll!base::Thread::ThreadMain() Line 340
at Y:\work\CEF3_git\chromium\src\base\threading\thread.cc(340)
libcef.dll!base::`anonymous namespace'::ThreadFunc(void * params) Line 94
at Y:\work\CEF3_git\chromium\src\base\threading\platform_thread_win.cc(94)
[External Code]
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
I'm using this with CEFSharp (for WPF), reverting to version 65.0.1 (versus 67.0) fixed the issue. That build of CEFSharp (65.0.1) depends on CEF build 3.3325.1758.
Original report by Mike Wiedenbauer (Bitbucket: shagkur, GitHub: shagkur).
Observerd: pdf viewer opens partly, but pdf is not shown. And after hovering over one of the 3 controls in the lower right corner it crashes with a stack trace. Happens on Mac OSX as well as on ubuntu linux
The crash, when hovering over the controls also happens with 3440. This is due to a nullptr exception at content/browser/frame_host/render_widget_host_view_guest.cc:376. This seems to be caused because CefRenderWidgetHostViewOSR does not implement/override GetCursorManager() and the base class is returning nullptr.
Stack trace from the crash on Mac OSX