summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_error_ui_default.cc
diff options
context:
space:
mode:
authorkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-04 10:45:30 +0000
committerkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-04 10:45:30 +0000
commit73a85e0183de62b1a18212b852775c1845a0c9cf (patch)
tree9784c8c8f869ee8fc6602d9fcf2beb95e2af9d53 /chrome/browser/extensions/extension_error_ui_default.cc
parent0234e3d9d4c6f64777ef0935fe7b071d105b89b5 (diff)
downloadchromium_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.cc13
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();
}