Chromium Code Reviews| Index: Source/platform/win/SystemInfo.cpp |
| diff --git a/Source/platform/win/SystemInfo.cpp b/Source/platform/win/SystemInfo.cpp |
| index 553f27e076591ccc24b19447836c0bb62848f456..b14bf83eb3f1ed92dfe92f48ac4b661ab6e6d008 100644 |
| --- a/Source/platform/win/SystemInfo.cpp |
| +++ b/Source/platform/win/SystemInfo.cpp |
| @@ -26,54 +26,44 @@ |
| #include "config.h" |
| #include "platform/win/SystemInfo.h" |
| +#if _WIN32_WINNT_WINBLUE |
| +#include <versionhelpers.h> |
| +#endif |
| + |
| #include <windows.h> |
| namespace WebCore { |
| -WindowsVersion windowsVersion(int* major, int* minor) |
| +#ifndef _WIN32_WINNT_WINBLUE |
| +// Taken from VersionHelpers.h in Windows SDK 8.1+. |
|
tkent
2013/10/27 21:22:28
Does the Windows SDK license allow to copy/redistr
yosin_UTC9
2013/10/28 04:30:59
Not sure. So, I take yukawa@'s code.
|
| +static bool IsWindowsVersionOrGreater(WORD majorVersion, WORD minorVersion, WORD servicePackMajor) |
| +{ |
| + const DWORDLONG mask1 = ::VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL); |
| + const DWORDLONG mask2 = ::VerSetConditionMask(mask1, VER_MINORVERSION, VER_GREATER_EQUAL); |
| + const DWORDLONG mask3 = ::VerSetConditionMask(mask2, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); |
| + OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 }; |
| + osvi.dwMajorVersion = majorVersion; |
| + osvi.dwMinorVersion = minorVersion; |
| + osvi.wServicePackMajor = servicePackMajor; |
| + return ::VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, mask3); |
| +} |
| + |
| +static bool IsWindowsVistaOrGreater() |
| +{ |
| + return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0); |
| +} |
| +#endif |
| + |
| +bool isWindowsVistaOrGreater() |
| { |
| static bool initialized = false; |
| - static WindowsVersion version; |
| - static int majorVersion, minorVersion; |
| + static bool cachedIsWindowsVistaOrGreater; |
| if (!initialized) { |
| initialized = true; |
| - OSVERSIONINFOEX versionInfo; |
| - ZeroMemory(&versionInfo, sizeof(versionInfo)); |
| - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); |
| - GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&versionInfo)); |
| - majorVersion = versionInfo.dwMajorVersion; |
| - minorVersion = versionInfo.dwMinorVersion; |
| - |
| - if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32s) { |
| - version = Windows3_1; |
| - } else if (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { |
| - if (!minorVersion) |
| - version = Windows95; |
| - else |
| - version = (minorVersion == 10) ? Windows98 : WindowsME; |
| - } else { |
| - if (majorVersion == 5) { |
| - if (!minorVersion) |
| - version = Windows2000; |
| - else |
| - version = (minorVersion == 1) ? WindowsXP : WindowsServer2003; |
| - } else if (majorVersion >= 6) { |
| - if (versionInfo.wProductType == VER_NT_WORKSTATION) |
| - version = (majorVersion == 6 && !minorVersion) ? WindowsVista : Windows7; |
| - else |
| - version = WindowsServer2008; |
| - } else { |
| - version = (majorVersion == 4) ? WindowsNT4 : WindowsNT3; |
| - } |
| - } |
| + cachedIsWindowsVistaOrGreater = IsWindowsVistaOrGreater(); |
|
yukawa
2013/10/28 02:21:19
IsWindowsVersionOrGreater is just a helper wrapper
yosin_UTC9
2013/10/28 04:30:59
Thanks! I take yours.
|
| } |
| - |
| - if (major) |
| - *major = majorVersion; |
| - if (minor) |
| - *minor = minorVersion; |
| - return version; |
| + return cachedIsWindowsVistaOrGreater; |
| } |
| } // namespace WebCore |