diff --git a/include/views/cef_view_delegate.h b/include/views/cef_view_delegate.h index 73686847d..2b04b89d9 100644 --- a/include/views/cef_view_delegate.h +++ b/include/views/cef_view_delegate.h @@ -152,6 +152,17 @@ class CefViewDelegate : public virtual CefBaseRefCounted { /// /*--cef()--*/ virtual void OnThemeChanged(CefRefPtr view) {} + +#if CEF_API_ADDED(CEF_NEXT) + /// + /// Called by CefBrowserPlatformDelegateChromeViews::BrowserDestroyed() + /// + /// We have to drop our reference to the native delegate, because it's + /// going to be destroyed very soon. + /// + /*--cef(added=next)--*/ + virtual void ClearNativeDelegate() {} +#endif }; #endif // CEF_INCLUDE_VIEWS_CEF_WINDOW_DELEGATE_H_ diff --git a/libcef/browser/chrome/views/browser_platform_delegate_chrome_views.cc b/libcef/browser/chrome/views/browser_platform_delegate_chrome_views.cc index 7057fcf0d..a677c0889 100644 --- a/libcef/browser/chrome/views/browser_platform_delegate_chrome_views.cc +++ b/libcef/browser/chrome/views/browser_platform_delegate_chrome_views.cc @@ -92,6 +92,12 @@ void CefBrowserPlatformDelegateChromeViews::BrowserDestroyed( CefBrowserPlatformDelegateChrome::BrowserDestroyed(browser); // |browser_view_| may be destroyed before this callback arrives. if (browser_view_) { + CefRefPtr window = browser_view_->GetWindow(); + if (window) { + CefRefPtr delegate = window->GetDelegate(); + if (delegate) + delegate->ClearNativeDelegate(); + } browser_view_->BrowserDestroyed(browser); } browser_view_ = nullptr; diff --git a/libcef/browser/chrome/views/chrome_child_window.cc b/libcef/browser/chrome/views/chrome_child_window.cc index dee8c9894..5a6bb0efa 100644 --- a/libcef/browser/chrome/views/chrome_child_window.cc +++ b/libcef/browser/chrome/views/chrome_child_window.cc @@ -65,7 +65,11 @@ class ChildWindowDelegate : public CefWindowDelegate { void OnWindowDestroyed(CefRefPtr window) override { browser_view_ = nullptr; window_ = nullptr; -#if BUILDFLAG(IS_WIN) + native_delegate_ = nullptr; + } + + void ClearNativeDelegate() override { +#if defined(USE_AURA) native_delegate_ = nullptr; #endif }