Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3029)

Unified Diff: chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc

Issue 1915123005: Use normal bubble header components in ExtensionInstalledBubbleView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove a couple more includes Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
diff --git a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
index e30a98ac73298dc096206bc0fb6a30995024de3e..8ae8305526e276e094d61bef0219db008875b186 100644
--- a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
@@ -9,9 +9,7 @@
#include "base/memory/ptr_util.h"
#include "base/metrics/user_metrics_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
-#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/extensions/extension_installed_bubble.h"
#include "chrome/browser/ui/singleton_tabs.h"
@@ -32,20 +30,12 @@
#include "content/public/browser/user_metrics.h"
#include "extensions/common/extension.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/render_text.h"
-#include "ui/gfx/text_elider.h"
-#include "ui/resources/grit/ui_resources.h"
+#include "ui/gfx/image/image_skia_operations.h"
#include "ui/views/bubble/bubble_dialog_delegate.h"
-#include "ui/views/bubble/bubble_frame_view.h"
-#include "ui/views/controls/button/button.h"
-#include "ui/views/controls/button/image_button.h"
-#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/link.h"
#include "ui/views/controls/link_listener.h"
#include "ui/views/layout/box_layout.h"
-#include "ui/views/layout/grid_layout.h"
#include "ui/views/layout/layout_constants.h"
using extensions::Extension;
@@ -56,63 +46,14 @@ const int kIconSize = 43;
const int kRightColumnWidth = 285;
-views::Label* CreateLabel(const base::string16& text,
- const gfx::FontList& font) {
- views::Label* label = new views::Label(text, font);
+views::Label* CreateLabel(const base::string16& text) {
+ views::Label* label = new views::Label(text);
label->SetMultiLine(true);
label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ label->SizeToFit(kRightColumnWidth);
return label;
}
-class HeadingAndCloseButtonView : public views::View {
- public:
- HeadingAndCloseButtonView(views::Label* heading, views::LabelButton* close)
- : heading_(heading), close_(close) {
- AddChildView(heading_);
- AddChildView(close_);
- }
- ~HeadingAndCloseButtonView() override {}
-
- void Layout() override {
- gfx::Size close_size = close_->GetPreferredSize();
- gfx::Size view_size = size();
-
- // Close button is in the upper right and always gets its full desired size.
- close_->SetBounds(view_size.width() - close_size.width(),
- 0,
- close_size.width(),
- close_size.height());
- // The heading takes up the remaining room (modulo padding).
- heading_->SetBounds(
- 0,
- 0,
- view_size.width() - close_size.width() -
- views::kUnrelatedControlHorizontalSpacing,
- view_size.height());
- }
-
- gfx::Size GetPreferredSize() const override {
- gfx::Size heading_size = heading_->GetPreferredSize();
- gfx::Size close_size = close_->GetPreferredSize();
- return gfx::Size(kRightColumnWidth,
- std::max(heading_size.height(), close_size.height()));
- }
-
- int GetHeightForWidth(int width) const override {
- gfx::Size close_size = close_->GetPreferredSize();
- int heading_width = width - views::kUnrelatedControlHorizontalSpacing -
- close_size.width();
- return std::max(heading_->GetHeightForWidth(heading_width),
- close_size.height());
- }
-
- private:
- views::Label* heading_;
- views::LabelButton* close_;
-
- DISALLOW_COPY_AND_ASSIGN(HeadingAndCloseButtonView);
-};
-
// Provides feedback to the user upon successful installation of an
// extension. Depending on the type of extension, the Bubble will
// point to:
@@ -124,7 +65,6 @@ class HeadingAndCloseButtonView : public views::View {
// specify a default icon.
class ExtensionInstalledBubbleView : public BubbleSyncPromoDelegate,
public views::BubbleDialogDelegateView,
- public views::ButtonListener,
public views::LinkListener {
public:
explicit ExtensionInstalledBubbleView(ExtensionInstalledBubble* bubble);
@@ -139,9 +79,13 @@ class ExtensionInstalledBubbleView : public BubbleSyncPromoDelegate,
Browser* browser() { return controller_->browser(); }
// views::BubbleDialogDelegateView:
- void Init() override;
+ base::string16 GetWindowTitle() const override;
+ gfx::ImageSkia GetWindowIcon() override;
+ bool ShouldShowWindowIcon() const override;
+ bool ShouldShowCloseButton() const override;
View* CreateFootnoteView() override;
int GetDialogButtons() const override;
+ void Init() override;
// BubbleSyncPromoDelegate:
void OnSignInLinkClicked() override;
@@ -149,16 +93,13 @@ class ExtensionInstalledBubbleView : public BubbleSyncPromoDelegate,
// views::LinkListener:
void LinkClicked(views::Link* source, int event_flags) override;
- // views::ButtonListener:
- void ButtonPressed(views::Button* sender, const ui::Event& event) override;
+ // Gets the size of the icon, capped at kIconSize.
+ gfx::Size GetIconSize() const;
ExtensionInstalledBubble* controller_;
ExtensionInstalledBubble::BubbleType type_;
ExtensionInstalledBubble::AnchorPosition anchor_position_;
- // The button to close the bubble.
- views::LabelButton* close_;
-
// The shortcut to open the manage shortcuts page.
views::Link* manage_shortcut_;
@@ -173,7 +114,6 @@ ExtensionInstalledBubbleView::ExtensionInstalledBubbleView(
? views::BubbleBorder::TOP_LEFT
: views::BubbleBorder::TOP_RIGHT),
controller_(controller),
- close_(nullptr),
manage_shortcut_(nullptr) {}
ExtensionInstalledBubbleView::~ExtensionInstalledBubbleView() {}
@@ -240,6 +180,26 @@ void ExtensionInstalledBubbleView::CloseBubble() {
GetWidget()->Close();
}
+base::string16 ExtensionInstalledBubbleView::GetWindowTitle() const {
+ // Add the heading (for all options).
+ base::string16 extension_name =
+ base::UTF8ToUTF16(controller_->extension()->name());
+ base::i18n::AdjustStringForLocaleDirection(&extension_name);
+ return l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALLED_HEADING,
+ extension_name);
+}
+
+gfx::ImageSkia ExtensionInstalledBubbleView::GetWindowIcon() {
+ const SkBitmap& bitmap = controller_->icon();
+ return gfx::ImageSkiaOperations::CreateResizedImage(
+ gfx::ImageSkia::CreateFrom1xBitmap(bitmap),
+ skia::ImageOperations::RESIZE_BEST, GetIconSize());
+}
+
+bool ExtensionInstalledBubbleView::ShouldShowWindowIcon() const {
+ return true;
+}
+
views::View* ExtensionInstalledBubbleView::CreateFootnoteView() {
if (!(controller_->options() & ExtensionInstalledBubble::SIGN_IN_PROMO))
return nullptr;
@@ -253,44 +213,24 @@ int ExtensionInstalledBubbleView::GetDialogButtons() const {
return ui::DIALOG_BUTTON_NONE;
}
-void ExtensionInstalledBubbleView::OnSignInLinkClicked() {
- chrome::ShowBrowserSignin(
- browser(),
- signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE);
- CloseBubble();
-}
-
-void ExtensionInstalledBubbleView::ButtonPressed(views::Button* sender,
- const ui::Event& event) {
- DCHECK_EQ(sender, close_);
- CloseBubble();
-}
-
-void ExtensionInstalledBubbleView::LinkClicked(views::Link* source,
- int event_flags) {
- DCHECK_EQ(manage_shortcut_, source);
-
- std::string configure_url = chrome::kChromeUIExtensionsURL;
- configure_url += chrome::kExtensionConfigureCommandsSubPage;
- chrome::NavigateParams params(
- chrome::GetSingletonTabNavigateParams(browser(), GURL(configure_url)));
- chrome::Navigate(&params);
- CloseBubble();
+bool ExtensionInstalledBubbleView::ShouldShowCloseButton() const {
+ return true;
}
void ExtensionInstalledBubbleView::Init() {
+ gfx::Insets insets = margins();
UpdateAnchorView();
// The Extension Installed bubble takes on various forms, depending on the
// type of extension installed. In general, though, they are all similar:
//
// -------------------------
- // | | Heading [X] |
- // | Icon | Info |
- // | | Extra info |
+ // | Icon | Title (x) |
+ // | Info |
+ // | Extra info |
// -------------------------
//
- // Icon and Heading are always shown (as well as the close button).
+ // Icon and Title are always shown (as well as the close button).
// Info is shown for browser actions, page actions and Omnibox keyword
// extensions and might list keyboard shorcut for the former two types.
// Extra info is...
@@ -298,90 +238,63 @@ void ExtensionInstalledBubbleView::Init() {
// or a link to configure the keybinding shortcut (if one exists).
// Extra info can include a promo for signing into sync.
- // The number of rows in the content section of the bubble.
- int main_content_row_count = 1;
- if (controller_->options() & ExtensionInstalledBubble::HOW_TO_USE)
- ++main_content_row_count;
- if (controller_->options() & ExtensionInstalledBubble::SHOW_KEYBINDING)
- ++main_content_row_count;
- if (controller_->options() & ExtensionInstalledBubble::HOW_TO_MANAGE)
- ++main_content_row_count;
-
- views::GridLayout* layout = new views::GridLayout(this);
- SetLayoutManager(layout);
-
- const int cs_id = 0;
-
- views::ColumnSet* main_cs = layout->AddColumnSet(cs_id);
- // Icon column.
- main_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING, 0,
- views::GridLayout::USE_PREF, 0, 0);
- main_cs->AddPaddingColumn(0, views::kUnrelatedControlHorizontalSpacing);
- // Heading column.
- main_cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0,
- views::GridLayout::FIXED, kRightColumnWidth, 0);
-
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- const gfx::FontList& font_list = rb.GetFontList(ui::ResourceBundle::BaseFont);
-
- const SkBitmap& bitmap = controller_->icon();
- // Add the icon (for all options).
- // Scale down to 43x43, but allow smaller icons (don't scale up).
- gfx::Size size(bitmap.width(), bitmap.height());
- if (size.width() > kIconSize || size.height() > kIconSize)
- size = gfx::Size(kIconSize, kIconSize);
- views::ImageView* icon = new views::ImageView();
- icon->SetImageSize(size);
- icon->SetImage(gfx::ImageSkia::CreateFrom1xBitmap(bitmap));
+ // Move explanatory text closer to the title.
+ set_margins(gfx::Insets(0, insets.left(), insets.bottom(), insets.right()));
- layout->StartRow(0, cs_id);
- layout->AddView(icon, 1, main_content_row_count);
+ std::unique_ptr<views::BoxLayout> layout(
+ new views::BoxLayout(views::BoxLayout::kVertical, 0, 0,
+ views::kRelatedControlVerticalSpacing));
+ // Indent by the size of the icon.
+ layout->set_inside_border_insets(gfx::Insets(
+ 0, GetIconSize().width() + views::kUnrelatedControlHorizontalSpacing, 0,
+ 0));
+ SetLayoutManager(layout.release());
- // Add the heading (for all options).
- base::string16 extension_name =
- base::UTF8ToUTF16(controller_->extension()->name());
- base::i18n::AdjustStringForLocaleDirection(&extension_name);
- views::Label* heading =
- CreateLabel(l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALLED_HEADING,
- extension_name),
- rb.GetFontList(ui::ResourceBundle::MediumFont));
-
- close_ = views::BubbleFrameView::CreateCloseButton(this);
-
- HeadingAndCloseButtonView* heading_and_close =
- new HeadingAndCloseButtonView(heading, close_);
-
- layout->AddView(heading_and_close);
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
-
- auto add_content_view = [&layout, &cs_id](views::View* view) {
- layout->StartRow(0, cs_id);
- // Skip the icon column.
- layout->SkipColumns(1);
- layout->AddView(view);
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
- };
-
- if (controller_->options() & ExtensionInstalledBubble::HOW_TO_USE) {
- add_content_view(
- CreateLabel(controller_->GetHowToUseDescription(), font_list));
- }
+ if (controller_->options() & ExtensionInstalledBubble::HOW_TO_USE)
+ AddChildView(CreateLabel(controller_->GetHowToUseDescription()));
if (controller_->options() & ExtensionInstalledBubble::SHOW_KEYBINDING) {
manage_shortcut_ = new views::Link(
l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_MANAGE_SHORTCUTS));
manage_shortcut_->set_listener(this);
manage_shortcut_->SetUnderline(false);
- add_content_view(manage_shortcut_);
+ AddChildView(manage_shortcut_);
}
if (controller_->options() & ExtensionInstalledBubble::HOW_TO_MANAGE) {
- add_content_view(CreateLabel(
- l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_MANAGE_INFO),
- font_list));
+ AddChildView(CreateLabel(
+ l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_MANAGE_INFO)));
}
}
+void ExtensionInstalledBubbleView::OnSignInLinkClicked() {
+ chrome::ShowBrowserSignin(
+ browser(),
+ signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE);
+ CloseBubble();
+}
+
+void ExtensionInstalledBubbleView::LinkClicked(views::Link* source,
+ int event_flags) {
+ DCHECK_EQ(manage_shortcut_, source);
+
+ std::string configure_url = chrome::kChromeUIExtensionsURL;
+ configure_url += chrome::kExtensionConfigureCommandsSubPage;
+ chrome::NavigateParams params(
+ chrome::GetSingletonTabNavigateParams(browser(), GURL(configure_url)));
+ chrome::Navigate(&params);
+ CloseBubble();
+}
+
+gfx::Size ExtensionInstalledBubbleView::GetIconSize() const {
+ const SkBitmap& bitmap = controller_->icon();
+ // Scale down to 43x43, but allow smaller icons (don't scale up).
+ gfx::Size size(bitmap.width(), bitmap.height());
+ return size.width() > kIconSize || size.height() > kIconSize
+ ? gfx::Size(kIconSize, kIconSize)
+ : size;
+}
+
// NB: This bubble is using the temporarily-deprecated bubble manager interface
// BubbleUi. Do not copy this pattern.
class ExtensionInstalledBubbleUi : public BubbleUi,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698