summaryrefslogtreecommitdiffstats
path: root/chrome_frame/test_utils.cc
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 22:20:44 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 22:20:44 +0000
commitcf5912b5bacc1f615416be25b61c7126f06ee403 (patch)
tree7fa99900977e96201105f548599e5991a326b8db /chrome_frame/test_utils.cc
parent2a3851ec96ce92e9d51ef2737bf8a7137dad49e3 (diff)
downloadchromium_src-cf5912b5bacc1f615416be25b61c7126f06ee403.zip
chromium_src-cf5912b5bacc1f615416be25b61c7126f06ee403.tar.gz
chromium_src-cf5912b5bacc1f615416be25b61c7126f06ee403.tar.bz2
Added support for running per user chrome frame tests on the relevant ChromeFrame builders.
This includes the chrome_frame_net_tests, chrome_frame_tests and the chrome_frame_unittests test suites. We determine whether per user tests are to be run based on a registry config value PerUserTestBed under HKCU\Software\Google\ChromeFrame. As part of this CL we also register chrome frame in the chrome frame net tests suite. We unregister the chrome frame dll on the builder for per user installs after every test run. BUG=none TEST=Existing chrome frame tests. Review URL: http://codereview.chromium.org/6347056 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73354 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/test_utils.cc')
-rw-r--r--chrome_frame/test_utils.cc42
1 files changed, 29 insertions, 13 deletions
diff --git a/chrome_frame/test_utils.cc b/chrome_frame/test_utils.cc
index 708db6f..18d50ff 100644
--- a/chrome_frame/test_utils.cc
+++ b/chrome_frame/test_utils.cc
@@ -19,6 +19,7 @@
#include "base/win/scoped_handle.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome_frame/test/chrome_frame_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
const wchar_t kChromeFrameDllName[] = L"npchrome_frame.dll";
@@ -47,21 +48,26 @@ FilePath ScopedChromeFrameRegistrar::GetChromeFrameBuildPath() {
void ScopedChromeFrameRegistrar::RegisterDefaults() {
FilePath dll_path = GetChromeFrameBuildPath();
- RegisterAtPath(dll_path.value());
+ RegisterAtPath(dll_path.value(), SYSTEM_LEVEL);
}
void ScopedChromeFrameRegistrar::RegisterAtPath(
- const std::wstring& path) {
+ const std::wstring& path, RegistrationType registration_type) {
ASSERT_FALSE(path.empty());
HMODULE dll_handle = LoadLibrary(path.c_str());
ASSERT_TRUE(dll_handle != NULL);
typedef HRESULT (STDAPICALLTYPE* DllRegisterServerFn)();
- DllRegisterServerFn register_server =
- reinterpret_cast<DllRegisterServerFn>(GetProcAddress(
- dll_handle, "DllRegisterServer"));
+ DllRegisterServerFn register_server = NULL;
+ if (registration_type == PER_USER) {
+ register_server = reinterpret_cast<DllRegisterServerFn>(GetProcAddress(
+ dll_handle, "DllRegisterUserServer"));
+ } else {
+ register_server = reinterpret_cast<DllRegisterServerFn>(GetProcAddress(
+ dll_handle, "DllRegisterServer"));
+ }
ASSERT_TRUE(register_server != NULL);
EXPECT_HRESULT_SUCCEEDED((*register_server)());
@@ -76,17 +82,21 @@ void ScopedChromeFrameRegistrar::RegisterAtPath(
}
void ScopedChromeFrameRegistrar::UnregisterAtPath(
- const std::wstring& path) {
+ const std::wstring& path, RegistrationType registration_type) {
ASSERT_FALSE(path.empty());
HMODULE dll_handle = LoadLibrary(path.c_str());
ASSERT_TRUE(dll_handle != NULL);
typedef HRESULT (STDAPICALLTYPE* DllUnregisterServerFn)();
- DllUnregisterServerFn unregister_server =
- reinterpret_cast<DllUnregisterServerFn>(GetProcAddress(
- dll_handle, "DllUnregisterServer"));
-
+ DllUnregisterServerFn unregister_server = NULL;
+ if (registration_type == PER_USER) {
+ unregister_server = reinterpret_cast<DllUnregisterServerFn>
+ (GetProcAddress(dll_handle, "DllUnregisterUserServer"));
+ } else {
+ unregister_server = reinterpret_cast<DllUnregisterServerFn>
+ (GetProcAddress(dll_handle, "DllUnregisterServer"));
+ }
ASSERT_TRUE(unregister_server != NULL);
EXPECT_HRESULT_SUCCEEDED((*unregister_server)());
@@ -120,12 +130,15 @@ FilePath ScopedChromeFrameRegistrar::GetReferenceChromeFrameDllPath() {
// Non-statics
ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar(
- const std::wstring& path) {
+ const std::wstring& path, RegistrationType registration_type)
+ : registration_type_(registration_type) {
original_dll_path_ = path;
RegisterChromeFrameAtPath(original_dll_path_);
}
-ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar() {
+ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar(
+ RegistrationType registration_type)
+ : registration_type_(registration_type) {
original_dll_path_ = GetChromeFrameBuildPath().value();
RegisterChromeFrameAtPath(original_dll_path_);
}
@@ -133,12 +146,15 @@ ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar() {
ScopedChromeFrameRegistrar::~ScopedChromeFrameRegistrar() {
if (FilePath(original_dll_path_) != FilePath(new_chrome_frame_dll_path_)) {
RegisterChromeFrameAtPath(original_dll_path_);
+ } else if (registration_type_ == PER_USER) {
+ UnregisterAtPath(new_chrome_frame_dll_path_, registration_type_);
+ chrome_frame_test::KillProcesses(L"chrome_frame_helper.exe", 0, false);
}
}
void ScopedChromeFrameRegistrar::RegisterChromeFrameAtPath(
const std::wstring& path) {
- RegisterAtPath(path);
+ RegisterAtPath(path, registration_type_);
new_chrome_frame_dll_path_ = path;
}