CefSharp.WinForms.Example.netcore crashes when popup window
- Dominant language
- C#
- Stars
- 10.3k
- Forks
- 2.9k
- Avg merge
- 5d 22h
- Merged PRs (30d)
- 4
Description
### Is there an existing issue for this?
- [X] I have searched both open/closed issues, no issue already exists.
### CefSharp Version
120.1.80
### Operating System
Windows 11
### Architecture
x64
### .Net Version
.Net 6.0
### Implementation
WinForms
### Reproduction Steps
1. Run CefSharp.WinForms.Example.netcore
2. Show popup window
3. Close popup window
4. Repeat 2 - 3.
### Expected behavior
Expectations is that it will not crash when you close the popup window
### Actual behavior

### Regression?
_No response_
### Known Workarounds
Is this due to DoClose in LifeSpanHandler.cs?
Excluding control.Dispose() from InnvokeSyncOnUiThreadIfRequired stops crashing.
### Does this problem also occur in the CEF Sample Application
No
### Other information
html source
``` html
const popup_open = () => {
window.open("index.html?pop=on")
}
const popup_close = () => {
parent.window.close()
}
const params = new URLSearchParams(document.location.search)
if (params.has("pop")) {
document.getElementById("open").style.display = "none"
document.title = "Popup!!"
} else {
document.getElementById("close").style.display = "none"
document.title = "Popup Main"
}
```
edit source code
CefSharp.WinForms\Handler\LifeSpanhandler.cs
``` c#
control.InvokeSyncOnUiThreadIfRequired(new Action(() =>
{
onPopupDestroyed?.Invoke(control, browser);
//control.Dispose(); // Comment out!!
}));
// Add
control.InvokeOnUiThreadIfRequired(new Action(() =>
{
control.Dispose();
}));
```
CefSharp.WinForms.Example\BrowserTabUserControl.cs
``` c#
.OnPopupDestroyed((ctrl, popupBrowser) =>
{
//If we docked DevTools (hosted it ourselves rather than the default popup)
//Used when the BrowserTabUserControl.ShowDevToolsDocked method is called
if (popupBrowser.MainFrame.Url.Equals("devtools://devtools/devtools_app.html"))
{
//Dispose of the parent control we used to host DevTools, this will release the DevTools window handle
//and the ILifeSpanHandler.OnBeforeClose() will be call after.
ctrl.Dispose();
}
else
{
//If browser is disposed or the handle has been released then we don't
//need to remove the tab in this example. The user likely used the
// File -> Close Tab menu option which also calls BrowserForm.RemoveTab
if (!ctrl.IsDisposed && ctrl.IsHandleCreated)
{
if (ctrl.FindForm() is BrowserForm owner)
{
owner.RemoveTab(ctrl);
}
//ctrl.Dispose(); // Comment out!!
}
}
})
```
Contributor guide
Assessment
This issue has not been assessed yet.