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

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

Issue 7104106: Unify the version string to be displayed on "About Chromium" dialog. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Add "git config --get-regexp ^svn-remote.svn.url" Created 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/about_chrome_view.h" 5 #include "chrome/browser/ui/views/about_chrome_view.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <commdlg.h> 8 #include <commdlg.h>
9 #endif // defined(OS_WIN) 9 #endif // defined(OS_WIN)
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "chrome/browser/browser_process.h" 48 #include "chrome/browser/browser_process.h"
49 #include "chrome/browser/ui/views/restart_message_box.h" 49 #include "chrome/browser/ui/views/restart_message_box.h"
50 #include "chrome/installer/util/install_util.h" 50 #include "chrome/installer/util/install_util.h"
51 #endif // defined(OS_WIN) 51 #endif // defined(OS_WIN)
52 52
53 namespace { 53 namespace {
54 // The pixel width of the version text field. Ideally, we'd like to have the 54 // The pixel width of the version text field. Ideally, we'd like to have the
55 // bounds set to the edge of the icon. However, the icon is not a view but a 55 // bounds set to the edge of the icon. However, the icon is not a view but a
56 // part of the background, so we have to hard code the width to make sure 56 // part of the background, so we have to hard code the width to make sure
57 // the version field doesn't overlap it. 57 // the version field doesn't overlap it.
58 const int kVersionFieldWidth = 195; 58 const int kVersionFieldWidth = 290;
59 59
60 // These are used as placeholder text around the links in the text in the about 60 // These are used as placeholder text around the links in the text in the about
61 // dialog. 61 // dialog.
62 const wchar_t* kBeginLink = L"BEGIN_LINK"; 62 const wchar_t* kBeginLink = L"BEGIN_LINK";
63 const wchar_t* kEndLink = L"END_LINK"; 63 const wchar_t* kEndLink = L"END_LINK";
64 const wchar_t* kBeginLinkChr = L"BEGIN_LINK_CHR"; 64 const wchar_t* kBeginLinkChr = L"BEGIN_LINK_CHR";
65 const wchar_t* kBeginLinkOss = L"BEGIN_LINK_OSS"; 65 const wchar_t* kBeginLinkOss = L"BEGIN_LINK_OSS";
66 const wchar_t* kEndLinkChr = L"END_LINK_CHR"; 66 const wchar_t* kEndLinkChr = L"END_LINK_CHR";
67 const wchar_t* kEndLinkOss = L"END_LINK_OSS"; 67 const wchar_t* kEndLinkOss = L"END_LINK_OSS";
68 68
(...skipping 25 matching lines...) Expand all
94 } // namespace browser 94 } // namespace browser
95 95
96 //////////////////////////////////////////////////////////////////////////////// 96 ////////////////////////////////////////////////////////////////////////////////
97 // AboutChromeView, public: 97 // AboutChromeView, public:
98 98
99 AboutChromeView::AboutChromeView(Profile* profile) 99 AboutChromeView::AboutChromeView(Profile* profile)
100 : profile_(profile), 100 : profile_(profile),
101 about_dlg_background_logo_(NULL), 101 about_dlg_background_logo_(NULL),
102 about_title_label_(NULL), 102 about_title_label_(NULL),
103 version_label_(NULL), 103 version_label_(NULL),
104 os_version_label_(NULL),
105 copyright_label_(NULL), 104 copyright_label_(NULL),
106 main_text_label_(NULL), 105 main_text_label_(NULL),
107 main_text_label_height_(0), 106 main_text_label_height_(0),
108 chromium_url_(NULL), 107 chromium_url_(NULL),
109 open_source_url_(NULL), 108 open_source_url_(NULL),
110 terms_of_service_url_(NULL), 109 terms_of_service_url_(NULL),
111 restart_button_visible_(false), 110 restart_button_visible_(false),
112 chromium_url_appears_first_(true), 111 chromium_url_appears_first_(true),
113 text_direction_is_rtl_(false) { 112 text_direction_is_rtl_(false) {
114 DCHECK(profile); 113 DCHECK(profile);
(...skipping 17 matching lines...) Expand all
132 // need to let it know that we will no longer be listening. 131 // need to let it know that we will no longer be listening.
133 if (google_updater_) 132 if (google_updater_)
134 google_updater_->set_status_listener(NULL); 133 google_updater_->set_status_listener(NULL);
135 #endif 134 #endif
136 } 135 }
137 136
138 void AboutChromeView::Init() { 137 void AboutChromeView::Init() {
139 text_direction_is_rtl_ = base::i18n::IsRTL(); 138 text_direction_is_rtl_ = base::i18n::IsRTL();
140 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 139 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
141 140
142 chrome::VersionInfo version_info;
143 if (!version_info.is_valid()) {
144 NOTREACHED() << L"Failed to initialize about window";
145 return;
146 }
147
148 current_version_ = version_info.Version();
149
150 // This code only runs as a result of the user opening the About box so
151 // doing registry access to get the version string modifier should be fine.
152 base::ThreadRestrictions::ScopedAllowIO allow_io;
153 std::string version_modifier = platform_util::GetVersionStringModifier();
154 if (!version_modifier.empty())
155 version_details_ += " " + version_modifier;
156
157 #if !defined(GOOGLE_CHROME_BUILD)
158 version_details_ += " (";
159 version_details_ += l10n_util::GetStringUTF8(
160 version_info.IsOfficialBuild() ?
161 IDS_ABOUT_VERSION_OFFICIAL : IDS_ABOUT_VERSION_UNOFFICIAL);
162 version_details_ += " ";
163 version_details_ += version_info.LastChange();
164 version_details_ += ")";
165 #endif
166
167 // Views we will add to the *parent* of this dialog, since it will display 141 // Views we will add to the *parent* of this dialog, since it will display
168 // next to the buttons which we don't draw ourselves. 142 // next to the buttons which we don't draw ourselves.
169 throbber_.reset(new views::Throbber(50, true)); 143 throbber_.reset(new views::Throbber(50, true));
170 throbber_->set_parent_owned(false); 144 throbber_->set_parent_owned(false);
171 throbber_->SetVisible(false); 145 throbber_->SetVisible(false);
172 146
173 SkBitmap* success_image = rb.GetBitmapNamed(IDR_UPDATE_UPTODATE); 147 SkBitmap* success_image = rb.GetBitmapNamed(IDR_UPDATE_UPTODATE);
174 success_indicator_.SetImage(*success_image); 148 success_indicator_.SetImage(*success_image);
175 success_indicator_.set_parent_owned(false); 149 success_indicator_.set_parent_owned(false);
176 150
(...skipping 22 matching lines...) Expand all
199 // Add the dialog labels. 173 // Add the dialog labels.
200 about_title_label_ = new views::Label( 174 about_title_label_ = new views::Label(
201 UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); 175 UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
202 about_title_label_->SetFont(ResourceBundle::GetSharedInstance().GetFont( 176 about_title_label_->SetFont(ResourceBundle::GetSharedInstance().GetFont(
203 ResourceBundle::BaseFont).DeriveFont(18)); 177 ResourceBundle::BaseFont).DeriveFont(18));
204 about_title_label_->SetColor(SK_ColorBLACK); 178 about_title_label_->SetColor(SK_ColorBLACK);
205 AddChildView(about_title_label_); 179 AddChildView(about_title_label_);
206 180
207 // This is a text field so people can copy the version number from the dialog. 181 // This is a text field so people can copy the version number from the dialog.
208 version_label_ = new views::Textfield(); 182 version_label_ = new views::Textfield();
209 version_label_->SetText(ASCIIToUTF16(current_version_ + version_details_)); 183 chrome::VersionInfo version_info;
184 version_label_->SetText(UTF8ToUTF16(version_info.CreateVersionString()));
210 version_label_->SetReadOnly(true); 185 version_label_->SetReadOnly(true);
211 version_label_->RemoveBorder(); 186 version_label_->RemoveBorder();
212 version_label_->SetTextColor(SK_ColorBLACK); 187 version_label_->SetTextColor(SK_ColorBLACK);
213 version_label_->SetBackgroundColor(SK_ColorWHITE); 188 version_label_->SetBackgroundColor(SK_ColorWHITE);
214 version_label_->SetFont(ResourceBundle::GetSharedInstance().GetFont( 189 version_label_->SetFont(ResourceBundle::GetSharedInstance().GetFont(
215 ResourceBundle::BaseFont)); 190 ResourceBundle::BaseFont));
216 AddChildView(version_label_); 191 AddChildView(version_label_);
217 192
218 os_version_label_ = new views::Textfield();
219 os_version_label_->SetText(UTF8ToUTF16(version_info.OSType()));
220 os_version_label_->SetReadOnly(true);
221 os_version_label_->RemoveBorder();
222 os_version_label_->SetTextColor(SK_ColorBLACK);
223 os_version_label_->SetBackgroundColor(SK_ColorWHITE);
224 os_version_label_->SetFont(ResourceBundle::GetSharedInstance().GetFont(
225 ResourceBundle::BaseFont));
226 AddChildView(os_version_label_);
227
228 // The copyright URL portion of the main label. 193 // The copyright URL portion of the main label.
229 copyright_label_ = new views::Label( 194 copyright_label_ = new views::Label(
230 UTF16ToWide(l10n_util::GetStringUTF16(IDS_ABOUT_VERSION_COPYRIGHT))); 195 UTF16ToWide(l10n_util::GetStringUTF16(IDS_ABOUT_VERSION_COPYRIGHT)));
231 copyright_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 196 copyright_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
232 AddChildView(copyright_label_); 197 AddChildView(copyright_label_);
233 198
234 main_text_label_ = new views::Label(L""); 199 main_text_label_ = new views::Label(L"");
235 200
236 // Figure out what to write in the main label of the About box. 201 // Figure out what to write in the main label of the About box.
237 std::wstring text = 202 std::wstring text =
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 310
346 // Then we have the version number right below it. 311 // Then we have the version number right below it.
347 sz = version_label_->GetPreferredSize(); 312 sz = version_label_->GetPreferredSize();
348 version_label_->SetBounds(views::kPanelHorizMargin, 313 version_label_->SetBounds(views::kPanelHorizMargin,
349 about_title_label_->y() + 314 about_title_label_->y() +
350 about_title_label_->height() + 315 about_title_label_->height() +
351 views::kRelatedControlVerticalSpacing, 316 views::kRelatedControlVerticalSpacing,
352 kVersionFieldWidth, 317 kVersionFieldWidth,
353 sz.height()); 318 sz.height());
354 319
355 // Then we have the version number right below it.
356 sz = os_version_label_->GetPreferredSize();
357 os_version_label_->SetBounds(
358 views::kPanelHorizMargin,
359 version_label_->y() +
360 version_label_->height() +
361 views::kRelatedControlVerticalSpacing,
362 kVersionFieldWidth,
363 sz.height());
364
365 // For the width of the main text label we want to use up the whole panel 320 // For the width of the main text label we want to use up the whole panel
366 // width and remaining height, minus a little margin on each side. 321 // width and remaining height, minus a little margin on each side.
367 int y_pos = background_image_height + views::kRelatedControlVerticalSpacing; 322 int y_pos = background_image_height + views::kRelatedControlVerticalSpacing;
368 sz.set_width(panel_size.width() - 2 * views::kPanelHorizMargin); 323 sz.set_width(panel_size.width() - 2 * views::kPanelHorizMargin);
369 324
370 // Draw the text right below the background image. 325 // Draw the text right below the background image.
371 copyright_label_->SetBounds(views::kPanelHorizMargin, 326 copyright_label_->SetBounds(views::kPanelHorizMargin,
372 y_pos, 327 y_pos,
373 sz.width(), 328 sz.width(),
374 sz.height()); 329 sz.height());
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 // The extra version check is necessary on Windows because the application 658 // The extra version check is necessary on Windows because the application
704 // may be already up to date on disk though the running app is still 659 // may be already up to date on disk though the running app is still
705 // out of date. Chrome OS doesn't quite have this issue since the 660 // out of date. Chrome OS doesn't quite have this issue since the
706 // OS/App are updated together. If a newer version of the OS has been 661 // OS/App are updated together. If a newer version of the OS has been
707 // staged then UPGRADE_SUCESSFUL will be returned. 662 // staged then UPGRADE_SUCESSFUL will be returned.
708 // Google Update reported that Chrome is up-to-date. Now make sure that we 663 // Google Update reported that Chrome is up-to-date. Now make sure that we
709 // are running the latest version and if not, notify the user by falling 664 // are running the latest version and if not, notify the user by falling
710 // into the next case of UPGRADE_SUCCESSFUL. 665 // into the next case of UPGRADE_SUCCESSFUL.
711 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 666 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
712 base::ThreadRestrictions::ScopedAllowIO allow_io; 667 base::ThreadRestrictions::ScopedAllowIO allow_io;
668 chrome::VersionInfo version_info;
713 scoped_ptr<Version> installed_version( 669 scoped_ptr<Version> installed_version(
714 InstallUtil::GetChromeVersion(dist, false)); 670 InstallUtil::GetChromeVersion(dist, false));
715 if (!installed_version.get()) { 671 if (!installed_version.get()) {
716 // User-level Chrome is not installed, check system-level. 672 // User-level Chrome is not installed, check system-level.
717 installed_version.reset(InstallUtil::GetChromeVersion(dist, true)); 673 installed_version.reset(InstallUtil::GetChromeVersion(dist, true));
718 } 674 }
719 scoped_ptr<Version> running_version( 675 scoped_ptr<Version> running_version(
720 Version::GetVersionFromString(current_version_)); 676 Version::GetVersionFromString(version_info.Version()));
721 if (!installed_version.get() || 677 if (!installed_version.get() ||
722 (installed_version->CompareTo(*running_version) <= 0)) { 678 (installed_version->CompareTo(*running_version) <= 0)) {
723 UserMetrics::RecordAction( 679 UserMetrics::RecordAction(
724 UserMetricsAction("UpgradeCheck_AlreadyUpToDate")); 680 UserMetricsAction("UpgradeCheck_AlreadyUpToDate"));
725 std::wstring update_label_text = l10n_util::GetStringFUTF16( 681 std::wstring update_label_text = l10n_util::GetStringFUTF16(
726 IDS_UPGRADE_ALREADY_UP_TO_DATE, 682 IDS_UPGRADE_ALREADY_UP_TO_DATE,
727 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME), 683 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME),
728 ASCIIToUTF16(current_version_)); 684 ASCIIToUTF16(version_info.Version()));
729 if (base::i18n::IsRTL()) { 685 if (base::i18n::IsRTL()) {
730 update_label_text.push_back( 686 update_label_text.push_back(
731 static_cast<wchar_t>(base::i18n::kLeftToRightMark)); 687 static_cast<wchar_t>(base::i18n::kLeftToRightMark));
732 } 688 }
733 update_label_.SetText(update_label_text); 689 update_label_.SetText(update_label_text);
734 show_success_indicator = true; 690 show_success_indicator = true;
735 break; 691 break;
736 } 692 }
737 // No break here as we want to notify user about upgrade if there is one. 693 // No break here as we want to notify user about upgrade if there is one.
738 } 694 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 // We have updated controls on the parent, so we need to update its layout. 736 // We have updated controls on the parent, so we need to update its layout.
781 parent()->Layout(); 737 parent()->Layout();
782 738
783 // Check button may have appeared/disappeared. We cannot call this during 739 // Check button may have appeared/disappeared. We cannot call this during
784 // ViewHierarchyChanged because the view hasn't been added to a Widget yet. 740 // ViewHierarchyChanged because the view hasn't been added to a Widget yet.
785 if (GetWidget()) 741 if (GetWidget())
786 GetDialogClientView()->UpdateDialogButtons(); 742 GetDialogClientView()->UpdateDialogButtons();
787 } 743 }
788 744
789 #endif 745 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698