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

Unified Diff: chrome/browser/ui/views/about_chrome_view.cc

Issue 8394042: Pass through installer errors from Google Update to the About box. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/about_chrome_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/about_chrome_view.cc
===================================================================
--- chrome/browser/ui/views/about_chrome_view.cc (revision 107550)
+++ chrome/browser/ui/views/about_chrome_view.cc (working copy)
@@ -50,6 +50,10 @@
#include "chrome/installer/util/install_util.h"
#endif // defined(OS_WIN)
+// The amount of vertical space separating the error label at the bottom from
+// the rest of the text.
+static const int kErrorLabelVerticalSpacing = 15; // Pixels.
+
namespace {
// These are used as placeholder text around the links in the text in the about
// dialog.
@@ -165,7 +169,12 @@
// This is a text field so people can copy the version number from the dialog.
version_label_ = new views::Textfield();
chrome::VersionInfo version_info;
- version_label_->SetText(UTF8ToUTF16(version_info.CreateVersionString()));
+ {
+ // TODO(finnur): Need to evaluate whether we should be doing IO here.
+ // See issue: http://crbug.com/101699.
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+ version_label_->SetText(UTF8ToUTF16(version_info.CreateVersionString()));
+ }
version_label_->SetReadOnly(true);
version_label_->RemoveBorder();
version_label_->SetTextColor(SK_ColorBLACK);
@@ -189,13 +198,13 @@
text.find(kBeginLinkChr) < text.find(kBeginLinkOss);
size_t link1 = text.find(kBeginLink);
- DCHECK(link1 != std::wstring::npos);
+ DCHECK(link1 != string16::npos);
size_t link1_end = text.find(kEndLink, link1);
- DCHECK(link1_end != std::wstring::npos);
+ DCHECK(link1_end != string16::npos);
size_t link2 = text.find(kBeginLink, link1_end);
- DCHECK(link2 != std::wstring::npos);
+ DCHECK(link2 != string16::npos);
size_t link2_end = text.find(kEndLink, link2);
- DCHECK(link1_end != std::wstring::npos);
+ DCHECK(link1_end != string16::npos);
main_label_chunk1_ = text.substr(0, link1);
main_label_chunk2_ = StringSubRange(text, link1_end + kEndLinkOss.size(),
@@ -267,6 +276,11 @@
AddChildView(terms_of_service_url_);
terms_of_service_url_->set_listener(this);
+ error_label_ = new views::Label();
+ error_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
+ error_label_->SetMultiLine(true);
+ AddChildView(error_label_);
+
// Add the Terms of Service line and some whitespace.
height += font.GetHeight() + views::kRelatedControlVerticalSpacing;
#endif
@@ -327,6 +341,16 @@
sz.width(),
main_text_label_height_);
+ // And the error label at the bottom of the main content. This does not fit on
+ // screen until EnlargeWindowSizeIfNeeded has been called (which happens when
+ // an error is returned from Google Update).
+ sz.set_height(error_label_->GetHeightForWidth(sz.width()));
+ error_label_->SetBounds(main_text_label_->bounds().x(),
+ main_text_label_->bounds().y() +
+ main_text_label_->height() +
+ kErrorLabelVerticalSpacing,
+ sz.width(), sz.height());
+
// Get the y-coordinate of our parent so we can position the text left of the
// buttons at the bottom.
gfx::Rect parent_bounds = parent()->GetContentsBounds();
@@ -484,7 +508,7 @@
if (!(base::win::GetVersion() == base::win::VERSION_VISTA &&
(base::win::OSInfo::GetInstance()->service_pack().major == 0) &&
!base::win::UserAccountControlIsEnabled())) {
- UpdateStatus(UPGRADE_CHECK_STARTED, GOOGLE_UPDATE_NO_ERROR);
+ UpdateStatus(UPGRADE_CHECK_STARTED, GOOGLE_UPDATE_NO_ERROR, string16());
// CheckForUpdate(false, ...) means don't upgrade yet.
google_updater_->CheckForUpdate(false, GetWidget());
}
@@ -593,6 +617,7 @@
void AboutChromeView::OnReportResults(GoogleUpdateUpgradeResult result,
GoogleUpdateErrorCode error_code,
+ const string16& error_message,
const string16& version) {
// Drop the last reference to the object so that it gets cleaned up here.
google_updater_ = NULL;
@@ -600,13 +625,14 @@
// Make a note of which version Google Update is reporting is the latest
// version.
new_version_available_ = version;
- UpdateStatus(result, error_code);
+ UpdateStatus(result, error_code, error_message);
}
////////////////////////////////////////////////////////////////////////////////
// AboutChromeView, private:
void AboutChromeView::UpdateStatus(GoogleUpdateUpgradeResult result,
- GoogleUpdateErrorCode error_code) {
+ GoogleUpdateErrorCode error_code,
+ const string16& error_message) {
#if !defined(GOOGLE_CHROME_BUILD)
// For Chromium builds it would show an error message.
// But it looks weird because in fact there is no error,
@@ -638,7 +664,7 @@
DCHECK(!google_updater_); // Should have been nulled out already.
google_updater_ = new GoogleUpdate();
google_updater_->set_status_listener(this);
- UpdateStatus(UPGRADE_STARTED, GOOGLE_UPDATE_NO_ERROR);
+ UpdateStatus(UPGRADE_STARTED, GOOGLE_UPDATE_NO_ERROR, string16());
// CheckForUpdate(true,...) means perform upgrade if new version found.
google_updater_->CheckForUpdate(true, GetWidget());
// TODO(seanparent): Need to see if this code needs to change to
@@ -668,7 +694,7 @@
(installed_version->CompareTo(*running_version) <= 0)) {
UserMetrics::RecordAction(
UserMetricsAction("UpgradeCheck_AlreadyUpToDate"));
- std::wstring update_label_text = l10n_util::GetStringFUTF16(
+ string16 update_label_text = l10n_util::GetStringFUTF16(
IDS_UPGRADE_ALREADY_UP_TO_DATE,
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME),
ASCIIToUTF16(version_info.Version()));
@@ -689,7 +715,7 @@
else
UserMetrics::RecordAction(UserMetricsAction("UpgradeCheck_Upgraded"));
restart_button_visible_ = true;
- const std::wstring& update_string =
+ const string16& update_string =
UTF16ToWide(l10n_util::GetStringFUTF16(
IDS_UPGRADE_SUCCESSFUL_RELAUNCH,
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
@@ -697,8 +723,16 @@
show_success_indicator = true;
break;
}
- case UPGRADE_ERROR:
+ case UPGRADE_ERROR: {
UserMetrics::RecordAction(UserMetricsAction("UpgradeCheck_Error"));
+ if (!error_message.empty()) {
+ error_label_->SetText(
+ l10n_util::GetStringFUTF16(IDS_ABOUT_BOX_ERROR_DURING_UPDATE_CHECK,
+ error_message));
+ int added_height = EnlargeWindowSizeIfNeeded();
+ dialog_dimensions_.set_height(dialog_dimensions_.height() +
+ added_height);
+ }
restart_button_visible_ = false;
if (error_code != GOOGLE_UPDATE_DISABLED_BY_POLICY) {
update_label_.SetText(
@@ -709,6 +743,7 @@
}
show_timeout_indicator = true;
break;
+ }
default:
NOTREACHED();
}
@@ -732,4 +767,20 @@
GetDialogClientView()->UpdateDialogButtons();
}
+int AboutChromeView::EnlargeWindowSizeIfNeeded() {
+ if (error_label_->GetText().empty())
+ return 0;
+
+ // This will enlarge the window each time the function is called, which is
+ // fine since we only receive status once from Google Update.
+ gfx::Rect window_rect = GetWidget()->GetWindowScreenBounds();
+ int height = error_label_->GetHeightForWidth(
+ dialog_dimensions_.width() - (2 * views::kPanelHorizMargin)) +
+ views::kRelatedControlVerticalSpacing;
+ window_rect.set_height(window_rect.height() + height);
+ GetWidget()->SetBounds(window_rect);
+
+ return height;
+}
+
#endif
« no previous file with comments | « chrome/browser/ui/views/about_chrome_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698