mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Fix dangling menu observer on browser destruction
This commit is contained in:
@@ -1420,6 +1420,19 @@ CefDevToolsWindowRunner* CefBrowserHostBase::GetDevToolsWindowRunner() {
|
|||||||
return devtools_window_runner_.get();
|
return devtools_window_runner_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CefBrowserHostBase::set_context_menu_observer(
|
||||||
|
RenderViewContextMenuObserver* observer) {
|
||||||
|
context_menu_observer_ = observer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefBrowserHostBase::clear_context_menu_observer(
|
||||||
|
RenderViewContextMenuObserver* observer) {
|
||||||
|
// Don't clear if a new Observer has already been assigned.
|
||||||
|
if (context_menu_observer_ == observer) {
|
||||||
|
context_menu_observer_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
views::Widget* CefBrowserHostBase::GetWindowWidget() const {
|
views::Widget* CefBrowserHostBase::GetWindowWidget() const {
|
||||||
CEF_REQUIRE_UIT();
|
CEF_REQUIRE_UIT();
|
||||||
if (!platform_delegate_) {
|
if (!platform_delegate_) {
|
||||||
|
@@ -392,9 +392,8 @@ class CefBrowserHostBase : public CefBrowserHost,
|
|||||||
RenderViewContextMenuObserver* context_menu_observer() const {
|
RenderViewContextMenuObserver* context_menu_observer() const {
|
||||||
return context_menu_observer_;
|
return context_menu_observer_;
|
||||||
}
|
}
|
||||||
void set_context_menu_observer(RenderViewContextMenuObserver* observer) {
|
void set_context_menu_observer(RenderViewContextMenuObserver* observer);
|
||||||
context_menu_observer_ = observer;
|
void clear_context_menu_observer(RenderViewContextMenuObserver* observer);
|
||||||
}
|
|
||||||
|
|
||||||
// Returns the Widget owner for the browser window. Only used with windowed
|
// Returns the Widget owner for the browser window. Only used with windowed
|
||||||
// browsers.
|
// browsers.
|
||||||
|
@@ -82,7 +82,8 @@ class CefContextMenuObserver : public RenderViewContextMenuObserver,
|
|||||||
CefRefPtr<CefBrowserHostBase> browser,
|
CefRefPtr<CefBrowserHostBase> browser,
|
||||||
CefRefPtr<CefContextMenuHandler> handler)
|
CefRefPtr<CefContextMenuHandler> handler)
|
||||||
: context_menu_(context_menu), browser_(browser), handler_(handler) {
|
: context_menu_(context_menu), browser_(browser), handler_(handler) {
|
||||||
// This remains valid until the next time a context menu is created.
|
// Association remains valid until the next time a context menu is created,
|
||||||
|
// or this Observer is destroyed.
|
||||||
browser_->set_context_menu_observer(this);
|
browser_->set_context_menu_observer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,6 +164,7 @@ class CefContextMenuObserver : public RenderViewContextMenuObserver,
|
|||||||
|
|
||||||
// Clear stored state because this object won't be deleted until a new
|
// Clear stored state because this object won't be deleted until a new
|
||||||
// context menu is created or the associated browser is destroyed.
|
// context menu is created or the associated browser is destroyed.
|
||||||
|
browser_->clear_context_menu_observer(this);
|
||||||
browser_ = nullptr;
|
browser_ = nullptr;
|
||||||
handler_ = nullptr;
|
handler_ = nullptr;
|
||||||
params_ = nullptr;
|
params_ = nullptr;
|
||||||
|
Reference in New Issue
Block a user