OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 // | |
5 // Unit tests for ChromeFrameActivex. | |
6 | |
7 #include "chrome_frame/chrome_frame_activex.h" | |
8 | |
9 #include "ceee/common/initializing_coclass.h" | |
10 #include "ceee/testing/utils/test_utils.h" | |
11 #include "ceee/testing/utils/mock_com.h" | |
12 #include "chrome_frame/test/chrome_tab_mocks.h" | |
13 #include "gtest/gtest.h" | |
14 #include "gmock/gmock.h" | |
15 | |
16 namespace { | |
17 | |
18 using testing::_; | |
19 using testing::AddRef; | |
20 using testing::DoAll; | |
21 using testing::IOleClientSiteMockImpl; | |
22 using testing::IServiceProviderMockImpl; | |
23 using testing::MockIChromeFramePrivileged; | |
24 using testing::Return; | |
25 using testing::SetArgumentPointee; | |
26 using testing::StrictMock; | |
27 | |
28 // Just to unhide the static function. | |
29 class TestingChromeFrameActivex : public ChromeFrameActivex { | |
30 public: | |
31 static HRESULT TestingShouldShowVersionMismatchDialog( | |
32 bool is_privileged, IOleClientSite* client_site) { | |
33 return ShouldShowVersionMismatchDialog(is_privileged, client_site); | |
34 } | |
35 }; | |
36 | |
37 class MockChromeFrameClientSite | |
38 : public CComObjectRootEx<CComSingleThreadModel>, | |
39 public StrictMock<IOleClientSiteMockImpl>, | |
40 public StrictMock<IServiceProviderMockImpl> { | |
41 public: | |
42 DECLARE_NOT_AGGREGATABLE(MockChromeFrameClientSite) | |
43 BEGIN_COM_MAP(MockChromeFrameClientSite) | |
44 COM_INTERFACE_ENTRY(IOleClientSite) | |
45 COM_INTERFACE_ENTRY(IServiceProvider) | |
46 END_COM_MAP() | |
47 DECLARE_PROTECT_FINAL_CONSTRUCT() | |
48 | |
49 HRESULT Initialize(MockChromeFrameClientSite** client_site) { | |
50 *client_site = this; | |
51 return S_OK; | |
52 } | |
53 }; | |
54 | |
55 TEST(ChromeFrameActivex, ShouldShowVersionMismatchDialog) { | |
56 // If not privileged, we always show the dialog. | |
57 ASSERT_TRUE( | |
58 TestingChromeFrameActivex::TestingShouldShowVersionMismatchDialog( | |
59 false, NULL)); | |
60 | |
61 MockChromeFrameClientSite* cs_keeper; | |
62 ScopedComPtr<IOleClientSite> cs; | |
63 ASSERT_HRESULT_SUCCEEDED( | |
64 InitializingCoClass<MockChromeFrameClientSite>::CreateInitialized( | |
65 &cs_keeper, cs.Receive())); | |
66 | |
67 MockIChromeFramePrivileged* cfp_keeper; | |
68 ScopedComPtr<IChromeFramePrivileged> cfp; | |
69 ASSERT_HRESULT_SUCCEEDED( | |
70 InitializingCoClass<MockIChromeFramePrivileged>::CreateInitialized( | |
71 &cfp_keeper, cfp.Receive())); | |
72 | |
73 EXPECT_CALL(*cs_keeper, QueryService(SID_ChromeFramePrivileged, | |
74 IID_IChromeFramePrivileged, _)) | |
75 .WillRepeatedly(DoAll(AddRef(cfp.get()), | |
76 SetArgumentPointee<2>(static_cast<void*>(cfp)), | |
77 Return(S_OK))); | |
78 | |
79 EXPECT_CALL(*cfp_keeper, ShouldShowVersionMismatchDialog()) | |
80 .WillOnce(Return(S_OK)); | |
81 ASSERT_TRUE( | |
82 TestingChromeFrameActivex::TestingShouldShowVersionMismatchDialog( | |
83 true, cs_keeper)); | |
84 | |
85 EXPECT_CALL(*cfp_keeper, ShouldShowVersionMismatchDialog()) | |
86 .WillOnce(Return(S_FALSE)); | |
87 ASSERT_FALSE( | |
88 TestingChromeFrameActivex::TestingShouldShowVersionMismatchDialog( | |
89 true, cs_keeper)); | |
90 | |
91 // Also test that we fail safe, showing the dialog unless we got | |
92 // an affirmative do-not-show. | |
93 EXPECT_CALL(*cfp_keeper, ShouldShowVersionMismatchDialog()) | |
94 .WillOnce(Return(E_UNEXPECTED)); | |
95 ASSERT_TRUE( | |
96 TestingChromeFrameActivex::TestingShouldShowVersionMismatchDialog( | |
97 true, cs_keeper)); | |
98 } | |
99 | |
100 } // namespace | |
OLD | NEW |