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_dialog.cc4
-rw-r--r--chrome/browser/extensions/extension_install_ui.cc127
-rw-r--r--chrome/browser/extensions/extension_install_ui.h54
-rw-r--r--chrome/browser/extensions/webstore_inline_installer.cc6
4 files changed, 158 insertions, 33 deletions
diff --git a/chrome/browser/extensions/extension_install_dialog.cc b/chrome/browser/extensions/extension_install_dialog.cc
index 336c2c7..813e63b 100644
--- a/chrome/browser/extensions/extension_install_dialog.cc
+++ b/chrome/browser/extensions/extension_install_dialog.cc
@@ -67,8 +67,8 @@ void ShowExtensionInstallDialogForManifest(
}
ExtensionInstallUI::Prompt filled_out_prompt = prompt;
- filled_out_prompt.permissions =
- (*dummy_extension)->GetPermissionMessageStrings();
+ filled_out_prompt.SetPermissions(
+ (*dummy_extension)->GetPermissionMessageStrings());
ShowExtensionInstallDialog(profile,
delegate,
diff --git a/chrome/browser/extensions/extension_install_ui.cc b/chrome/browser/extensions/extension_install_ui.cc
index 77fc4a4..6fd551f 100644
--- a/chrome/browser/extensions/extension_install_ui.cc
+++ b/chrome/browser/extensions/extension_install_ui.cc
@@ -39,36 +39,31 @@
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
-// static
-const int ExtensionInstallUI::kTitleIds[NUM_PROMPT_TYPES] = {
- IDS_EXTENSION_INSTALL_PROMPT_TITLE,
+static const int kTitleIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
IDS_EXTENSION_INSTALL_PROMPT_TITLE,
+ IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE,
IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE,
IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE
};
-// static
-const int ExtensionInstallUI::kHeadingIds[NUM_PROMPT_TYPES] = {
+static const int kHeadingIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
IDS_EXTENSION_INSTALL_PROMPT_HEADING,
IDS_EXTENSION_INSTALL_PROMPT_HEADING,
IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING,
IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING
};
-// static
-const int ExtensionInstallUI::kButtonIds[NUM_PROMPT_TYPES] = {
- IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
+static const int kAcceptButtonIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
+ IDS_EXTENSION_PROMPT_INLINE_INSTALL_BUTTON,
IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON,
IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON
};
-// static
-const int ExtensionInstallUI::kAbortButtonIds[NUM_PROMPT_TYPES] = {
+static const int kAbortButtonIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
0,
0,
0,
IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON
};
-// static
-const int ExtensionInstallUI::kWarningIds[NUM_PROMPT_TYPES] = {
+static const int kPermissionsHeaderIds[ExtensionInstallUI::NUM_PROMPT_TYPES] = {
IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO,
IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO,
IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO,
@@ -82,12 +77,116 @@ const int kIconSize = 69;
} // namespace
-ExtensionInstallUI::Prompt::Prompt(PromptType type) : type(type) {
+ExtensionInstallUI::Prompt::Prompt(PromptType type) : type_(type) {
}
ExtensionInstallUI::Prompt::~Prompt() {
}
+void ExtensionInstallUI::Prompt::SetPermissions(
+ std::vector<string16> permissions) {
+ permissions_ = permissions;
+}
+
+void ExtensionInstallUI::Prompt::SetInlineInstallWebstoreData(
+ std::string localized_user_count,
+ double average_rating,
+ int rating_count) {
+ CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
+ localized_user_count_ = localized_user_count;
+ average_rating_ = average_rating;
+ rating_count_ = rating_count;
+}
+
+string16 ExtensionInstallUI::Prompt::GetDialogTitle() const {
+ if (type_ == INLINE_INSTALL_PROMPT) {
+ return l10n_util::GetStringFUTF16(
+ kTitleIds[type_], l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
+ } else {
+ return l10n_util::GetStringUTF16(kTitleIds[type_]);
+ }
+}
+
+string16 ExtensionInstallUI::Prompt::GetHeading(std::string extension_name)
+ const {
+ if (type_ == INLINE_INSTALL_PROMPT) {
+ return UTF8ToUTF16(extension_name);
+ } else {
+ return l10n_util::GetStringFUTF16(
+ kHeadingIds[type_], UTF8ToUTF16(extension_name));
+ }
+}
+
+string16 ExtensionInstallUI::Prompt::GetAcceptButtonLabel() const {
+ return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]);
+}
+
+bool ExtensionInstallUI::Prompt::HasAbortButtonLabel() const {
+ return kAbortButtonIds[type_] > 0;
+}
+
+string16 ExtensionInstallUI::Prompt::GetAbortButtonLabel() const {
+ CHECK(HasAbortButtonLabel());
+ return l10n_util::GetStringUTF16(kAbortButtonIds[type_]);
+}
+
+string16 ExtensionInstallUI::Prompt::GetPermissionsHeader() const {
+ return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]);
+}
+
+void ExtensionInstallUI::Prompt::AppendRatingStars(
+ StarAppender appender, void* data) const {
+ CHECK(appender);
+ CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
+ int rating_integer = floor(average_rating_);
+ double rating_fractional = average_rating_ - rating_integer;
+
+ if (rating_fractional > 0.66) {
+ rating_integer++;
+ }
+
+ if (rating_fractional < 0.33 || rating_fractional > 0.66) {
+ rating_fractional = 0;
+ }
+
+ int i;
+ for (i = 0; i < rating_integer; i++) {
+ appender(IDR_EXTENSIONS_RATING_STAR_ON, data);
+ }
+ if (rating_fractional) {
+ appender(IDR_EXTENSIONS_RATING_STAR_HALF_LEFT, data);
+ i++;
+ }
+ for (; i < kMaxExtensionRating; i++) {
+ appender(IDR_EXTENSIONS_RATING_STAR_OFF, data);
+ }
+}
+
+string16 ExtensionInstallUI::Prompt::GetRatingCount() const {
+ CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
+ return l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_RATING_COUNT,
+ UTF8ToUTF16(base::IntToString(rating_count_)));
+}
+
+string16 ExtensionInstallUI::Prompt::GetUserCount() const {
+ CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
+ return l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_USER_COUNT,
+ UTF8ToUTF16(localized_user_count_));
+}
+
+size_t ExtensionInstallUI::Prompt::GetPermissionCount() const {
+ CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
+ return permissions_.size();
+}
+
+string16 ExtensionInstallUI::Prompt::GetPermission(int index) const {
+ CHECK_EQ(INLINE_INSTALL_PROMPT, type_);
+ return l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_PERMISSION_LINE, permissions_[index]);
+}
+
ExtensionInstallUI::ExtensionInstallUI(Profile* profile)
: profile_(profile),
ui_loop_(MessageLoop::current()),
@@ -227,7 +326,7 @@ void ExtensionInstallUI::OnImageLoaded(
NotificationService::NoDetails());
Prompt prompt(prompt_type_);
- prompt.permissions = permissions_->GetWarningMessages();
+ prompt.SetPermissions(permissions_->GetWarningMessages());
ShowExtensionInstallDialog(
profile_, delegate_, extension_, &icon_, prompt);
break;
diff --git a/chrome/browser/extensions/extension_install_ui.h b/chrome/browser/extensions/extension_install_ui.h
index 4cc10c2..18f69d3 100644
--- a/chrome/browser/extensions/extension_install_ui.h
+++ b/chrome/browser/extensions/extension_install_ui.h
@@ -37,35 +37,61 @@ class ExtensionInstallUI : public ImageLoadingTracker::Observer {
};
// Extra information needed to display an installation or uninstallation
- // prompt.
- struct Prompt {
+ // 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 {
+ public:
explicit Prompt(PromptType type);
~Prompt();
- PromptType type;
+ void SetPermissions(std::vector<string16> permissions);
+ void SetInlineInstallWebstoreData(std::string localized_user_count,
+ double average_rating,
+ int rating_count);
+
+ PromptType type() const { return type_; }
+
+ // Getters for UI element labels.
+ string16 GetDialogTitle() const;
+ string16 GetHeading(std::string extension_name) const;
+ string16 GetAcceptButtonLabel() const;
+ bool HasAbortButtonLabel() const;
+ string16 GetAbortButtonLabel() const;
+ string16 GetPermissionsHeader() const;
+
+ // Getters for webstore metadata. Only populated when the type is
+ // INLINE_INSTALL_PROMPT.
+
+ // The star display logic replicates the one used by the webstore (from
+ // components.ratingutils.setFractionalYellowStars). Callers pass in an
+ // "appender", which will be called back with the resource ID that they
+ // need to load/append.
+ typedef void*(*StarAppender)(int, void*);
+ void AppendRatingStars(StarAppender appender, void* data) const;
+ string16 GetRatingCount() const;
+ string16 GetUserCount() const;
+ size_t GetPermissionCount() const;
+ string16 GetPermission(int index) const;
+
+ private:
+ PromptType type_;
// Permissions that are being requested (may not be all of an extension's
// permissions if only additional ones are being requested)
- std::vector<string16> permissions;
+ std::vector<string16> permissions_;
// These fields are populated only when the prompt type is
// INLINE_INSTALL_PROMPT
// Already formatted to be locale-specific.
- std::string localized_user_count;
+ std::string localized_user_count_;
// Range is kMinExtensionRating to kMaxExtensionRating
- double average_rating;
- int rating_count;
+ double average_rating_;
+ int rating_count_;
};
static const int kMinExtensionRating = 0;
static const int kMaxExtensionRating = 5;
- // A mapping from PromptType to message ID for various dialog content.
- static const int kTitleIds[NUM_PROMPT_TYPES];
- static const int kHeadingIds[NUM_PROMPT_TYPES];
- static const int kButtonIds[NUM_PROMPT_TYPES];
- static const int kWarningIds[NUM_PROMPT_TYPES];
- static const int kAbortButtonIds[NUM_PROMPT_TYPES];
-
class Delegate {
public:
// We call this method to signal that the installation should continue.
diff --git a/chrome/browser/extensions/webstore_inline_installer.cc b/chrome/browser/extensions/webstore_inline_installer.cc
index ffa8158..ad08d85 100644
--- a/chrome/browser/extensions/webstore_inline_installer.cc
+++ b/chrome/browser/extensions/webstore_inline_installer.cc
@@ -252,9 +252,9 @@ void WebstoreInlineInstaller::OnWebstoreParseSuccess(
tab_contents_->browser_context());
ExtensionInstallUI::Prompt prompt(ExtensionInstallUI::INLINE_INSTALL_PROMPT);
- prompt.localized_user_count = localized_user_count_;
- prompt.average_rating = average_rating_;
- prompt.rating_count = rating_count_;
+ prompt.SetInlineInstallWebstoreData(localized_user_count_,
+ average_rating_,
+ rating_count_);
ShowExtensionInstallDialogForManifest(profile,
this,