Index: chrome_frame/test/chrome_frame_test_utils.h |
diff --git a/chrome_frame/test/chrome_frame_test_utils.h b/chrome_frame/test/chrome_frame_test_utils.h |
deleted file mode 100644 |
index 316d57c238173f061a5573a456e5e08635f52355..0000000000000000000000000000000000000000 |
--- a/chrome_frame/test/chrome_frame_test_utils.h |
+++ /dev/null |
@@ -1,374 +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. |
- |
-#ifndef CHROME_FRAME_TEST_CHROME_FRAME_TEST_UTILS_H_ |
-#define CHROME_FRAME_TEST_CHROME_FRAME_TEST_UTILS_H_ |
- |
-#include <windows.h> |
- |
-#include <atlbase.h> |
-#include <atlwin.h> |
- |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "base/cancelable_callback.h" |
-#include "base/compiler_specific.h" |
-#include "base/files/file_path.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/process/process_handle.h" |
-#include "base/run_loop.h" |
-#include "base/test/test_reg_util_win.h" |
-#include "base/time/time.h" |
-#include "base/time/time.h" |
-#include "base/win/registry.h" |
-#include "base/win/scoped_comptr.h" |
-#include "chrome_frame/chrome_tab.h" |
-#include "chrome_frame/test/simulate_input.h" |
-#include "chrome_frame/test_utils.h" |
-#include "chrome_frame/utils.h" |
- |
-#include "gtest/gtest.h" |
- |
-// Needed for CreateFunctor. |
-#define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING |
-#include "testing/gmock_mutant.h" |
- |
-interface IWebBrowser2; |
- |
-namespace base { |
-class FilePath; |
-} |
- |
-namespace chrome_frame_test { |
- |
-int CloseVisibleWindowsOnAllThreads(HANDLE process); |
- |
-base::ProcessHandle LaunchIE(const std::wstring& url); |
-base::ProcessHandle LaunchChrome(const std::wstring& url, |
- const base::FilePath& user_data_dir); |
- |
-// Attempts to close all open IE windows. |
-// The return value is the number of windows closed. |
-// @note: this function requires COM to be initialized on the calling thread. |
-// Since the caller might be running in either MTA or STA, the function does |
-// not perform this initialization itself. |
-int CloseAllIEWindows(); |
- |
-// Saves a screen snapshot to the desktop and logs its location. |
-bool TakeSnapshotAndLog(); |
- |
-extern const wchar_t kIEImageName[]; |
-extern const wchar_t kIEBrokerImageName[]; |
-extern const char kChromeImageName[]; |
-extern const wchar_t kChromeLauncher[]; |
-extern const base::TimeDelta kChromeFrameLongNavigationTimeout; |
-extern const base::TimeDelta kChromeFrameVeryLongNavigationTimeout; |
- |
-// Temporarily impersonate the current thread to low integrity for the lifetime |
-// of the object. Destructor will automatically revert integrity level. |
-class LowIntegrityToken { |
- public: |
- LowIntegrityToken(); |
- ~LowIntegrityToken(); |
- BOOL Impersonate(); |
- BOOL RevertToSelf(); |
- protected: |
- static bool IsImpersonated(); |
- bool impersonated_; |
-}; |
- |
-// This class implements the COM IMessageFilter interface and is used to detect |
-// hung outgoing COM calls which are typically to IE. If IE is hung for any |
-// reason the chrome frame tests should not hang indefinitely. This class |
-// basically cancels the outgoing call if the WM_TIMER which is set by the |
-// TimedMsgLoop object is posted to the message queue. |
-class HungCOMCallDetector |
- : public CComObjectRootEx<CComMultiThreadModel>, |
- public IMessageFilter, |
- public CWindowImpl<HungCOMCallDetector> { |
- public: |
- HungCOMCallDetector() |
- : is_hung_(false) { |
- } |
- |
- ~HungCOMCallDetector() { |
- TearDown(); |
- } |
- |
- BEGIN_MSG_MAP(HungCOMCallDetector) |
- MESSAGE_HANDLER(WM_TIMER, OnTimer) |
- END_MSG_MAP() |
- |
- BEGIN_COM_MAP(HungCOMCallDetector) |
- COM_INTERFACE_ENTRY(IMessageFilter) |
- END_COM_MAP() |
- |
- static CComObject<HungCOMCallDetector>* Setup(int timeout_seconds) { |
- CComObject<HungCOMCallDetector>* this_instance = NULL; |
- CComObject<HungCOMCallDetector>::CreateInstance(&this_instance); |
- EXPECT_TRUE(this_instance != NULL); |
- scoped_refptr<HungCOMCallDetector> ref_instance = this_instance; |
- |
- HRESULT hr = ref_instance->Initialize(timeout_seconds); |
- if (FAILED(hr)) { |
- LOG(ERROR) << "Failed to Initialize Hung COM call detector. Error:" |
- << hr; |
- return NULL; |
- } |
- return this_instance; |
- } |
- |
- void TearDown() { |
- if (prev_filter_) { |
- base::win::ScopedComPtr<IMessageFilter> prev_filter; |
- CoRegisterMessageFilter(prev_filter_.get(), prev_filter.Receive()); |
- DCHECK(prev_filter.IsSameObject(this)); |
- prev_filter_.Release(); |
- } |
- if (IsWindow()) { |
- DestroyWindow(); |
- m_hWnd = NULL; |
- } |
- } |
- |
- STDMETHOD_(DWORD, HandleInComingCall)(DWORD call_type, |
- HTASK caller, |
- DWORD tick_count, |
- LPINTERFACEINFO interface_info) { |
- return SERVERCALL_ISHANDLED; |
- } |
- |
- STDMETHOD_(DWORD, RetryRejectedCall)(HTASK callee, |
- DWORD tick_count, |
- DWORD reject_type) { |
- return -1; |
- } |
- |
- STDMETHOD_(DWORD, MessagePending)(HTASK callee, |
- DWORD tick_count, |
- DWORD pending_type) { |
- MSG msg = {0}; |
- if (is_hung_) { |
- return PENDINGMSG_CANCELCALL; |
- } |
- return PENDINGMSG_WAITDEFPROCESS; |
- } |
- |
- bool is_hung() const { |
- return is_hung_; |
- } |
- |
- LRESULT OnTimer(UINT msg, WPARAM wp, LPARAM lp, BOOL& handled) { // NOLINT |
- is_hung_ = true; |
- return 1; |
- } |
- |
- private: |
- HRESULT Initialize(int timeout_seconds) { |
- // Create a window for the purpose of setting a windows timer for |
- // detecting whether any outgoing COM call issued in this context |
- // hangs. |
- // We then register a COM message filter which basically looks for the |
- // timer posted to this window and cancels the outgoing call. |
- Create(HWND_MESSAGE); |
- if (!IsWindow()) { |
- LOG(ERROR) << "Failed to create window. Error:" << GetLastError(); |
- return E_FAIL; |
- } |
- |
- HRESULT hr = CoRegisterMessageFilter(this, prev_filter_.Receive()); |
- if (FAILED(hr)) { |
- LOG(ERROR) << "Failed to register message filter. Error:" << hr; |
- return hr; |
- } |
- |
- static const int kHungDetectTimerId = 0x0000baba; |
- SetTimer(kHungDetectTimerId, 1000 * (timeout_seconds + 40), NULL); |
- return S_OK; |
- } |
- |
- // used to detect if outgoing COM calls hung. |
- bool is_hung_; |
- base::win::ScopedComPtr<IMessageFilter> prev_filter_; |
-}; |
- |
-// MessageLoopForUI wrapper that runs only for a limited time. |
-// We need a UI message loop in the main thread. |
-class TimedMsgLoop { |
- public: |
- TimedMsgLoop() : snapshot_on_timeout_(false), quit_loop_invoked_(false) { |
- } |
- |
- void set_snapshot_on_timeout(bool value) { |
- snapshot_on_timeout_ = value; |
- } |
- |
- void RunFor(base::TimeDelta duration) { |
- quit_loop_invoked_ = false; |
- if (snapshot_on_timeout_) |
- timeout_closure_.Reset(base::Bind(&TimedMsgLoop::SnapshotAndQuit)); |
- else |
- timeout_closure_.Reset(base::MessageLoop::QuitClosure()); |
- loop_.PostDelayedTask(FROM_HERE, timeout_closure_.callback(), duration); |
- loop_.base::MessageLoop::Run(); |
- timeout_closure_.Cancel(); |
- } |
- |
- void PostTask(const tracked_objects::Location& from_here, |
- const base::Closure& task) { |
- loop_.PostTask(from_here, task); |
- } |
- |
- void PostDelayedTask(const tracked_objects::Location& from_here, |
- const base::Closure& task, base::TimeDelta delay) { |
- loop_.PostDelayedTask(from_here, task, delay); |
- } |
- |
- void Quit() { |
- // Quit after no delay. |
- QuitAfter(base::TimeDelta()); |
- } |
- |
- void QuitAfter(base::TimeDelta delay) { |
- timeout_closure_.Cancel(); |
- quit_loop_invoked_ = true; |
- loop_.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitClosure(), delay); |
- } |
- |
- bool WasTimedOut() const { |
- return !quit_loop_invoked_; |
- } |
- |
- void RunUntilIdle() { |
- loop_.RunUntilIdle(); |
- } |
- |
- private: |
- static void SnapshotAndQuit() { |
- TakeSnapshotAndLog(); |
- base::MessageLoop::current()->Quit(); |
- } |
- |
- base::MessageLoopForUI loop_; |
- base::CancelableClosure timeout_closure_; |
- bool snapshot_on_timeout_; |
- bool quit_loop_invoked_; |
-}; |
- |
-// Saves typing. It's somewhat hard to create a wrapper around |
-// testing::InvokeWithoutArgs since it returns a |
-// non-public (testing::internal) type. |
-#define QUIT_LOOP(loop) testing::InvokeWithoutArgs(\ |
- testing::CreateFunctor(&loop, &chrome_frame_test::TimedMsgLoop::Quit)) |
- |
-#define QUIT_LOOP_SOON(loop, delay) testing::InvokeWithoutArgs(\ |
- testing::CreateFunctor(&loop, &chrome_frame_test::TimedMsgLoop::QuitAfter, \ |
- delay)) |
- |
-// Launches IE as a COM server and returns the corresponding IWebBrowser2 |
-// interface pointer. |
-// Returns S_OK on success. |
-HRESULT LaunchIEAsComServer(IWebBrowser2** web_browser); |
- |
-// Returns the path of the exe passed in. |
-std::wstring GetExecutableAppPath(const std::wstring& file); |
- |
-// Returns the profile path to be used for IE. This varies as per version. |
-base::FilePath GetProfilePathForIE(); |
- |
-// Returns the version of the exe passed in. |
-std::wstring GetExeVersion(const std::wstring& exe_path); |
- |
-// Returns the version of Internet Explorer on the machine. |
-IEVersion GetInstalledIEVersion(); |
- |
-// Returns the folder for CF test data. |
-base::FilePath GetTestDataFolder(); |
- |
-// Returns the folder for Selenium core. |
-base::FilePath GetSeleniumTestFolder(); |
- |
-// Returns the path portion of the url. |
-std::wstring GetPathFromUrl(const std::wstring& url); |
- |
-// Returns the path and query portion of the url. |
-std::wstring GetPathAndQueryFromUrl(const std::wstring& url); |
- |
-// Adds the CF meta tag to the html page. Returns true if successful. |
-bool AddCFMetaTag(std::string* html_data); |
- |
-// Get text data from the clipboard. |
-std::wstring GetClipboardText(); |
- |
-// Destroys the clipboard for the current thread. This function must be called |
-// if GetClipboardText() or SetClipboardText() have been invoked. |
-void DestroyClipboard(); |
- |
-// Puts the given text data on the clipboard. All previous items on the |
-// clipboard are removed. |
-void SetClipboardText(const std::wstring& text); |
- |
-// A convenience class to close all open IE windows at the end |
-// of a scope. It's more convenient to do it this way than to |
-// explicitly call chrome_frame_test::CloseAllIEWindows at the |
-// end of a test since part of the test's cleanup code may be |
-// in object destructors that would run after CloseAllIEWindows |
-// would get called. |
-// Ideally all IE windows should be closed when this happens so |
-// if the test ran normally, we should not have any windows to |
-// close at this point. |
-class CloseIeAtEndOfScope { |
- public: |
- CloseIeAtEndOfScope() {} |
- ~CloseIeAtEndOfScope(); |
-}; |
- |
-// Starts the Chrome crash service which enables us to gather crash dumps |
-// during test runs. |
-base::ProcessHandle StartCrashService(); |
- |
-// Used in tests where we reference the registry and don't want to run into |
-// problems where existing registry settings might conflict with the |
-// expectations of the test. |
-class ScopedVirtualizeHklmAndHkcu { |
- public: |
- ScopedVirtualizeHklmAndHkcu(); |
- ~ScopedVirtualizeHklmAndHkcu(); |
- |
- protected: |
- registry_util::RegistryOverrideManager override_manager_; |
-}; |
- |
-// Attempts to kill all the processes on the current machine that were launched |
-// from the given executable name, ending them with the given exit code. If |
-// filter is non-null, then only processes selected by the filter are killed. |
-// Returns true if all processes were able to be killed off, false if at least |
-// one couldn't be killed. |
-// NOTE: This function is based on the base\process_util.h helper function |
-// KillProcesses. Takes in the wait flag as a parameter. |
-bool KillProcesses(const std::wstring& executable_name, int exit_code, |
- bool wait); |
- |
-// Returns the type of test bed, PER_USER or SYSTEM_LEVEL. |
-ScopedChromeFrameRegistrar::RegistrationType GetTestBedType(); |
- |
-// Clears IE8 session restore history. |
-void ClearIESessionHistory(); |
- |
-// Returns a local IPv4 address for the current machine. The address |
-// corresponding to a NIC is preferred over the loopback address. |
-std::string GetLocalIPv4Address(); |
- |
-} // namespace chrome_frame_test |
- |
-// TODO(tommi): This is a temporary workaround while we're getting our |
-// Singleton story straight. Ideally each test should clear up any singletons |
-// it might have created, but test cases do not implicitly have their own |
-// AtExitManager, so we have this workaround method for tests that depend on |
-// "fresh" singletons. The implementation is in chrome_frame_unittest_main.cc. |
-void DeleteAllSingletons(); |
- |
-#endif // CHROME_FRAME_TEST_CHROME_FRAME_TEST_UTILS_H_ |