Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: chrome_frame/test/chrome_frame_test_utils.cc

Issue 126143005: Remove Chrome Frame code and resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync to r244038 Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/test/chrome_frame_test_utils.h ('k') | chrome_frame/test/chrome_frame_ui_test_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/test/chrome_frame_test_utils.cc
diff --git a/chrome_frame/test/chrome_frame_test_utils.cc b/chrome_frame/test/chrome_frame_test_utils.cc
deleted file mode 100644
index ec589a620456975491f5ef2b232754101dad4ca7..0000000000000000000000000000000000000000
--- a/chrome_frame/test/chrome_frame_test_utils.cc
+++ /dev/null
@@ -1,746 +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/chrome_frame_test_utils.h"
-
-#include <atlapp.h>
-#include <atlmisc.h>
-#include <iepmapi.h>
-#include <sddl.h>
-#include <shlobj.h>
-#include <TlHelp32.h>
-#include <winsock2.h>
-
-#include "base/command_line.h"
-#include "base/file_util.h"
-#include "base/file_version_info.h"
-#include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/path_service.h"
-#include "base/process/kill.h"
-#include "base/process/launch.h"
-#include "base/process/process.h"
-#include "base/process/process_iterator.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_piece.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/win/registry.h"
-#include "base/win/scoped_handle.h"
-#include "base/win/windows_version.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_paths_internal.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "chrome_frame/utils.h"
-#include "net/base/net_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/clipboard/clipboard.h"
-#include "ui/base/clipboard/scoped_clipboard_writer.h"
-
-namespace chrome_frame_test {
-
-const wchar_t kCrashServicePipeName[] = L"\\\\.\\pipe\\ChromeCrashServices";
-
-const DWORD kCrashServicePipeDesiredAccess = FILE_READ_DATA |
- FILE_WRITE_DATA |
- FILE_WRITE_ATTRIBUTES;
-
-const DWORD kCrashServicePipeFlagsAndAttributes = SECURITY_IDENTIFICATION |
- SECURITY_SQOS_PRESENT;
-const int kCrashServiceDetectTimeoutMs = 500;
-const int kCrashServiceStartupTimeoutMs = 1000;
-
-const wchar_t kIEImageName[] = L"iexplore.exe";
-const wchar_t kIEBrokerImageName[] = L"ieuser.exe";
-const char kChromeImageName[] = "chrome.exe";
-const wchar_t kIEProfileName[] = L"iexplore";
-const wchar_t kChromeLauncher[] = L"chrome_launcher.exe";
-
-#ifndef NDEBUG
-const base::TimeDelta kChromeFrameLongNavigationTimeout =
- base::TimeDelta::FromSeconds(30);
-const base::TimeDelta kChromeFrameVeryLongNavigationTimeout =
- base::TimeDelta::FromSeconds(90);
-#else
-const base::TimeDelta kChromeFrameLongNavigationTimeout =
- base::TimeDelta::FromSeconds(10);
-const base::TimeDelta kChromeFrameVeryLongNavigationTimeout =
- base::TimeDelta::FromSeconds(30);
-#endif
-
-// Callback function for EnumThreadWindows.
-BOOL CALLBACK CloseWindowsThreadCallback(HWND hwnd, LPARAM param) {
- int& count = *reinterpret_cast<int*>(param);
- if (IsWindowVisible(hwnd)) {
- if (IsWindowEnabled(hwnd)) {
- DWORD results = 0;
- if (!::SendMessageTimeout(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0, SMTO_BLOCK,
- 10000, &results)) {
- LOG(WARNING) << "Window hung: " << base::StringPrintf(L"%08X", hwnd);
- }
- count++;
- } else {
- LOG(WARNING) << "Skipping disabled window: "
- << base::StringPrintf(L"%08X", hwnd);
- }
- }
- return TRUE; // continue enumeration
-}
-
-// Attempts to close all non-child, visible windows on the given thread.
-// The return value is the number of visible windows a close request was
-// sent to.
-int CloseVisibleTopLevelWindowsOnThread(DWORD thread_id) {
- int window_close_attempts = 0;
- EnumThreadWindows(thread_id, CloseWindowsThreadCallback,
- reinterpret_cast<LPARAM>(&window_close_attempts));
- return window_close_attempts;
-}
-
-// Enumerates the threads of a process and attempts to close visible non-child
-// windows on all threads of the process.
-// The return value is the number of visible windows a close request was
-// sent to.
-int CloseVisibleWindowsOnAllThreads(HANDLE process) {
- DWORD process_id = ::GetProcessId(process);
- if (process_id == 0) {
- NOTREACHED();
- return 0;
- }
-
- base::win::ScopedHandle snapshot(
- CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0));
- if (!snapshot.IsValid()) {
- NOTREACHED();
- return 0;
- }
-
- int window_close_attempts = 0;
- THREADENTRY32 te = { sizeof(THREADENTRY32) };
- if (Thread32First(snapshot, &te)) {
- do {
- if (RTL_CONTAINS_FIELD(&te, te.dwSize, th32OwnerProcessID) &&
- te.th32OwnerProcessID == process_id) {
- window_close_attempts +=
- CloseVisibleTopLevelWindowsOnThread(te.th32ThreadID);
- }
- te.dwSize = sizeof(te);
- } while (Thread32Next(snapshot, &te));
- }
-
- return window_close_attempts;
-}
-
-std::wstring GetExecutableAppPath(const std::wstring& file) {
- std::wstring kAppPathsKey =
- L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\";
-
- std::wstring app_path;
- base::win::RegKey key(HKEY_LOCAL_MACHINE, (kAppPathsKey + file).c_str(),
- KEY_READ);
- if (key.Handle()) {
- key.ReadValue(NULL, &app_path);
- }
-
- return app_path;
-}
-
-std::wstring FormatCommandForApp(const std::wstring& exe_name,
- const std::wstring& argument) {
- std::wstring reg_path(
- base::StringPrintf(L"Applications\\%ls\\shell\\open\\command",
- exe_name.c_str()));
- base::win::RegKey key(HKEY_CLASSES_ROOT, reg_path.c_str(), KEY_READ);
-
- std::wstring command;
- if (key.Handle()) {
- key.ReadValue(NULL, &command);
- int found = command.find(L"%1");
- if (found >= 0) {
- command.replace(found, 2, argument);
- }
- }
- return command;
-}
-
-base::ProcessHandle LaunchExecutable(const std::wstring& executable,
- const std::wstring& argument) {
- base::ProcessHandle process = NULL;
- std::wstring path = GetExecutableAppPath(executable);
- if (path.empty()) {
- path = FormatCommandForApp(executable, argument);
- if (path.empty()) {
- LOG(ERROR) << "Failed to find executable: " << executable;
- } else {
- CommandLine cmdline = CommandLine::FromString(path);
- if (!base::LaunchProcess(cmdline, base::LaunchOptions(), &process)) {
- LOG(ERROR) << "LaunchProcess failed: " << ::GetLastError();
- }
- }
- } else {
- CommandLine cmdline((base::FilePath(path)));
- cmdline.AppendArgNative(argument);
- if (!base::LaunchProcess(cmdline, base::LaunchOptions(), &process)) {
- LOG(ERROR) << "LaunchProcess failed: " << ::GetLastError();
- }
- }
- return process;
-}
-
-base::ProcessHandle LaunchChrome(const std::wstring& url,
- const base::FilePath& user_data_dir) {
- base::FilePath path;
- PathService::Get(base::DIR_MODULE, &path);
- path = path.AppendASCII(kChromeImageName);
-
- CommandLine cmd(path);
- cmd.AppendSwitch(switches::kNoFirstRun);
- if (!user_data_dir.empty())
- cmd.AppendSwitchPath(switches::kUserDataDir, user_data_dir);
- cmd.AppendArgNative(url);
-
- base::ProcessHandle process = NULL;
- base::LaunchProcess(cmd, base::LaunchOptions(), &process);
- return process;
-}
-
-base::ProcessHandle LaunchIEOnVista(const std::wstring& url) {
- typedef HRESULT (WINAPI* IELaunchURLPtr)(const wchar_t* url,
- PROCESS_INFORMATION* pi,
- VOID* info);
-
- IELaunchURLPtr launch;
- PROCESS_INFORMATION pi = {0};
- IELAUNCHURLINFO info = {sizeof info, 0};
- HMODULE h = LoadLibrary(L"ieframe.dll");
- if (!h) {
- LOG(ERROR) << "Failed to load ieframe.dll: " << ::GetLastError();
- return NULL;
- }
- launch = reinterpret_cast<IELaunchURLPtr>(GetProcAddress(h, "IELaunchURL"));
- CHECK(launch);
- HRESULT hr = launch(url.c_str(), &pi, &info);
- FreeLibrary(h);
- if (SUCCEEDED(hr)) {
- CloseHandle(pi.hThread);
- } else {
- LOG(ERROR) << base::StringPrintf("IELaunchURL failed: 0x%08X", hr);
- }
- return pi.hProcess;
-}
-
-base::ProcessHandle LaunchIE(const std::wstring& url) {
- if (GetInstalledIEVersion() >= IE_8) {
- chrome_frame_test::ClearIESessionHistory();
- }
-
- if (base::win::GetVersion() >= base::win::VERSION_VISTA) {
- return LaunchIEOnVista(url);
- }
- return LaunchExecutable(kIEImageName, url);
-}
-
-bool TakeSnapshotAndLog() {
- testing::UnitTest* unit_test = testing::UnitTest::GetInstance();
- const testing::TestInfo* test_info = unit_test->current_test_info();
- std::string name;
- if (test_info != NULL) {
- name.append(test_info->test_case_name())
- .append(1, '.')
- .append(test_info->name());
- } else {
- name = "unknown test";
- }
-
- base::FilePath snapshot;
- if (!ui_test_utils::SaveScreenSnapshotToDesktop(&snapshot)) {
- LOG(ERROR) << "Failed saving screen snapshot for " << name;
- return false;
- }
-
- LOG(ERROR) << "Saved screen snapshot for " << name << " to "
- << snapshot.value();
- return true;
-}
-
-int CloseAllIEWindows() {
- int ret = 0;
-
- base::win::ScopedComPtr<IShellWindows> windows;
- HRESULT hr = ::CoCreateInstance(__uuidof(ShellWindows), NULL, CLSCTX_ALL,
- IID_IShellWindows, reinterpret_cast<void**>(windows.Receive()));
- DCHECK(SUCCEEDED(hr));
-
- if (SUCCEEDED(hr)) {
- long count = 0; // NOLINT
- windows->get_Count(&count);
- VARIANT i = { VT_I4 };
- for (i.lVal = 0; i.lVal < count; ++i.lVal) {
- base::win::ScopedComPtr<IDispatch> folder;
- windows->Item(i, folder.Receive());
- if (folder != NULL) {
- base::win::ScopedComPtr<IWebBrowser2> browser;
- if (SUCCEEDED(browser.QueryFrom(folder))) {
- bool is_ie = true;
- HWND window = NULL;
- // Check the class of the browser window to make sure we only close
- // IE windows.
- if (browser->get_HWND(reinterpret_cast<SHANDLE_PTR*>(&window))) {
- wchar_t class_name[MAX_PATH];
- if (::GetClassName(window, class_name, arraysize(class_name))) {
- is_ie = _wcsicmp(class_name, L"IEFrame") == 0;
- }
- }
- if (is_ie) {
- browser->Quit();
- ++ret;
- }
- }
- }
- }
- }
-
- return ret;
-}
-
-
-LowIntegrityToken::LowIntegrityToken() : impersonated_(false) {
-}
-
-LowIntegrityToken::~LowIntegrityToken() {
- RevertToSelf();
-}
-
-BOOL LowIntegrityToken::RevertToSelf() {
- BOOL ok = TRUE;
- if (impersonated_) {
- DCHECK(IsImpersonated());
- ok = ::RevertToSelf();
- if (ok)
- impersonated_ = false;
- }
-
- return ok;
-}
-
-BOOL LowIntegrityToken::Impersonate() {
- DCHECK(!impersonated_);
- DCHECK(!IsImpersonated());
- HANDLE process_token_handle = NULL;
- BOOL ok = ::OpenProcessToken(GetCurrentProcess(), TOKEN_DUPLICATE,
- &process_token_handle);
- if (!ok) {
- LOG(ERROR) << "::OpenProcessToken failed: " << GetLastError();
- return ok;
- }
-
- base::win::ScopedHandle process_token(process_token_handle);
- // Create impersonation low integrity token.
- HANDLE impersonation_token_handle = NULL;
- ok = ::DuplicateTokenEx(process_token,
- TOKEN_QUERY | TOKEN_IMPERSONATE | TOKEN_ADJUST_DEFAULT, NULL,
- SecurityImpersonation, TokenImpersonation, &impersonation_token_handle);
- if (!ok) {
- LOG(ERROR) << "::DuplicateTokenEx failed: " << GetLastError();
- return ok;
- }
-
- // TODO(stoyan): sandbox/win/src/restricted_token_utils.cc has
- // SetTokenIntegrityLevel function already.
- base::win::ScopedHandle impersonation_token(impersonation_token_handle);
- PSID integrity_sid = NULL;
- TOKEN_MANDATORY_LABEL tml = {0};
- ok = ::ConvertStringSidToSid(SDDL_ML_LOW, &integrity_sid);
- if (!ok) {
- LOG(ERROR) << "::ConvertStringSidToSid failed: " << GetLastError();
- return ok;
- }
-
- tml.Label.Attributes = SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED;
- tml.Label.Sid = integrity_sid;
- ok = ::SetTokenInformation(impersonation_token, TokenIntegrityLevel,
- &tml, sizeof(tml) + ::GetLengthSid(integrity_sid));
- ::LocalFree(integrity_sid);
- if (!ok) {
- LOG(ERROR) << "::SetTokenInformation failed: " << GetLastError();
- return ok;
- }
-
- // Switch current thread to low integrity.
- ok = ::ImpersonateLoggedOnUser(impersonation_token);
- if (ok) {
- impersonated_ = true;
- } else {
- LOG(ERROR) << "::ImpersonateLoggedOnUser failed: " << GetLastError();
- }
-
- return ok;
-}
-
-bool LowIntegrityToken::IsImpersonated() {
- HANDLE token = NULL;
- if (!::OpenThreadToken(::GetCurrentThread(), 0, false, &token) &&
- ::GetLastError() != ERROR_NO_TOKEN) {
- return true;
- }
-
- if (token)
- ::CloseHandle(token);
-
- return false;
-}
-
-HRESULT LaunchIEAsComServer(IWebBrowser2** web_browser) {
- if (!web_browser)
- return E_INVALIDARG;
-
- if (GetInstalledIEVersion() >= IE_8) {
- chrome_frame_test::ClearIESessionHistory();
- }
-
- AllowSetForegroundWindow(ASFW_ANY);
-
- HRESULT hr = S_OK;
- DWORD cocreate_flags = CLSCTX_LOCAL_SERVER;
- chrome_frame_test::LowIntegrityToken token;
- base::IntegrityLevel integrity_level = base::INTEGRITY_UNKNOWN;
- // Vista has a bug which manifests itself when a medium integrity process
- // launches a COM server like IE which runs in protected mode due to UAC.
- // This causes the IWebBrowser2 interface which is returned to be useless,
- // i.e it does not receive any events, etc. Our workaround for this is
- // to impersonate a low integrity token and then launch IE. Skip this if the
- // tests are running at high integrity, since the workaround results in the
- // medium-integrity broker exiting, and the low-integrity IE is therefore
- // unable to get chrome_launcher running at medium integrity.
- if (base::win::GetVersion() == base::win::VERSION_VISTA &&
- GetInstalledIEVersion() == IE_7 &&
- base::GetProcessIntegrityLevel(base::Process::Current().handle(),
- &integrity_level) &&
- integrity_level != base::HIGH_INTEGRITY) {
- // Create medium integrity browser that will launch IE broker.
- base::win::ScopedComPtr<IWebBrowser2> medium_integrity_browser;
- hr = medium_integrity_browser.CreateInstance(CLSID_InternetExplorer, NULL,
- CLSCTX_LOCAL_SERVER);
- if (FAILED(hr))
- return hr;
- medium_integrity_browser->Quit();
- // Broker remains alive.
- if (!token.Impersonate()) {
- hr = HRESULT_FROM_WIN32(GetLastError());
- return hr;
- }
-
- cocreate_flags |= CLSCTX_ENABLE_CLOAKING;
- }
-
- hr = ::CoCreateInstance(CLSID_InternetExplorer, NULL,
- cocreate_flags, IID_IWebBrowser2,
- reinterpret_cast<void**>(web_browser));
- // ~LowIntegrityToken() will switch integrity back to medium.
- return hr;
-}
-
-std::wstring GetExeVersion(const std::wstring& exe_path) {
- scoped_ptr<FileVersionInfo> ie_version_info(
- FileVersionInfo::CreateFileVersionInfo(base::FilePath(exe_path)));
- return ie_version_info->product_version();
-}
-
-IEVersion GetInstalledIEVersion() {
- std::wstring path(chrome_frame_test::GetExecutableAppPath(kIEImageName));
- std::wstring version(GetExeVersion(path));
- size_t first_dot = version.find(L'.');
- int major_version = 0;
- if (!base::StringToInt(base::StringPiece16(
- version.data(),
- first_dot == std::wstring::npos ? version.size() : first_dot),
- &major_version)) {
- return IE_UNSUPPORTED;
- }
-
- switch (major_version) {
- case 6:
- return IE_6;
- case 7:
- return IE_7;
- case 8:
- return IE_8;
- case 9:
- return IE_9;
- case 10:
- return IE_10;
- default:
- break;
- }
-
- return IE_UNSUPPORTED;
-}
-
-base::FilePath GetProfilePathForIE() {
- base::FilePath profile_path;
- // Browsers without IDeleteBrowsingHistory in non-priv mode
- // have their profiles moved into "Temporary Internet Files".
- // The code below basically retrieves the version of IE and computes
- // the profile directory accordingly.
- if (GetInstalledIEVersion() <= IE_7) {
- profile_path = GetIETemporaryFilesFolder();
- profile_path = profile_path.Append(L"Google Chrome Frame");
- } else {
- GetChromeFrameProfilePath(kIEProfileName, &profile_path);
- }
- return profile_path;
-}
-
-base::FilePath GetTestDataFolder() {
- base::FilePath test_dir;
- PathService::Get(base::DIR_SOURCE_ROOT, &test_dir);
- test_dir = test_dir.Append(FILE_PATH_LITERAL("chrome_frame"))
- .Append(FILE_PATH_LITERAL("test"))
- .Append(FILE_PATH_LITERAL("data"));
- return test_dir;
-}
-
-base::FilePath GetSeleniumTestFolder() {
- base::FilePath test_dir;
- PathService::Get(base::DIR_SOURCE_ROOT, &test_dir);
- test_dir = test_dir.Append(FILE_PATH_LITERAL("data"))
- .Append(FILE_PATH_LITERAL("selenium_core"));
- return test_dir;
-}
-
-std::wstring GetPathFromUrl(const std::wstring& url) {
- base::string16 url16 = base::WideToUTF16(url);
- GURL gurl = GURL(url16);
- if (gurl.has_query()) {
- GURL::Replacements replacements;
- replacements.ClearQuery();
- gurl = gurl.ReplaceComponents(replacements);
- }
- return base::UTF8ToWide(gurl.PathForRequest());
-}
-
-std::wstring GetPathAndQueryFromUrl(const std::wstring& url) {
- base::string16 url16 = base::WideToUTF16(url);
- GURL gurl = GURL(url16);
- return base::UTF8ToWide(gurl.PathForRequest());
-}
-
-std::wstring GetClipboardText() {
- base::string16 text16;
- ui::Clipboard::GetForCurrentThread()->ReadText(
- ui::CLIPBOARD_TYPE_COPY_PASTE, &text16);
- return base::UTF16ToWide(text16);
-}
-
-void DestroyClipboard() {
- ui::Clipboard::DestroyClipboardForCurrentThread();
-}
-
-void SetClipboardText(const std::wstring& text) {
- ui::ScopedClipboardWriter clipboard_writer(
- ui::Clipboard::GetForCurrentThread(),
- ui::CLIPBOARD_TYPE_COPY_PASTE);
- clipboard_writer.WriteText(base::WideToUTF16(text));
-}
-
-bool AddCFMetaTag(std::string* html_data) {
- if (!html_data) {
- NOTREACHED();
- return false;
- }
- std::string lower = StringToLowerASCII(*html_data);
- size_t head = lower.find("<head>");
- if (head == std::string::npos) {
- // Add missing head section.
- size_t html = lower.find("<html>");
- if (html != std::string::npos) {
- head = html + strlen("<html>");
- html_data->insert(head, "<head></head>");
- } else {
- LOG(ERROR) << "Meta tag will not be injected "
- << "because the html tag could not be found";
- }
- }
- if (head != std::string::npos) {
- html_data->insert(
- head + strlen("<head>"),
- "<meta http-equiv=\"x-ua-compatible\" content=\"chrome=1\" />");
- }
- return head != std::string::npos;
-}
-
-CloseIeAtEndOfScope::~CloseIeAtEndOfScope() {
- int closed = CloseAllIEWindows();
- LOG_IF(ERROR, closed != 0) << "Closed " << closed << " windows forcefully";
-}
-
-// Attempt to connect to a running crash_service instance. Success occurs if we
-// can actually connect to the service's pipe or we receive ERROR_PIPE_BUSY.
-// Waits up to |timeout_ms| for success. |timeout_ms| may be 0, meaning only try
-// once, or negative, meaning wait forever.
-bool DetectRunningCrashService(int timeout_ms) {
- // Wait for the crash_service.exe to be ready for clients.
- base::Time start = base::Time::Now();
- base::win::ScopedHandle new_pipe;
-
- while (true) {
- new_pipe.Set(::CreateFile(kCrashServicePipeName,
- kCrashServicePipeDesiredAccess,
- 0, // dwShareMode
- NULL, // lpSecurityAttributes
- OPEN_EXISTING,
- kCrashServicePipeFlagsAndAttributes,
- NULL)); // hTemplateFile
-
- if (new_pipe.IsValid()) {
- return true;
- }
-
- switch (::GetLastError()) {
- case ERROR_PIPE_BUSY:
- // OK, it exists, let's assume that clients will eventually be able to
- // connect to it.
- return true;
- case ERROR_FILE_NOT_FOUND:
- // Wait a bit longer
- break;
- default:
- DPLOG(WARNING) << "Unexpected error while checking crash_service.exe's "
- << "pipe.";
- // Go ahead and wait in case it clears up.
- break;
- }
-
- if (timeout_ms == 0) {
- return false;
- } else if (timeout_ms > 0) {
- base::TimeDelta duration = base::Time::Now() - start;
- if (duration.InMilliseconds() > timeout_ms) {
- return false;
- }
- }
-
- Sleep(10);
- }
-}
-
-base::ProcessHandle StartCrashService() {
- if (DetectRunningCrashService(kCrashServiceDetectTimeoutMs)) {
- VLOG(1) << "crash_service.exe is already running. We will use the "
- "existing process and leave it running after tests complete.";
- return NULL;
- }
-
- base::FilePath exe_dir;
- if (!PathService::Get(base::DIR_EXE, &exe_dir)) {
- DCHECK(false);
- return NULL;
- }
-
- base::win::ScopedHandle crash_service;
-
- VLOG(1) << "Starting crash_service.exe so you know if a test crashes!";
-
- base::FilePath crash_service_path = exe_dir.AppendASCII("crash_service.exe");
- if (!base::LaunchProcess(crash_service_path.value(), base::LaunchOptions(),
- &crash_service)) {
- LOG(ERROR) << "Couldn't start crash_service.exe";
- return NULL;
- }
-
- base::Time start = base::Time::Now();
-
- if (DetectRunningCrashService(kCrashServiceStartupTimeoutMs)) {
- VLOG(1) << "crash_service.exe is ready for clients in "
- << (base::Time::Now() - start).InMilliseconds() << " ms.";
- return crash_service.Take();
- } else {
- LOG(ERROR) << "crash_service.exe failed to accept client connections "
- "within " << kCrashServiceStartupTimeoutMs << " ms. "
- "Terminating it now.";
-
- // First check to see if it's even still running just to minimize the
- // likelihood of spurious error messages from KillProcess.
- if (WAIT_OBJECT_0 != ::WaitForSingleObject(crash_service.Get(), 0)) {
- base::KillProcess(crash_service.Get(), 0, false);
- }
- return NULL;
- }
-}
-
-ScopedVirtualizeHklmAndHkcu::ScopedVirtualizeHklmAndHkcu() {
- override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE, L"hklm_fake");
- override_manager_.OverrideRegistry(HKEY_CURRENT_USER, L"hkcu_fake");
-}
-
-ScopedVirtualizeHklmAndHkcu::~ScopedVirtualizeHklmAndHkcu() {
-}
-
-bool KillProcesses(const std::wstring& executable_name, int exit_code,
- bool wait) {
- bool result = true;
- base::NamedProcessIterator iter(executable_name, NULL);
- while (const base::ProcessEntry* entry = iter.NextProcessEntry()) {
- result &= base::KillProcessById(entry->pid(), exit_code, wait);
- }
- return result;
-}
-
-ScopedChromeFrameRegistrar::RegistrationType GetTestBedType() {
- if (GetConfigBool(false, L"PerUserTestBed")) {
- return ScopedChromeFrameRegistrar::PER_USER;
- } else {
- return ScopedChromeFrameRegistrar::SYSTEM_LEVEL;
- }
-}
-
-void ClearIESessionHistory() {
- base::FilePath session_history_path;
- if (!PathService::Get(base::DIR_LOCAL_APP_DATA, &session_history_path))
- return;
-
- session_history_path = session_history_path.AppendASCII("Microsoft");
- session_history_path = session_history_path.AppendASCII("Internet Explorer");
- session_history_path = session_history_path.AppendASCII("Recovery");
- base::DeleteFile(session_history_path, true);
-}
-
-std::string GetLocalIPv4Address() {
- std::string address;
- net::NetworkInterfaceList nic_list;
-
- if (!net::GetNetworkList(&nic_list,
- net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES)) {
- LOG(ERROR) << "GetNetworkList failed to look up non-loopback adapters. "
- << "Tests will be run over the loopback adapter, which may "
- << "result in hangs.";
- } else {
- // GetNetworkList only returns 'Up' non-loopback adapters. Select the first
- // IPv4 address found - we should be able to bind/connect over it.
- for (size_t i = 0; i < nic_list.size(); ++i) {
- if (nic_list[i].address.size() != net::kIPv4AddressSize)
- continue;
- char* address_string =
- inet_ntoa(*reinterpret_cast<in_addr*>(&nic_list[i].address[0]));
- DCHECK(address_string != NULL);
- if (address_string != NULL) {
- LOG(INFO) << "HTTP tests will run over " << address_string << ".";
- address.assign(address_string);
- break;
- }
- }
- }
-
- if (address.empty()) {
- LOG(ERROR) << "Failed to find a non-loopback IP_V4 address. Tests will be "
- << "run over the loopback adapter, which may result in hangs.";
- address.assign("127.0.0.1");
- }
-
- return address;
-}
-
-} // namespace chrome_frame_test
« no previous file with comments | « chrome_frame/test/chrome_frame_test_utils.h ('k') | chrome_frame/test/chrome_frame_ui_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698