summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome_frame/test/chrome_frame_test_utils.cc5
-rw-r--r--chrome_frame/test/chrome_frame_test_utils.h6
-rw-r--r--chrome_frame/test/run_all_unittests.cc6
3 files changed, 15 insertions, 2 deletions
diff --git a/chrome_frame/test/chrome_frame_test_utils.cc b/chrome_frame/test/chrome_frame_test_utils.cc
index a174a6b..1cc1f47 100644
--- a/chrome_frame/test/chrome_frame_test_utils.cc
+++ b/chrome_frame/test/chrome_frame_test_utils.cc
@@ -449,7 +449,10 @@ void WebBrowserEventSink::Attach(IDispatch* browser_disp) {
void WebBrowserEventSink::Uninitialize() {
DisconnectFromChromeFrame();
if (web_browser2_.get()) {
- DispEventUnadvise(web_browser2_);
+ if (m_dwEventCookie != 0xFEFEFEFE) {
+ CoDisconnectObject(this, 0);
+ DispEventUnadvise(web_browser2_);
+ }
ScopedHandle process;
// process_id_to_wait_for_ is set when we receive OnQuit.
diff --git a/chrome_frame/test/chrome_frame_test_utils.h b/chrome_frame/test/chrome_frame_test_utils.h
index b7a3908..5a4e841 100644
--- a/chrome_frame/test/chrome_frame_test_utils.h
+++ b/chrome_frame/test/chrome_frame_test_utils.h
@@ -135,7 +135,8 @@ class WebBrowserEventSink
: public CComObjectRootEx<CComMultiThreadModel>,
public IDispEventSimpleImpl<0, WebBrowserEventSink,
&DIID_DWebBrowserEvents2>,
- public WindowObserver {
+ public WindowObserver,
+ public IUnknown {
public:
typedef IDispEventSimpleImpl<0, WebBrowserEventSink,
&DIID_DWebBrowserEvents2> DispEventsImpl;
@@ -155,6 +156,7 @@ class WebBrowserEventSink
}
BEGIN_COM_MAP(WebBrowserEventSink)
+ COM_INTERFACE_ENTRY(IUnknown)
END_COM_MAP()
BEGIN_SINK_MAP(WebBrowserEventSink)
@@ -240,6 +242,8 @@ END_SINK_MAP()
::GetWindowThreadProcessId(hwnd, &process_id_to_wait_for_);
OnQuit();
+ CoDisconnectObject(this, 0);
+ DispEventUnadvise(web_browser2_);
}
#ifdef _DEBUG
STDMETHOD(Invoke)(DISPID dispid, REFIID riid,
diff --git a/chrome_frame/test/run_all_unittests.cc b/chrome_frame/test/run_all_unittests.cc
index 7772259..a943671 100644
--- a/chrome_frame/test/run_all_unittests.cc
+++ b/chrome_frame/test/run_all_unittests.cc
@@ -60,10 +60,16 @@ base::ProcessHandle LoadCrashService() {
return crash_service;
}
+void PureCall() {
+ __debugbreak();
+}
+
int main(int argc, char **argv) {
base::EnableTerminationOnHeapCorruption();
PlatformThread::SetName("ChromeFrame tests");
+ _set_purecall_handler(PureCall);
+
TestSuite test_suite(argc, argv);
if (CommandLine::ForCurrentProcess()->HasSwitch(kRunAsServer)) {