Chromium Code Reviews| Index: chrome/browser/extensions/extension_install_prompt.cc |
| diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc |
| index aec3b6293f0e55ec747ac49aee55e1bcd61dd690..1b667c19ac38b13aa85bddca3fd31a75cc8cce1b 100644 |
| --- a/chrome/browser/extensions/extension_install_prompt.cc |
| +++ b/chrome/browser/extensions/extension_install_prompt.cc |
| @@ -14,7 +14,6 @@ |
| #include "base/stringprintf.h" |
| #include "base/utf_string_conversions.h" |
| #include "chrome/browser/extensions/bundle_installer.h" |
| -#include "chrome/browser/extensions/extension_install_dialog.h" |
| #include "chrome/browser/extensions/extension_install_ui.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -95,6 +94,13 @@ namespace { |
| // Size of extension icon in top left of dialog. |
| const int kIconSize = 69; |
| +// A flag used for SetExtensionInstallDialogAutoConfirmForTests |
| +enum AutoConfirmForTest { |
| + DO_NOT_SKIP = 0, |
| + PROCEED, |
| + ABORT |
| +}; |
| + |
| // Returns pixel size under maximal scale factor for the icon whose device |
| // independent size is |size_in_dip| |
| int GetSizeForMaxScaleFactor(int size_in_dip) { |
| @@ -120,6 +126,39 @@ SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) { |
| GetRepresentation(max_scale_factor).sk_bitmap(); |
| } |
| +void AutoConfirmTask(ExtensionInstallPrompt::Delegate* delegate, bool proceed) { |
|
Aaron Boodman
2012/10/11 20:28:50
This is a bit weird. Can check proceed in DoAutoCo
sail
2012/10/11 21:18:47
Done.
|
| + if (proceed) |
| + delegate->InstallUIProceed(); |
| + else |
| + delegate->InstallUIAbort(true); |
| +} |
| + |
| +void DoAutoConfirm(AutoConfirmForTest setting, |
| + ExtensionInstallPrompt::Delegate* delegate) { |
| + bool proceed = (setting == 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)); |
| +} |
| + |
| +AutoConfirmForTest CheckAutoConfirmCommandLineSwitch() { |
| + const CommandLine* cmdline = CommandLine::ForCurrentProcess(); |
| + if (!cmdline->HasSwitch(switches::kAppsGalleryInstallAutoConfirmForTests)) |
| + return DO_NOT_SKIP; |
| + std::string value = cmdline->GetSwitchValueASCII( |
| + switches::kAppsGalleryInstallAutoConfirmForTests); |
| + if (value == "accept") |
| + return PROCEED; |
| + else if (value == "cancel") |
| + return ABORT; |
| + else |
| + NOTREACHED(); |
| + return DO_NOT_SKIP; |
| +} |
| + |
| } // namespace |
| ExtensionInstallPrompt::Prompt::Prompt(Profile* profile, PromptType type) |
| @@ -348,23 +387,28 @@ void ExtensionInstallPrompt::ConfirmStandaloneInstall( |
| FetchOAuthIssueAdviceIfNeeded(); |
| } |
| -void ExtensionInstallPrompt::ConfirmWebstoreInstall(Delegate* delegate, |
| - const Extension* extension, |
| - const SkBitmap* icon) { |
| +void ExtensionInstallPrompt::ConfirmWebstoreInstall( |
| + Delegate* delegate, |
| + const Extension* extension, |
| + const SkBitmap* icon, |
| + const ShowDialogCallback& show_dialog_callback) { |
| // SetIcon requires |extension_| to be set. ConfirmInstall will setup the |
| // remaining fields. |
| extension_ = extension; |
| SetIcon(icon); |
| - ConfirmInstall(delegate, extension); |
| + ConfirmInstall(delegate, extension, show_dialog_callback); |
| } |
| -void ExtensionInstallPrompt::ConfirmInstall(Delegate* delegate, |
| - const Extension* extension) { |
| +void ExtensionInstallPrompt::ConfirmInstall( |
| + Delegate* delegate, |
| + const Extension* extension, |
| + const ShowDialogCallback& show_dialog_callback) { |
| DCHECK(ui_loop_ == MessageLoop::current()); |
| extension_ = extension; |
| permissions_ = extension->GetActivePermissions(); |
| delegate_ = delegate; |
| prompt_type_ = INSTALL_PROMPT; |
| + show_dialog_callback_ = show_dialog_callback; |
| // We special-case themes to not show any confirm UI. Instead they are |
| // immediately installed, and then we show an infobar (see OnInstallSuccess) |
| @@ -537,18 +581,27 @@ void ExtensionInstallPrompt::ShowConfirmation() { |
| case INSTALL_PROMPT: { |
| prompt_.set_extension(extension_); |
| prompt_.set_icon(gfx::Image(icon_)); |
| - ShowExtensionInstallDialog(parent_, navigator_, delegate_, prompt_); |
| break; |
| } |
| case BUNDLE_INSTALL_PROMPT: { |
| prompt_.set_bundle(bundle_); |
| - ShowExtensionInstallDialog(parent_, navigator_, delegate_, prompt_); |
| break; |
| } |
| default: |
| NOTREACHED() << "Unknown message"; |
| - break; |
| + return; |
| + } |
| + |
| + AutoConfirmForTest auto_confirm = CheckAutoConfirmCommandLineSwitch(); |
|
Aaron Boodman
2012/10/11 20:28:50
is there any reason for CheckAutoConfirmCommandLin
sail
2012/10/11 21:18:47
Done.
|
| + if (auto_confirm != DO_NOT_SKIP) { |
| + DoAutoConfirm(auto_confirm, delegate_); |
| + return; |
| } |
| + |
| + if (show_dialog_callback_.is_null()) |
| + ShowExtensionInstallDialogImpl(parent_, navigator_, delegate_, prompt_); |
| + else |
| + show_dialog_callback_.Run(parent_, navigator_, delegate_, prompt_); |
| } |
| namespace chrome { |