Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-137768

Crash in WebEngineQuick when rapidly switching between multiple WebEngineView component

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P1: Critical
    • None
    • 6.7.2, 6.7.3, 6.9.1
    • WebEngine
    • None
    • Windows
    • Windows

    Description

      I have several WebEngineView components. When I switch between them quickly, I have a crash.

       

      Call Stack:

      >    Qt6Qmld.dll!QJSEngine::newQObject(QObject * object) Line 739    C++
           Qt6WebEngineQuickd.dll!QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const QUrl & url, bool & accepted, bool isMainFrame) Line 452    C++
           Qt6WebEngineCored.dll!QtWebEngineCore::navigationThrottleCallback(content::NavigationHandle * handle) Line 827    C++
           Qt6WebEngineCored.dll!base::internal::FunctorTraits<bool (__cdecl*)(content::NavigationHandle *),void>::Invoke<bool (__cdecl*const &)(content::NavigationHandle *),content::NavigationHandle *>(bool(*)(content::NavigationHandle *) & function, content::NavigationHandle * && <args_0>) Line 632    C++
           Qt6WebEngineCored.dll!base::internal::InvokeHelper<0,bool>::MakeItSo<bool (__cdecl*const &)(content::NavigationHandle *),std::tuple<> const &,content::NavigationHandle *>(bool(*)(content::NavigationHandle *) & functor, const std::tuple<> & bound, content::NavigationHandle * && <args_0>) Line 872    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<bool (__cdecl*)(content::NavigationHandle *)>,bool __cdecl(content::NavigationHandle *)>::RunImpl<bool (__cdecl*const &)(content::NavigationHandle *),std::tuple<> const &>(bool(*)(content::NavigationHandle *) & functor, const std::tuple<> & bound, std::integer_sequence<unsigned __int64> seq, content::NavigationHandle * && <unbound_args_0>) Line 971    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<bool (__cdecl*)(content::NavigationHandle *)>,bool __cdecl(content::NavigationHandle *)>::Run(base::internal::BindStateBase * base, content::NavigationHandle * <unbound_args_0>) Line 935    C++
           Qt6WebEngineCored.dll!base::RepeatingCallback<bool __cdecl(content::NavigationHandle *)>::Run(content::NavigationHandle * <args_0>) Line 333    C++
           Qt6WebEngineCored.dll!navigation_interception::InterceptNavigationThrottle::CheckIfShouldIgnoreNavigation() Line 74    C++
           Qt6WebEngineCored.dll!navigation_interception::InterceptNavigationThrottle::WillStartRequest() Line 34    C++
           Qt6WebEngineCored.dll!content::`anonymous namespace'::ExecuteNavigationEvent(content::NavigationThrottle * throttle, content::NavigationThrottleRunner::Event event) Line 41    C++
           Qt6WebEngineCored.dll!content::NavigationThrottleRunner::ProcessInternal() Line 289    C++
           Qt6WebEngineCored.dll!content::NavigationThrottleRunner::ProcessNavigationEvent(content::NavigationThrottleRunner::Event event) Line 128    C++
           Qt6WebEngineCored.dll!content::NavigationRequest::WillStartRequest() Line 6863    C++
           Qt6WebEngineCored.dll!content::NavigationRequest::BeginNavigationImpl() Line 2668    C++
           Qt6WebEngineCored.dll!content::NavigationRequest::BeginNavigation() Line 2281    C++
           Qt6WebEngineCored.dll!content::Navigator::BeforeUnloadCompleted(content::FrameTreeNode * frame_tree_node, bool proceed, const base::TimeTicks & proceed_time) Line 1037    C++
           Qt6WebEngineCored.dll!content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame::__l2::<lambda>(base::WeakPtr<content::RenderFrameHostImpl> self, const base::TimeTicks & before_unload_end_time, bool proceed, bool unload_ack_is_for_navigation) Line 5516    C++
           Qt6WebEngineCored.dll!base::internal::FunctorTraits<`content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame'::`2'::void <lambda>(unsigned char *, unsigned char, int),void>::Invoke<`content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame'::`2'::void <lambda>(unsigned char *, unsigned char, int),base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool>(content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame::__l2::void <lambda>(unsigned char *, unsigned char, int) && functor, base::WeakPtr<content::RenderFrameHostImpl> && <args_0>, base::TimeTicks && <args_1>, bool && <args_2>, bool && <args_3>) Line 617    C++
           Qt6WebEngineCored.dll!base::internal::InvokeHelper<0,void,0,1,2,3>::MakeItSo<`content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame'::`2'::void <lambda>(unsigned char *, unsigned char, int),std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool>>(content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame::__l2::void <lambda>(unsigned char *, unsigned char, int) && functor, std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool> && bound) Line 872    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<`content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame'::`2'::void <lambda>(unsigned char *, unsigned char, int),base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool>,void __cdecl(void)>::RunImpl<`content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame'::`2'::void <lambda>(unsigned char *, unsigned char, int),std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool>,0,1,2,3>(content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame::__l2::void <lambda>(unsigned char *, unsigned char, int) && functor, std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool> && bound, std::integer_sequence<unsigned __int64,0,1,2,3> seq) Line 971    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<`content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame'::`2'::void <lambda>(unsigned char *, unsigned char, int),base::WeakPtr<content::RenderFrameHostImpl>,base::TimeTicks,bool,bool>,void __cdecl(void)>::RunOnce(base::internal::BindStateBase * base) Line 923    C++
           Qt6WebEngineCored.dll!base::OnceCallback<void __cdecl(void)>::Run() Line 152    C++
           Qt6WebEngineCored.dll!content::RenderFrameHostImpl::ProcessBeforeUnloadCompletedFromFrame(bool proceed, bool treat_as_final_completion_callback, content::RenderFrameHostImpl * frame, bool is_frame_being_destroyed, const base::TimeTicks & renderer_before_unload_start_time, const base::TimeTicks & renderer_before_unload_end_time, bool for_legacy) Line 5540    C++
           Qt6WebEngineCored.dll!content::RenderFrameHostImpl::ProcessBeforeUnloadCompleted(bool proceed, bool treat_as_final_completion_callback, const base::TimeTicks & renderer_before_unload_start_time, const base::TimeTicks & renderer_before_unload_end_time, bool for_legacy) Line 5391    C++
           Qt6WebEngineCored.dll!content::RenderFrameHostImpl::SendBeforeUnload::__l2::<lambda>(base::WeakPtr<content::RenderFrameHostImpl> impl, bool for_legacy, bool proceed, base::TimeTicks renderer_before_unload_start_time, base::TimeTicks renderer_before_unload_end_time) Line 13901    C++
           Qt6WebEngineCored.dll!base::internal::FunctorTraits<`content::RenderFrameHostImpl::SendBeforeUnload'::`2'::void <lambda>(unsigned char *, unsigned char, int),void>::Invoke<`content::RenderFrameHostImpl::SendBeforeUnload'::`2'::void <lambda>(unsigned char *, unsigned char, int),base::WeakPtr<content::RenderFrameHostImpl>,bool,bool,base::TimeTicks,base::TimeTicks>(content::RenderFrameHostImpl::SendBeforeUnload::__l2::void <lambda>(unsigned char *, unsigned char, int) && functor, base::WeakPtr<content::RenderFrameHostImpl> && <args_0>, bool && <args_1>, bool && <args_2>, base::TimeTicks && <args_3>, base::TimeTicks && <args_4>) Line 617    C++
           Qt6WebEngineCored.dll!base::internal::InvokeHelper<0,void,0,1>::MakeItSo<`content::RenderFrameHostImpl::SendBeforeUnload'::`2'::void <lambda>(unsigned char *, unsigned char, int),std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,bool>,bool,base::TimeTicks,base::TimeTicks>(content::RenderFrameHostImpl::SendBeforeUnload::__l2::void <lambda>(unsigned char *, unsigned char, int) && functor, std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,bool> && bound, bool && <args_0>, base::TimeTicks && <args_1>, base::TimeTicks && <args_2>) Line 872    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<`content::RenderFrameHostImpl::SendBeforeUnload'::`2'::void <lambda>(unsigned char *, unsigned char, int),base::WeakPtr<content::RenderFrameHostImpl>,bool>,void __cdecl(bool,base::TimeTicks,base::TimeTicks)>::RunImpl<`content::RenderFrameHostImpl::SendBeforeUnload'::`2'::void <lambda>(unsigned char *, unsigned char, int),std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,bool>,0,1>(content::RenderFrameHostImpl::SendBeforeUnload::__l2::void <lambda>(unsigned char *, unsigned char, int) && functor, std::tuple<base::WeakPtr<content::RenderFrameHostImpl>,bool> && bound, std::integer_sequence<unsigned __int64,0,1> seq, bool && <unbound_args_0>, base::TimeTicks && <unbound_args_1>, base::TimeTicks && <unbound_args_2>) Line 971    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<`content::RenderFrameHostImpl::SendBeforeUnload'::`2'::void <lambda>(unsigned char *, unsigned char, int),base::WeakPtr<content::RenderFrameHostImpl>,bool>,void __cdecl(bool,base::TimeTicks,base::TimeTicks)>::RunOnce(base::internal::BindStateBase * base, bool <unbound_args_0>, base::TimeTicks && <unbound_args_1>, base::TimeTicks && <unbound_args_2>) Line 923    C++
           Qt6WebEngineCored.dll!base::OnceCallback<void (bool,class base::TimeTicks,class base::TimeTicks)>::Run(bool,class base::TimeTicks,class base::TimeTicks)    C++
           Qt6WebEngineCored.dll!content::RenderFrameHostImpl::SendBeforeUnload::__l5::<lambda>(base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)> callback, base::TimeTicks start_time, base::TimeTicks end_time) Line 13922    C++
           Qt6WebEngineCored.dll!base::internal::FunctorTraits<`content::RenderFrameHostImpl::SendBeforeUnload'::`5'::void <lambda>(unsigned char *, unsigned char, int, unsigned char),void>::Invoke<`content::RenderFrameHostImpl::SendBeforeUnload'::`5'::void <lambda>(unsigned char *, unsigned char, int, unsigned char),base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks>(content::RenderFrameHostImpl::SendBeforeUnload::__l5::void <lambda>(unsigned char *, unsigned char, int, unsigned char) && functor, base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)> && <args_0>, base::TimeTicks && <args_1>, base::TimeTicks && <args_2>) Line 617    C++
           Qt6WebEngineCored.dll!base::internal::InvokeHelper<0,void,0,1,2>::MakeItSo<`content::RenderFrameHostImpl::SendBeforeUnload'::`5'::void <lambda>(unsigned char *, unsigned char, int, unsigned char),std::tuple<base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks>>(content::RenderFrameHostImpl::SendBeforeUnload::__l5::void <lambda>(unsigned char *, unsigned char, int, unsigned char) && functor, std::tuple<base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks> && bound) Line 872    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<`content::RenderFrameHostImpl::SendBeforeUnload'::`5'::void <lambda>(unsigned char *, unsigned char, int, unsigned char),base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks>,void __cdecl(void)>::RunImpl<`content::RenderFrameHostImpl::SendBeforeUnload'::`5'::void <lambda>(unsigned char *, unsigned char, int, unsigned char),std::tuple<base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks>,0,1,2>(content::RenderFrameHostImpl::SendBeforeUnload::__l5::void <lambda>(unsigned char *, unsigned char, int, unsigned char) && functor, std::tuple<base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks> && bound, std::integer_sequence<unsigned __int64,0,1,2> seq) Line 971    C++
           Qt6WebEngineCored.dll!base::internal::Invoker<base::internal::BindState<`content::RenderFrameHostImpl::SendBeforeUnload'::`5'::void <lambda>(unsigned char *, unsigned char, int, unsigned char),base::OnceCallback<void __cdecl(bool,base::TimeTicks,base::TimeTicks)>,base::TimeTicks,base::TimeTicks>,void __cdecl(void)>::RunOnce(base::internal::BindStateBase * base) Line 923    C++
           Qt6WebEngineCored.dll!base::OnceCallback<void __cdecl(void)>::Run() Line 152    C++
           Qt6WebEngineCored.dll!base::TaskAnnotator::RunTaskImpl(base::PendingTask & pending_task) Line 222    C++
           Qt6WebEngineCored.dll!base::TaskAnnotator::RunTask<`base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl'::`50'::void <lambda>(unsigned char *, unsigned char, int)>(perfetto::StaticString event_name, base::PendingTask & pending_task, base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl::__l50::void <lambda>(unsigned char *, unsigned char, int) && <args_0>) Line 90    C++
           Qt6WebEngineCored.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow * continuation_lazy_now) Line 489    C++
           Qt6WebEngineCored.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() Line 354    C++
           Qt6WebEngineCored.dll!QtWebEngineCore::MessagePumpForUIQt::handleScheduledWork() Line 154    C++
           Qt6WebEngineCored.dll!QtWebEngineCore::MessagePumpForUIQt::{ctor}::__l1::<lambda_4_>::operator()() Line 106    C++
           Qt6WebEngineCored.dll!std::invoke<`QtWebEngineCore::MessagePumpForUIQt::MessagePumpForUIQt'::`1'::<lambda_4_> &>(QtWebEngineCore::MessagePumpForUIQt::{ctor}::__l1::<lambda_4_> & _Obj) Line 1525    C++
           Qt6WebEngineCored.dll!std::_Invoker_ret<void,1>::_Call<`QtWebEngineCore::MessagePumpForUIQt::MessagePumpForUIQt'::`1'::<lambda_4_> &>(QtWebEngineCore::MessagePumpForUIQt::{ctor}::__l1::<lambda_4_> & _Func) Line 652    C++
           Qt6WebEngineCored.dll!std::_Func_impl_no_alloc<`QtWebEngineCore::MessagePumpForUIQt::MessagePumpForUIQt'::`1'::<lambda_4_>,void>::_Do_call() Line 823    C++
           Qt6WebEngineCored.dll!std::_Func_class<void>::operator()() Line 870    C++
           Qt6WebEngineCored.dll!QWebEngineMessagePumpScheduler::timerEvent(QTimerEvent * ev) Line 41    C++
           Qt6Cored.dll!QObject::event(QEvent * e) Line 1428    C++
           Qt6Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3287    C++
           Qt6Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3238    C++
           Qt6Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1142    C++
           Qt6Cored.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 1584    C++
           Qt6Cored.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1940    C++
           Qt6Cored.dll!QEventDispatcherWin32::sendPostedEvents() Line 900    C++
           Qt6Guid.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 44    C++
           Qt6Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 470    C++
           Qt6Guid.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 36    C++
           Qt6Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 101    C++
           Qt6Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 182    C++
           Qt6Cored.dll!QCoreApplication::exec() Line 1486    C++
           Qt6Guid.dll!QGuiApplication::exec() Line 1927    C++
           Qt6Widgetsd.dll!QApplication::exec() Line 2556    C++
       

       

      I was able to reproduce it using this example:

       

      import QtQuick
      import QtWebEngine
      import QtQuick.Controls
      
      ApplicationWindow {
      	id: root
      
      	visible: true
      	width: 600
      	height: 400
      	ListView {
      		id: list
      
      		anchors.fill: parent
      		model: [0, 1, 2, 3,]
      		orientation: ListView.Horizontal
      
      		delegate: Item {
      			id: delegateItem
      
      			width: ListView.view.width
      			height: ListView.view.height
      
      			WebEngineView {
      				anchors.fill: parent
      				url: "https://doc.qt.io"
      			}
      		}
      
      		onCurrentIndexChanged: function() {
      			list.positionViewAtIndex(list.currentIndex, ListView.Center);
      		}
      	}
      
      	Timer {
      		id: timer
      		interval: 5000
      		running: true
      		repeat: false
      		onTriggered: {
      			list.currentIndex++;
      			if (list.currentIndex > 2) {
      				list.currentIndex = 0;
      			}
      
      			timer.interval = 10;
      			timer.start();
      		}
      	}
      } 

       

       

      Attachments

        1. image.png
          341 kB
          Anu Aliyas
        2. image-2025-06-16-18-32-58-836.png
          341 kB
          Oleg Klenyshev
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            qt_webengine_team Qt WebEngine Team
            spinner Oleg Klenyshev
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes