Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cefclient aborted popup keeps application from terminating #3776

Closed
rocknowradio opened this issue Aug 28, 2024 · 11 comments
Closed

cefclient aborted popup keeps application from terminating #3776

rocknowradio opened this issue Aug 28, 2024 · 11 comments
Labels
bug Bug report cefclient Related to the cefclient sample app windows Windows platform

Comments

@rocknowradio
Copy link
Contributor

Describe the bug
If FileDialogHandler::OnFileDialog gets invoked, cefclient does not terminate.

To Reproduce
Steps to reproduce the behavior:

  1. Download Sample Application (127.3.5+g114ea2a 127.0.6533.120) Windows x64.
  2. Open cefclient using cefclient --url=http://egghunter.in/safepay/file.html --enable-chrome-runtime (--disable-chrome-runtime yields the same result).
  3. Click on the Click Here... image. This will invoke a file open dialog (in the background will attempt to also open a new popup, but even without this the result is the same).
  4. Close the file dialog (either dismiss or pick a file).
  5. Close cefclient.

Expected behavior
cefclient should close normally.

Screenshots
Not needed

Versions (please complete the following information):

  • OS: Windows 10 x64
  • CEF Version: 127.3.5

Additional context
Does the problem reproduce with the cefclient or cefsimple sample application at the same version?
cefclient: Yes
cefsimple: No

Does the problem reproduce with Google Chrome at the same version?
No

@magreenblatt
Copy link
Collaborator

Reproduces for me with M130 on Windows 11. The window closes but processes are still running in Task Manager.

@magreenblatt
Copy link
Collaborator

This does not appear to reproduce with the file open dialogs from https://tests/dialogs

@magreenblatt
Copy link
Collaborator

magreenblatt commented Sep 30, 2024

in the background will attempt to also open a new popup

Looks like cefclient's popup handling is the issue. The problem is avoided by running with --use-default-popup

It would be useful to test if calling preventDefault() and/or preventImmediatePropagation() in the onclick handler (to avoid the popup) also avoids the problem.

@magreenblatt magreenblatt added the cefclient Related to the cefclient sample app label Sep 30, 2024
@magreenblatt magreenblatt changed the title cefclient does not close if file open dialog invoked cefclient aborted popup keeps application from terminating Sep 30, 2024
@rocknowradio
Copy link
Contributor Author

I will debug all of these. I plan to upgrade to CEF 129 and this is on the regression list.

@magreenblatt
Copy link
Collaborator

Looks like cefclient's popup handling is the issue.

ClientHandler::OnBeforePopup and RootWindowManager::OnRootWindowCreated are being called for the popup, but no other ClientHandler or RootWindowManager callbacks. We likely need a better way to identify popups that are aborted during creation.

@magreenblatt
Copy link
Collaborator

In this case the popup is being aborted in WebContentsImpl::CreateNewWindow because the file chooser is active. This causes RenderFrameHostImpl::CreateNewWindow to ignore the popup after the call to CefBrowserInfoManager::CanCreateWindow.

@magreenblatt
Copy link
Collaborator

There are a number of cases where RenderFrameHostImpl::CreateNewWindow may cancel the popup after calling CanCreateWindow. For best results (to catch all cancelations) I think we need to add a callback for those cases.

@magreenblatt
Copy link
Collaborator

In this case the popup is being aborted

Console output looks like:

[5696:259:1113/115339.921324:WARNING:browser_info_manager.cc(194)] Pending popup 1 aborted for browser 1
[5696:259:1113/115339.921466:INFO:root_window_manager.cc(300)] Aborting popup 1 of browser 1
[5696:259:1113/115339.928237:INFO:CONSOLE(0)] "window.open blocked due to active file chooser.", source: https://egghunter.in/safepay/file.html (0)

magreenblatt added a commit that referenced this issue Nov 13, 2024
Pass a new |popup_id| parameter to OnBeforePopup and call a new
OnBeforePopupAborted callback if the popup is aborted before
OnAfterCreated is called for the popup browser. Add new
CefBrowserHost::GetBrowserByIdentifier and GetOpenerIdentifier
methods to assist with retrieval of associated browsers.

In cefclient, clean up state when a popup is aborted and close
any associated popup browsers when the opener browser is closed.
This also works when running with `--use-default-popup`.
@bjdupuis
Copy link

bjdupuis commented Nov 21, 2024

I'm trying to track down a similar thing in our app that only happens when we open a second browser in a popup on Mac OS. The app functions fine until it's time to quit and then hangs at quit time. This happens all the way back down to CEF 127.0.2 beta (switching nothing but the CEF files), and stops the bad behavior at 126.2.4, the final 126 baseline I can find.

cefclient with the OP's URL behaves a bit differently than described here on Mac. The version based on CEF 126.2.4 handles everything fine. cefclient on 127.0.2 crashes on cancelling the file dialog. I've had to release a version of our app on the final 127 release to correct the things that aren't working with the alloy-style/chrome-runtime (spell checker on windows, confirm dialogs) but now this behavior is present in 127. Is it felt that the fix here will similarly address this Mac behavior? Or there new things that must be done at the client level as well?

EDIT: That might not be totally true: version 126.2.4 of cefclient never actually quits.

@magreenblatt
Copy link
Collaborator

I'm trying to track down a similar thing in our app that only happens when we open a second browser in a popup on Mac OS. The app functions fine until it's time to quit and then hangs at quit time.

Do you actually mean "hangs" (e.g. unresponsive), or do you mean that it just doesn't exit? If it's not exiting then check why CefQuitMessageLoop is not being called in your case. For example, maybe there's an error in your OnAfterCreated/OnBeforeClose tracking.

This issue addresses aborted popups specifically, which doesn't sound like your issue.

@bjdupuis
Copy link

Yes, "hangs" as in unresponsive. Users have to force-quit the app. That behavior happens at 127.0.2 and doesn't at 126.2.4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Bug report cefclient Related to the cefclient sample app windows Windows platform
Projects
None yet
Development

No branches or pull requests

3 participants