| Index: chrome_frame/test_utils.cc
|
| diff --git a/chrome_frame/test_utils.cc b/chrome_frame/test_utils.cc
|
| deleted file mode 100644
|
| index b6e48f9eb0d3e4ed9e60542fbfbb15bc1f0c53d8..0000000000000000000000000000000000000000
|
| --- a/chrome_frame/test_utils.cc
|
| +++ /dev/null
|
| @@ -1,286 +0,0 @@
|
| -// Copyright (c) 2012 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 "chrome_frame/test_utils.h"
|
| -
|
| -#include <atlbase.h>
|
| -#include <atlwin.h>
|
| -#include <shellapi.h>
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/file_util.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/logging.h"
|
| -#include "base/path_service.h"
|
| -#include "base/process/kill.h"
|
| -#include "base/process/launch.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#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";
|
| -const wchar_t kChromeLauncherExeName[] = L"chrome_launcher.exe";
|
| -// How long to wait for DLLs to register or unregister themselves before killing
|
| -// the registrar.
|
| -const int64 kDllRegistrationTimeoutMs = 30 * 1000;
|
| -
|
| -base::FilePath GetChromeFrameBuildPath() {
|
| - base::FilePath build_path;
|
| - PathService::Get(chrome::DIR_APP, &build_path);
|
| -
|
| - base::FilePath dll_path = build_path.Append(kChromeFrameDllName);
|
| -
|
| - if (!base::PathExists(dll_path)) {
|
| - // Well, dang.. try looking in the current directory.
|
| - dll_path = build_path.Append(kChromeFrameDllName);
|
| - }
|
| -
|
| - if (!base::PathExists(dll_path)) {
|
| - // No luck, return something empty.
|
| - dll_path = base::FilePath();
|
| - }
|
| -
|
| - return dll_path;
|
| -}
|
| -
|
| -const wchar_t ScopedChromeFrameRegistrar::kCallRegistrationEntrypointSwitch[] =
|
| - L"--call-registration-entrypoint";
|
| -
|
| -bool ScopedChromeFrameRegistrar::register_chrome_path_provider_ = false;
|
| -
|
| -// static
|
| -void ScopedChromeFrameRegistrar::RegisterDefaults() {
|
| - if (!register_chrome_path_provider_) {
|
| - chrome::RegisterPathProvider();
|
| - register_chrome_path_provider_ = true;
|
| - }
|
| -}
|
| -
|
| -// Registers or unregisters the DLL at |path| by calling out to the current
|
| -// executable with --call-registration-entrypoint. Loading the DLL into the
|
| -// test process is problematic for component=shared_library builds since
|
| -// singletons in base.dll aren't designed to handle multiple initialization.
|
| -// Use of rundll32.exe is problematic since it does not return useful error
|
| -// information.
|
| -// static
|
| -void ScopedChromeFrameRegistrar::DoRegistration(
|
| - const base::string16& path,
|
| - RegistrationType registration_type,
|
| - RegistrationOperation registration_operation) {
|
| - static const char* const kEntrypoints[] = {
|
| - "DllRegisterServer",
|
| - "DllUnregisterServer",
|
| - "DllRegisterUserServer",
|
| - "DllUnregisterUserServer",
|
| - };
|
| -
|
| - DCHECK(!path.empty());
|
| - DCHECK(registration_type == PER_USER || registration_type == SYSTEM_LEVEL);
|
| - DCHECK(registration_operation == REGISTER ||
|
| - registration_operation == UNREGISTER);
|
| -
|
| - int entrypoint_index = 0;
|
| - base::LaunchOptions launch_options;
|
| - base::win::ScopedHandle process_handle;
|
| - int exit_code = -1;
|
| -
|
| - if (registration_type == PER_USER)
|
| - entrypoint_index += 2;
|
| - if (registration_operation == UNREGISTER)
|
| - entrypoint_index += 1;
|
| - base::string16 registration_command(base::ASCIIToUTF16("\""));
|
| - registration_command +=
|
| - CommandLine::ForCurrentProcess()->GetProgram().value();
|
| - registration_command += base::ASCIIToUTF16("\" ");
|
| - registration_command += kCallRegistrationEntrypointSwitch;
|
| - registration_command += base::ASCIIToUTF16(" \"");
|
| - registration_command += path;
|
| - registration_command += base::ASCIIToUTF16("\" ");
|
| - registration_command += base::ASCIIToUTF16(kEntrypoints[entrypoint_index]);
|
| - launch_options.wait = true;
|
| - if (!base::LaunchProcess(registration_command, launch_options,
|
| - &process_handle)) {
|
| - PLOG(FATAL)
|
| - << "Failed to register or unregister DLL with command: "
|
| - << registration_command;
|
| - } else {
|
| - if (!base::WaitForExitCodeWithTimeout(
|
| - process_handle.Get(), &exit_code,
|
| - base::TimeDelta::FromMilliseconds(kDllRegistrationTimeoutMs))) {
|
| - LOG(ERROR) << "Timeout waiting to register or unregister DLL with "
|
| - "command: " << registration_command;
|
| - base::KillProcess(process_handle.Get(), 0, false);
|
| - NOTREACHED() << "Aborting test due to registration failure.";
|
| - }
|
| - }
|
| - if (exit_code != 0) {
|
| - if (registration_operation == REGISTER) {
|
| - LOG(ERROR)
|
| - << "DLL registration failed (exit code: 0x" << std::hex << exit_code
|
| - << ", command: " << registration_command
|
| - << "). Make sure you are running as Admin.";
|
| - ::ExitProcess(1);
|
| - } else {
|
| - LOG(WARNING)
|
| - << "DLL unregistration failed (exit code: 0x" << std::hex << exit_code
|
| - << ", command: " << registration_command << ").";
|
| - }
|
| - }
|
| -}
|
| -
|
| -// static
|
| -void ScopedChromeFrameRegistrar::RegisterAtPath(
|
| - const std::wstring& path, RegistrationType registration_type) {
|
| - DoRegistration(path, registration_type, REGISTER);
|
| -}
|
| -
|
| -// static
|
| -void ScopedChromeFrameRegistrar::UnregisterAtPath(
|
| - const std::wstring& path, RegistrationType registration_type) {
|
| - DoRegistration(path, registration_type, UNREGISTER);
|
| -}
|
| -
|
| -base::FilePath ScopedChromeFrameRegistrar::GetReferenceChromeFrameDllPath() {
|
| - base::FilePath reference_build_dir;
|
| - PathService::Get(chrome::DIR_APP, &reference_build_dir);
|
| -
|
| - reference_build_dir = reference_build_dir.DirName();
|
| - reference_build_dir = reference_build_dir.DirName();
|
| -
|
| - reference_build_dir = reference_build_dir.AppendASCII("chrome_frame");
|
| - reference_build_dir = reference_build_dir.AppendASCII("tools");
|
| - reference_build_dir = reference_build_dir.AppendASCII("test");
|
| - reference_build_dir = reference_build_dir.AppendASCII("reference_build");
|
| - reference_build_dir = reference_build_dir.AppendASCII("chrome");
|
| - reference_build_dir = reference_build_dir.AppendASCII("servers");
|
| - reference_build_dir = reference_build_dir.Append(kChromeFrameDllName);
|
| - return reference_build_dir;
|
| -}
|
| -
|
| -// static
|
| -void ScopedChromeFrameRegistrar::RegisterAndExitProcessIfDirected() {
|
| - // This method is invoked before any Chromium helpers have been initialized.
|
| - // Take pains to use only Win32 and CRT functions.
|
| - int argc = 0;
|
| - const wchar_t* const* argv = ::CommandLineToArgvW(::GetCommandLine(), &argc);
|
| - if (argc < 2 || ::lstrcmp(argv[1], kCallRegistrationEntrypointSwitch) != 0)
|
| - return;
|
| - if (argc != 4) {
|
| - printf("Usage: %S %S <path to dll> <entrypoint>\n", argv[0],
|
| - kCallRegistrationEntrypointSwitch);
|
| - return;
|
| - }
|
| -
|
| - // The only way to leave from here on down is ExitProcess.
|
| - const wchar_t* dll_path = argv[2];
|
| - const wchar_t* wide_entrypoint = argv[3];
|
| - char entrypoint[256];
|
| - HRESULT exit_code = 0;
|
| - int entrypoint_len = lstrlen(wide_entrypoint);
|
| - if (entrypoint_len <= 0 || entrypoint_len >= arraysize(entrypoint)) {
|
| - exit_code = HRESULT_FROM_WIN32(ERROR_PROC_NOT_FOUND);
|
| - } else {
|
| - // Convert wide to narrow. Since the entrypoint must be a narrow string
|
| - // anyway, it is safe to truncate each character like this.
|
| - std::copy(wide_entrypoint, wide_entrypoint + entrypoint_len + 1,
|
| - &entrypoint[0]);
|
| - HMODULE dll_module = ::LoadLibrary(dll_path);
|
| - if (dll_module == NULL) {
|
| - exit_code = HRESULT_FROM_WIN32(::GetLastError());
|
| - } else {
|
| - typedef HRESULT (STDAPICALLTYPE *RegisterFp)();
|
| - RegisterFp register_func =
|
| - reinterpret_cast<RegisterFp>(::GetProcAddress(dll_module,
|
| - entrypoint));
|
| - if (register_func == NULL) {
|
| - exit_code = HRESULT_FROM_WIN32(::GetLastError());
|
| - } else {
|
| - exit_code = register_func();
|
| - }
|
| - ::FreeLibrary(dll_module);
|
| - }
|
| - }
|
| -
|
| - ::ExitProcess(exit_code);
|
| -}
|
| -
|
| -// Non-statics
|
| -
|
| -ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar(
|
| - const std::wstring& path, RegistrationType registration_type)
|
| - : registration_type_(registration_type) {
|
| - if (!register_chrome_path_provider_) {
|
| - // Register paths needed by the ScopedChromeFrameRegistrar.
|
| - chrome::RegisterPathProvider();
|
| - register_chrome_path_provider_ = true;
|
| - }
|
| - original_dll_path_ = path;
|
| - RegisterChromeFrameAtPath(original_dll_path_);
|
| -}
|
| -
|
| -ScopedChromeFrameRegistrar::ScopedChromeFrameRegistrar(
|
| - RegistrationType registration_type)
|
| - : registration_type_(registration_type) {
|
| - if (!register_chrome_path_provider_) {
|
| - // Register paths needed by the ScopedChromeFrameRegistrar.
|
| - chrome::RegisterPathProvider();
|
| - register_chrome_path_provider_ = true;
|
| - }
|
| - original_dll_path_ = GetChromeFrameBuildPath().value();
|
| - RegisterChromeFrameAtPath(original_dll_path_);
|
| -}
|
| -
|
| -ScopedChromeFrameRegistrar::~ScopedChromeFrameRegistrar() {
|
| - if (base::FilePath(original_dll_path_) !=
|
| - base::FilePath(new_chrome_frame_dll_path_)) {
|
| - RegisterChromeFrameAtPath(original_dll_path_);
|
| - } else if (registration_type_ == PER_USER) {
|
| - UnregisterAtPath(new_chrome_frame_dll_path_, registration_type_);
|
| - HWND chrome_frame_helper_window =
|
| - FindWindow(L"ChromeFrameHelperWindowClass", NULL);
|
| - if (IsWindow(chrome_frame_helper_window)) {
|
| - PostMessage(chrome_frame_helper_window, WM_CLOSE, 0, 0);
|
| - } else {
|
| - base::KillProcesses(L"chrome_frame_helper.exe", 0, NULL);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void ScopedChromeFrameRegistrar::RegisterChromeFrameAtPath(
|
| - const std::wstring& path) {
|
| - RegisterAtPath(path, registration_type_);
|
| - new_chrome_frame_dll_path_ = path;
|
| -}
|
| -
|
| -void ScopedChromeFrameRegistrar::RegisterReferenceChromeFrameBuild() {
|
| - RegisterChromeFrameAtPath(GetReferenceChromeFrameDllPath().value());
|
| -}
|
| -
|
| -std::wstring ScopedChromeFrameRegistrar::GetChromeFrameDllPath() const {
|
| - return new_chrome_frame_dll_path_;
|
| -}
|
| -
|
| -bool IsWorkstationLocked() {
|
| - bool is_locked = true;
|
| - HDESK input_desk = ::OpenInputDesktop(0, 0, GENERIC_READ);
|
| - if (input_desk) {
|
| - wchar_t name[256] = {0};
|
| - DWORD needed = 0;
|
| - if (::GetUserObjectInformation(input_desk,
|
| - UOI_NAME,
|
| - name,
|
| - sizeof(name),
|
| - &needed)) {
|
| - is_locked = lstrcmpi(name, L"default") != 0;
|
| - }
|
| - ::CloseDesktop(input_desk);
|
| - }
|
| - return is_locked;
|
| -}
|
|
|