Index: chrome/browser/ui/views/srt_prompt_dialog.cc |
diff --git a/chrome/browser/ui/views/srt_prompt_dialog.cc b/chrome/browser/ui/views/srt_prompt_dialog.cc |
index 21ccc1dd218831f5eda23b524eb843d74981bfee..24d885bfbecafd20b468ef85d5c9378691bd8715 100644 |
--- a/chrome/browser/ui/views/srt_prompt_dialog.cc |
+++ b/chrome/browser/ui/views/srt_prompt_dialog.cc |
@@ -4,33 +4,18 @@ |
#include "chrome/browser/ui/views/srt_prompt_dialog.h" |
-#include <vector> |
- |
-#include "base/memory/ptr_util.h" |
#include "base/strings/string16.h" |
-#include "chrome/app/vector_icons/vector_icons.h" |
#include "chrome/browser/safe_browsing/srt_prompt_controller.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_dialogs.h" |
#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h" |
#include "components/constrained_window/constrained_window_views.h" |
-#include "components/web_modal/web_contents_modal_dialog_host.h" |
#include "ui/base/ui_base_types.h" |
#include "ui/events/event.h" |
-#include "ui/gfx/animation/slide_animation.h" |
-#include "ui/gfx/geometry/size.h" |
#include "ui/gfx/native_widget_types.h" |
-#include "ui/gfx/paint_vector_icon.h" |
#include "ui/gfx/text_constants.h" |
-#include "ui/native_theme/native_theme.h" |
-#include "ui/views/border.h" |
#include "ui/views/controls/label.h" |
-#include "ui/views/controls/scroll_view.h" |
-#include "ui/views/controls/separator.h" |
#include "ui/views/layout/box_layout.h" |
-#include "ui/views/layout/fill_layout.h" |
-#include "ui/views/layout/grid_layout.h" |
#include "ui/views/layout/layout_constants.h" |
#include "ui/views/widget/widget.h" |
@@ -45,198 +30,30 @@ void ShowSRTPrompt(Browser* browser, |
} // namespace chrome |
namespace { |
- |
-using LabelInfo = safe_browsing::SRTPromptController::LabelInfo; |
- |
constexpr int kDialogWidth = 448; |
-constexpr int kDetailsSectionMaxHeight = 150; |
-constexpr int kBulletColumnWidth = 10; |
-// Constants used for the layout of the label views. |
-constexpr int kMainColumSetId = 0; |
-constexpr int kBulletColumnSetId = 1; |
- |
-// Returns a view containing |item| with insets defined by |top|, |left|, |
-// |bottom|, and |right|. |
-views::View* CreateViewWithInsets(views::View* item, |
- int top, |
- int left, |
- int bottom, |
- int right) { |
- views::View* view = new views::View(); |
- view->SetLayoutManager(new views::FillLayout()); |
- view->SetBorder(views::CreateEmptyBorder(top, left, bottom, right)); |
- view->AddChildView(item); |
- return view; |
-} |
- |
-// Helper function used by |CreateLabelView()| below that adds |labels| to |
-// |label_view|. |
-void AddLabelsToLabelView(views::View* label_view, |
- views::GridLayout* layout, |
- const std::vector<LabelInfo>& labels) { |
- static constexpr base::char16 kBulletPoint[] = {0x2022, 0}; |
- |
- bool first_label = true; |
- bool last_label_was_bullet = false; |
- for (const LabelInfo& label_info : labels) { |
- const bool is_bullet = label_info.type == LabelInfo::BULLET_ITEM; |
- views::Label* label = new views::Label(label_info.text); |
- label->SetMultiLine(true); |
- label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- |
- // Do not add a padding row if |
- // - this is the first label being added, or |
- // - a bullet item is being added and the last label was also a bullet item. |
- bool skip_padding = first_label || (is_bullet && last_label_was_bullet); |
- if (!skip_padding) |
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
- |
- layout->StartRow(0, is_bullet ? kBulletColumnSetId : kMainColumSetId); |
- if (is_bullet) { |
- views::Label* bullet = new views::Label(base::string16(kBulletPoint)); |
- layout->AddView(bullet); |
- } |
- layout->AddView(label); |
- |
- last_label_was_bullet = is_bullet; |
- first_label = false; |
- } |
-} |
- |
-// Creates a view that displays two types of labels: multiline labels |
-// representing whole paragraphs or indented labels that are start with a bullet |
-// point. |
-// |
-// A vertical padding of size |top_vertical_space| is added before the labels. |
-views::View* CreateLabelView(int top_vertical_space, |
- const std::vector<LabelInfo>& labels) { |
- views::View* label_view = new views::View(); |
- views::GridLayout* layout = new views::GridLayout(label_view); |
- layout->SetInsets(0, views::kButtonHEdgeMarginNew, 0, |
- views::kButtonHEdgeMarginNew); |
- |
- label_view->SetLayoutManager(layout); |
- |
- views::ColumnSet* main_column_set = layout->AddColumnSet(kMainColumSetId); |
- main_column_set->AddColumn(views::GridLayout::FILL, |
- views::GridLayout::LEADING, |
- /*resize_percent=*/1, views::GridLayout::USE_PREF, |
- /*fixed_width=*/0, |
- /*min_width=*/0); |
- |
- views::ColumnSet* bullet_column_set_ = |
- layout->AddColumnSet(kBulletColumnSetId); |
- bullet_column_set_->AddPaddingColumn( |
- /*resize_percent=*/0, views::kUnrelatedControlLargeHorizontalSpacing); |
- bullet_column_set_->AddColumn( |
- views::GridLayout::FILL, views::GridLayout::LEADING, |
- /*resize_percent=*/0, views::GridLayout::USE_PREF, |
- /*fixed_width=*/0, |
- /*min_width=*/0); |
- bullet_column_set_->AddPaddingColumn(/*resize_percent=*/0, |
- kBulletColumnWidth); |
- bullet_column_set_->AddColumn( |
- views::GridLayout::FILL, views::GridLayout::LEADING, |
- /*resize_percent=*/1, views::GridLayout::USE_PREF, |
- /*fixed_width=*/0, |
- /*min_width=*/0); |
- |
- if (top_vertical_space > 0) |
- layout->AddPaddingRow(/*vertical_resize=*/0, top_vertical_space); |
- |
- AddLabelsToLabelView(label_view, layout, labels); |
- |
- layout->AddPaddingRow(/*vertical_resize=*/0, |
- views::kUnrelatedControlLargeHorizontalSpacing); |
- return label_view; |
-} |
- |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
-// SRTPromptDialog::ExpandableMessageView |
-// |
-// A view, whose visibilty can be toggled, and will be used for the details |
-// section the main dialog. |
-class SRTPromptDialog::ExpandableMessageView : public views::View { |
- public: |
- explicit ExpandableMessageView(const std::vector<LabelInfo>& labels); |
- ~ExpandableMessageView() override; |
- |
- void AnimateToState(double state); |
- |
- // views::View overrides. |
- gfx::Size GetPreferredSize() const override; |
- int GetHeightForWidth(int width) const override; |
- |
- private: |
- // A number between 0 and 1 that determines how much of the view's preferred |
- // height should be visible. |
- double animation_state_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ExpandableMessageView); |
-}; |
- |
-SRTPromptDialog::ExpandableMessageView::ExpandableMessageView( |
- const std::vector<LabelInfo>& labels) |
- : animation_state_(0.0) { |
- // Add the main message view inside a scroll view. |
- views::View* label_view = |
- CreateLabelView(views::kUnrelatedControlLargeHorizontalSpacing, labels); |
- views::ScrollView* scroll_view = new views::ScrollView(); |
- scroll_view->ClipHeightTo(kDetailsSectionMaxHeight, kDetailsSectionMaxHeight); |
- scroll_view->SetContents(label_view); |
- scroll_view->SetSize(gfx::Size(kDialogWidth, kDetailsSectionMaxHeight)); |
- AddChildView(scroll_view); |
-} |
- |
-SRTPromptDialog::ExpandableMessageView::~ExpandableMessageView() {} |
- |
-void SRTPromptDialog::ExpandableMessageView::AnimateToState(double state) { |
- DCHECK_LE(0.0, state); |
- DCHECK_GE(1.0, state); |
- |
- animation_state_ = state; |
- PreferredSizeChanged(); |
-} |
- |
-gfx::Size SRTPromptDialog::ExpandableMessageView::GetPreferredSize() const { |
- return gfx::Size(kDialogWidth, kDetailsSectionMaxHeight * animation_state_); |
-} |
- |
-int SRTPromptDialog::ExpandableMessageView::GetHeightForWidth(int width) const { |
- return GetPreferredSize().height(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
// SRTPromptDialog |
SRTPromptDialog::SRTPromptDialog(safe_browsing::SRTPromptController* controller) |
: browser_(nullptr), |
controller_(controller), |
- slide_animation_(base::MakeUnique<gfx::SlideAnimation>(this)), |
- details_view_(new ExpandableMessageView(controller_->GetDetailsText())), |
- details_button_( |
- new views::LabelButton(this, controller_->GetShowDetailsLabel())) { |
+ advanced_button_( |
+ new views::LabelButton(this, controller_->GetAdvancedButtonLabel())) { |
DCHECK(controller_); |
SetLayoutManager(new views::BoxLayout( |
/*orientation=*/views::BoxLayout::kVertical, |
- /*inside_border_horizontal_spacing=*/0, |
+ /*inside_border_horizontal_spacing=*/views::kButtonHEdgeMarginNew, |
/*inside_border_vertical_spacing=*/views::kPanelVertMargin, |
/*between_child_spacing=*/0)); |
+ views::Label* label = new views::Label(controller_->GetMainText()); |
+ label->SetMultiLine(true); |
+ label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ AddChildView(label); |
- AddChildView(CreateLabelView(0, controller_->GetMainText())); |
- AddChildView(new views::Separator()); |
- |
- AddChildView(details_view_); |
- |
- details_button_->SetEnabledTextColors(GetDetailsButtonColor()); |
- UpdateDetailsButton(); |
- AddChildView(CreateViewWithInsets( |
- details_button_, views::kPanelVertMargin, views::kButtonHEdgeMarginNew, |
- views::kPanelVertMargin, views::kButtonHEdgeMarginNew)); |
- AddChildView(new views::Separator()); |
+ advanced_button_->SetStyle(views::Button::STYLE_BUTTON); |
} |
SRTPromptDialog::~SRTPromptDialog() { |
@@ -282,9 +99,13 @@ base::string16 SRTPromptDialog::GetDialogButtonLabel( |
DCHECK(button == ui::DIALOG_BUTTON_OK || button == ui::DIALOG_BUTTON_CANCEL); |
DCHECK(controller_); |
- if (button == ui::DIALOG_BUTTON_OK) |
- return controller_->GetAcceptButtonLabel(); |
- return DialogDelegate::GetDialogButtonLabel(button); |
+ return button == ui::DIALOG_BUTTON_OK |
+ ? controller_->GetAcceptButtonLabel() |
+ : DialogDelegate::GetDialogButtonLabel(button); |
+} |
+ |
+views::View* SRTPromptDialog::CreateExtraView() { |
+ return advanced_button_; |
} |
bool SRTPromptDialog::Accept() { |
@@ -303,6 +124,14 @@ bool SRTPromptDialog::Cancel() { |
return true; |
} |
+bool SRTPromptDialog::Close() { |
+ if (controller_) { |
+ controller_->Close(); |
+ controller_ = nullptr; |
+ } |
+ return true; |
+} |
+ |
// View overrides. |
gfx::Size SRTPromptDialog::GetPreferredSize() const { |
@@ -313,42 +142,14 @@ gfx::Size SRTPromptDialog::GetPreferredSize() const { |
void SRTPromptDialog::ButtonPressed(views::Button* sender, |
const ui::Event& event) { |
- DCHECK_EQ(sender, details_button_); |
+ DCHECK_EQ(sender, advanced_button_); |
DCHECK(browser_); |
- if (slide_animation_->IsShowing()) |
- slide_animation_->Hide(); |
- else |
- slide_animation_->Show(); |
-} |
- |
-void SRTPromptDialog::AnimationProgressed(const gfx::Animation* animation) { |
- DCHECK_EQ(slide_animation_.get(), animation); |
- |
- details_view_->AnimateToState(animation->GetCurrentValue()); |
- ChromeWebModalDialogManagerDelegate* manager = browser_; |
- constrained_window::UpdateWidgetModalDialogPosition( |
- GetWidget(), manager->GetWebContentsModalDialogHost()); |
-} |
- |
-void SRTPromptDialog::AnimationEnded(const gfx::Animation* animation) { |
- DCHECK_EQ(slide_animation_.get(), animation); |
- UpdateDetailsButton(); |
-} |
- |
-SkColor SRTPromptDialog::GetDetailsButtonColor() { |
- return GetNativeTheme()->GetSystemColor( |
- ui::NativeTheme::kColorId_LinkEnabled); |
-} |
- |
-void SRTPromptDialog::UpdateDetailsButton() { |
- DCHECK(controller_); |
- details_button_->SetText(slide_animation_->IsShowing() |
- ? controller_->GetHideDetailsLabel() |
- : controller_->GetShowDetailsLabel()); |
- details_button_->SetImage( |
- views::Button::STATE_NORMAL, |
- slide_animation_->IsShowing() |
- ? gfx::CreateVectorIcon(kCaretUpIcon, GetDetailsButtonColor()) |
- : gfx::CreateVectorIcon(kCaretDownIcon, GetDetailsButtonColor())); |
+ // TODO(alito): Navigate to the webui version of the Chrome Cleaner UI when |
+ // that is implemented. |
+ if (controller_) { |
+ controller_->AdvancedButtonClicked(); |
+ controller_ = nullptr; |
+ } |
+ GetWidget()->Close(); |
} |