Chromium Code Reviews| Index: chrome/browser/extensions/extension_disabled_ui.cc |
| diff --git a/chrome/browser/extensions/extension_disabled_ui.cc b/chrome/browser/extensions/extension_disabled_ui.cc |
| index 0e096b5e6bff9c2de7392605fd8043c72faa8bf5..02ac58ae3478909e75b4fb86989add9f8c340c56 100644 |
| --- a/chrome/browser/extensions/extension_disabled_ui.cc |
| +++ b/chrome/browser/extensions/extension_disabled_ui.cc |
| @@ -92,28 +92,24 @@ void ReleaseMenuCommandID(int id) { |
| // ExtensionDisabledDialogDelegate -------------------------------------------- |
| -class ExtensionDisabledDialogDelegate |
| - : public ExtensionInstallPrompt::Delegate, |
| - public base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate> { |
| +class ExtensionDisabledDialogDelegate { |
| public: |
| ExtensionDisabledDialogDelegate(ExtensionService* service, |
| scoped_ptr<ExtensionInstallPrompt> install_ui, |
| const Extension* extension); |
| private: |
| - friend class base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate>; |
| + ~ExtensionDisabledDialogDelegate(); |
| - ~ExtensionDisabledDialogDelegate() override; |
| - |
| - // ExtensionInstallPrompt::Delegate: |
| - void InstallUIProceed() override; |
| - void InstallUIAbort(bool user_initiated) override; |
| + void InstallPromptDone(ExtensionInstallPrompt::Result result); |
| // The UI for showing the install dialog when enabling. |
| scoped_ptr<ExtensionInstallPrompt> install_ui_; |
| ExtensionService* service_; |
| const Extension* extension_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionDisabledDialogDelegate); |
|
Avi (use Gerrit)
2015/12/29 03:10:45
base/macros.h
Devlin
2016/01/04 22:59:23
Done.
|
| }; |
| ExtensionDisabledDialogDelegate::ExtensionDisabledDialogDelegate( |
| @@ -123,12 +119,15 @@ ExtensionDisabledDialogDelegate::ExtensionDisabledDialogDelegate( |
| : install_ui_(std::move(install_ui)), |
| service_(service), |
| extension_(extension) { |
| - AddRef(); // Balanced in Proceed or Abort. |
| ExtensionInstallPrompt::PromptType type = |
| ExtensionInstallPrompt::GetReEnablePromptTypeForExtension( |
| service_->profile(), extension); |
| + // Unretained() is safe since this object manages its own lifetime and deletes |
| + // itself only once the prompt finishes. |
|
asargent_no_longer_on_chrome
2015/12/31 00:45:56
also because it owns install_ui_ (not sure if wort
Devlin
2016/01/04 22:59:23
See other comment.
|
| install_ui_->ShowDialog( |
| - this, extension_, nullptr, |
| + base::Bind(&ExtensionDisabledDialogDelegate::InstallPromptDone, |
| + base::Unretained(this)), |
| + extension_, nullptr, |
| make_scoped_ptr(new ExtensionInstallPrompt::Prompt(type)), |
| ExtensionInstallPrompt::GetDefaultShowDialogCallback()); |
| } |
| @@ -136,19 +135,21 @@ ExtensionDisabledDialogDelegate::ExtensionDisabledDialogDelegate( |
| ExtensionDisabledDialogDelegate::~ExtensionDisabledDialogDelegate() { |
| } |
| -void ExtensionDisabledDialogDelegate::InstallUIProceed() { |
| - service_->GrantPermissionsAndEnableExtension(extension_); |
| - Release(); |
| -} |
| - |
| -void ExtensionDisabledDialogDelegate::InstallUIAbort(bool user_initiated) { |
| - std::string histogram_name = user_initiated ? "ReEnableCancel" |
| - : "ReEnableAbort"; |
| - ExtensionService::RecordPermissionMessagesHistogram( |
| - extension_, histogram_name.c_str()); |
| +void ExtensionDisabledDialogDelegate::InstallPromptDone( |
| + ExtensionInstallPrompt::Result result) { |
| + if (result == ExtensionInstallPrompt::Result::ACCEPTED) { |
| + service_->GrantPermissionsAndEnableExtension(extension_); |
| + } else { |
| + const char* histogram_name = |
| + result == ExtensionInstallPrompt::Result::USER_CANCELED |
| + ? "ReEnableCancel" |
| + : "ReEnableAbort"; |
| + ExtensionService::RecordPermissionMessagesHistogram(extension_, |
| + histogram_name); |
| + // Do nothing. The extension will remain disabled. |
| + } |
| - // Do nothing. The extension will remain disabled. |
| - Release(); |
| + delete this; |
| } |
| // ExtensionDisabledGlobalError ----------------------------------------------- |