blob: c56c4100180bcb789d294f1263930f294ea09cf6 [file] [log] [blame]
// Copyright 2013 The Flutter 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 <windows.h>
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