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

Side by Side Diff: chrome/browser/ui/views/session_crashed_bubble_view.cc

Issue 331353002: Address views session crashed bubble style nits. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix right inset; remove debugging aids. Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/views/session_crashed_bubble_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/session_crashed_bubble_view.h" 5 #include "chrome/browser/ui/views/session_crashed_bubble_view.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 18 matching lines...) Expand all
29 #include "content/public/browser/browser_context.h" 29 #include "content/public/browser/browser_context.h"
30 #include "content/public/browser/browser_thread.h" 30 #include "content/public/browser/browser_thread.h"
31 #include "content/public/browser/notification_source.h" 31 #include "content/public/browser/notification_source.h"
32 #include "content/public/browser/web_contents.h" 32 #include "content/public/browser/web_contents.h"
33 #include "grit/chromium_strings.h" 33 #include "grit/chromium_strings.h"
34 #include "grit/generated_resources.h" 34 #include "grit/generated_resources.h"
35 #include "grit/google_chrome_strings.h" 35 #include "grit/google_chrome_strings.h"
36 #include "grit/ui_resources.h" 36 #include "grit/ui_resources.h"
37 #include "ui/base/l10n/l10n_util.h" 37 #include "ui/base/l10n/l10n_util.h"
38 #include "ui/base/resource/resource_bundle.h" 38 #include "ui/base/resource/resource_bundle.h"
39 #include "ui/views/bubble/bubble_frame_view.h"
39 #include "ui/views/controls/button/checkbox.h" 40 #include "ui/views/controls/button/checkbox.h"
40 #include "ui/views/controls/button/label_button.h" 41 #include "ui/views/controls/button/label_button.h"
41 #include "ui/views/controls/label.h" 42 #include "ui/views/controls/label.h"
42 #include "ui/views/controls/separator.h" 43 #include "ui/views/controls/separator.h"
43 #include "ui/views/controls/styled_label.h" 44 #include "ui/views/controls/styled_label.h"
44 #include "ui/views/layout/grid_layout.h" 45 #include "ui/views/layout/grid_layout.h"
45 #include "ui/views/layout/layout_constants.h" 46 #include "ui/views/layout/layout_constants.h"
46 #include "ui/views/widget/widget.h" 47 #include "ui/views/widget/widget.h"
47 48
48 using views::GridLayout; 49 using views::GridLayout;
49 50
50 namespace { 51 namespace {
51 52
52 // Fixed width of the column holding the description label of the bubble. 53 // Fixed width of the column holding the description label of the bubble.
53 const int kWidthOfDescriptionText = 320; 54 const int kWidthOfDescriptionText = 320;
54 55
55 // Distance between checkbox and the text to the right of it. 56 // Distance between checkbox and the text to the right of it.
56 const int kCheckboxTextDistance = 4; 57 const int kCheckboxTextDistance = 4;
57 58
58 // Margins width for the top rows to compensate for the bottom panel for which 59 // The color of the text and background of the sub panel to offer UMA optin.
59 // we don't want any margin. 60 // These values match the BookmarkSyncPromoView colors.
60 const int kMarginWidth = 12; 61 const SkColor kBackgroundColor = SkColorSetRGB(245, 245, 245);
61 const int kMarginHeight = kMarginWidth; 62 const SkColor kTextColor = SkColorSetRGB(102, 102, 102);
62
63 // The color of the background of the sub panel to offer UMA optin.
64 const SkColor kLightGrayBackgroundColor = 0xFFF0F0F0;
65 const SkColor kWhiteBackgroundColor = 0xFFFFFFFF;
66 63
67 // The Finch study name and group name that enables session crashed bubble UI. 64 // The Finch study name and group name that enables session crashed bubble UI.
68 const char kEnableBubbleUIFinchName[] = "EnableSessionCrashedBubbleUI"; 65 const char kEnableBubbleUIFinchName[] = "EnableSessionCrashedBubbleUI";
69 const char kEnableBubbleUIGroupEnabled[] = "Enabled"; 66 const char kEnableBubbleUIGroupEnabled[] = "Enabled";
70 67
71 bool ShouldOfferMetricsReporting() { 68 bool ShouldOfferMetricsReporting() {
72 // Stats collection only applies to Google Chrome builds. 69 // Stats collection only applies to Google Chrome builds.
73 #if defined(GOOGLE_CHROME_BUILD) 70 #if defined(GOOGLE_CHROME_BUILD)
74 // Only show metrics reporting option if user didn't already consent to it. 71 // Only show metrics reporting option if user didn't already consent to it.
75 if (GoogleUpdateSettings::GetCollectStatsConsent()) 72 if (GoogleUpdateSettings::GetCollectStatsConsent())
76 return false; 73 return false;
77 return g_browser_process->local_state()->FindPreference( 74 return g_browser_process->local_state()->FindPreference(
78 prefs::kMetricsReportingEnabled)->IsUserModifiable(); 75 prefs::kMetricsReportingEnabled)->IsUserModifiable();
79 #else 76 #else
80 return false; 77 return false;
81 #endif // defined(GOOGLE_CHROME_BUILD) 78 #endif // defined(GOOGLE_CHROME_BUILD)
82 } 79 }
83 80
84 // Whether or not the bubble UI should be used. 81 // Whether or not the bubble UI should be used.
85 bool IsBubbleUIEnabled() { 82 bool IsBubbleUIEnabled() {
86 const std::string group_name = base::FieldTrialList::FindFullName(
87 kEnableBubbleUIFinchName);
88 const base::CommandLine& command_line = *CommandLine::ForCurrentProcess(); 83 const base::CommandLine& command_line = *CommandLine::ForCurrentProcess();
89 if (command_line.HasSwitch(switches::kDisableSessionCrashedBubble)) 84 if (command_line.HasSwitch(switches::kDisableSessionCrashedBubble))
90 return false; 85 return false;
91 if (command_line.HasSwitch(switches::kEnableSessionCrashedBubble)) 86 if (command_line.HasSwitch(switches::kEnableSessionCrashedBubble))
92 return true; 87 return true;
88 const std::string group_name = base::FieldTrialList::FindFullName(
89 kEnableBubbleUIFinchName);
93 return group_name == kEnableBubbleUIGroupEnabled; 90 return group_name == kEnableBubbleUIGroupEnabled;
94 } 91 }
95 92
96 } // namespace 93 } // namespace
97 94
98 // A helper class that listens to browser removal event. 95 // A helper class that listens to browser removal event.
99 class SessionCrashedBubbleView::BrowserRemovalObserver 96 class SessionCrashedBubbleView::BrowserRemovalObserver
100 : public chrome::BrowserListObserver { 97 : public chrome::BrowserListObserver {
101 public: 98 public:
102 explicit BrowserRemovalObserver(Browser* browser); 99 explicit BrowserRemovalObserver(Browser* browser) : browser_(browser) {
103 virtual ~BrowserRemovalObserver(); 100 DCHECK(browser_);
101 BrowserList::AddObserver(this);
102 }
103
104 virtual ~BrowserRemovalObserver() {
105 BrowserList::RemoveObserver(this);
106 }
104 107
105 // Overridden from chrome::BrowserListObserver. 108 // Overridden from chrome::BrowserListObserver.
106 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; 109 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE {
110 if (browser == browser_)
111 browser_ = NULL;
112 }
107 113
108 Browser* browser() const; 114 Browser* browser() const { return browser_; }
109 115
110 private: 116 private:
111 Browser* browser_; 117 Browser* browser_;
112 118
113 DISALLOW_COPY_AND_ASSIGN(BrowserRemovalObserver); 119 DISALLOW_COPY_AND_ASSIGN(BrowserRemovalObserver);
114 }; 120 };
115 121
116 SessionCrashedBubbleView::BrowserRemovalObserver::BrowserRemovalObserver(
117 Browser* browser)
118 : browser_(browser) {
119 DCHECK(browser_);
120 BrowserList::AddObserver(this);
121 }
122
123 SessionCrashedBubbleView::BrowserRemovalObserver::~BrowserRemovalObserver() {
124 BrowserList::RemoveObserver(this);
125 }
126
127 void SessionCrashedBubbleView::BrowserRemovalObserver::OnBrowserRemoved(
128 Browser* browser) {
129 if (browser == browser_)
130 browser_ = NULL;
131 }
132
133 Browser* SessionCrashedBubbleView::BrowserRemovalObserver::browser() const {
134 return browser_;
135 }
136
137 // static 122 // static
138 void SessionCrashedBubbleView::Show(Browser* browser) { 123 void SessionCrashedBubbleView::Show(Browser* browser) {
139 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 124 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
140 if (browser->profile()->IsOffTheRecord()) 125 if (browser->profile()->IsOffTheRecord())
141 return; 126 return;
142 127
143 // Observes browser removal event and will be deallocated in ShowForReal. 128 // Observes browser removal event and will be deallocated in ShowForReal.
144 scoped_ptr<BrowserRemovalObserver> browser_observer( 129 scoped_ptr<BrowserRemovalObserver> browser_observer(
145 new BrowserRemovalObserver(browser)); 130 new BrowserRemovalObserver(browser));
146 131
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 SessionCrashedBubbleView::SessionCrashedBubbleView( 166 SessionCrashedBubbleView::SessionCrashedBubbleView(
182 views::View* anchor_view, 167 views::View* anchor_view,
183 Browser* browser, 168 Browser* browser,
184 content::WebContents* web_contents, 169 content::WebContents* web_contents,
185 bool offer_uma_optin) 170 bool offer_uma_optin)
186 : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), 171 : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
187 content::WebContentsObserver(web_contents), 172 content::WebContentsObserver(web_contents),
188 browser_(browser), 173 browser_(browser),
189 web_contents_(web_contents), 174 web_contents_(web_contents),
190 restore_button_(NULL), 175 restore_button_(NULL),
191 close_(NULL),
192 uma_option_(NULL), 176 uma_option_(NULL),
193 offer_uma_optin_(offer_uma_optin), 177 offer_uma_optin_(offer_uma_optin),
194 started_navigation_(false) { 178 started_navigation_(false) {
195 set_close_on_deactivate(false); 179 set_close_on_deactivate(false);
196 registrar_.Add( 180 registrar_.Add(
197 this, 181 this,
198 chrome::NOTIFICATION_TAB_CLOSING, 182 chrome::NOTIFICATION_TAB_CLOSING,
199 content::Source<content::NavigationController>(&( 183 content::Source<content::NavigationController>(&(
200 web_contents->GetController()))); 184 web_contents->GetController())));
201 browser->tab_strip_model()->AddObserver(this); 185 browser->tab_strip_model()->AddObserver(this);
202 } 186 }
203 187
204 SessionCrashedBubbleView::~SessionCrashedBubbleView() { 188 SessionCrashedBubbleView::~SessionCrashedBubbleView() {
205 browser_->tab_strip_model()->RemoveObserver(this); 189 browser_->tab_strip_model()->RemoveObserver(this);
206 } 190 }
207 191
208 views::View* SessionCrashedBubbleView::GetInitiallyFocusedView() { 192 views::View* SessionCrashedBubbleView::GetInitiallyFocusedView() {
209 return restore_button_; 193 return restore_button_;
210 } 194 }
211 195
196 base::string16 SessionCrashedBubbleView::GetWindowTitle() const {
197 return l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_BUBBLE_TITLE);
198 }
199
200 bool SessionCrashedBubbleView::ShouldShowWindowTitle() const {
201 return true;
202 }
203
204 bool SessionCrashedBubbleView::ShouldShowCloseButton() const {
205 return true;
206 }
207
212 void SessionCrashedBubbleView::Init() { 208 void SessionCrashedBubbleView::Init() {
213 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
214
215 // Close button.
216 close_ = new views::LabelButton(this, base::string16());
217 close_->SetImage(views::CustomButton::STATE_NORMAL,
218 *rb->GetImageNamed(IDR_CLOSE_2).ToImageSkia());
219 close_->SetImage(views::CustomButton::STATE_HOVERED,
220 *rb->GetImageNamed(IDR_CLOSE_2_H).ToImageSkia());
221 close_->SetImage(views::CustomButton::STATE_PRESSED,
222 *rb->GetImageNamed(IDR_CLOSE_2_P).ToImageSkia());
223 close_->SetSize(close_->GetPreferredSize());
224 close_->SetBorder(views::Border::CreateEmptyBorder(0, 0, 0, 0));
225
226 // Bubble title label.
227 views::Label* title_label = new views::Label(
228 l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_BUBBLE_TITLE));
229 title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
230 title_label->SetFontList(rb->GetFontList(ui::ResourceBundle::BoldFont));
231
232 // Description text label. 209 // Description text label.
233 views::Label* text_label = new views::Label( 210 views::Label* text_label = new views::Label(
234 l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_MESSAGE)); 211 l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_MESSAGE));
235 text_label->SetMultiLine(true); 212 text_label->SetMultiLine(true);
236 text_label->SetLineHeight(20); 213 text_label->SetLineHeight(20);
237 text_label->SetEnabledColor(SK_ColorDKGRAY);
238 text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 214 text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
239 text_label->SizeToFit(kWidthOfDescriptionText); 215 text_label->SizeToFit(kWidthOfDescriptionText);
240 216
241 // Restore button. 217 // Restore button.
242 restore_button_ = new views::LabelButton( 218 restore_button_ = new views::LabelButton(
243 this, l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_RESTORE_BUTTON)); 219 this, l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_RESTORE_BUTTON));
244 restore_button_->SetStyle(views::Button::STYLE_BUTTON); 220 restore_button_->SetStyle(views::Button::STYLE_BUTTON);
245 restore_button_->SetIsDefault(true); 221 restore_button_->SetIsDefault(true);
246 restore_button_->SetFontList(rb->GetFontList(ui::ResourceBundle::BoldFont));
247 222
248 GridLayout* layout = new GridLayout(this); 223 GridLayout* layout = new GridLayout(this);
249 SetLayoutManager(layout); 224 SetLayoutManager(layout);
250 225
251 // Title and close button row. 226 // Text row.
252 const int kTitleColumnSetId = 0; 227 const int kTextColumnSetId = 0;
253 views::ColumnSet* cs = layout->AddColumnSet(kTitleColumnSetId); 228 views::ColumnSet* cs = layout->AddColumnSet(kTextColumnSetId);
254 cs->AddPaddingColumn(0, kMarginWidth); 229 cs->AddPaddingColumn(0, GetBubbleFrameView()->GetTitleInsets().left());
255 cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0, 230 cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
231 GridLayout::FIXED, kWidthOfDescriptionText, 0);
232 cs->AddPaddingColumn(0, GetBubbleFrameView()->GetTitleInsets().left());
233
234 // Restore button row.
235 const int kButtonColumnSetId = 1;
236 cs = layout->AddColumnSet(kButtonColumnSetId);
237 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 1,
256 GridLayout::USE_PREF, 0, 0); 238 GridLayout::USE_PREF, 0, 0);
257 cs->AddPaddingColumn(1, views::kRelatedControlHorizontalSpacing); 239 cs->AddPaddingColumn(0, GetBubbleFrameView()->GetTitleInsets().left());
258 cs->AddColumn(GridLayout::TRAILING, GridLayout::LEADING, 0,
259 GridLayout::USE_PREF, 0, 0);
260
261 // Text row.
262 const int kTextColumnSetId = 1;
263 cs = layout->AddColumnSet(kTextColumnSetId);
264 cs->AddPaddingColumn(0, kMarginWidth);
265 cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
266 GridLayout::FIXED, kWidthOfDescriptionText, 0);
267
268 // Restore button row
269 const int kButtonColumnSetId = 2;
270 cs = layout->AddColumnSet(kButtonColumnSetId);
271 cs->AddPaddingColumn(0, kMarginWidth);
272 cs->AddPaddingColumn(1, views::kRelatedControlHorizontalSpacing);
273 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
274 GridLayout::USE_PREF, 0, 0);
275 cs->AddPaddingColumn(0, kMarginWidth);
276
277 layout->AddPaddingRow(0, kMarginHeight);
278 layout->StartRow(0, kTitleColumnSetId);
279 layout->AddView(title_label);
280 layout->AddView(close_);
281 layout->AddPaddingRow(0, kMarginHeight);
282 240
283 layout->StartRow(0, kTextColumnSetId); 241 layout->StartRow(0, kTextColumnSetId);
284 layout->AddView(text_label); 242 layout->AddView(text_label);
285 layout->AddPaddingRow(0, kMarginHeight); 243 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
286 244
287 layout->StartRow(0, kButtonColumnSetId); 245 layout->StartRow(0, kButtonColumnSetId);
288 layout->AddView(restore_button_); 246 layout->AddView(restore_button_);
289 layout->AddPaddingRow(0, kMarginHeight); 247 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
290 248
291 // Metrics reporting option. 249 // Metrics reporting option.
292 if (offer_uma_optin_) 250 if (offer_uma_optin_)
293 CreateUmaOptinView(layout); 251 CreateUmaOptinView(layout);
294 252
295 set_color(kWhiteBackgroundColor);
296 set_margins(gfx::Insets()); 253 set_margins(gfx::Insets());
297 Layout(); 254 Layout();
298 } 255 }
299 256
300 void SessionCrashedBubbleView::CreateUmaOptinView(GridLayout* layout) { 257 void SessionCrashedBubbleView::CreateUmaOptinView(GridLayout* layout) {
301 // Checkbox for metric reporting setting. 258 // Checkbox for metric reporting setting.
302 // Since the text to the right of the checkbox can't be a simple string (needs 259 // Since the text to the right of the checkbox can't be a simple string (needs
303 // a hyperlink in it), this checkbox contains an empty string as its label, 260 // a hyperlink in it), this checkbox contains an empty string as its label,
304 // and the real text will be added as a separate view. 261 // and the real text will be added as a separate view.
305 uma_option_ = new views::Checkbox(base::string16()); 262 uma_option_ = new views::Checkbox(base::string16());
306 uma_option_->SetTextColor(views::Button::STATE_NORMAL, SK_ColorGRAY);
307 uma_option_->SetChecked(false); 263 uma_option_->SetChecked(false);
308 uma_option_->set_background( 264 uma_option_->set_background(
309 views::Background::CreateSolidBackground(kLightGrayBackgroundColor)); 265 views::Background::CreateSolidBackground(kBackgroundColor));
310 uma_option_->set_listener(this);
311 266
312 // The text to the right of the checkbox. 267 // The text to the right of the checkbox.
313 size_t offset; 268 size_t offset;
314 base::string16 link_text = 269 base::string16 link_text =
315 l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_BUBBLE_UMA_LINK_TEXT); 270 l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_BUBBLE_UMA_LINK_TEXT);
316 base::string16 uma_text = l10n_util::GetStringFUTF16( 271 base::string16 uma_text = l10n_util::GetStringFUTF16(
317 IDS_SESSION_CRASHED_VIEW_UMA_OPTIN, 272 IDS_SESSION_CRASHED_VIEW_UMA_OPTIN,
318 link_text, 273 link_text,
319 &offset); 274 &offset);
320 views::StyledLabel* uma_label = new views::StyledLabel(uma_text, this); 275 views::StyledLabel* uma_label = new views::StyledLabel(uma_text, this);
321 uma_label->set_background( 276 uma_label->set_background(
322 views::Background::CreateSolidBackground(kLightGrayBackgroundColor)); 277 views::Background::CreateSolidBackground(kBackgroundColor));
323 views::StyledLabel::RangeStyleInfo link_style = 278 views::StyledLabel::RangeStyleInfo link_style =
324 views::StyledLabel::RangeStyleInfo::CreateForLink(); 279 views::StyledLabel::RangeStyleInfo::CreateForLink();
325 link_style.font_style = gfx::Font::NORMAL; 280 link_style.font_style = gfx::Font::NORMAL;
326 uma_label->AddStyleRange(gfx::Range(offset, offset + link_text.length()), 281 uma_label->AddStyleRange(gfx::Range(offset, offset + link_text.length()),
327 link_style); 282 link_style);
328 views::StyledLabel::RangeStyleInfo uma_style; 283 views::StyledLabel::RangeStyleInfo uma_style;
329 uma_style.color = SK_ColorGRAY; 284 uma_style.color = kTextColor;
330 gfx::Range before_link_range(0, offset); 285 gfx::Range before_link_range(0, offset);
331 if (!before_link_range.is_empty()) 286 if (!before_link_range.is_empty())
332 uma_label->AddStyleRange(before_link_range, uma_style); 287 uma_label->AddStyleRange(before_link_range, uma_style);
333 gfx::Range after_link_range(offset + link_text.length(), uma_text.length()); 288 gfx::Range after_link_range(offset + link_text.length(), uma_text.length());
334 if (!after_link_range.is_empty()) 289 if (!after_link_range.is_empty())
335 uma_label->AddStyleRange(after_link_range, uma_style); 290 uma_label->AddStyleRange(after_link_range, uma_style);
336 291
337 // We use a border instead of padding so that the background color reach 292 // We use a border instead of padding so that the background color reaches
338 // the edges of the bubble. 293 // the edges of the bubble.
339 uma_option_->SetBorder( 294 const gfx::Insets title_insets = GetBubbleFrameView()->GetTitleInsets();
340 views::Border::CreateSolidSidedBorder(0, kMarginWidth, 0, 0, 295 uma_option_->SetBorder(views::Border::CreateSolidSidedBorder(
341 kLightGrayBackgroundColor)); 296 0, title_insets.left(), 0, 0, kBackgroundColor));
342 uma_label->SetBorder( 297 uma_label->SetBorder(views::Border::CreateSolidSidedBorder(
343 views::Border::CreateSolidSidedBorder( 298 views::kRelatedControlVerticalSpacing, kCheckboxTextDistance,
344 kMarginHeight, kCheckboxTextDistance, kMarginHeight, kMarginWidth, 299 views::kRelatedControlVerticalSpacing, title_insets.left(),
345 kLightGrayBackgroundColor)); 300 kBackgroundColor));
346 301
347 // Separator. 302 // Separator.
348 const int kSeparatorColumnSetId = 3; 303 const int kSeparatorColumnSetId = 2;
349 views::ColumnSet* cs = layout->AddColumnSet(kSeparatorColumnSetId); 304 views::ColumnSet* cs = layout->AddColumnSet(kSeparatorColumnSetId);
350 cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, 305 cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
351 GridLayout::FIXED, kWidthOfDescriptionText + kMarginWidth, 0); 306 GridLayout::USE_PREF, 0, 0);
352 307
353 // Reporting row. 308 // Reporting row.
354 const int kReportColumnSetId = 4; 309 const int kReportColumnSetId = 3;
355 cs = layout->AddColumnSet(kReportColumnSetId); 310 cs = layout->AddColumnSet(kReportColumnSetId);
356 cs->AddColumn(GridLayout::CENTER, GridLayout::FILL, 0, 311 cs->AddColumn(GridLayout::CENTER, GridLayout::FILL, 0,
357 GridLayout::USE_PREF, 0, 0); 312 GridLayout::USE_PREF, 0, 0);
358 cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, 313 cs->AddColumn(GridLayout::FILL, GridLayout::FILL, 0,
359 GridLayout::FIXED, kWidthOfDescriptionText, 0); 314 GridLayout::FIXED, kWidthOfDescriptionText, 0);
360 315
361 layout->StartRow(0, kSeparatorColumnSetId); 316 layout->StartRow(0, kSeparatorColumnSetId);
362 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 317 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
363 layout->StartRow(0, kReportColumnSetId); 318 layout->StartRow(0, kReportColumnSetId);
364 layout->AddView(uma_option_); 319 layout->AddView(uma_option_);
365 layout->AddView(uma_label); 320 layout->AddView(uma_label);
366 } 321 }
367 322
368 void SessionCrashedBubbleView::ButtonPressed(views::Button* sender, 323 void SessionCrashedBubbleView::ButtonPressed(views::Button* sender,
369 const ui::Event& event) { 324 const ui::Event& event) {
370 DCHECK(sender); 325 DCHECK_EQ(sender, restore_button_);
371 if (sender == restore_button_) 326 RestorePreviousSession(sender);
372 RestorePreviousSession(sender);
373 else if (sender == close_)
374 CloseBubble();
375 } 327 }
376 328
377 void SessionCrashedBubbleView::StyledLabelLinkClicked(const gfx::Range& range, 329 void SessionCrashedBubbleView::StyledLabelLinkClicked(const gfx::Range& range,
378 int event_flags) { 330 int event_flags) {
379 browser_->OpenURL(content::OpenURLParams( 331 browser_->OpenURL(content::OpenURLParams(
380 GURL("https://support.google.com/chrome/answer/96817"), 332 GURL("https://support.google.com/chrome/answer/96817"),
381 content::Referrer(), 333 content::Referrer(),
382 NEW_FOREGROUND_TAB, 334 NEW_FOREGROUND_TAB,
383 content::PAGE_TRANSITION_LINK, 335 content::PAGE_TRANSITION_LINK,
384 false)); 336 false));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 GetWidget()->Close(); 392 GetWidget()->Close();
441 } 393 }
442 394
443 bool ShowSessionCrashedBubble(Browser* browser) { 395 bool ShowSessionCrashedBubble(Browser* browser) {
444 if (IsBubbleUIEnabled()) { 396 if (IsBubbleUIEnabled()) {
445 SessionCrashedBubbleView::Show(browser); 397 SessionCrashedBubbleView::Show(browser);
446 return true; 398 return true;
447 } 399 }
448 return false; 400 return false;
449 } 401 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/session_crashed_bubble_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698