| // 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. |
| |
| #ifndef BASE_TEST_SCOPED_OS_INFO_OVERRIDE_WIN_H_ |
| #define BASE_TEST_SCOPED_OS_INFO_OVERRIDE_WIN_H_ |
| |
| #include <memory> |
| |
| #include "base/macros.h" |
| |
| namespace base { |
| namespace win { |
| class OSInfo; |
| } // namespace win |
| } // namespace base |
| |
| namespace base { |
| namespace test { |
| |
| // Helper class to override info returned by base::win::OSInfo::GetIntance() |
| // for the lifetime of this object. Upon destruction, the original info at time |
| // of object creation is restored. |
| class ScopedOSInfoOverride { |
| public: |
| // Types of windows machines that can be used for overriding. Add new |
| // machine types as needed. |
| enum class Type { |
| kWin10Pro, |
| kWin10Home, |
| }; |
| |
| explicit ScopedOSInfoOverride(Type type); |
| ~ScopedOSInfoOverride(); |
| |
| private: |
| using UniqueOsInfo = |
| std::unique_ptr<base::win::OSInfo, void (*)(base::win::OSInfo*)>; |
| |
| static UniqueOsInfo CreateInfoOfType(Type type); |
| |
| // The OSInfo taken by this instance at construction and restored at |
| // destruction. |
| base::win::OSInfo* original_info_; |
| |
| // The OSInfo owned by this scoped object and which overrides |
| // base::win::OSInfo::GetIntance() for the lifespan of the object. |
| UniqueOsInfo overriding_info_; |
| |
| // Because the dtor of OSInfo is private, a custom deleter is needed to use |
| // unique_ptr. |
| static void deleter(base::win::OSInfo* info); |
| |
| DISALLOW_COPY_AND_ASSIGN(ScopedOSInfoOverride); |
| }; |
| |
| } // namespace test |
| } // namespace base |
| |
| #endif // BASE_TEST_SCOPED_OS_INFO_OVERRIDE_WIN_H_ |