summaryrefslogtreecommitdiffstats
path: root/chrome_frame/test/mock_ie_event_sink_test.h
diff options
context:
space:
mode:
authorerikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-21 19:03:33 +0000
committererikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-21 19:03:33 +0000
commit0bf46b99bb79d66c81587cb114b93516cb0af499 (patch)
treea7220ed87219b47ce247412d50551ff385d87f53 /chrome_frame/test/mock_ie_event_sink_test.h
parent102907fa8772f074bfd0f2b48bcdf75a819b6906 (diff)
downloadchromium_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.h54
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: