| Index: snapshot/crashpad_info_client_options_test.cc
|
| diff --git a/snapshot/mac/crashpad_info_client_options_test.cc b/snapshot/crashpad_info_client_options_test.cc
|
| similarity index 80%
|
| rename from snapshot/mac/crashpad_info_client_options_test.cc
|
| rename to snapshot/crashpad_info_client_options_test.cc
|
| index 3b7e2f23131e72c134f35ee737b6475636d04379..2b13b6b2223b7f2fe6319e3678273a053d65a310 100644
|
| --- a/snapshot/mac/crashpad_info_client_options_test.cc
|
| +++ b/snapshot/crashpad_info_client_options_test.cc
|
| @@ -12,16 +12,23 @@
|
| // See the License for the specific language governing permissions and
|
| // limitations under the License.
|
|
|
| -#include "snapshot/mac/crashpad_info_client_options.h"
|
| -
|
| -#include <dlfcn.h>
|
| +#include "snapshot/crashpad_info_client_options.h"
|
|
|
| #include "base/files/file_path.h"
|
| +#include "build/build_config.h"
|
| #include "client/crashpad_info.h"
|
| #include "gtest/gtest.h"
|
| -#include "snapshot/mac/process_snapshot_mac.h"
|
| +#include "test/errors.h"
|
| #include "test/paths.h"
|
|
|
| +#if defined(OS_MACOSX)
|
| +#include <dlfcn.h>
|
| +#include "snapshot/mac/process_snapshot_mac.h"
|
| +#elif defined(OS_WIN)
|
| +#include <windows.h>
|
| +#include "snapshot/win/process_snapshot_win.h"
|
| +#endif
|
| +
|
| namespace crashpad {
|
| namespace test {
|
| namespace {
|
| @@ -62,8 +69,15 @@ class ScopedUnsetCrashpadInfoOptions {
|
|
|
| TEST(CrashpadInfoClientOptions, OneModule) {
|
| // Make sure that the initial state has all values unset.
|
| +#if defined(OS_MACOSX)
|
| ProcessSnapshotMac process_snapshot;
|
| ASSERT_TRUE(process_snapshot.Initialize(mach_task_self()));
|
| +#elif defined(OS_WIN)
|
| + ProcessSnapshotWin process_snapshot;
|
| + ASSERT_TRUE(process_snapshot.Initialize(GetCurrentProcess()));
|
| +#else
|
| +#error Port.
|
| +#endif // OS_MACOSX
|
|
|
| CrashpadInfoClientOptions options;
|
| process_snapshot.GetCrashpadOptions(&options);
|
| @@ -95,17 +109,28 @@ TEST(CrashpadInfoClientOptions, OneModule) {
|
| }
|
| }
|
|
|
| +#if defined(OS_POSIX)
|
| +using DlHandle = void*;
|
| +#elif defined(OS_WIN)
|
| +using DlHandle = HMODULE;
|
| +#endif // OS_POSIX
|
| +
|
| class ScopedDlHandle {
|
| public:
|
| - explicit ScopedDlHandle(void* dl_handle)
|
| + explicit ScopedDlHandle(DlHandle dl_handle)
|
| : dl_handle_(dl_handle) {
|
| }
|
|
|
| ~ScopedDlHandle() {
|
| if (dl_handle_) {
|
| +#if defined(OS_POSIX)
|
| if (dlclose(dl_handle_) != 0) {
|
| LOG(ERROR) << "dlclose: " << dlerror();
|
| }
|
| +#elif defined(OS_WIN)
|
| + if (!FreeLibrary(dl_handle_))
|
| + PLOG(ERROR) << "FreeLibrary";
|
| +#endif // OS_POSIX
|
| }
|
| }
|
|
|
| @@ -113,23 +138,41 @@ class ScopedDlHandle {
|
|
|
| template <typename T>
|
| T LookUpSymbol(const char* symbol_name) {
|
| +#if defined(OS_POSIX)
|
| return reinterpret_cast<T>(dlsym(dl_handle_, symbol_name));
|
| +#elif defined(OS_WIN)
|
| + return reinterpret_cast<T>(GetProcAddress(dl_handle_, symbol_name));
|
| +#endif // OS_POSIX
|
| }
|
|
|
| private:
|
| - void* dl_handle_;
|
| + DlHandle dl_handle_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ScopedDlHandle);
|
| };
|
|
|
| TEST(CrashpadInfoClientOptions, TwoModules) {
|
| // Open the module, which has its own CrashpadInfo structure.
|
| - base::FilePath module_path =
|
| - Paths::Executable().DirName().Append("crashpad_snapshot_test_module.so");
|
| +#if defined(OS_MACOSX)
|
| + const base::FilePath::StringType kDlExtension = FILE_PATH_LITERAL(".so");
|
| +#elif defined(OS_WIN)
|
| + const base::FilePath::StringType kDlExtension = FILE_PATH_LITERAL(".dll");
|
| +#endif
|
| + base::FilePath module_path = Paths::Executable().DirName().Append(
|
| + FILE_PATH_LITERAL("crashpad_snapshot_test_module") + kDlExtension);
|
| +#if defined(OS_MACOSX)
|
| ScopedDlHandle dl_handle(
|
| dlopen(module_path.value().c_str(), RTLD_LAZY | RTLD_LOCAL));
|
| ASSERT_TRUE(dl_handle.valid()) << "dlopen " << module_path.value() << ": "
|
| << dlerror();
|
| +#elif defined(OS_WIN)
|
| + ScopedDlHandle dl_handle(LoadLibrary(module_path.value().c_str()));
|
| + ASSERT_TRUE(dl_handle.valid()) << "LoadLibrary "
|
| + << module_path.value().c_str() << ": "
|
| + << ErrorMessage();
|
| +#else
|
| +#error Port.
|
| +#endif // OS_MACOSX
|
|
|
| // Get the function pointer from the module. This wraps GetCrashpadInfo(), but
|
| // because it runs in the module, it returns the remote module’s CrashpadInfo
|
| @@ -139,8 +182,15 @@ TEST(CrashpadInfoClientOptions, TwoModules) {
|
| ASSERT_TRUE(TestModule_GetCrashpadInfo);
|
|
|
| // Make sure that the initial state has all values unset.
|
| +#if defined(OS_MACOSX)
|
| ProcessSnapshotMac process_snapshot;
|
| ASSERT_TRUE(process_snapshot.Initialize(mach_task_self()));
|
| +#elif defined(OS_WIN)
|
| + ProcessSnapshotWin process_snapshot;
|
| + ASSERT_TRUE(process_snapshot.Initialize(GetCurrentProcess()));
|
| +#else
|
| +#error Port.
|
| +#endif // OS_MACOSX
|
|
|
| CrashpadInfoClientOptions options;
|
| process_snapshot.GetCrashpadOptions(&options);
|
|
|