diff options
author | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-04 10:45:30 +0000 |
---|---|---|
committer | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-04 10:45:30 +0000 |
commit | 73a85e0183de62b1a18212b852775c1845a0c9cf (patch) | |
tree | 9784c8c8f869ee8fc6602d9fcf2beb95e2af9d53 /chrome/browser/extensions/extension_error_ui_default.cc | |
parent | 0234e3d9d4c6f64777ef0935fe7b071d105b89b5 (diff) | |
download | chromium_src-73a85e0183de62b1a18212b852775c1845a0c9cf.zip chromium_src-73a85e0183de62b1a18212b852775c1845a0c9cf.tar.gz chromium_src-73a85e0183de62b1a18212b852775c1845a0c9cf.tar.bz2 |
Fix a null dereference in ExtensionService::HandleExtensionAlertAccept by closing
the active alert via the UI object rather than calling ExtensionService's event
handler directly.
BUG=224281
Review URL: https://chromiumcodereview.appspot.com/13440003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192278 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_error_ui_default.cc')
-rw-r--r-- | chrome/browser/extensions/extension_error_ui_default.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/chrome/browser/extensions/extension_error_ui_default.cc b/chrome/browser/extensions/extension_error_ui_default.cc index e85c368..3301af2 100644 --- a/chrome/browser/extensions/extension_error_ui_default.cc +++ b/chrome/browser/extensions/extension_error_ui_default.cc @@ -9,6 +9,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/chrome_pages.h" +#include "chrome/browser/ui/global_error/global_error_bubble_view_base.h" ExtensionErrorUIDefault::ExtensionErrorUIDefault( ExtensionService* extension_service) @@ -38,6 +39,14 @@ void ExtensionErrorUIDefault::ShowExtensions() { chrome::ShowExtensions(browser_, std::string()); } +void ExtensionErrorUIDefault::Close() { + if (global_error_->HasShownBubbleView()) { + // Will end up calling into |global_error_|->OnBubbleViewDidClose, + // possibly synchronously. + global_error_->GetBubbleView()->CloseBubbleView(); + } +} + ExtensionErrorUIDefault::ExtensionGlobalError::ExtensionGlobalError( ExtensionErrorUIDefault* error_ui) : error_ui_(error_ui) { @@ -86,8 +95,8 @@ string16 ExtensionErrorUIDefault::ExtensionGlobalError:: void ExtensionErrorUIDefault::ExtensionGlobalError:: OnBubbleViewDidClose(Browser* browser) { - // This call deletes error_ui_ (and as a result of error_ui_ destruction, - // object pointed by this also gets deleted). + // Calling BubbleViewDidClose on |error_ui_| will delete it. It owns us, so + // |this| will be deleted too. error_ui_->BubbleViewDidClose(); } |