summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/extension_install_prompt.cc57
-rw-r--r--chrome/browser/extensions/extension_install_prompt.h20
-rw-r--r--chrome/browser/extensions/external_install_ui.cc25
-rw-r--r--chrome/browser/extensions/webstore_inline_installer.cc6
-rw-r--r--chrome/browser/extensions/webstore_inline_installer.h4
-rw-r--r--chrome/browser/extensions/webstore_inline_installer_browsertest.cc2
-rw-r--r--chrome/browser/extensions/webstore_install_with_prompt.cc8
-rw-r--r--chrome/browser/extensions/webstore_install_with_prompt.h2
-rw-r--r--chrome/browser/extensions/webstore_standalone_installer.cc2
-rw-r--r--chrome/browser/extensions/webstore_standalone_installer.h6
-rw-r--r--chrome/browser/extensions/webstore_startup_installer.cc9
-rw-r--r--chrome/browser/extensions/webstore_startup_installer.h4
12 files changed, 78 insertions, 67 deletions
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index f0ba3c7..87ecb02 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -493,8 +493,8 @@ ExtensionInstallPrompt::ExtensionInstallPrompt(content::WebContents* contents)
bundle_(NULL),
install_ui_(ExtensionInstallUI::Create(ProfileForWebContents(contents))),
show_params_(contents),
- delegate_(NULL),
- prompt_(UNSET_PROMPT_TYPE) {}
+ delegate_(NULL) {
+}
ExtensionInstallPrompt::ExtensionInstallPrompt(
Profile* profile,
@@ -505,8 +505,8 @@ ExtensionInstallPrompt::ExtensionInstallPrompt(
bundle_(NULL),
install_ui_(ExtensionInstallUI::Create(profile)),
show_params_(native_window, navigator),
- delegate_(NULL),
- prompt_(UNSET_PROMPT_TYPE) {}
+ delegate_(NULL) {
+}
ExtensionInstallPrompt::~ExtensionInstallPrompt() {
}
@@ -518,7 +518,7 @@ void ExtensionInstallPrompt::ConfirmBundleInstall(
bundle_ = bundle;
permissions_ = permissions;
delegate_ = bundle;
- prompt_.set_type(BUNDLE_INSTALL_PROMPT);
+ prompt_ = new Prompt(BUNDLE_INSTALL_PROMPT);
ShowConfirmation();
}
@@ -527,7 +527,7 @@ void ExtensionInstallPrompt::ConfirmStandaloneInstall(
Delegate* delegate,
const Extension* extension,
SkBitmap* icon,
- const ExtensionInstallPrompt::Prompt& prompt) {
+ scoped_refptr<Prompt> prompt) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
permissions_ = extension->permissions_data()->active_permissions();
@@ -558,7 +558,7 @@ void ExtensionInstallPrompt::ConfirmInstall(
extension_ = extension;
permissions_ = extension->permissions_data()->active_permissions();
delegate_ = delegate;
- prompt_.set_type(INSTALL_PROMPT);
+ prompt_ = new Prompt(INSTALL_PROMPT);
show_dialog_callback_ = show_dialog_callback;
// We special-case themes to not show any confirm UI. Instead they are
@@ -591,12 +591,16 @@ void ExtensionInstallPrompt::ConfirmReEnable(Delegate* delegate,
extension->id(), extensions::Extension::DISABLE_REMOTE_INSTALL);
bool is_ephemeral =
extensions::util::IsEphemeralApp(extension->id(), install_ui_->profile());
+
+ PromptType type = UNSET_PROMPT_TYPE;
if (is_ephemeral)
- prompt_.set_type(LAUNCH_PROMPT);
+ type = LAUNCH_PROMPT;
else if (is_remote_install)
- prompt_.set_type(REMOTE_INSTALL_PROMPT);
+ type = REMOTE_INSTALL_PROMPT;
else
- prompt_.set_type(RE_ENABLE_PROMPT);
+ type = RE_ENABLE_PROMPT;
+ prompt_ = new Prompt(type);
+
LoadImageIfNeeded();
}
@@ -604,7 +608,7 @@ void ExtensionInstallPrompt::ConfirmExternalInstall(
Delegate* delegate,
const Extension* extension,
const ShowDialogCallback& show_dialog_callback,
- const Prompt& prompt) {
+ scoped_refptr<Prompt> prompt) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
permissions_ = extension->permissions_data()->active_permissions();
@@ -623,7 +627,7 @@ void ExtensionInstallPrompt::ConfirmPermissions(
extension_ = extension;
permissions_ = permissions;
delegate_ = delegate;
- prompt_.set_type(PERMISSIONS_PROMPT);
+ prompt_ = new Prompt(PERMISSIONS_PROMPT);
LoadImageIfNeeded();
}
@@ -635,9 +639,9 @@ void ExtensionInstallPrompt::ReviewPermissions(
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
permissions_ = extension->permissions_data()->active_permissions();
- prompt_.set_retained_files(retained_file_paths);
+ prompt_ = new Prompt(POST_INSTALL_PERMISSIONS_PROMPT);
+ prompt_->set_retained_files(retained_file_paths);
delegate_ = delegate;
- prompt_.set_type(POST_INSTALL_PERMISSIONS_PROMPT);
LoadImageIfNeeded();
}
@@ -703,29 +707,30 @@ void ExtensionInstallPrompt::LoadImageIfNeeded() {
}
void ExtensionInstallPrompt::ShowConfirmation() {
- if (prompt_.type() == INSTALL_PROMPT)
- prompt_.set_experiment(ExtensionInstallPromptExperiment::Find());
+ if (prompt_->type() == INSTALL_PROMPT)
+ prompt_->set_experiment(ExtensionInstallPromptExperiment::Find());
else
- prompt_.set_experiment(ExtensionInstallPromptExperiment::ControlGroup());
+ prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup());
if (permissions_.get()) {
if (extension_) {
const extensions::PermissionsData* permissions_data =
extension_->permissions_data();
- prompt_.SetPermissions(permissions_data->GetPermissionMessageStrings());
- prompt_.SetPermissionsDetails(
+ prompt_->SetPermissions(permissions_data->GetPermissionMessageStrings());
+ prompt_->SetPermissionsDetails(
permissions_data->GetPermissionMessageDetailsStrings());
} else {
const extensions::PermissionMessageProvider* message_provider =
extensions::PermissionMessageProvider::Get();
- prompt_.SetPermissions(message_provider->GetWarningMessages(
- permissions_, Manifest::TYPE_UNKNOWN));
- prompt_.SetPermissionsDetails(message_provider->GetWarningMessagesDetails(
+ prompt_->SetPermissions(message_provider->GetWarningMessages(
permissions_, Manifest::TYPE_UNKNOWN));
+ prompt_->SetPermissionsDetails(
+ message_provider->GetWarningMessagesDetails(permissions_,
+ Manifest::TYPE_UNKNOWN));
}
}
- switch (prompt_.type()) {
+ switch (prompt_->type()) {
case PERMISSIONS_PROMPT:
case RE_ENABLE_PROMPT:
case INLINE_INSTALL_PROMPT:
@@ -734,12 +739,12 @@ void ExtensionInstallPrompt::ShowConfirmation() {
case LAUNCH_PROMPT:
case POST_INSTALL_PERMISSIONS_PROMPT:
case REMOTE_INSTALL_PROMPT: {
- prompt_.set_extension(extension_);
- prompt_.set_icon(gfx::Image::CreateFrom1xBitmap(icon_));
+ prompt_->set_extension(extension_);
+ prompt_->set_icon(gfx::Image::CreateFrom1xBitmap(icon_));
break;
}
case BUNDLE_INSTALL_PROMPT: {
- prompt_.set_bundle(bundle_);
+ prompt_->set_bundle(bundle_);
break;
}
default:
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h
index 455701b..57ed542 100644
--- a/chrome/browser/extensions/extension_install_prompt.h
+++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -11,6 +11,7 @@
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/files/file_path.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.h"
@@ -77,10 +78,11 @@ class ExtensionInstallPrompt
// prompt. Gets populated with raw data and exposes getters for formatted
// strings so that the GTK/views/Cocoa install dialogs don't have to repeat
// that logic.
- class Prompt {
+ // Ref-counted because we pass around the prompt independent of the full
+ // ExtensionInstallPrompt.
+ class Prompt : public base::RefCountedThreadSafe<Prompt> {
public:
explicit Prompt(PromptType type);
- ~Prompt();
// Sets the permission list for this prompt.
void SetPermissions(const std::vector<base::string16>& permissions);
@@ -161,6 +163,10 @@ class ExtensionInstallPrompt
}
private:
+ friend class base::RefCountedThreadSafe<Prompt>;
+
+ virtual ~Prompt();
+
bool ShouldDisplayRevokeFilesButton() const;
PromptType type_;
@@ -198,6 +204,8 @@ class ExtensionInstallPrompt
std::vector<base::FilePath> retained_files_;
scoped_refptr<ExtensionInstallPromptExperiment> experiment_;
+
+ DISALLOW_COPY_AND_ASSIGN(Prompt);
};
static const int kMinExtensionRating = 0;
@@ -234,7 +242,7 @@ class ExtensionInstallPrompt
typedef base::Callback<void(const ExtensionInstallPrompt::ShowParams&,
ExtensionInstallPrompt::Delegate*,
- const ExtensionInstallPrompt::Prompt&)>
+ scoped_refptr<ExtensionInstallPrompt::Prompt>)>
ShowDialogCallback;
// Callback to show the default extension install dialog.
@@ -282,7 +290,7 @@ class ExtensionInstallPrompt
virtual void ConfirmStandaloneInstall(Delegate* delegate,
const extensions::Extension* extension,
SkBitmap* icon,
- const Prompt& prompt);
+ scoped_refptr<Prompt> prompt);
// This is called by the installer to verify whether the installation from
// the webstore should proceed. |show_dialog_callback| is optional and can be
@@ -319,7 +327,7 @@ class ExtensionInstallPrompt
Delegate* delegate,
const extensions::Extension* extension,
const ShowDialogCallback& show_dialog_callback,
- const Prompt& prompt);
+ scoped_refptr<Prompt> prompt);
// This is called by the extension permissions API to verify whether an
// extension may be granted additional permissions.
@@ -395,7 +403,7 @@ class ExtensionInstallPrompt
Delegate* delegate_;
// A pre-filled prompt.
- Prompt prompt_;
+ scoped_refptr<Prompt> prompt_;
// Used to show the confirm dialog.
ShowDialogCallback show_dialog_callback_;
diff --git a/chrome/browser/extensions/external_install_ui.cc b/chrome/browser/extensions/external_install_ui.cc
index 901b26c..94cd0e5 100644
--- a/chrome/browser/extensions/external_install_ui.cc
+++ b/chrome/browser/extensions/external_install_ui.cc
@@ -101,7 +101,7 @@ class ExternalInstallDialogDelegate
// The UI for showing the install dialog when enabling.
scoped_ptr<ExtensionInstallPrompt> install_ui_;
- scoped_ptr<ExtensionInstallPrompt::Prompt> prompt_;
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_;
Browser* browser_;
base::WeakPtr<ExtensionService> service_weak_;
@@ -167,10 +167,11 @@ class ExternalInstallMenuAlert : public GlobalErrorWithStandardBubble,
// Shows a menu item and a global error bubble, replacing the install dialog.
class ExternalInstallGlobalError : public ExternalInstallMenuAlert {
public:
- ExternalInstallGlobalError(ExtensionService* service,
- const Extension* extension,
- ExternalInstallDialogDelegate* delegate,
- const ExtensionInstallPrompt::Prompt& prompt);
+ ExternalInstallGlobalError(
+ ExtensionService* service,
+ const Extension* extension,
+ ExternalInstallDialogDelegate* delegate,
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt);
virtual ~ExternalInstallGlobalError();
virtual void ExecuteMenuItem(Browser* browser) OVERRIDE;
@@ -189,7 +190,7 @@ class ExternalInstallGlobalError : public ExternalInstallMenuAlert {
// having been clicked (perhaps because the user enabled the extension
// manually).
ExternalInstallDialogDelegate* delegate_;
- const ExtensionInstallPrompt::Prompt* prompt_;
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_;
private:
DISALLOW_COPY_AND_ASSIGN(ExternalInstallGlobalError);
@@ -200,7 +201,7 @@ static void CreateExternalInstallGlobalError(
const std::string& extension_id,
const ExtensionInstallPrompt::ShowParams& show_params,
ExtensionInstallPrompt::Delegate* prompt_delegate,
- const ExtensionInstallPrompt::Prompt& prompt) {
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) {
if (!service.get())
return;
const Extension* extension = service->GetInstalledExtension(extension_id);
@@ -242,8 +243,8 @@ ExternalInstallDialogDelegate::ExternalInstallDialogDelegate(
use_global_error_(use_global_error) {
AddRef(); // Balanced in Proceed or Abort.
- prompt_.reset(new ExtensionInstallPrompt::Prompt(
- ExtensionInstallPrompt::EXTERNAL_INSTALL_PROMPT));
+ prompt_ = new ExtensionInstallPrompt::Prompt(
+ ExtensionInstallPrompt::EXTERNAL_INSTALL_PROMPT);
// If we don't have a browser, we can't go to the webstore to fetch data.
// This should only happen in tests.
@@ -324,7 +325,7 @@ void ExternalInstallDialogDelegate::ShowInstallUI() {
extension_id_) :
ExtensionInstallPrompt::GetDefaultShowDialogCallback();
- install_ui_->ConfirmExternalInstall(this, extension, callback, *prompt_);
+ install_ui_->ConfirmExternalInstall(this, extension, callback, prompt_);
}
ExternalInstallDialogDelegate::~ExternalInstallDialogDelegate() {
@@ -461,10 +462,10 @@ ExternalInstallGlobalError::ExternalInstallGlobalError(
ExtensionService* service,
const Extension* extension,
ExternalInstallDialogDelegate* delegate,
- const ExtensionInstallPrompt::Prompt& prompt)
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt)
: ExternalInstallMenuAlert(service, extension),
delegate_(delegate),
- prompt_(&prompt) {
+ prompt_(prompt) {
}
ExternalInstallGlobalError::~ExternalInstallGlobalError() {
diff --git a/chrome/browser/extensions/webstore_inline_installer.cc b/chrome/browser/extensions/webstore_inline_installer.cc
index f857f94..fcdce7c 100644
--- a/chrome/browser/extensions/webstore_inline_installer.cc
+++ b/chrome/browser/extensions/webstore_inline_installer.cc
@@ -47,9 +47,9 @@ const GURL& WebstoreInlineInstaller::GetRequestorURL() const {
return requestor_url_;
}
-scoped_ptr<ExtensionInstallPrompt::Prompt>
+scoped_refptr<ExtensionInstallPrompt::Prompt>
WebstoreInlineInstaller::CreateInstallPrompt() const {
- scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt(
new ExtensionInstallPrompt::Prompt(
ExtensionInstallPrompt::INLINE_INSTALL_PROMPT));
@@ -60,7 +60,7 @@ WebstoreInlineInstaller::CreateInstallPrompt() const {
show_user_count(),
average_rating(),
rating_count());
- return prompt.Pass();
+ return prompt;
}
bool WebstoreInlineInstaller::ShouldShowPostInstallUI() const {
diff --git a/chrome/browser/extensions/webstore_inline_installer.h b/chrome/browser/extensions/webstore_inline_installer.h
index 33b278d..7e7e792 100644
--- a/chrome/browser/extensions/webstore_inline_installer.h
+++ b/chrome/browser/extensions/webstore_inline_installer.h
@@ -47,8 +47,8 @@ class WebstoreInlineInstaller
virtual bool ShouldShowPostInstallUI() const OVERRIDE;
virtual bool ShouldShowAppInstalledBubble() const OVERRIDE;
virtual content::WebContents* GetWebContents() const OVERRIDE;
- virtual scoped_ptr<ExtensionInstallPrompt::Prompt>
- CreateInstallPrompt() const OVERRIDE;
+ virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
+ const OVERRIDE;
virtual bool CheckInlineInstallPermitted(
const base::DictionaryValue& webstore_data,
std::string* error) const OVERRIDE;
diff --git a/chrome/browser/extensions/webstore_inline_installer_browsertest.cc b/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
index 921cb61..7146bdb 100644
--- a/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
+++ b/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
@@ -57,7 +57,7 @@ class ProgrammableInstallPrompt : public ExtensionInstallPrompt {
Delegate* delegate,
const Extension* extension,
SkBitmap* icon,
- const ExtensionInstallPrompt::Prompt& prompt) OVERRIDE {
+ scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) OVERRIDE {
delegate_ = delegate;
}
diff --git a/chrome/browser/extensions/webstore_install_with_prompt.cc b/chrome/browser/extensions/webstore_install_with_prompt.cc
index 4a43388..19ab614 100644
--- a/chrome/browser/extensions/webstore_install_with_prompt.cc
+++ b/chrome/browser/extensions/webstore_install_with_prompt.cc
@@ -50,12 +50,10 @@ const GURL& WebstoreInstallWithPrompt::GetRequestorURL() const {
return dummy_requestor_url_;
}
-scoped_ptr<ExtensionInstallPrompt::Prompt>
+scoped_refptr<ExtensionInstallPrompt::Prompt>
WebstoreInstallWithPrompt::CreateInstallPrompt() const {
- scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
- new ExtensionInstallPrompt::Prompt(
- ExtensionInstallPrompt::INSTALL_PROMPT));
- return prompt.Pass();
+ return new ExtensionInstallPrompt::Prompt(
+ ExtensionInstallPrompt::INSTALL_PROMPT);
}
scoped_ptr<ExtensionInstallPrompt>
diff --git a/chrome/browser/extensions/webstore_install_with_prompt.h b/chrome/browser/extensions/webstore_install_with_prompt.h
index b170a12..5afc314 100644
--- a/chrome/browser/extensions/webstore_install_with_prompt.h
+++ b/chrome/browser/extensions/webstore_install_with_prompt.h
@@ -54,7 +54,7 @@ class WebstoreInstallWithPrompt : public WebstoreStandaloneInstaller,
virtual bool ShouldShowPostInstallUI() const OVERRIDE;
virtual bool ShouldShowAppInstalledBubble() const OVERRIDE;
virtual content::WebContents* GetWebContents() const OVERRIDE;
- virtual scoped_ptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
+ virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
const OVERRIDE;
virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE;
virtual bool CheckInlineInstallPermitted(
diff --git a/chrome/browser/extensions/webstore_standalone_installer.cc b/chrome/browser/extensions/webstore_standalone_installer.cc
index ae40c9c..7933097 100644
--- a/chrome/browser/extensions/webstore_standalone_installer.cc
+++ b/chrome/browser/extensions/webstore_standalone_installer.cc
@@ -325,7 +325,7 @@ void WebstoreStandaloneInstaller::ShowInstallUI() {
install_ui_ = CreateInstallUI();
install_ui_->ConfirmStandaloneInstall(
- this, localized_extension_for_display_.get(), &icon_, *install_prompt_);
+ this, localized_extension_for_display_.get(), &icon_, install_prompt_);
}
void WebstoreStandaloneInstaller::OnWebStoreDataFetcherDone() {
diff --git a/chrome/browser/extensions/webstore_standalone_installer.h b/chrome/browser/extensions/webstore_standalone_installer.h
index 1013fa7..ecbfa98 100644
--- a/chrome/browser/extensions/webstore_standalone_installer.h
+++ b/chrome/browser/extensions/webstore_standalone_installer.h
@@ -91,8 +91,8 @@ class WebstoreStandaloneInstaller
// Should return an installation prompt with desired properties or NULL if
// no prompt should be shown.
- virtual scoped_ptr<ExtensionInstallPrompt::Prompt>
- CreateInstallPrompt() const = 0;
+ virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
+ const = 0;
// Perform all necessary checks to make sure inline install is permitted,
// e.g. in the extension's properties in the store. The implementation may
@@ -196,7 +196,7 @@ class WebstoreStandaloneInstaller
// Installation dialog and its underlying prompt.
scoped_ptr<ExtensionInstallPrompt> install_ui_;
- scoped_ptr<ExtensionInstallPrompt::Prompt> install_prompt_;
+ scoped_refptr<ExtensionInstallPrompt::Prompt> install_prompt_;
// For fetching webstore JSON data.
scoped_ptr<WebstoreDataFetcher> webstore_data_fetcher_;
diff --git a/chrome/browser/extensions/webstore_startup_installer.cc b/chrome/browser/extensions/webstore_startup_installer.cc
index 283dabc..28ba551 100644
--- a/chrome/browser/extensions/webstore_startup_installer.cc
+++ b/chrome/browser/extensions/webstore_startup_installer.cc
@@ -18,14 +18,13 @@ WebstoreStartupInstaller::WebstoreStartupInstaller(
WebstoreStartupInstaller::~WebstoreStartupInstaller() {}
-scoped_ptr<ExtensionInstallPrompt::Prompt>
+scoped_refptr<ExtensionInstallPrompt::Prompt>
WebstoreStartupInstaller::CreateInstallPrompt() const {
- scoped_ptr<ExtensionInstallPrompt::Prompt> prompt;
if (show_prompt_) {
- prompt.reset(new ExtensionInstallPrompt::Prompt(
- ExtensionInstallPrompt::INSTALL_PROMPT));
+ return new ExtensionInstallPrompt::Prompt(
+ ExtensionInstallPrompt::INSTALL_PROMPT);
}
- return prompt.Pass();
+ return NULL;
}
} // namespace extensions
diff --git a/chrome/browser/extensions/webstore_startup_installer.h b/chrome/browser/extensions/webstore_startup_installer.h
index de6cb6e..b90eba6 100644
--- a/chrome/browser/extensions/webstore_startup_installer.h
+++ b/chrome/browser/extensions/webstore_startup_installer.h
@@ -30,8 +30,8 @@ class WebstoreStartupInstaller : public WebstoreInstallWithPrompt {
virtual ~WebstoreStartupInstaller();
// Implementations of WebstoreStandaloneInstaller Template Method's hooks.
- virtual scoped_ptr<ExtensionInstallPrompt::Prompt>
- CreateInstallPrompt() const OVERRIDE;
+ virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt()
+ const OVERRIDE;
private:
bool show_prompt_;