diff options
Diffstat (limited to 'chrome_frame/test/run_all_unittests.cc')
-rw-r--r-- | chrome_frame/test/run_all_unittests.cc | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/chrome_frame/test/run_all_unittests.cc b/chrome_frame/test/run_all_unittests.cc index f5f479d..7772259 100644 --- a/chrome_frame/test/run_all_unittests.cc +++ b/chrome_frame/test/run_all_unittests.cc @@ -6,14 +6,18 @@ #include <iostream> #include "base/at_exit.h" +#include "base/path_service.h" #include "base/platform_thread.h" #include "base/process_util.h" +#include "base/sys_info.h" +#include "chrome/common/env_vars.h" #include "base/test/test_suite.h" #include "base/command_line.h" #include "chrome/common/chrome_paths.h" #include "chrome_frame/test/http_server.h" #include "chrome_frame/test_utils.h" +#include "chrome_frame/utils.h" // To enable ATL-based code to run in this module class ChromeFrameUnittestsModule @@ -32,6 +36,30 @@ const wchar_t kNoRegistrationSwitch[] = L"no-registration"; // server is killed. Useful for debugging tests. const wchar_t kRunAsServer[] = L"server"; +base::ProcessHandle LoadCrashService() { + FilePath exe_dir; + if (!PathService::Get(base::DIR_EXE, &exe_dir)) { + DCHECK(false); + return NULL; + } + + base::ProcessHandle crash_service = NULL; + + FilePath crash_service_path = exe_dir.Append(L"crash_service.exe"); + if (!base::LaunchApp(crash_service_path.ToWStringHack(), false, false, + &crash_service)) { + printf("Couldn't start crash_service.exe, so this test run won't tell " \ + "you if any test crashes!\n"); + return NULL; + } + + printf("Started crash_service.exe so you know if a test crashes!\n"); + // This sleep is to ensure that the crash service is done initializing, i.e + // the pipe creation, etc. + Sleep(500); + return crash_service; +} + int main(int argc, char **argv) { base::EnableTerminationOnHeapCorruption(); PlatformThread::SetName("ChromeFrame tests"); @@ -57,10 +85,14 @@ int main(int argc, char **argv) { return 0; } + SetConfigBool(kChromeFrameHeadlessMode, true); + + base::ProcessHandle crash_service = LoadCrashService(); + int ret = -1; // If mini_installer is used to register CF, we use the switch // --no-registration to avoid repetitive registration. if (CommandLine::ForCurrentProcess()->HasSwitch(kNoRegistrationSwitch)) { - return test_suite.Run(); + ret = test_suite.Run(); } else { // Register paths needed by the ScopedChromeFrameRegistrar. chrome::RegisterPathProvider(); @@ -72,7 +104,11 @@ int main(int argc, char **argv) { // TODO(robertshield): Make these tests restore the original registration // once done. ScopedChromeFrameRegistrar registrar; - - return test_suite.Run(); + ret = test_suite.Run(); } + + DeleteConfigValue(kChromeFrameHeadlessMode); + + if (crash_service) + base::KillProcess(crash_service, 0, false); } |