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

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

Issue 10703110: browser/ui: Unify the enum Kind of SadTab used by SadTabViews and SabTabGtk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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/sad_tab_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/sad_tab_view.h" 5 #include "chrome/browser/ui/views/sad_tab_view.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 { \ 57 { \
58 UMA_HISTOGRAM_CUSTOM_COUNTS(name, sample, min, max, buckets); \ 58 UMA_HISTOGRAM_CUSTOM_COUNTS(name, sample, min, max, buckets); \
59 if (base::FieldTrialList::TrialExists(kExperiment)) \ 59 if (base::FieldTrialList::TrialExists(kExperiment)) \
60 UMA_HISTOGRAM_CUSTOM_COUNTS( \ 60 UMA_HISTOGRAM_CUSTOM_COUNTS( \
61 base::FieldTrial::MakeName(name, kExperiment), \ 61 base::FieldTrial::MakeName(name, kExperiment), \
62 sample, min, max, buckets); \ 62 sample, min, max, buckets); \
63 } 63 }
64 64
65 } // namespace 65 } // namespace
66 66
67 SadTabView::SadTabView(WebContents* web_contents, Kind kind) 67 SadTabView::SadTabView(WebContents* web_contents, chrome::SadTabKind kind)
68 : web_contents_(web_contents), 68 : web_contents_(web_contents),
69 kind_(kind), 69 kind_(kind),
70 painted_(false), 70 painted_(false),
71 base_font_(ui::ResourceBundle::GetSharedInstance().GetFont( 71 base_font_(ui::ResourceBundle::GetSharedInstance().GetFont(
72 ui::ResourceBundle::BaseFont)), 72 ui::ResourceBundle::BaseFont)),
73 message_(NULL), 73 message_(NULL),
74 help_link_(NULL), 74 help_link_(NULL),
75 feedback_link_(NULL), 75 feedback_link_(NULL),
76 reload_button_(NULL) { 76 reload_button_(NULL) {
77 DCHECK(web_contents); 77 DCHECK(web_contents);
78 78
79 // Sometimes the user will never see this tab, so keep track of the total 79 // Sometimes the user will never see this tab, so keep track of the total
80 // number of creation events to compare to display events. 80 // number of creation events to compare to display events.
81 // TODO(jamescook): Remove this after R20 stable. Keep it for now so we can 81 // TODO(jamescook): Remove this after R20 stable. Keep it for now so we can
82 // compare R20 to earlier versions. 82 // compare R20 to earlier versions.
83 UMA_HISTOGRAM_COUNTS("SadTab.Created", kind_); 83 UMA_HISTOGRAM_COUNTS("SadTab.Created", kind_);
84 84
85 // These stats should use the same counting approach and bucket size used for 85 // These stats should use the same counting approach and bucket size used for
86 // tab discard events in chrome/browser/oom_priority_manager.cc so they can be 86 // tab discard events in chrome/browser/oom_priority_manager.cc so they can be
87 // directly compared. 87 // directly compared.
88 // TODO(jamescook): Maybe track time between sad tabs? 88 // TODO(jamescook): Maybe track time between sad tabs?
89 switch (kind_) { 89 switch (kind_) {
90 case CRASHED: { 90 case chrome::SAD_TAB_KIND_CRASHED: {
91 static int crashed = 0; 91 static int crashed = 0;
92 crashed++; 92 crashed++;
93 EXPERIMENT_CUSTOM_COUNTS( 93 EXPERIMENT_CUSTOM_COUNTS(
94 "Tabs.SadTab.CrashCreated", crashed, 1, 1000, 50); 94 "Tabs.SadTab.CrashCreated", crashed, 1, 1000, 50);
95 break; 95 break;
96 } 96 }
97 case KILLED: { 97 case chrome::SAD_TAB_KIND_KILLED: {
98 static int killed = 0; 98 static int killed = 0;
99 killed++; 99 killed++;
100 EXPERIMENT_CUSTOM_COUNTS( 100 EXPERIMENT_CUSTOM_COUNTS(
101 "Tabs.SadTab.KillCreated", killed, 1, 1000, 50); 101 "Tabs.SadTab.KillCreated", killed, 1, 1000, 50);
102 break; 102 break;
103 } 103 }
104 default: 104 default:
105 NOTREACHED(); 105 NOTREACHED();
106 } 106 }
107 107
108 // Set the background color. 108 // Set the background color.
109 set_background(views::Background::CreateSolidBackground( 109 set_background(views::Background::CreateSolidBackground(
110 (kind_ == CRASHED) ? kCrashColor : kKillColor)); 110 (kind_ == chrome::SAD_TAB_KIND_CRASHED) ? kCrashColor : kKillColor));
111 } 111 }
112 112
113 SadTabView::~SadTabView() {} 113 SadTabView::~SadTabView() {}
114 114
115 void SadTabView::LinkClicked(views::Link* source, int event_flags) { 115 void SadTabView::LinkClicked(views::Link* source, int event_flags) {
116 DCHECK(web_contents_); 116 DCHECK(web_contents_);
117 if (source == help_link_) { 117 if (source == help_link_) {
118 GURL help_url( 118 GURL help_url((kind_ == chrome::SAD_TAB_KIND_CRASHED) ?
119 kind_ == CRASHED ? chrome::kCrashReasonURL : chrome::kKillReasonURL); 119 chrome::kCrashReasonURL : chrome::kKillReasonURL);
120 OpenURLParams params( 120 OpenURLParams params(
121 help_url, content::Referrer(), CURRENT_TAB, 121 help_url, content::Referrer(), CURRENT_TAB,
122 content::PAGE_TRANSITION_LINK, false); 122 content::PAGE_TRANSITION_LINK, false);
123 web_contents_->OpenURL(params); 123 web_contents_->OpenURL(params);
124 } else if (source == feedback_link_) { 124 } else if (source == feedback_link_) {
125 browser::ShowWebFeedbackView( 125 browser::ShowWebFeedbackView(
126 browser::FindBrowserWithWebContents(web_contents_), 126 browser::FindBrowserWithWebContents(web_contents_),
127 l10n_util::GetStringUTF8(IDS_KILLED_TAB_FEEDBACK_MESSAGE), 127 l10n_util::GetStringUTF8(IDS_KILLED_TAB_FEEDBACK_MESSAGE),
128 std::string(kCategoryTagCrash)); 128 std::string(kCategoryTagCrash));
129 } 129 }
(...skipping 23 matching lines...) Expand all
153 153
154 const int column_set_id = 0; 154 const int column_set_id = 0;
155 views::ColumnSet* columns = layout->AddColumnSet(column_set_id); 155 views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
156 columns->AddPaddingColumn(1, kPadding); 156 columns->AddPaddingColumn(1, kPadding);
157 columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 157 columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER,
158 0, views::GridLayout::USE_PREF, 0, 0); 158 0, views::GridLayout::USE_PREF, 0, 0);
159 columns->AddPaddingColumn(1, kPadding); 159 columns->AddPaddingColumn(1, kPadding);
160 160
161 views::ImageView* image = new views::ImageView(); 161 views::ImageView* image = new views::ImageView();
162 image->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 162 image->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
163 (kind_ == CRASHED) ? IDR_SAD_TAB : IDR_KILLED_TAB)); 163 (kind_ == chrome::SAD_TAB_KIND_CRASHED) ? IDR_SAD_TAB : IDR_KILLED_TAB));
164 layout->StartRowWithPadding(0, column_set_id, 1, kPadding); 164 layout->StartRowWithPadding(0, column_set_id, 1, kPadding);
165 layout->AddView(image); 165 layout->AddView(image);
166 166
167 views::Label* title = CreateLabel(l10n_util::GetStringUTF16( 167 views::Label* title = CreateLabel(l10n_util::GetStringUTF16(
168 (kind_ == CRASHED) ? IDS_SAD_TAB_TITLE : IDS_KILLED_TAB_TITLE)); 168 (kind_ == chrome::SAD_TAB_KIND_CRASHED) ?
169 IDS_SAD_TAB_TITLE : IDS_KILLED_TAB_TITLE));
169 title->SetFont(base_font_.DeriveFont(kTitleFontSizeDelta, gfx::Font::BOLD)); 170 title->SetFont(base_font_.DeriveFont(kTitleFontSizeDelta, gfx::Font::BOLD));
170 layout->StartRowWithPadding(0, column_set_id, 0, kPadding); 171 layout->StartRowWithPadding(0, column_set_id, 0, kPadding);
171 layout->AddView(title); 172 layout->AddView(title);
172 173
173 message_ = CreateLabel(l10n_util::GetStringUTF16( 174 message_ = CreateLabel(l10n_util::GetStringUTF16(
174 (kind_ == CRASHED) ? IDS_SAD_TAB_MESSAGE : IDS_KILLED_TAB_MESSAGE)); 175 (kind_ == chrome::SAD_TAB_KIND_CRASHED) ?
176 IDS_SAD_TAB_MESSAGE : IDS_KILLED_TAB_MESSAGE));
175 message_->SetMultiLine(true); 177 message_->SetMultiLine(true);
176 layout->StartRowWithPadding(0, column_set_id, 0, kPadding); 178 layout->StartRowWithPadding(0, column_set_id, 0, kPadding);
177 layout->AddView(message_); 179 layout->AddView(message_);
178 180
179 if (web_contents_) { 181 if (web_contents_) {
180 layout->StartRowWithPadding(0, column_set_id, 0, kPadding); 182 layout->StartRowWithPadding(0, column_set_id, 0, kPadding);
181 reload_button_ = new views::TextButton( 183 reload_button_ = new views::TextButton(
182 this, 184 this,
183 l10n_util::GetStringUTF16(IDS_SAD_TAB_RELOAD_LABEL)); 185 l10n_util::GetStringUTF16(IDS_SAD_TAB_RELOAD_LABEL));
184 reload_button_->set_border(new views::TextButtonNativeThemeBorder( 186 reload_button_->set_border(new views::TextButtonNativeThemeBorder(
185 reload_button_)); 187 reload_button_));
186 layout->AddView(reload_button_); 188 layout->AddView(reload_button_);
187 189
188 help_link_ = CreateLink(l10n_util::GetStringUTF16( 190 help_link_ = CreateLink(l10n_util::GetStringUTF16(
189 (kind_ == CRASHED) ? IDS_SAD_TAB_HELP_LINK : IDS_LEARN_MORE)); 191 (kind_ == chrome::SAD_TAB_KIND_CRASHED) ?
192 IDS_SAD_TAB_HELP_LINK : IDS_LEARN_MORE));
190 193
191 if (kind_ == CRASHED) { 194 if (kind_ == chrome::SAD_TAB_KIND_CRASHED) {
192 size_t offset = 0; 195 size_t offset = 0;
193 string16 help_text(l10n_util::GetStringFUTF16(IDS_SAD_TAB_HELP_MESSAGE, 196 string16 help_text(l10n_util::GetStringFUTF16(IDS_SAD_TAB_HELP_MESSAGE,
194 string16(), &offset)); 197 string16(), &offset));
195 views::Label* help_prefix = CreateLabel(help_text.substr(0, offset)); 198 views::Label* help_prefix = CreateLabel(help_text.substr(0, offset));
196 views::Label* help_suffix = CreateLabel(help_text.substr(offset)); 199 views::Label* help_suffix = CreateLabel(help_text.substr(offset));
197 200
198 const int help_column_set_id = 1; 201 const int help_column_set_id = 1;
199 views::ColumnSet* help_columns = layout->AddColumnSet(help_column_set_id); 202 views::ColumnSet* help_columns = layout->AddColumnSet(help_column_set_id);
200 help_columns->AddPaddingColumn(1, kPadding); 203 help_columns->AddPaddingColumn(1, kPadding);
201 // Center three middle columns for the help's [prefix][link][suffix]. 204 // Center three middle columns for the help's [prefix][link][suffix].
(...skipping 23 matching lines...) Expand all
225 if (!painted_) { 228 if (!painted_) {
226 // User actually saw the error, keep track for user experience stats. 229 // User actually saw the error, keep track for user experience stats.
227 // TODO(jamescook): Remove this after R20 stable. Keep it for now so we can 230 // TODO(jamescook): Remove this after R20 stable. Keep it for now so we can
228 // compare R20 to earlier versions. 231 // compare R20 to earlier versions.
229 UMA_HISTOGRAM_COUNTS("SadTab.Displayed", kind_); 232 UMA_HISTOGRAM_COUNTS("SadTab.Displayed", kind_);
230 233
231 // These stats should use the same counting approach and bucket size used 234 // These stats should use the same counting approach and bucket size used
232 // for tab discard events in chrome/browser/oom_priority_manager.cc so they 235 // for tab discard events in chrome/browser/oom_priority_manager.cc so they
233 // can be directly compared. 236 // can be directly compared.
234 switch (kind_) { 237 switch (kind_) {
235 case CRASHED: { 238 case chrome::SAD_TAB_KIND_CRASHED: {
236 static int crashed = 0; 239 static int crashed = 0;
237 UMA_HISTOGRAM_CUSTOM_COUNTS( 240 UMA_HISTOGRAM_CUSTOM_COUNTS(
238 "Tabs.SadTab.CrashDisplayed", ++crashed, 1, 1000, 50); 241 "Tabs.SadTab.CrashDisplayed", ++crashed, 1, 1000, 50);
239 break; 242 break;
240 } 243 }
241 case KILLED: { 244 case chrome::SAD_TAB_KIND_KILLED: {
242 static int killed = 0; 245 static int killed = 0;
243 UMA_HISTOGRAM_CUSTOM_COUNTS( 246 UMA_HISTOGRAM_CUSTOM_COUNTS(
244 "Tabs.SadTab.KillDisplayed", ++killed, 1, 1000, 50); 247 "Tabs.SadTab.KillDisplayed", ++killed, 1, 1000, 50);
245 break; 248 break;
246 } 249 }
247 default: 250 default:
248 NOTREACHED(); 251 NOTREACHED();
249 } 252 }
250 painted_ = true; 253 painted_ = true;
251 } 254 }
252 View::OnPaint(canvas); 255 View::OnPaint(canvas);
253 } 256 }
254 257
255 views::Label* SadTabView::CreateLabel(const string16& text) { 258 views::Label* SadTabView::CreateLabel(const string16& text) {
256 views::Label* label = new views::Label(text); 259 views::Label* label = new views::Label(text);
257 label->SetFont(base_font_.DeriveFont(kMessageFontSizeDelta)); 260 label->SetFont(base_font_.DeriveFont(kMessageFontSizeDelta));
258 label->SetBackgroundColor(background()->get_color()); 261 label->SetBackgroundColor(background()->get_color());
259 label->SetEnabledColor(kTextColor); 262 label->SetEnabledColor(kTextColor);
260 return label; 263 return label;
261 } 264 }
262 265
263 views::Link* SadTabView::CreateLink(const string16& text) { 266 views::Link* SadTabView::CreateLink(const string16& text) {
264 views::Link* link = new views::Link(text); 267 views::Link* link = new views::Link(text);
265 link->SetFont(base_font_.DeriveFont(kMessageFontSizeDelta)); 268 link->SetFont(base_font_.DeriveFont(kMessageFontSizeDelta));
266 link->SetBackgroundColor(background()->get_color()); 269 link->SetBackgroundColor(background()->get_color());
267 link->SetEnabledColor(kTextColor); 270 link->SetEnabledColor(kTextColor);
268 link->set_listener(this); 271 link->set_listener(this);
269 return link; 272 return link;
270 } 273 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/sad_tab_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698