diff options
Diffstat (limited to 'chrome/browser/extensions')
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_; |