diff options
author | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-21 19:03:33 +0000 |
---|---|---|
committer | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-21 19:03:33 +0000 |
commit | 0bf46b99bb79d66c81587cb114b93516cb0af499 (patch) | |
tree | a7220ed87219b47ce247412d50551ff385d87f53 /chrome_frame/test/mock_ie_event_sink_test.h | |
parent | 102907fa8772f074bfd0f2b48bcdf75a819b6906 (diff) | |
download | chromium_src-0bf46b99bb79d66c81587cb114b93516cb0af499.zip chromium_src-0bf46b99bb79d66c81587cb114b93516cb0af499.tar.gz chromium_src-0bf46b99bb79d66c81587cb114b93516cb0af499.tar.bz2 |
A test for Chrome Frame delete browser history behaviour in IE8.
BUG=52612
TEST=chrome_frame_tests --gtest_filter=DeleteBrowsingHistoryTest.*
Review URL: http://codereview.chromium.org/3365010/show
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@60084 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/test/mock_ie_event_sink_test.h')
-rw-r--r-- | chrome_frame/test/mock_ie_event_sink_test.h | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/chrome_frame/test/mock_ie_event_sink_test.h b/chrome_frame/test/mock_ie_event_sink_test.h index 4a1e31d..74be974 100644 --- a/chrome_frame/test/mock_ie_event_sink_test.h +++ b/chrome_frame/test/mock_ie_event_sink_test.h @@ -8,6 +8,7 @@ #include <atlbase.h> #include <atlcom.h> #include <string> +#include <vector> #include "base/file_path.h" #include "base/string_number_conversions.h" @@ -203,18 +204,55 @@ class MockPropertyNotifySinkListener : public PropertyNotifySinkListener { ScopedComPtr<IUnknown> event_source_; }; +// Allows tests to observe when processes exit. +class MockObjectWatcherDelegate : public base::ObjectWatcher::Delegate { + public: + // base::ObjectWatcher::Delegate implementation + MOCK_METHOD1(OnObjectSignaled, void (HANDLE process_handle)); // NOLINT + + virtual ~MockObjectWatcherDelegate() { + // Would be nice to free them when OnObjectSignaled is called, too, but + // it doesn't seem worth it. + for (std::vector<HANDLE>::iterator it = process_handles_.begin(); + it != process_handles_.end(); ++it) { + ::CloseHandle(*it); + } + } + + // Registers this instance to watch |process_handle| for termination. + void WatchProcess(HANDLE process_handle) { + process_handles_.push_back(process_handle); + object_watcher_.StartWatching(process_handle, this); + } + + // Registers this instance to watch |hwnd|'s owning process for termination. + void WatchProcessForHwnd(HWND hwnd) { + DWORD pid = 0; + ::GetWindowThreadProcessId(hwnd, &pid); + EXPECT_TRUE(pid); + if (pid != 0) { + HANDLE process_handle = ::OpenProcess(SYNCHRONIZE, FALSE, pid); + EXPECT_TRUE(process_handle); + if (process_handle != NULL) { + WatchProcess(process_handle); + } + } + } + + private: + std::vector<HANDLE> process_handles_; + base::ObjectWatcher object_watcher_; +}; // Mocks a window observer so that tests can detect new windows. class MockWindowObserver : public WindowObserver { public: - // Override WindowObserver methods. - MOCK_METHOD2(OnWindowDetected, void (HWND hwnd, // NOLINT - const std::string& caption)); - - // Watch for all windows of the given class type. - void WatchWindow(const wchar_t* window_class) { - DCHECK(window_class); - window_watcher_.AddObserver(this, WideToUTF8(window_class)); + // WindowObserver implementation + MOCK_METHOD1(OnWindowOpen, void (HWND hwnd)); // NOLINT + MOCK_METHOD1(OnWindowClose, void (HWND hwnd)); // NOLINT + + void WatchWindow(std::string caption_pattern) { + window_watcher_.AddObserver(this, caption_pattern); } private: |