diff options
author | sail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 02:23:05 +0000 |
---|---|---|
committer | sail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 02:23:05 +0000 |
commit | af6efb221d2ec568071c98f82807b63c3531986f (patch) | |
tree | 8adc3453c2de9117bd6e46e54c8c8998b4d612ed | |
parent | f6661ccc5aa6aca1c2130936a8905e74ced35599 (diff) | |
download | chromium_src-af6efb221d2ec568071c98f82807b63c3531986f.zip chromium_src-af6efb221d2ec568071c98f82807b63c3531986f.tar.gz chromium_src-af6efb221d2ec568071c98f82807b63c3531986f.tar.bz2 |
Making ShowExtensionInstallDialog a callback
BUG=152010
TBR=rdsmith@chromium.org, jrg@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11087071
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161479 0039d316-1c4b-4281-b951-d872f2087c98
24 files changed, 176 insertions, 164 deletions
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc index 6390459..4e41aa1 100644 --- a/chrome/browser/download/download_browsertest.cc +++ b/chrome/browser/download/download_browsertest.cc @@ -149,7 +149,9 @@ class MockAbortExtensionInstallPrompt : public ExtensionInstallPrompt { } // Simulate a user abort on an extension installation. - virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) { + virtual void ConfirmInstall(Delegate* delegate, + const Extension* extension, + const ShowDialogCallback& show_dialog_callback) { delegate->InstallUIAbort(true); MessageLoopForUI::current()->Quit(); } @@ -169,7 +171,9 @@ class MockAutoConfirmExtensionInstallPrompt : public ExtensionInstallPrompt { : ExtensionInstallPrompt(parent, navigator, profile) {} // Proceed without confirmation prompt. - virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) { + virtual void ConfirmInstall(Delegate* delegate, + const Extension* extension, + const ShowDialogCallback& show_dialog_callback) { delegate->InstallUIProceed(); } diff --git a/chrome/browser/extensions/api/management/management_api_browsertest.cc b/chrome/browser/extensions/api/management/management_api_browsertest.cc index 84c1b45..d3f6b3c 100644 --- a/chrome/browser/extensions/api/management/management_api_browsertest.cc +++ b/chrome/browser/extensions/api/management/management_api_browsertest.cc @@ -12,7 +12,6 @@ #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/extensions/extension_host.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_test_message_listener.h" #include "chrome/browser/profiles/profile.h" diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc index 9959e34..1c8f242 100644 --- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc @@ -14,7 +14,6 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/crx_installer.h" #include "chrome/browser/extensions/extension_function_dispatcher.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/webstore_installer.h" @@ -325,7 +324,11 @@ void BeginInstallWithManifestFunction::OnWebstoreParseSuccess( install_prompt_.reset( chrome::CreateExtensionInstallPromptWithBrowser(GetCurrentBrowser())); - install_prompt_->ConfirmWebstoreInstall(this, dummy_extension_, &icon_); + install_prompt_->ConfirmWebstoreInstall( + this, + dummy_extension_, + &icon_, + ExtensionInstallPrompt::GetDefaultShowDialogCallback()); // Control flow finishes up in InstallUIProceed or InstallUIAbort. } diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc index 449d1f3a..7a02b531 100644 --- a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc @@ -11,7 +11,6 @@ #include "chrome/browser/extensions/bundle_installer.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_function_test_utils.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/extensions/extension_install_prompt.h" #include "chrome/browser/extensions/extension_install_ui.h" #include "chrome/browser/extensions/extension_service.h" diff --git a/chrome/browser/extensions/bundle_installer.cc b/chrome/browser/extensions/bundle_installer.cc index eef78e9..11e4e1e 100644 --- a/chrome/browser/extensions/bundle_installer.cc +++ b/chrome/browser/extensions/bundle_installer.cc @@ -13,7 +13,6 @@ #include "base/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/extensions/crx_installer.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc index e51b225..ea54840 100644 --- a/chrome/browser/extensions/crx_installer.cc +++ b/chrome/browser/extensions/crx_installer.cc @@ -106,6 +106,8 @@ CrxInstaller::CrxInstaller( error_on_unsupported_requirements_(false), requirements_checker_(new extensions::RequirementsChecker()), has_requirement_errors_(false) { + show_dialog_callback_ = + ExtensionInstallPrompt::GetDefaultShowDialogCallback(); if (!approval) return; @@ -124,6 +126,8 @@ CrxInstaller::CrxInstaller( expected_id_ = approval->extension_id; record_oauth2_grant_ = approval->record_oauth2_grant; } + + show_dialog_callback_ = approval->show_dialog_callback; } CrxInstaller::~CrxInstaller() { @@ -453,7 +457,7 @@ void CrxInstaller::ConfirmInstall() { if (client_ && (!allow_silent_install_ || !approved_)) { AddRef(); // Balanced in Proceed() and Abort(). - client_->ConfirmInstall(this, extension_.get()); + client_->ConfirmInstall(this, extension_.get(), show_dialog_callback_); } else { if (!BrowserThread::PostTask( BrowserThread::FILE, FROM_HERE, diff --git a/chrome/browser/extensions/crx_installer.h b/chrome/browser/extensions/crx_installer.h index e9541de..de3da57 100644 --- a/chrome/browser/extensions/crx_installer.h +++ b/chrome/browser/extensions/crx_installer.h @@ -359,6 +359,9 @@ class CrxInstaller bool has_requirement_errors_; + // Used to show the install dialog. + ExtensionInstallPrompt::ShowDialogCallback show_dialog_callback_; + DISALLOW_COPY_AND_ASSIGN(CrxInstaller); }; diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc index 8f3c1e0..e97708c 100644 --- a/chrome/browser/extensions/crx_installer_browsertest.cc +++ b/chrome/browser/extensions/crx_installer_browsertest.cc @@ -47,7 +47,8 @@ class MockInstallPrompt : public ExtensionInstallPrompt { // Overriding some of the ExtensionInstallUI API. void ConfirmInstall(Delegate* delegate, - const Extension* extension) { + const Extension* extension, + const ShowDialogCallback& show_dialog_callback) { confirmation_requested_ = true; delegate->InstallUIProceed(); } diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc index 425db17..ad9325c 100644 --- a/chrome/browser/extensions/extension_browsertest.cc +++ b/chrome/browser/extensions/extension_browsertest.cc @@ -256,7 +256,9 @@ class MockAbortExtensionInstallPrompt : public ExtensionInstallPrompt { } // Simulate a user abort on an extension installation. - virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) { + virtual void ConfirmInstall(Delegate* delegate, + const Extension* extension, + const ShowDialogCallback& show_dialog_callback) { delegate->InstallUIAbort(true); MessageLoopForUI::current()->Quit(); } @@ -274,7 +276,9 @@ class MockAutoConfirmExtensionInstallPrompt : public ExtensionInstallPrompt { Profile* profile) : ExtensionInstallPrompt(parent, navigator, profile) {} // Proceed without confirmation prompt. - virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) { + virtual void ConfirmInstall(Delegate* delegate, + const Extension* extension, + const ShowDialogCallback& show_dialog_callback) { delegate->InstallUIProceed(); } }; diff --git a/chrome/browser/extensions/extension_install_dialog.cc b/chrome/browser/extensions/extension_install_dialog.cc deleted file mode 100644 index a3cd87b..0000000 --- a/chrome/browser/extensions/extension_install_dialog.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/extensions/extension_install_dialog.h" - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/file_path.h" -#include "base/memory/scoped_ptr.h" -#include "base/message_loop.h" -#include "base/values.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/extensions/extension.h" -#include "chrome/common/extensions/extension_manifest_constants.h" -#include "ui/gfx/image/image.h" - -namespace { - -// A flag used for SetExtensionInstallDialogAutoConfirmForTests -enum AutoConfirmForTest { - DO_NOT_SKIP = 0, - PROCEED, - ABORT -}; - -void AutoConfirmTask(ExtensionInstallPrompt::Delegate* delegate, bool proceed) { - 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 - -void ShowExtensionInstallDialog(gfx::NativeWindow parent, - content::PageNavigator* navigator, - ExtensionInstallPrompt::Delegate* delegate, - const ExtensionInstallPrompt::Prompt& prompt) { - AutoConfirmForTest auto_confirm = CheckAutoConfirmCommandLineSwitch(); - if (auto_confirm != DO_NOT_SKIP) { - DoAutoConfirm(auto_confirm, delegate); - return; - } - ShowExtensionInstallDialogImpl(parent, navigator, delegate, prompt); -} diff --git a/chrome/browser/extensions/extension_install_dialog.h b/chrome/browser/extensions/extension_install_dialog.h deleted file mode 100644 index bc4e852..0000000 --- a/chrome/browser/extensions/extension_install_dialog.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_DIALOG_H_ -#define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_DIALOG_H_ - -#include <vector> - -#include "base/memory/ref_counted.h" -#include "base/string16.h" -#include "chrome/browser/extensions/extension_install_prompt.h" - -namespace base { -class DictionaryValue; -} - -void ShowExtensionInstallDialog(gfx::NativeWindow parent, - content::PageNavigator* navigator, - ExtensionInstallPrompt::Delegate* delegate, - const ExtensionInstallPrompt::Prompt& prompt); - -// The implementations of this function are platform-specific. -void ShowExtensionInstallDialogImpl( - gfx::NativeWindow parent, - content::PageNavigator* navigator, - ExtensionInstallPrompt::Delegate* delegate, - const ExtensionInstallPrompt::Prompt& prompt); - -#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_DIALOG_H_ diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc index aec3b62..a6af029 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" @@ -120,6 +119,39 @@ SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) { GetRepresentation(max_scale_factor).sk_bitmap(); } +// If auto confirm is enabled then posts a task to proceed with or cancel the +// install and returns true. Otherwise returns false. +bool AutoConfirmPrompt(ExtensionInstallPrompt::Delegate* delegate) { + const CommandLine* cmdline = CommandLine::ForCurrentProcess(); + if (!cmdline->HasSwitch(switches::kAppsGalleryInstallAutoConfirmForTests)) + return false; + std::string value = cmdline->GetSwitchValueASCII( + switches::kAppsGalleryInstallAutoConfirmForTests); + + // 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. + if (value == "accept") { + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&ExtensionInstallPrompt::Delegate::InstallUIProceed, + base::Unretained(delegate))); + return true; + } + + if (value == "cancel") { + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&ExtensionInstallPrompt::Delegate::InstallUIAbort, + base::Unretained(delegate), + true)); + return true; + } + + NOTREACHED(); + return false; +} + } // namespace ExtensionInstallPrompt::Prompt::Prompt(Profile* profile, PromptType type) @@ -348,23 +380,29 @@ 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; + DCHECK(!show_dialog_callback_.is_null()); // 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 +575,22 @@ 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; } + + if (AutoConfirmPrompt(delegate_)) + return; + + DCHECK(!show_dialog_callback_.is_null()); + show_dialog_callback_.Run(parent_, navigator_, delegate_, prompt_); } namespace chrome { diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h index 480dfd0..ce32fef 100644 --- a/chrome/browser/extensions/extension_install_prompt.h +++ b/chrome/browser/extensions/extension_install_prompt.h @@ -8,6 +8,7 @@ #include <string> #include <vector> +#include "base/callback.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "base/string16.h" @@ -157,6 +158,16 @@ class ExtensionInstallPrompt : public ImageLoadingTracker::Observer, virtual ~Delegate() {} }; + typedef base::Callback<void(gfx::NativeWindow, + content::PageNavigator*, + ExtensionInstallPrompt::Delegate*, + const ExtensionInstallPrompt::Prompt&)> + ShowDialogCallback; + + // Callback to show the default extension install dialog. + // The implementations of this function are platform-specific. + static ShowDialogCallback GetDefaultShowDialogCallback(); + // Creates a dummy extension from the |manifest|, replacing the name and // description with the localizations if provided. static scoped_refptr<extensions::Extension> GetLocalizedExtensionForDisplay( @@ -196,19 +207,24 @@ class ExtensionInstallPrompt : public ImageLoadingTracker::Observer, const Prompt& prompt); // This is called by the installer to verify whether the installation from - // the webstore should proceed. + // the webstore should proceed. |show_dialog_callback| is optional and can be + // NULL. // // We *MUST* eventually call either Proceed() or Abort() on |delegate|. - virtual void ConfirmWebstoreInstall(Delegate* delegate, - const extensions::Extension* extension, - const SkBitmap* icon); + virtual void ConfirmWebstoreInstall( + Delegate* delegate, + const extensions::Extension* extension, + const SkBitmap* icon, + const ShowDialogCallback& show_dialog_callback); // This is called by the installer to verify whether the installation should - // proceed. This is declared virtual for testing. + // proceed. This is declared virtual for testing. |show_dialog_callback| is + // optional and can be NULL. // // We *MUST* eventually call either Proceed() or Abort() on |delegate|. virtual void ConfirmInstall(Delegate* delegate, - const extensions::Extension* extension); + const extensions::Extension* extension, + const ShowDialogCallback& show_dialog_callback); // This is called by the app handler launcher to verify whether the app // should be re-enabled. This is declared virtual for testing. @@ -311,6 +327,9 @@ class ExtensionInstallPrompt : public ImageLoadingTracker::Observer, // Keeps track of extension images being loaded on the File thread for the // purpose of showing the install UI. ImageLoadingTracker tracker_; + + // Used to show the confirm dialog. + ShowDialogCallback show_dialog_callback_; }; namespace chrome { diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc index 17c738a..67b4328 100644 --- a/chrome/browser/extensions/unpacked_installer.cc +++ b/chrome/browser/extensions/unpacked_installer.cc @@ -61,7 +61,8 @@ SimpleExtensionLoadPrompt::~SimpleExtensionLoadPrompt() { } void SimpleExtensionLoadPrompt::ShowPrompt() { - install_ui_->ConfirmInstall(this, extension_); + install_ui_->ConfirmInstall( + this, extension_, ExtensionInstallPrompt::GetDefaultShowDialogCallback()); } void SimpleExtensionLoadPrompt::InstallUIProceed() { diff --git a/chrome/browser/extensions/webstore_installer.cc b/chrome/browser/extensions/webstore_installer.cc index 2ac1332..979ee82 100644 --- a/chrome/browser/extensions/webstore_installer.cc +++ b/chrome/browser/extensions/webstore_installer.cc @@ -151,6 +151,7 @@ WebstoreInstaller::Approval::Approval() skip_post_install_ui(false), skip_install_dialog(false), record_oauth2_grant(false) { + show_dialog_callback = ExtensionInstallPrompt::GetDefaultShowDialogCallback(); } scoped_ptr<WebstoreInstaller::Approval> diff --git a/chrome/browser/extensions/webstore_installer.h b/chrome/browser/extensions/webstore_installer.h index 1206406..64cef21 100644 --- a/chrome/browser/extensions/webstore_installer.h +++ b/chrome/browser/extensions/webstore_installer.h @@ -13,6 +13,7 @@ #include "base/memory/scoped_ptr.h" #include "base/supports_user_data.h" #include "base/values.h" +#include "chrome/browser/extensions/extension_install_prompt.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/download_item.h" #include "content/public/browser/notification_observer.h" @@ -101,6 +102,9 @@ class WebstoreInstaller :public content::NotificationObserver, // Whether we should record an oauth2 grant for the extensions. bool record_oauth2_grant; + // Used to show the install dialog. + ExtensionInstallPrompt::ShowDialogCallback show_dialog_callback; + private: Approval(); }; diff --git a/chrome/browser/extensions/webstore_standalone_install_browsertest.cc b/chrome/browser/extensions/webstore_standalone_install_browsertest.cc index 39b0372..a4a3050 100644 --- a/chrome/browser/extensions/webstore_standalone_install_browsertest.cc +++ b/chrome/browser/extensions/webstore_standalone_install_browsertest.cc @@ -6,7 +6,6 @@ #include "base/stringprintf.h" #include "base/utf_string_conversions.h" #include "chrome/browser/extensions/extension_host.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/extensions/extension_install_ui.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/startup_helper.h" diff --git a/chrome/browser/extensions/webstore_standalone_installer.cc b/chrome/browser/extensions/webstore_standalone_installer.cc index 3f509ad..84ce98c 100644 --- a/chrome/browser/extensions/webstore_standalone_installer.cc +++ b/chrome/browser/extensions/webstore_standalone_installer.cc @@ -11,7 +11,6 @@ #include "base/values.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/crx_installer.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/browser/extensions/extension_install_ui.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" diff --git a/chrome/browser/ui/android/extensions/extension_install_dialog_android.cc b/chrome/browser/ui/android/extensions/extension_install_dialog_android.cc index 73f4edb..78b9d31 100644 --- a/chrome/browser/ui/android/extensions/extension_install_dialog_android.cc +++ b/chrome/browser/ui/android/extensions/extension_install_dialog_android.cc @@ -2,7 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/extensions/extension_install_dialog.h" +#include "base/bind.h" +#include "chrome/browser/extensions/extension_install_prompt.h" + +namespace { void ShowExtensionInstallDialogImpl( gfx::NativeWindow parent, @@ -12,3 +15,10 @@ void ShowExtensionInstallDialogImpl( NOTIMPLEMENTED(); } +} // namespace + +// static +ExtensionInstallPrompt::ShowDialogCallback +ExtensionInstallPrompt::GetDefaultShowDialogCallback() { + return base::Bind(&ShowExtensionInstallDialogImpl); +} diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm index 4af95eb..a5a6cdb 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm @@ -11,6 +11,30 @@ #include "chrome/browser/ui/tab_contents/tab_contents.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +namespace { + +void ShowExtensionInstallDialogImpl( + gfx::NativeWindow parent, + content::PageNavigator* navigator, + ExtensionInstallPrompt::Delegate* delegate, + const ExtensionInstallPrompt::Prompt& prompt) { + // TODO(sail) Update ShowExtensionInstallDialogImpl to take a web contents. + Browser* browser = browser::FindBrowserWithWindow(parent); + if (!browser) + return; + TabContents* tab = browser->tab_strip_model()->GetActiveTabContents(); + if (!tab) + return; + + // This object will delete itself when the dialog closes. + new ExtensionInstallDialogController(tab->web_contents(), + navigator, + delegate, + prompt); +} + +} // namespace + ExtensionInstallDialogController::ExtensionInstallDialogController( content::WebContents* webContents, content::PageNavigator* navigator, @@ -40,22 +64,8 @@ void ExtensionInstallDialogController::InstallUIAbort(bool user_initiated) { delete this; } -void ShowExtensionInstallDialogImpl( - gfx::NativeWindow parent, - content::PageNavigator* navigator, - ExtensionInstallPrompt::Delegate* delegate, - const ExtensionInstallPrompt::Prompt& prompt) { - // TODO(sail) Update ShowExtensionInstallDialogImpl to take a web contents. - Browser* browser = browser::FindBrowserWithWindow(parent); - if (!browser) - return; - TabContents* tab = browser->tab_strip_model()->GetActiveTabContents(); - if (!tab) - return; - - // This object will delete itself when the dialog closes. - new ExtensionInstallDialogController(tab->web_contents(), - navigator, - delegate, - prompt); +// static +ExtensionInstallPrompt::ShowDialogCallback +ExtensionInstallPrompt::GetDefaultShowDialogCallback() { + return base::Bind(&ShowExtensionInstallDialogImpl); } diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm index 9bd8c8e..ab553ac 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm @@ -12,7 +12,6 @@ #include "base/sys_string_conversions.h" #include "base/utf_string_conversions.h" #include "chrome/browser/extensions/bundle_installer.h" -#include "chrome/browser/extensions/extension_install_dialog.h" #include "chrome/common/extensions/extension.h" #include "content/public/browser/page_navigator.h" #include "grit/generated_resources.h" diff --git a/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc b/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc index f8db72c..3ccac71 100644 --- a/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc +++ b/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc @@ -8,7 +8,7 @@ #include "base/string_util.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_prompt.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/gtk/browser_window_gtk.h" #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h" @@ -383,6 +383,8 @@ GtkWidget* ExtensionInstallDialog::CreateWidgetForIssueAdvice( } // namespace browser +namespace { + void ShowExtensionInstallDialogImpl( gfx::NativeWindow parent, content::PageNavigator* navigator, @@ -390,3 +392,11 @@ void ShowExtensionInstallDialogImpl( const ExtensionInstallPrompt::Prompt& prompt) { new browser::ExtensionInstallDialog(parent, navigator, delegate, prompt); } + +} // namespace + +// static +ExtensionInstallPrompt::ShowDialogCallback +ExtensionInstallPrompt::GetDefaultShowDialogCallback() { + return base::Bind(&ShowExtensionInstallDialogImpl); +} 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 d6e7252..f988522 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc @@ -10,7 +10,7 @@ #include "base/string_util.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_prompt.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/extension.h" #include "content/public/browser/page_navigator.h" @@ -172,6 +172,16 @@ class IssueAdviceView : public views::View, DISALLOW_COPY_AND_ASSIGN(IssueAdviceView); }; +void ShowExtensionInstallDialogImpl( + gfx::NativeWindow parent, + content::PageNavigator* navigator, + ExtensionInstallPrompt::Delegate* delegate, + const ExtensionInstallPrompt::Prompt& prompt) { + views::Widget::CreateWindowWithParent( + new ExtensionInstallDialogView(navigator, delegate, prompt), + parent)->Show(); +} + } // namespace ExtensionInstallDialogView::ExtensionInstallDialogView( @@ -476,14 +486,10 @@ void ExtensionInstallDialogView::LinkClicked(views::Link* source, GetWidget()->Close(); } -void ShowExtensionInstallDialogImpl( - gfx::NativeWindow parent, - content::PageNavigator* navigator, - ExtensionInstallPrompt::Delegate* delegate, - const ExtensionInstallPrompt::Prompt& prompt) { - views::Widget::CreateWindowWithParent( - new ExtensionInstallDialogView(navigator, delegate, prompt), - parent)->Show(); +// static +ExtensionInstallPrompt::ShowDialogCallback +ExtensionInstallPrompt::GetDefaultShowDialogCallback() { + return base::Bind(&ShowExtensionInstallDialogImpl); } // IssueAdviceView::DetailsView ------------------------------------------------ diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi index 0104a8a..a67282c 100644 --- a/chrome/chrome_browser_extensions.gypi +++ b/chrome/chrome_browser_extensions.gypi @@ -428,8 +428,6 @@ 'browser/extensions/extension_input_method_api.h', 'browser/extensions/extension_input_module_constants.cc', 'browser/extensions/extension_input_module_constants.h', - 'browser/extensions/extension_install_dialog.cc', - 'browser/extensions/extension_install_dialog.h', 'browser/extensions/extension_install_prompt.cc', 'browser/extensions/extension_install_prompt.h', 'browser/extensions/extension_install_ui.cc', |