summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-12 02:23:05 +0000
committersail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-12 02:23:05 +0000
commitaf6efb221d2ec568071c98f82807b63c3531986f (patch)
tree8adc3453c2de9117bd6e46e54c8c8998b4d612ed
parentf6661ccc5aa6aca1c2130936a8905e74ced35599 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/download/download_browsertest.cc8
-rw-r--r--chrome/browser/extensions/api/management/management_api_browsertest.cc1
-rw-r--r--chrome/browser/extensions/api/webstore_private/webstore_private_api.cc7
-rw-r--r--chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc1
-rw-r--r--chrome/browser/extensions/bundle_installer.cc1
-rw-r--r--chrome/browser/extensions/crx_installer.cc6
-rw-r--r--chrome/browser/extensions/crx_installer.h3
-rw-r--r--chrome/browser/extensions/crx_installer_browsertest.cc3
-rw-r--r--chrome/browser/extensions/extension_browsertest.cc8
-rw-r--r--chrome/browser/extensions/extension_install_dialog.cc72
-rw-r--r--chrome/browser/extensions/extension_install_dialog.h30
-rw-r--r--chrome/browser/extensions/extension_install_prompt.cc62
-rw-r--r--chrome/browser/extensions/extension_install_prompt.h31
-rw-r--r--chrome/browser/extensions/unpacked_installer.cc3
-rw-r--r--chrome/browser/extensions/webstore_installer.cc1
-rw-r--r--chrome/browser/extensions/webstore_installer.h4
-rw-r--r--chrome/browser/extensions/webstore_standalone_install_browsertest.cc1
-rw-r--r--chrome/browser/extensions/webstore_standalone_installer.cc1
-rw-r--r--chrome/browser/ui/android/extensions/extension_install_dialog_android.cc12
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm46
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm1
-rw-r--r--chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc12
-rw-r--r--chrome/browser/ui/views/extensions/extension_install_dialog_view.cc24
-rw-r--r--chrome/chrome_browser_extensions.gypi2
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',