summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfinnur@google.com <finnur@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-10 19:30:35 +0000
committerfinnur@google.com <finnur@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-10 19:30:35 +0000
commit8fbab00264861b95a99a8232ba75e0994c46c185 (patch)
tree3262192c55378e22383f5890eb9e47aeaa7bb762
parentcf9394a2b153cf94ad320d50e380f25c8450bb6f (diff)
downloadchromium_src-8fbab00264861b95a99a8232ba75e0994c46c185.zip
chromium_src-8fbab00264861b95a99a8232ba75e0994c46c185.tar.gz
chromium_src-8fbab00264861b95a99a8232ba75e0994c46c185.tar.bz2
The About box was needlessly blocking Chrome on Vista SP1 (with UAC disabled) from performing an On-demand update. Google Update has worked around the issue - for SP1 and up that is - so we can relax the restriction a bit.
Review URL: http://codereview.chromium.org/1708 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2003 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/win_util.cc18
-rw-r--r--base/win_util.h3
-rw-r--r--chrome/browser/views/about_chrome_view.cc11
3 files changed, 29 insertions, 3 deletions
diff --git a/base/win_util.cc b/base/win_util.cc
index d8f8b4e..6f193cc 100644
--- a/base/win_util.cc
+++ b/base/win_util.cc
@@ -60,6 +60,24 @@ WinVersion GetWinVersion() {
return win_version;
}
+void GetServicePackLevel(int* major, int* minor) {
+ DCHECK(major && minor);
+ static bool checked_version = false;
+ static int service_pack_major = -1;
+ static int service_pack_minor = -1;
+ if (!checked_version) {
+ OSVERSIONINFOEX version_info = {0};
+ version_info.dwOSVersionInfoSize = sizeof(version_info);
+ GetVersionEx(reinterpret_cast<LPOSVERSIONINFOW>(&version_info));
+ service_pack_major = version_info.wServicePackMajor;
+ service_pack_minor = version_info.wServicePackMinor;
+ checked_version = true;
+ }
+
+ *major = service_pack_major;
+ *minor = service_pack_minor;
+}
+
bool AddAccessToKernelObject(HANDLE handle, WELL_KNOWN_SID_TYPE known_sid,
ACCESS_MASK access) {
PSECURITY_DESCRIPTOR descriptor = NULL;
diff --git a/base/win_util.h b/base/win_util.h
index 54f5e4a..d3728c1 100644
--- a/base/win_util.h
+++ b/base/win_util.h
@@ -28,6 +28,9 @@ void GetNonClientMetrics(NONCLIENTMETRICS* metrics);
// Returns the running version of Windows.
WinVersion GetWinVersion();
+// Returns the major and minor version of the service pack installed.
+void GetServicePackLevel(int* major, int* minor);
+
// Adds an ACE in the DACL of the object referenced by handle. The ACE is
// granting |access| to the user |known_sid|.
// If |known_sid| is WinSelfSid, the sid of the current user will be added to
diff --git a/chrome/browser/views/about_chrome_view.cc b/chrome/browser/views/about_chrome_view.cc
index fc0ec12..6766a9b 100644
--- a/chrome/browser/views/about_chrome_view.cc
+++ b/chrome/browser/views/about_chrome_view.cc
@@ -251,11 +251,16 @@ void AboutChromeView::ViewHierarchyChanged(bool is_add,
parent->AddChildView(&timeout_indicator_);
timeout_indicator_.SetVisible(false);
- // On-demand updates for Chrome don't work in Vista when UAC is turned
+ // On-demand updates for Chrome don't work in Vista RTM when UAC is turned
// off. So, in this case we just want the About box to not mention
// on-demand updates. Silent updates (in the background) should still
- // work as before.
- if (win_util::UserAccountControlIsEnabled()) {
+ // work as before - enabling UAC or installing the latest service pack
+ // for Vista is another option.
+ int service_pack_major = 0, service_pack_minor = 0;
+ win_util::GetServicePackLevel(&service_pack_major, &service_pack_minor);
+ if (win_util::UserAccountControlIsEnabled() ||
+ (win_util::GetWinVersion() == win_util::WINVERSION_VISTA &&
+ service_pack_major >= 1)) {
UpdateStatus(UPGRADE_CHECK_STARTED, GOOGLE_UPDATE_NO_ERROR);
google_updater_->CheckForUpdate(false); // false=don't upgrade yet.
}