Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 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 // Executor implementation unit tests. | 5 // Executor implementation unit tests. |
| 6 | 6 |
| 7 // MockWin32 must not be included after atlwin, which is included by some | 7 // MockWin32 must not be included after atlwin, which is included by some |
| 8 // headers in here, so we need to put it at the top: | 8 // headers in here, so we need to put it at the top: |
| 9 #include "ceee/testing/utils/mock_win32.h" // NOLINT | 9 #include "ceee/testing/utils/mock_win32.h" // NOLINT |
| 10 | 10 |
| 11 #include <wininet.h> | 11 #include <wininet.h> |
| 12 | 12 |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "ceee/ie/broker/cookie_api_module.h" | 15 #include "ceee/ie/broker/cookie_api_module.h" |
| 16 #include "ceee/ie/broker/common_api_module.h" | 16 #include "ceee/ie/broker/common_api_module.h" |
| 17 #include "ceee/ie/broker/tab_api_module.h" | 17 #include "ceee/ie/broker/tab_api_module.h" |
| 18 #include "ceee/ie/broker/window_api_module.h" | 18 #include "ceee/ie/broker/window_api_module.h" |
| 19 #include "ceee/ie/common/ie_util.h" | 19 #include "ceee/ie/common/ie_util.h" |
| 20 #include "ceee/ie/common/mock_ie_tab_interfaces.h" | 20 #include "ceee/ie/common/mock_ie_tab_interfaces.h" |
| 21 #include "ceee/ie/plugin/bho/executor.h" | 21 #include "ceee/ie/plugin/bho/executor.h" |
| 22 #include "ceee/ie/plugin/bho/infobar_manager.h" | |
| 22 #include "ceee/ie/testing/mock_broker_and_friends.h" | 23 #include "ceee/ie/testing/mock_broker_and_friends.h" |
| 23 #include "ceee/ie/testing/mock_frame_event_handler_host.h" | 24 #include "ceee/ie/testing/mock_frame_event_handler_host.h" |
| 24 #include "ceee/common/initializing_coclass.h" | 25 #include "ceee/common/initializing_coclass.h" |
| 25 #include "ceee/testing/utils/mock_com.h" | 26 #include "ceee/testing/utils/mock_com.h" |
| 26 #include "ceee/testing/utils/mshtml_mocks.h" | 27 #include "ceee/testing/utils/mshtml_mocks.h" |
| 27 #include "ceee/testing/utils/mock_static.h" | 28 #include "ceee/testing/utils/mock_static.h" |
| 28 #include "ceee/testing/utils/mock_window_utils.h" | 29 #include "ceee/testing/utils/mock_window_utils.h" |
| 29 #include "ceee/testing/utils/test_utils.h" | 30 #include "ceee/testing/utils/test_utils.h" |
| 30 #include "ceee/testing/utils/instance_count_mixin.h" | 31 #include "ceee/testing/utils/instance_count_mixin.h" |
| 31 #include "testing/gmock/include/gmock/gmock.h" | 32 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 73 HRESULT Initialize(StrictMock<TestingMockExecutorCreatorTeardown>** self) { | 74 HRESULT Initialize(StrictMock<TestingMockExecutorCreatorTeardown>** self) { |
| 74 // Yes, this seems fishy, but it is called from InitializingCoClass | 75 // Yes, this seems fishy, but it is called from InitializingCoClass |
| 75 // which does it on the class we pass it as a template, so we are OK. | 76 // which does it on the class we pass it as a template, so we are OK. |
| 76 *self = static_cast<StrictMock<TestingMockExecutorCreatorTeardown>*>(this); | 77 *self = static_cast<StrictMock<TestingMockExecutorCreatorTeardown>*>(this); |
| 77 return S_OK; | 78 return S_OK; |
| 78 } | 79 } |
| 79 | 80 |
| 80 MOCK_METHOD1_WITH_CALLTYPE(__stdcall, Teardown, HRESULT(long)); | 81 MOCK_METHOD1_WITH_CALLTYPE(__stdcall, Teardown, HRESULT(long)); |
| 81 }; | 82 }; |
| 82 | 83 |
| 84 class MockInfobarManager : public infobar_api::InfobarManager { | |
| 85 public: | |
| 86 MockInfobarManager() : InfobarManager(kGoodWindow) {} | |
| 87 MOCK_METHOD4(Show, HRESULT(infobar_api::InfobarType, int, | |
| 88 const std::wstring&, bool)); | |
| 89 MOCK_METHOD1(Hide, HRESULT(infobar_api::InfobarType)); | |
| 90 MOCK_METHOD0(HideAll, void()); | |
| 91 }; | |
| 92 | |
| 83 TEST(ExecutorCreator, ProperTearDownOnDestruction) { | 93 TEST(ExecutorCreator, ProperTearDownOnDestruction) { |
| 84 StrictMock<TestingMockExecutorCreatorTeardown>* executor_creator = NULL; | 94 StrictMock<TestingMockExecutorCreatorTeardown>* executor_creator = NULL; |
| 85 CComPtr<ICeeeExecutorCreator> executor_creator_keeper; | 95 CComPtr<ICeeeExecutorCreator> executor_creator_keeper; |
| 86 ASSERT_HRESULT_SUCCEEDED(StrictMock<TestingMockExecutorCreatorTeardown>:: | 96 ASSERT_HRESULT_SUCCEEDED(StrictMock<TestingMockExecutorCreatorTeardown>:: |
| 87 CreateInitialized(&executor_creator, &executor_creator_keeper)); | 97 CreateInitialized(&executor_creator, &executor_creator_keeper)); |
| 88 EXPECT_CALL(*executor_creator, Teardown(42L)).WillOnce(Return(S_OK)); | 98 EXPECT_CALL(*executor_creator, Teardown(42L)).WillOnce(Return(S_OK)); |
| 89 // The Release of the last reference should call FinalRelease. | 99 // The Release of the last reference should call FinalRelease. |
| 90 } | 100 } |
| 91 | 101 |
| 92 // Mock object for some functions used for hooking. | 102 // Mock object for some functions used for hooking. |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 308 HRESULT Initialize(TestingExecutor** self) { | 318 HRESULT Initialize(TestingExecutor** self) { |
| 309 *self = this; | 319 *self = this; |
| 310 return S_OK; | 320 return S_OK; |
| 311 } | 321 } |
| 312 static void set_tab_windows(std::vector<HWND> tab_windows) { | 322 static void set_tab_windows(std::vector<HWND> tab_windows) { |
| 313 tab_windows_ = tab_windows; | 323 tab_windows_ = tab_windows; |
| 314 } | 324 } |
| 315 void set_id(HWND hwnd) { | 325 void set_id(HWND hwnd) { |
| 316 hwnd_ = hwnd; | 326 hwnd_ = hwnd; |
| 317 } | 327 } |
| 328 void InitializeInfobarManager(MockInfobarManager** manager) { | |
| 329 ASSERT_TRUE(manager != NULL); | |
| 330 *manager = new MockInfobarManager(); | |
| 331 infobar_manager_.reset(*manager); | |
| 332 } | |
| 333 void DeinitializeInfobarManager() { | |
|
MAD
2010/11/16 12:58:12
We typically use Term as opposed to Deinitialize a
vadimb
2010/11/16 22:46:01
Done.
| |
| 334 infobar_manager_.reset(NULL); | |
| 335 } | |
| 318 static BOOL MockEnumChildWindows(HWND, WNDENUMPROC, LPARAM p) { | 336 static BOOL MockEnumChildWindows(HWND, WNDENUMPROC, LPARAM p) { |
| 319 std::vector<HWND>* tab_windows = reinterpret_cast<std::vector<HWND>*>(p); | 337 std::vector<HWND>* tab_windows = reinterpret_cast<std::vector<HWND>*>(p); |
| 320 *tab_windows = tab_windows_; | 338 *tab_windows = tab_windows_; |
| 321 return TRUE; | 339 return TRUE; |
| 322 } | 340 } |
| 323 static void set_cookie_data(const std::wstring& cookie_data) { | 341 static void set_cookie_data(const std::wstring& cookie_data) { |
| 324 cookie_data_ = cookie_data; | 342 cookie_data_ = cookie_data; |
| 325 } | 343 } |
| 326 static BOOL MockInternetGetCookieExW(LPCWSTR, LPCWSTR, LPWSTR data, | 344 static BOOL MockInternetGetCookieExW(LPCWSTR, LPCWSTR, LPWSTR data, |
| 327 LPDWORD size, DWORD, LPVOID) { | 345 LPDWORD size, DWORD, LPVOID) { |
| (...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1076 testing::LogDisabler no_dchecks; | 1094 testing::LogDisabler no_dchecks; |
| 1077 | 1095 |
| 1078 executor_->set_cookie_store_is_registered(false); | 1096 executor_->set_cookie_store_is_registered(false); |
| 1079 EXPECT_EQ(S_FALSE, executor_->CookieStoreIsRegistered()); | 1097 EXPECT_EQ(S_FALSE, executor_->CookieStoreIsRegistered()); |
| 1080 EXPECT_HRESULT_SUCCEEDED(executor_->RegisterCookieStore()); | 1098 EXPECT_HRESULT_SUCCEEDED(executor_->RegisterCookieStore()); |
| 1081 EXPECT_EQ(S_OK, executor_->CookieStoreIsRegistered()); | 1099 EXPECT_EQ(S_OK, executor_->CookieStoreIsRegistered()); |
| 1082 EXPECT_HRESULT_SUCCEEDED(executor_->RegisterCookieStore()); | 1100 EXPECT_HRESULT_SUCCEEDED(executor_->RegisterCookieStore()); |
| 1083 EXPECT_EQ(S_OK, executor_->CookieStoreIsRegistered()); | 1101 EXPECT_EQ(S_OK, executor_->CookieStoreIsRegistered()); |
| 1084 } | 1102 } |
| 1085 | 1103 |
| 1086 // TODO(vadimb@google.com): Add unit tests for infobar APIs. | 1104 TEST_F(ExecutorTests, ShowInfobar) { |
| 1105 testing::LogDisabler no_dchecks; | |
| 1106 CComBSTR url(L"/infobar/test.html"); | |
| 1107 CComBSTR empty_url(L""); | |
| 1108 CComBSTR extension_id(L"abcdefjh"); | |
| 1109 | |
| 1110 // Calling when manager has not been initialized. | |
| 1111 EXPECT_HRESULT_FAILED(executor_->ShowInfobar(url, NULL)); | |
| 1112 | |
| 1113 // Initializing the manager and calling it with different parameters. | |
| 1114 MockInfobarManager* manager; | |
| 1115 executor_->InitializeInfobarManager(&manager); | |
| 1116 | |
| 1117 EXPECT_CALL(*manager, Show(infobar_api::TOP_INFOBAR, _, | |
| 1118 std::wstring(url.m_str), true)). | |
| 1119 WillOnce(Return(S_OK)); | |
| 1120 EXPECT_CALL(mock_window_utils_, GetTopLevelParent(_)). | |
| 1121 WillRepeatedly(Return(kGoodWindow)); | |
| 1122 CeeeWindowHandle window_handle; | |
| 1123 | |
| 1124 EXPECT_HRESULT_SUCCEEDED(executor_->ShowInfobar(url, &window_handle)); | |
| 1125 EXPECT_EQ(reinterpret_cast<CeeeWindowHandle>(kGoodWindow), window_handle); | |
| 1126 | |
| 1127 EXPECT_CALL(*manager, HideAll()).Times(1); | |
| 1128 EXPECT_HRESULT_SUCCEEDED(executor_->ShowInfobar(empty_url, &window_handle)); | |
| 1129 EXPECT_EQ(0, window_handle); | |
| 1130 | |
| 1131 EXPECT_CALL(*manager, Show(infobar_api::TOP_INFOBAR, _, | |
| 1132 std::wstring(url.m_str), true)). | |
| 1133 WillOnce(Return(E_FAIL)); | |
| 1134 EXPECT_HRESULT_FAILED(executor_->ShowInfobar(url, &window_handle)); | |
| 1135 EXPECT_EQ(0, window_handle); | |
| 1136 | |
| 1137 EXPECT_CALL(*manager, HideAll()).Times(1); | |
| 1138 EXPECT_HRESULT_SUCCEEDED(executor_->OnTopFrameBeforeNavigate(url)); | |
| 1139 | |
| 1140 EXPECT_HRESULT_SUCCEEDED(executor_->SetExtensionId(extension_id)); | |
| 1141 std::wstring full_url(L"chrome-extension://"); | |
| 1142 full_url += extension_id.m_str; | |
| 1143 full_url += url.m_str; | |
| 1144 EXPECT_CALL(*manager, Show(infobar_api::TOP_INFOBAR, _, full_url, true)). | |
| 1145 WillOnce(Return(S_OK)); | |
| 1146 EXPECT_HRESULT_SUCCEEDED(executor_->ShowInfobar(url, &window_handle)); | |
| 1147 | |
| 1148 // Have to destroy the manager before LogDisabler from this test goes out of | |
| 1149 // scope. | |
| 1150 EXPECT_CALL(user32_, IsWindow(NULL)).WillRepeatedly(Return(FALSE)); | |
| 1151 executor_->DeinitializeInfobarManager(); | |
| 1152 } | |
| 1087 | 1153 |
| 1088 } // namespace | 1154 } // namespace |
| OLD | NEW |