|  | // Copyright 2018 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/test/scoped_os_info_override_win.h" | 
|  |  | 
|  | #include <windows.h> | 
|  |  | 
|  | #include "base/win/windows_version.h" | 
|  | #include "starboard/types.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace test { | 
|  |  | 
|  | ScopedOSInfoOverride::ScopedOSInfoOverride(Type type) | 
|  | : original_info_(base::win::OSInfo::GetInstance()), | 
|  | overriding_info_(CreateInfoOfType(type)) { | 
|  | *base::win::OSInfo::GetInstanceStorage() = overriding_info_.get(); | 
|  | } | 
|  |  | 
|  | ScopedOSInfoOverride::~ScopedOSInfoOverride() { | 
|  | *base::win::OSInfo::GetInstanceStorage() = original_info_; | 
|  | } | 
|  |  | 
|  | // static | 
|  | ScopedOSInfoOverride::UniqueOsInfo ScopedOSInfoOverride::CreateInfoOfType( | 
|  | Type type) { | 
|  | _OSVERSIONINFOEXW version_info = {sizeof(version_info)}; | 
|  | _SYSTEM_INFO system_info = {}; | 
|  | int os_type = 0; | 
|  |  | 
|  | switch (type) { | 
|  | case Type::kWin10Pro: | 
|  | case Type::kWin10Home: | 
|  | version_info.dwMajorVersion = 10; | 
|  | version_info.dwMinorVersion = 0; | 
|  | version_info.dwBuildNumber = 15063; | 
|  | version_info.wServicePackMajor = 0; | 
|  | version_info.wServicePackMinor = 0; | 
|  | version_info.szCSDVersion[0] = 0; | 
|  | version_info.wProductType = VER_NT_WORKSTATION; | 
|  | version_info.wSuiteMask = VER_SUITE_PERSONAL; | 
|  |  | 
|  | system_info.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64; | 
|  | system_info.dwNumberOfProcessors = 1; | 
|  | system_info.dwAllocationGranularity = 8; | 
|  |  | 
|  | os_type = | 
|  | type == Type::kWin10Home ? PRODUCT_HOME_BASIC : PRODUCT_PROFESSIONAL; | 
|  | break; | 
|  | } | 
|  |  | 
|  | return UniqueOsInfo(new base::win::OSInfo(version_info, system_info, os_type), | 
|  | &ScopedOSInfoOverride::deleter); | 
|  | } | 
|  |  | 
|  | // static | 
|  | void ScopedOSInfoOverride::deleter(base::win::OSInfo* info) { | 
|  | delete info; | 
|  | } | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace base |