2b61de6382
The browser tests are an alternative to UI tests. They provide a way to exercise the browser from within the test (without having the test and the browser running in different processes). In order to ensure atexit hanlders are run after each tests and static initializers start fresh for each test, each test is run in a new process (on Linux and Mac). On Windows, a DLL containing the test is loaded/unloaded for each tests. BUG=None TEST=Run the browser tests. Review URL: http://codereview.chromium.org/115896 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17781 0039d316-1c4b-4281-b951-d872f2087c98
53 linhas
1.4 KiB
C++
53 linhas
1.4 KiB
C++
// Copyright (c) 2009 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/native_library.h"
|
|
|
|
#include <windows.h>
|
|
|
|
#include "base/file_path.h"
|
|
#include "base/path_service.h"
|
|
#include "base/string_util.h"
|
|
|
|
namespace base {
|
|
|
|
// static
|
|
NativeLibrary LoadNativeLibrary(const FilePath& library_path) {
|
|
// Switch the current directory to the library directory as the library
|
|
// may have dependencies on DLLs in this directory.
|
|
bool restore_directory = false;
|
|
std::wstring current_directory;
|
|
if (PathService::Get(base::DIR_CURRENT, ¤t_directory)) {
|
|
FilePath plugin_path = library_path.DirName();
|
|
if (!plugin_path.value().empty()) {
|
|
PathService::SetCurrentDirectory(plugin_path.value());
|
|
restore_directory = true;
|
|
}
|
|
}
|
|
|
|
HMODULE module = LoadLibrary(library_path.value().c_str());
|
|
if (restore_directory)
|
|
PathService::SetCurrentDirectory(current_directory);
|
|
|
|
return module;
|
|
}
|
|
|
|
// static
|
|
void UnloadNativeLibrary(NativeLibrary library) {
|
|
FreeLibrary(library);
|
|
}
|
|
|
|
// static
|
|
void* GetFunctionPointerFromNativeLibrary(NativeLibrary library,
|
|
const char* name) {
|
|
return GetProcAddress(library, name);
|
|
}
|
|
|
|
// static
|
|
string16 GetNativeLibraryName(const string16& name) {
|
|
return name + ASCIIToUTF16(".dll");
|
|
}
|
|
|
|
} // namespace base
|