Index: chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
index 674b3ae0842679d6de9e3d726ba6d85bc8a4d5f0..c67ac4ff5340123d332bd9c5231442f3179e64d1 100644 |
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc |
@@ -195,7 +195,8 @@ ExtensionInstallDialogView::ExtensionInstallDialogView( |
scrollable_header_only_(NULL), |
show_details_link_(NULL), |
checkbox_info_label_(NULL), |
- unchecked_boxes_(0) { |
+ unchecked_boxes_(0), |
+ handled_result_(false) { |
// Possible grid layouts without ExtensionPermissionDialog experiment: |
// Inline install |
// w/ permissions no permissions |
@@ -714,14 +715,14 @@ int ExtensionInstallDialogView::GetDefaultDialogButton() const { |
} |
bool ExtensionInstallDialogView::Cancel() { |
- UpdateInstallResultHistogram(false); |
- if (sampling_event_.get()) |
- sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); |
- delegate_->InstallUIAbort(true); |
+ OnInstallAborted(); |
return true; |
} |
bool ExtensionInstallDialogView::Accept() { |
+ DCHECK(!handled_result_); |
+ |
+ handled_result_ = true; |
UpdateInstallResultHistogram(true); |
if (sampling_event_.get()) |
sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kProceed); |
@@ -729,6 +730,12 @@ bool ExtensionInstallDialogView::Accept() { |
return true; |
} |
+void ExtensionInstallDialogView::OnClosed() { |
+ // The install dialog may have been closed without the user selecting accept |
+ // or cancel, so ensure this case is treated as an abort. |
+ OnInstallAborted(); |
+} |
+ |
ui::ModalType ExtensionInstallDialogView::GetModalType() const { |
return ui::MODAL_TYPE_WINDOW; |
} |
@@ -855,6 +862,17 @@ void ExtensionInstallDialogView::UpdateLinkActionHistogram(int action_type) |
} |
} |
+void ExtensionInstallDialogView::OnInstallAborted() { |
+ if (handled_result_) |
+ return; |
+ |
+ handled_result_ = true; |
+ UpdateInstallResultHistogram(false); |
+ if (sampling_event_.get()) |
tapted
2014/09/08 07:42:20
nit: pretty sure Chrome prefers dropping the `.get
tmdiep
2014/09/08 08:26:08
Done.
|
+ sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); |
+ delegate_->InstallUIAbort(true); |
+} |
+ |
// ExpandableContainerView::DetailsView ---------------------------------------- |
ExpandableContainerView::DetailsView::DetailsView(int horizontal_space, |