// Copyright 2013 The Flutter Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include namespace url_launcher_windows { // An interface wrapping system APIs used by the plugin, for mocking. class SystemApis { public: SystemApis(); virtual ~SystemApis(); // Disallow copy and move. SystemApis(const SystemApis&) = delete; SystemApis& operator=(const SystemApis&) = delete; // Wrapper for RegCloseKey. virtual LSTATUS RegCloseKey(HKEY key) = 0; // Wrapper for RegQueryValueEx. virtual LSTATUS RegQueryValueExW(HKEY key, LPCWSTR value_name, LPDWORD type, LPBYTE data, LPDWORD data_size) = 0; // Wrapper for RegOpenKeyEx. virtual LSTATUS RegOpenKeyExW(HKEY key, LPCWSTR sub_key, DWORD options, REGSAM desired, PHKEY result) = 0; // Wrapper for ShellExecute. virtual HINSTANCE ShellExecuteW(HWND hwnd, LPCWSTR operation, LPCWSTR file, LPCWSTR parameters, LPCWSTR directory, int show_flags) = 0; }; // Implementation of SystemApis using the Win32 APIs. class SystemApisImpl : public SystemApis { public: SystemApisImpl(); virtual ~SystemApisImpl(); // Disallow copy and move. SystemApisImpl(const SystemApisImpl&) = delete; SystemApisImpl& operator=(const SystemApisImpl&) = delete; // SystemApis Implementation: virtual LSTATUS RegCloseKey(HKEY key); virtual LSTATUS RegOpenKeyExW(HKEY key, LPCWSTR sub_key, DWORD options, REGSAM desired, PHKEY result); virtual LSTATUS RegQueryValueExW(HKEY key, LPCWSTR value_name, LPDWORD type, LPBYTE data, LPDWORD data_size); virtual HINSTANCE ShellExecuteW(HWND hwnd, LPCWSTR operation, LPCWSTR file, LPCWSTR parameters, LPCWSTR directory, int show_flags); }; } // namespace url_launcher_windows