Igalia / wolvic-chromium

The official GitHub mirror of the Chromium source
https://chromium.googlesource.com/chromium/src/
BSD 3-Clause "New" or "Revised" License
11 stars 6 forks source link

Crash in UserDialogManagerBridge #57

Closed svillar closed 7 months ago

svillar commented 9 months ago

I was checking https://developer.mozilla.org/en-US/play to test onbeforeunload. I entered some text in the input and then hit back. The dialog to stay in the page didn't show and wolvic crashed. I cannot consistently reproduce it.

Stack Trace:
  RELADDR   FUNCTION                                                                          FILE:LINE
  v------>  base::ImmediateCrash()                                                            ../../base/immediate_crash.h:146:3
  000000000493626c  logging::LogMessage::~LogMessage()                                                ../../base/logging.cc:959:7
  00000000049c31e0  base::android::CheckException(_JNIEnv*)                                           ../../base/android/jni_android.cc:289:3
  v------>  jni_generator::CheckException(_JNIEnv*)                                           ../../base/android/jni_generator/jni_generator_helper.h:53:3
  00000000026cde50  jni_generator::JniJavaCallContextChecked::~JniJavaCallContextChecked()            ../../base/android/jni_generator/jni_generator_helper.h:118:5
  v------>  wolvic::Java_UserDialogManagerBridge_onBeforeUnloadDialog(_JNIEnv*, long)         gen/jni_headers/wolvic/jni_headers/UserDialogManagerBridge_jni.h:104:1
  00000000026cf688  wolvic::UserDialogManagerBridge::ShowBeforeUnloadDialog(base::OnceCallback<void (bool, std::__Cr::basic_string<char16_t, std::__Cr::char_traits<char16_t>, std::__Cr::allocator<char16_t>> const&)>)  ../../wolvic/browser/dialogs/user_dialog_manager_bridge.cc:92:3
  00000000026cefe0  wolvic::WolvicJavascriptDialogManager::RunBeforeUnloadDialog(content::WebContents*, content::RenderFrameHost*, bool, base::OnceCallback<void (bool, std::__Cr::basic_string<char16_t, std::__Cr::char_traits<char16_t>, std::__Cr::allocator<char16_t>> const&)>)  ../../wolvic/browser/dialogs/wolvic_javascript_dialog_manager.cc:49:11
  000000000391b1e4  content::WebContentsImpl::RunBeforeUnloadConfirm(content::RenderFrameHostImpl*, bool, base::OnceCallback<void (bool, std::__Cr::basic_string<char16_t, std::__Cr::char_traits<char16_t>, std::__Cr::allocator<char16_t>> const&)>)  ../../content/browser/web_contents/web_contents_impl.cc:7432:22
  00000000037d8e1c  content::RenderFrameHostImpl::RunBeforeUnloadConfirm(bool, base::OnceCallback<void (bool)>)  ../../content/browser/renderer_host/render_frame_host_impl.cc:5796:14
  00000000031982b8  blink::mojom::LocalFrameHostStubDispatch::AcceptWithResponder(blink::mojom::LocalFrameHost*, mojo::Message*, std::__Cr::unique_ptr<mojo::MessageReceiverWithStatus, std::__Cr::default_delete<mojo::MessageReceiverWithStatus>>)  gen/third_party/blink/public/mojom/frame/frame.mojom.cc:9797:13
  00000000037f5f80  blink::mojom::LocalFrameHostStub<mojo::RawPtrImplRefTraits<blink::mojom::LocalFrameHost>>::AcceptWithResponder(mojo::Message*, std::__Cr::unique_ptr<mojo::MessageReceiverWithStatus, std::__Cr::default_delete<mojo::MessageReceiverWithStatus>>)  gen/third_party/blink/public/mojom/frame/frame.mojom.h:1829:12
  v------>  mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*)             ../../mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:970:56
  0000000004c20f00  mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*)  ../../mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:363:18
  0000000004c24e04  mojo::MessageDispatcher::Accept(mojo::Message*)                                   ../../mojo/public/cpp/bindings/lib/message_dispatcher.cc:48:24
  0000000004c21f6c  mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*)              ../../mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:701:20
  0000000004eaeb78  IPC::(anonymous namespace)::ChannelAssociatedGroupController::AcceptSyncMessage(unsigned int, unsigned int)  ../../ipc/ipc_mojo_bootstrap.cc:1115:24
  v------>  base::OnceCallback<void ()>::Run() &&                                             ../../base/functional/callback.h:152:12
  0000000004971bd8  base::TaskAnnotator::RunTaskImpl(base::PendingTask&)                              ../../base/task/common/task_annotator.cc:201:34
  0000000004987a14  void base::TaskAnnotator::RunTask<base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow*)::$_3>(perfetto::StaticString, base::PendingTask&, base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow*)::$_3&&)  ../../base/task/common/task_annotator.h:89:5
  v------>  base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow*)  ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:480:23
  00000000049875c4  base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork()   ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:345:41
  00000000049bea5c  base::MessagePumpForUI::DoNonDelayedLooperWork(bool)                              ../../base/message_loop/message_pump_android.cc:186:33
  00000000049bea04  base::MessagePumpForUI::OnNonDelayedLooperCallback()                              ../../base/message_loop/message_pump_android.cc:172:3
  00000000049be684  base::(anonymous namespace)::NonDelayedLooperCallback(int, int, void*)            ../../base/message_loop/message_pump_android.cc:43:9
zakharvoit commented 9 months ago

Do you need some specific code entered on https://developer.mozilla.org/en-US/play? I don't get the beforeunload dialog there even from desktop browser.

I used the following page for testing https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onbeforeunload and the dialog is shown consistently with no crash.

svillar commented 7 months ago

These JNI crashes are really caused by previous Java exceptions that are checked once JNI code is executed. There is no much point in having this open if we don't have the java exception that ultimately triggered it.