| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome_frame/com_message_event.h" | 5 #include "chrome_frame/com_message_event.h" |
| 6 | 6 |
| 7 #include <atlbase.h> | 7 #include <atlbase.h> |
| 8 #include <atlcom.h> | 8 #include <atlcom.h> |
| 9 | 9 |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 11 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 25 COM_INTERFACE_ENTRY(IOleContainer) | 25 COM_INTERFACE_ENTRY(IOleContainer) |
| 26 END_COM_MAP() | 26 END_COM_MAP() |
| 27 | 27 |
| 28 STDMETHOD(ParseDisplayName)(IBindCtx*, LPOLESTR, ULONG*, IMoniker**) { | 28 STDMETHOD(ParseDisplayName)(IBindCtx*, LPOLESTR, ULONG*, IMoniker**) { |
| 29 NOTREACHED(); | 29 NOTREACHED(); |
| 30 return E_NOTIMPL; | 30 return E_NOTIMPL; |
| 31 } | 31 } |
| 32 STDMETHOD(EnumObjects)(DWORD, IEnumUnknown**) { | 32 STDMETHOD(EnumObjects)(DWORD, IEnumUnknown**) { |
| 33 NOTREACHED(); | 33 NOTREACHED(); |
| 34 return E_NOTIMPL; | 34 return E_NOTIMPL; |
| 35 } | 35 } |
| 36 STDMETHOD(LockContainer)(BOOL) { | 36 STDMETHOD(LockContainer)(BOOL) { |
| 37 NOTREACHED(); | 37 NOTREACHED(); |
| 38 return E_NOTIMPL; | 38 return E_NOTIMPL; |
| 39 } | 39 } |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 TEST(ComMessageEvent, WithDumbContainer) { | 42 TEST(ComMessageEvent, WithDumbContainer) { |
| 43 CComObject<MockDumbContainer>* container_obj = NULL; | 43 CComObject<MockDumbContainer>* container_obj = NULL; |
| 44 CComObject<MockDumbContainer>::CreateInstance(&container_obj); | 44 CComObject<MockDumbContainer>::CreateInstance(&container_obj); |
| 45 ScopedComPtr<IOleContainer> container(container_obj); | 45 base::win::ScopedComPtr<IOleContainer> container(container_obj); |
| 46 EXPECT_FALSE(!container); | 46 EXPECT_FALSE(!container); |
| 47 | 47 |
| 48 CComObject<FriendlyComMessageEvent>* event_obj = NULL; | 48 CComObject<FriendlyComMessageEvent>* event_obj = NULL; |
| 49 CComObject<FriendlyComMessageEvent>::CreateInstance(&event_obj); | 49 CComObject<FriendlyComMessageEvent>::CreateInstance(&event_obj); |
| 50 ScopedComPtr<IUnknown> event_ref(event_obj); | 50 base::win::ScopedComPtr<IUnknown> event_ref(event_obj); |
| 51 | 51 |
| 52 bool result = event_obj->Initialize(container, "hi", "http://www.foo.com/", | 52 bool result = event_obj->Initialize(container, "hi", "http://www.foo.com/", |
| 53 "message"); | 53 "message"); |
| 54 EXPECT_TRUE(result); | 54 EXPECT_TRUE(result); |
| 55 EXPECT_TRUE(!event_obj->basic_event()); | 55 EXPECT_TRUE(!event_obj->basic_event()); |
| 56 } | 56 } |
| 57 | 57 |
| 58 // Mock object to mimic a "smart" container, e.g. IE, that will | 58 // Mock object to mimic a "smart" container, e.g. IE, that will |
| 59 // be able to return an IHTMLDocument2 and 4, and from which you | 59 // be able to return an IHTMLDocument2 and 4, and from which you |
| 60 // can get an IHTMLEventObj implementation. Doubles as a mock | 60 // can get an IHTMLEventObj implementation. Doubles as a mock |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 STDMETHODNOTIMP(get_offsetY, (long*)); | 272 STDMETHODNOTIMP(get_offsetY, (long*)); |
| 273 STDMETHODNOTIMP(get_screenX, (long*)); | 273 STDMETHODNOTIMP(get_screenX, (long*)); |
| 274 STDMETHODNOTIMP(get_screenY, (long*)); | 274 STDMETHODNOTIMP(get_screenY, (long*)); |
| 275 STDMETHODNOTIMP(get_srcFilter, (IDispatch**)); | 275 STDMETHODNOTIMP(get_srcFilter, (IDispatch**)); |
| 276 #undef STDMETHODNOTIMP | 276 #undef STDMETHODNOTIMP |
| 277 }; | 277 }; |
| 278 | 278 |
| 279 TEST(ComMessageEvent, WithSmartContainer) { | 279 TEST(ComMessageEvent, WithSmartContainer) { |
| 280 CComObject<MockSmartContainer>* container_obj = NULL; | 280 CComObject<MockSmartContainer>* container_obj = NULL; |
| 281 CComObject<MockSmartContainer>::CreateInstance(&container_obj); | 281 CComObject<MockSmartContainer>::CreateInstance(&container_obj); |
| 282 ScopedComPtr<IOleContainer> container(container_obj); | 282 base::win::ScopedComPtr<IOleContainer> container(container_obj); |
| 283 EXPECT_FALSE(!container); | 283 EXPECT_FALSE(!container); |
| 284 | 284 |
| 285 CComObject<FriendlyComMessageEvent>* event_obj = NULL; | 285 CComObject<FriendlyComMessageEvent>* event_obj = NULL; |
| 286 CComObject<FriendlyComMessageEvent>::CreateInstance(&event_obj); | 286 CComObject<FriendlyComMessageEvent>::CreateInstance(&event_obj); |
| 287 ScopedComPtr<IUnknown> event_ref(event_obj); | 287 base::win::ScopedComPtr<IUnknown> event_ref(event_obj); |
| 288 | 288 |
| 289 bool succeeded = event_obj->Initialize(container, "hi", | 289 bool succeeded = event_obj->Initialize(container, "hi", |
| 290 "http://www.foo.com/", "message"); | 290 "http://www.foo.com/", "message"); |
| 291 EXPECT_TRUE(succeeded); | 291 EXPECT_TRUE(succeeded); |
| 292 EXPECT_FALSE(!event_obj->basic_event()); | 292 EXPECT_FALSE(!event_obj->basic_event()); |
| 293 | 293 |
| 294 // Name handled natively by CF's ComMessageEvent. | 294 // Name handled natively by CF's ComMessageEvent. |
| 295 DISPID dispid = -1; | 295 DISPID dispid = -1; |
| 296 LPOLESTR name = L"data"; | 296 LPOLESTR name = L"data"; |
| 297 HRESULT hr = event_obj->GetIDsOfNames(IID_IDispatch, &name, 1, | 297 HRESULT hr = event_obj->GetIDsOfNames(IID_IDispatch, &name, 1, |
| 298 LOCALE_USER_DEFAULT, &dispid); | 298 LOCALE_USER_DEFAULT, &dispid); |
| 299 EXPECT_HRESULT_SUCCEEDED(hr); | 299 EXPECT_HRESULT_SUCCEEDED(hr); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 316 EXPECT_EQ(result.vt, VT_BSTR); | 316 EXPECT_EQ(result.vt, VT_BSTR); |
| 317 EXPECT_EQ(wcscmp(result.bstrVal, L"hi"), 0); | 317 EXPECT_EQ(wcscmp(result.bstrVal, L"hi"), 0); |
| 318 | 318 |
| 319 // And now check passthrough. | 319 // And now check passthrough. |
| 320 result.Clear(); | 320 result.Clear(); |
| 321 hr = dispatcher.GetProperty(MockSmartContainer::kDispId, &result); | 321 hr = dispatcher.GetProperty(MockSmartContainer::kDispId, &result); |
| 322 EXPECT_HRESULT_SUCCEEDED(hr); | 322 EXPECT_HRESULT_SUCCEEDED(hr); |
| 323 EXPECT_EQ(result.vt, VT_I4); | 323 EXPECT_EQ(result.vt, VT_I4); |
| 324 EXPECT_EQ(result.lVal, MockSmartContainer::kResultValue); | 324 EXPECT_EQ(result.lVal, MockSmartContainer::kResultValue); |
| 325 } | 325 } |
| OLD | NEW |