diff --git a/toolkit/components/telemetry/app/TelemetryEnvironment.jsm b/toolkit/components/telemetry/app/TelemetryEnvironment.jsm index 6ec58c181b20..c223664439b6 100644 --- a/toolkit/components/telemetry/app/TelemetryEnvironment.jsm +++ b/toolkit/components/telemetry/app/TelemetryEnvironment.jsm @@ -1843,6 +1843,7 @@ EnvironmentCache.prototype = { "hasARMv6", "hasARMv7", "hasNEON", + "hasUserCET", ]; // Enumerate the available CPU extensions. diff --git a/xpcom/base/nsSystemInfo.cpp b/xpcom/base/nsSystemInfo.cpp index ab8c7f4aaf0b..0fb2655d2cf2 100644 --- a/xpcom/base/nsSystemInfo.cpp +++ b/xpcom/base/nsSystemInfo.cpp @@ -29,6 +29,7 @@ # include # endif // __MINGW32__ # include "base/scoped_handle_win.h" +# include "mozilla/DynamicallyLinkedFunctionPtr.h" # include "nsAppDirectoryServiceDefs.h" # include "nsDirectoryServiceDefs.h" # include "nsDirectoryServiceUtils.h" @@ -854,6 +855,13 @@ nsresult CollectProcessInfo(ProcessInfo& info) { return NS_OK; } +#if defined(XP_WIN) && (_WIN32_WINNT < 0x0A00) +WINBASEAPI +BOOL WINAPI IsUserCetAvailableInEnvironment(_In_ DWORD UserCetEnvironment); + +# define USER_CET_ENVIRONMENT_WIN32_PROCESS 0x00000000 +#endif + nsresult nsSystemInfo::Init() { // check that it is called from the main thread on all platforms. MOZ_ASSERT(NS_IsMainThread()); @@ -950,6 +958,18 @@ nsresult nsSystemInfo::Init() { } } # endif // __MINGW32__ + + mozilla::DynamicallyLinkedFunctionPtr + isUserCetAvailable(L"api-ms-win-core-sysinfo-l1-2-6.dll", + "IsUserCetAvailableInEnvironment"); + bool hasUserCET = isUserCetAvailable && + isUserCetAvailable(USER_CET_ENVIRONMENT_WIN32_PROCESS); + rv = SetPropertyAsBool(u"hasUserCET"_ns, hasUserCET); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + #endif #if defined(XP_MACOSX)