Index: chrome/browser/ui/views/session_crashed_bubble_view.cc |
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc |
index 7f148b08fe58da05c30c73a4654303d0dfa5793c..d1c9a5a731f8af100b2e5e5a87797b3e3ed85d51 100644 |
--- a/chrome/browser/ui/views/session_crashed_bubble_view.cc |
+++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc |
@@ -36,6 +36,7 @@ |
#include "grit/ui_resources.h" |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/resource/resource_bundle.h" |
+#include "ui/views/bubble/bubble_frame_view.h" |
#include "ui/views/controls/button/checkbox.h" |
#include "ui/views/controls/button/label_button.h" |
#include "ui/views/controls/label.h" |
@@ -55,14 +56,10 @@ const int kWidthOfDescriptionText = 320; |
// Distance between checkbox and the text to the right of it. |
const int kCheckboxTextDistance = 4; |
-// Margins width for the top rows to compensate for the bottom panel for which |
-// we don't want any margin. |
-const int kMarginWidth = 12; |
-const int kMarginHeight = kMarginWidth; |
- |
-// The color of the background of the sub panel to offer UMA optin. |
-const SkColor kLightGrayBackgroundColor = 0xFFF0F0F0; |
-const SkColor kWhiteBackgroundColor = 0xFFFFFFFF; |
+// The color of the text and background of the sub panel to offer UMA optin. |
+// These values match the BookmarkSyncPromoView colors. |
+const SkColor kBackgroundColor = SkColorSetRGB(245, 245, 245); |
+const SkColor kTextColor = SkColorSetRGB(102, 102, 102); |
// The Finch study name and group name that enables session crashed bubble UI. |
const char kEnableBubbleUIFinchName[] = "EnableSessionCrashedBubbleUI"; |
@@ -83,13 +80,13 @@ bool ShouldOfferMetricsReporting() { |
// Whether or not the bubble UI should be used. |
bool IsBubbleUIEnabled() { |
- const std::string group_name = base::FieldTrialList::FindFullName( |
- kEnableBubbleUIFinchName); |
const base::CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
if (command_line.HasSwitch(switches::kDisableSessionCrashedBubble)) |
return false; |
if (command_line.HasSwitch(switches::kEnableSessionCrashedBubble)) |
return true; |
+ const std::string group_name = base::FieldTrialList::FindFullName( |
+ kEnableBubbleUIFinchName); |
return group_name == kEnableBubbleUIGroupEnabled; |
} |
@@ -99,13 +96,22 @@ bool IsBubbleUIEnabled() { |
class SessionCrashedBubbleView::BrowserRemovalObserver |
: public chrome::BrowserListObserver { |
public: |
- explicit BrowserRemovalObserver(Browser* browser); |
- virtual ~BrowserRemovalObserver(); |
+ explicit BrowserRemovalObserver(Browser* browser) : browser_(browser) { |
+ DCHECK(browser_); |
+ BrowserList::AddObserver(this); |
+ } |
+ |
+ virtual ~BrowserRemovalObserver() { |
+ BrowserList::RemoveObserver(this); |
+ } |
// Overridden from chrome::BrowserListObserver. |
- virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; |
+ virtual void OnBrowserRemoved(Browser* browser) OVERRIDE { |
+ if (browser == browser_) |
+ browser_ = NULL; |
+ } |
- Browser* browser() const; |
+ Browser* browser() const { return browser_; } |
private: |
Browser* browser_; |
@@ -113,27 +119,6 @@ class SessionCrashedBubbleView::BrowserRemovalObserver |
DISALLOW_COPY_AND_ASSIGN(BrowserRemovalObserver); |
}; |
-SessionCrashedBubbleView::BrowserRemovalObserver::BrowserRemovalObserver( |
- Browser* browser) |
- : browser_(browser) { |
- DCHECK(browser_); |
- BrowserList::AddObserver(this); |
-} |
- |
-SessionCrashedBubbleView::BrowserRemovalObserver::~BrowserRemovalObserver() { |
- BrowserList::RemoveObserver(this); |
-} |
- |
-void SessionCrashedBubbleView::BrowserRemovalObserver::OnBrowserRemoved( |
- Browser* browser) { |
- if (browser == browser_) |
- browser_ = NULL; |
-} |
- |
-Browser* SessionCrashedBubbleView::BrowserRemovalObserver::browser() const { |
- return browser_; |
-} |
- |
// static |
void SessionCrashedBubbleView::Show(Browser* browser) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
@@ -188,7 +173,6 @@ SessionCrashedBubbleView::SessionCrashedBubbleView( |
browser_(browser), |
web_contents_(web_contents), |
restore_button_(NULL), |
- close_(NULL), |
uma_option_(NULL), |
offer_uma_optin_(offer_uma_optin), |
started_navigation_(false) { |
@@ -209,32 +193,24 @@ views::View* SessionCrashedBubbleView::GetInitiallyFocusedView() { |
return restore_button_; |
} |
-void SessionCrashedBubbleView::Init() { |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- |
- // Close button. |
- close_ = new views::LabelButton(this, base::string16()); |
- close_->SetImage(views::CustomButton::STATE_NORMAL, |
- *rb->GetImageNamed(IDR_CLOSE_2).ToImageSkia()); |
- close_->SetImage(views::CustomButton::STATE_HOVERED, |
- *rb->GetImageNamed(IDR_CLOSE_2_H).ToImageSkia()); |
- close_->SetImage(views::CustomButton::STATE_PRESSED, |
- *rb->GetImageNamed(IDR_CLOSE_2_P).ToImageSkia()); |
- close_->SetSize(close_->GetPreferredSize()); |
- close_->SetBorder(views::Border::CreateEmptyBorder(0, 0, 0, 0)); |
- |
- // Bubble title label. |
- views::Label* title_label = new views::Label( |
- l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_BUBBLE_TITLE)); |
- title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- title_label->SetFontList(rb->GetFontList(ui::ResourceBundle::BoldFont)); |
+base::string16 SessionCrashedBubbleView::GetWindowTitle() const { |
+ return l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_BUBBLE_TITLE); |
+} |
+ |
+bool SessionCrashedBubbleView::ShouldShowWindowTitle() const { |
+ return true; |
+} |
+ |
+bool SessionCrashedBubbleView::ShouldShowCloseButton() const { |
+ return true; |
+} |
+void SessionCrashedBubbleView::Init() { |
// Description text label. |
views::Label* text_label = new views::Label( |
l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_MESSAGE)); |
text_label->SetMultiLine(true); |
text_label->SetLineHeight(20); |
- text_label->SetEnabledColor(SK_ColorDKGRAY); |
text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
text_label->SizeToFit(kWidthOfDescriptionText); |
@@ -243,56 +219,37 @@ void SessionCrashedBubbleView::Init() { |
this, l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_RESTORE_BUTTON)); |
restore_button_->SetStyle(views::Button::STYLE_BUTTON); |
restore_button_->SetIsDefault(true); |
- restore_button_->SetFontList(rb->GetFontList(ui::ResourceBundle::BoldFont)); |
GridLayout* layout = new GridLayout(this); |
SetLayoutManager(layout); |
- // Title and close button row. |
- const int kTitleColumnSetId = 0; |
- views::ColumnSet* cs = layout->AddColumnSet(kTitleColumnSetId); |
- cs->AddPaddingColumn(0, kMarginWidth); |
- cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0, |
- GridLayout::USE_PREF, 0, 0); |
- cs->AddPaddingColumn(1, views::kRelatedControlHorizontalSpacing); |
- cs->AddColumn(GridLayout::TRAILING, GridLayout::LEADING, 0, |
- GridLayout::USE_PREF, 0, 0); |
- |
// Text row. |
- const int kTextColumnSetId = 1; |
- cs = layout->AddColumnSet(kTextColumnSetId); |
- cs->AddPaddingColumn(0, kMarginWidth); |
- cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, |
+ const int kTextColumnSetId = 0; |
+ views::ColumnSet* cs = layout->AddColumnSet(kTextColumnSetId); |
+ cs->AddPaddingColumn(0, GetBubbleFrameView()->GetTitleInsets().left()); |
+ cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, |
GridLayout::FIXED, kWidthOfDescriptionText, 0); |
+ cs->AddPaddingColumn(0, GetBubbleFrameView()->GetTitleInsets().left()); |
- // Restore button row |
- const int kButtonColumnSetId = 2; |
+ // Restore button row. |
+ const int kButtonColumnSetId = 1; |
cs = layout->AddColumnSet(kButtonColumnSetId); |
- cs->AddPaddingColumn(0, kMarginWidth); |
- cs->AddPaddingColumn(1, views::kRelatedControlHorizontalSpacing); |
- cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0, |
+ cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 1, |
GridLayout::USE_PREF, 0, 0); |
- cs->AddPaddingColumn(0, kMarginWidth); |
- |
- layout->AddPaddingRow(0, kMarginHeight); |
- layout->StartRow(0, kTitleColumnSetId); |
- layout->AddView(title_label); |
- layout->AddView(close_); |
- layout->AddPaddingRow(0, kMarginHeight); |
+ cs->AddPaddingColumn(0, GetBubbleFrameView()->GetTitleInsets().left()); |
layout->StartRow(0, kTextColumnSetId); |
layout->AddView(text_label); |
- layout->AddPaddingRow(0, kMarginHeight); |
+ layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
layout->StartRow(0, kButtonColumnSetId); |
layout->AddView(restore_button_); |
- layout->AddPaddingRow(0, kMarginHeight); |
+ layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
// Metrics reporting option. |
if (offer_uma_optin_) |
CreateUmaOptinView(layout); |
- set_color(kWhiteBackgroundColor); |
set_margins(gfx::Insets()); |
Layout(); |
} |
@@ -303,11 +260,9 @@ void SessionCrashedBubbleView::CreateUmaOptinView(GridLayout* layout) { |
// a hyperlink in it), this checkbox contains an empty string as its label, |
// and the real text will be added as a separate view. |
uma_option_ = new views::Checkbox(base::string16()); |
- uma_option_->SetTextColor(views::Button::STATE_NORMAL, SK_ColorGRAY); |
uma_option_->SetChecked(false); |
uma_option_->set_background( |
- views::Background::CreateSolidBackground(kLightGrayBackgroundColor)); |
- uma_option_->set_listener(this); |
+ views::Background::CreateSolidBackground(kBackgroundColor)); |
// The text to the right of the checkbox. |
size_t offset; |
@@ -319,14 +274,14 @@ void SessionCrashedBubbleView::CreateUmaOptinView(GridLayout* layout) { |
&offset); |
views::StyledLabel* uma_label = new views::StyledLabel(uma_text, this); |
uma_label->set_background( |
- views::Background::CreateSolidBackground(kLightGrayBackgroundColor)); |
+ views::Background::CreateSolidBackground(kBackgroundColor)); |
views::StyledLabel::RangeStyleInfo link_style = |
views::StyledLabel::RangeStyleInfo::CreateForLink(); |
link_style.font_style = gfx::Font::NORMAL; |
uma_label->AddStyleRange(gfx::Range(offset, offset + link_text.length()), |
link_style); |
views::StyledLabel::RangeStyleInfo uma_style; |
- uma_style.color = SK_ColorGRAY; |
+ uma_style.color = kTextColor; |
gfx::Range before_link_range(0, offset); |
if (!before_link_range.is_empty()) |
uma_label->AddStyleRange(before_link_range, uma_style); |
@@ -334,24 +289,24 @@ void SessionCrashedBubbleView::CreateUmaOptinView(GridLayout* layout) { |
if (!after_link_range.is_empty()) |
uma_label->AddStyleRange(after_link_range, uma_style); |
- // We use a border instead of padding so that the background color reach |
+ // We use a border instead of padding so that the background color reaches |
// the edges of the bubble. |
- uma_option_->SetBorder( |
- views::Border::CreateSolidSidedBorder(0, kMarginWidth, 0, 0, |
- kLightGrayBackgroundColor)); |
- uma_label->SetBorder( |
- views::Border::CreateSolidSidedBorder( |
- kMarginHeight, kCheckboxTextDistance, kMarginHeight, kMarginWidth, |
- kLightGrayBackgroundColor)); |
+ const gfx::Insets title_insets = GetBubbleFrameView()->GetTitleInsets(); |
+ uma_option_->SetBorder(views::Border::CreateSolidSidedBorder( |
+ 0, title_insets.left(), 0, 0, kBackgroundColor)); |
+ uma_label->SetBorder(views::Border::CreateSolidSidedBorder( |
+ views::kRelatedControlVerticalSpacing, kCheckboxTextDistance, |
+ views::kRelatedControlVerticalSpacing, title_insets.left(), |
+ kBackgroundColor)); |
// Separator. |
- const int kSeparatorColumnSetId = 3; |
+ const int kSeparatorColumnSetId = 2; |
views::ColumnSet* cs = layout->AddColumnSet(kSeparatorColumnSetId); |
- cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, |
- GridLayout::FIXED, kWidthOfDescriptionText + kMarginWidth, 0); |
+ cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, |
+ GridLayout::USE_PREF, 0, 0); |
// Reporting row. |
- const int kReportColumnSetId = 4; |
+ const int kReportColumnSetId = 3; |
cs = layout->AddColumnSet(kReportColumnSetId); |
cs->AddColumn(GridLayout::CENTER, GridLayout::FILL, 0, |
GridLayout::USE_PREF, 0, 0); |
@@ -367,11 +322,8 @@ void SessionCrashedBubbleView::CreateUmaOptinView(GridLayout* layout) { |
void SessionCrashedBubbleView::ButtonPressed(views::Button* sender, |
const ui::Event& event) { |
- DCHECK(sender); |
- if (sender == restore_button_) |
- RestorePreviousSession(sender); |
- else if (sender == close_) |
- CloseBubble(); |
+ DCHECK_EQ(sender, restore_button_); |
+ RestorePreviousSession(sender); |
} |
void SessionCrashedBubbleView::StyledLabelLinkClicked(const gfx::Range& range, |