diff options
author | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-30 18:56:11 +0000 |
---|---|---|
committer | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-30 18:56:11 +0000 |
commit | 15baed1691e3d6c5c129a95efac961fc24474df6 (patch) | |
tree | 1d67224c45c50548723f78b032869a7e24507df6 /chrome_frame | |
parent | 983592e0fa0fb36f842cd98da028b3e2a4029d1c (diff) | |
download | chromium_src-15baed1691e3d6c5c129a95efac961fc24474df6.zip chromium_src-15baed1691e3d6c5c129a95efac961fc24474df6.tar.gz chromium_src-15baed1691e3d6c5c129a95efac961fc24474df6.tar.bz2 |
It seems that OnAccLoad and OnLoad are not reliably ordered. Add a helper that allows this test to wait until both events have occurred, irrespective of their relative ordering.
BUG=None
TEST=chrome_frame_tests --gtest_filter=DeleteBrowsingHistoryTest.*
Review URL: http://codereview.chromium.org/3609001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61091 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame')
-rw-r--r-- | chrome_frame/test/delete_chrome_history_test.cc | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/chrome_frame/test/delete_chrome_history_test.cc b/chrome_frame/test/delete_chrome_history_test.cc index 5c7abb8..cb8c3de 100644 --- a/chrome_frame/test/delete_chrome_history_test.cc +++ b/chrome_frame/test/delete_chrome_history_test.cc @@ -117,11 +117,65 @@ ACTION_P2(LaunchThisIEAndNavigate, ie_mock, url) { ie_mock)); } -TEST_F(DeleteBrowsingHistoryTest, DISABLED_CFDeleteBrowsingHistory) { +// Listens for OnAccLoad and OnLoad events for an IE instance and +// sends a single signal once both have been received. +// +// Allows tests to wait for both events to occur irrespective of their relative +// ordering. +class PageLoadHelper { + public: + explicit PageLoadHelper(testing::StrictMock<MockIEEventSink>* ie_mock) + : received_acc_load_(false), + received_on_load_(false), + ie_mock_(ie_mock) { + EXPECT_CALL(*ie_mock_, OnLoad(_, _)) + .Times(testing::AnyNumber()) + .WillRepeatedly(testing::InvokeWithoutArgs( + this, &PageLoadHelper::HandleOnLoad)); + EXPECT_CALL(acc_observer_, OnAccDocLoad(_)) + .Times(testing::AnyNumber()) + .WillRepeatedly(testing::Invoke(this, &PageLoadHelper::HandleAccLoad)); + } + + void HandleAccLoad(HWND hwnd) { + ReconcileHwnds(hwnd, &acc_loaded_hwnds_, &on_loaded_hwnds_); + } + + void HandleOnLoad() { + HWND hwnd = ie_mock_->event_sink()->GetRendererWindow(); + ReconcileHwnds(hwnd, &on_loaded_hwnds_, &acc_loaded_hwnds_); + } + + MOCK_METHOD0(OnLoadComplete, void()); + + private: + void ReconcileHwnds(HWND signaled_hwnd, + std::set<HWND>* signaled_hwnd_set, + std::set<HWND>* other_hwnd_set) { + if (other_hwnd_set->erase(signaled_hwnd) != 0) { + OnLoadComplete(); + } else { + signaled_hwnd_set->insert(signaled_hwnd); + } + } + std::set<HWND> acc_loaded_hwnds_; + std::set<HWND> on_loaded_hwnds_; + bool received_acc_load_; + bool received_on_load_; + testing::StrictMock<MockIEEventSink>* ie_mock_; + testing::NiceMock<MockAccEventObserver> acc_observer_; +}; + +TEST_F(DeleteBrowsingHistoryTest, CFDeleteBrowsingHistory) { if (GetInstalledIEVersion() < IE_8) { LOG(ERROR) << "Test does not apply to IE versions < 8."; return; } + + PageLoadHelper load_helper(&ie_mock_); + PageLoadHelper load_helper2(&ie_mock2_); + PageLoadHelper load_helper3(&ie_mock3_); + delete_browsing_history_window_observer_mock_.WatchWindow( "Delete Browsing History"); @@ -148,7 +202,7 @@ TEST_F(DeleteBrowsingHistoryTest, DISABLED_CFDeleteBrowsingHistory) { // top.html contains a form. Fill in the username field and submit, causing // the value to be stored in Chrome's form data DB. - EXPECT_CALL(ie_mock_, OnLoad(_, _)) + EXPECT_CALL(load_helper, OnLoadComplete()) .WillOnce(testing::DoAll( AccLeftClickInRenderer(&ie_mock_, AccObjectMatcher(L"username")), PostCharMessagesToRenderer(&ie_mock_, WideToASCII(kFormFieldValue)), @@ -158,7 +212,7 @@ TEST_F(DeleteBrowsingHistoryTest, DISABLED_CFDeleteBrowsingHistory) { .WillOnce(SendFast(kHtmlHttpHeaders, kFormResultHtml)); // OnLoad of the result page from form submission. Now close the browser. - EXPECT_CALL(ie_mock_, OnLoad(_, _)) + EXPECT_CALL(load_helper, OnLoadComplete()) .WillOnce(testing::DoAll( WatchRendererProcess(&ie_process_exit_watcher_mock_, &ie_mock_), CloseBrowserMock(&ie_mock_))); @@ -183,7 +237,7 @@ TEST_F(DeleteBrowsingHistoryTest, DISABLED_CFDeleteBrowsingHistory) { // Running it once with the option turned off is harmless. // Proceed to open up the "Safety" menu for the first time through the loop. - EXPECT_CALL(ie_mock2_, OnLoad(_, _)) + EXPECT_CALL(load_helper2, OnLoadComplete()) .WillOnce(AccDoDefaultActionInBrowser(&ie_mock2_, AccObjectMatcher(L"Safety"))); @@ -259,7 +313,7 @@ TEST_F(DeleteBrowsingHistoryTest, DISABLED_CFDeleteBrowsingHistory) { SendFast(kBlankPngResponse[0], std::string(kBlankPngResponse[1], kBlankPngFileLength))); - EXPECT_CALL(ie_mock3_, OnLoad(_, _)) + EXPECT_CALL(load_helper3, OnLoadComplete()) .WillOnce(CloseBrowserMock(&ie_mock3_)); EXPECT_CALL(ie_mock3_, OnQuit()) |