diff options
Diffstat (limited to 'chrome/browser/extensions/extension_install_dialog.cc')
-rw-r--r-- | chrome/browser/extensions/extension_install_dialog.cc | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/chrome/browser/extensions/extension_install_dialog.cc b/chrome/browser/extensions/extension_install_dialog.cc index 150200d..dad6d26 100644 --- a/chrome/browser/extensions/extension_install_dialog.cc +++ b/chrome/browser/extensions/extension_install_dialog.cc @@ -4,12 +4,16 @@ #include "chrome/browser/extensions/extension_install_dialog.h" +#include "base/bind.h" #include "base/file_path.h" +#include "base/message_loop.h" #include "base/memory/scoped_ptr.h" #include "base/values.h" #include "chrome/common/extensions/extension.h" -// A flag used for SetExtensionInstallDialogForManifestAutoConfirmForTests +namespace { + +// A flag used for SetExtensionInstallDialogAutoConfirmForTests enum AutoConfirmForTest { DO_NOT_SKIP = 0, PROCEED, @@ -17,6 +21,37 @@ enum AutoConfirmForTest { }; AutoConfirmForTest auto_confirm_for_tests = DO_NOT_SKIP; +void AutoConfirmTask(ExtensionInstallUI::Delegate* delegate, bool proceed) { + if (proceed) + delegate->InstallUIProceed(); + else + delegate->InstallUIAbort(true); +} + +void DoAutoConfirm(ExtensionInstallUI::Delegate* delegate) { + bool proceed = (auto_confirm_for_tests == PROCEED); + // We use PostTask instead of calling the delegate directly here, because in + // the real implementations it's highly likely the message loop will be + // pumping a few times before the user clicks accept or cancel. + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&AutoConfirmTask, delegate, proceed)); +} + +} // namespace + +void ShowExtensionInstallDialog(Profile* profile, + ExtensionInstallUI::Delegate* delegate, + const Extension* extension, + SkBitmap* icon, + const ExtensionInstallUI::Prompt& prompt) { + if (auto_confirm_for_tests != DO_NOT_SKIP) { + DoAutoConfirm(delegate); + return; + } + ShowExtensionInstallDialogImpl(profile, delegate, extension, icon, prompt); +} + bool ShowExtensionInstallDialogForManifest( Profile *profile, ExtensionInstallUI::Delegate* delegate, @@ -59,10 +94,7 @@ bool ShowExtensionInstallDialogForManifest( // In tests, we may have setup to proceed or abort without putting up the real // confirmation dialog. if (auto_confirm_for_tests != DO_NOT_SKIP) { - if (auto_confirm_for_tests == PROCEED) - delegate->InstallUIProceed(); - else - delegate->InstallUIAbort(true); + DoAutoConfirm(delegate); return true; } @@ -78,7 +110,7 @@ bool ShowExtensionInstallDialogForManifest( return true; } -void SetExtensionInstallDialogForManifestAutoConfirmForTests( +void SetExtensionInstallDialogAutoConfirmForTests( bool should_proceed) { auto_confirm_for_tests = should_proceed ? PROCEED : ABORT; } |