| Index: Source/platform/win/SystemInfo.cpp
|
| diff --git a/Source/platform/win/SystemInfo.cpp b/Source/platform/win/SystemInfo.cpp
|
| index 553f27e076591ccc24b19447836c0bb62848f456..ae198e3974e70051b28334364c6fe4d750709cd2 100644
|
| --- a/Source/platform/win/SystemInfo.cpp
|
| +++ b/Source/platform/win/SystemInfo.cpp
|
| @@ -26,54 +26,38 @@
|
| #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
|
| +static bool IsWindowsVistaOrGreater()
|
| +{
|
| + OSVERSIONINFOEXW osvi = { };
|
| + osvi.dwOSVersionInfoSize = sizeof(osvi);
|
| + osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_VISTA);
|
| + osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_VISTA);
|
| + DWORDLONG conditoin = 0;
|
| + VER_SET_CONDITION(conditoin, VER_MAJORVERSION, VER_GREATER_EQUAL);
|
| + VER_SET_CONDITION(conditoin, VER_MINORVERSION, VER_GREATER_EQUAL);
|
| + return !!::VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION, conditoin);
|
| +}
|
| +#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();
|
| }
|
| -
|
| - if (major)
|
| - *major = majorVersion;
|
| - if (minor)
|
| - *minor = minorVersion;
|
| - return version;
|
| + return cachedIsWindowsVistaOrGreater;
|
| }
|
|
|
| } // namespace WebCore
|
|
|