diff options
Diffstat (limited to 'chrome_frame/test/no_interference_test.cc')
-rw-r--r-- | chrome_frame/test/no_interference_test.cc | 138 |
1 files changed, 16 insertions, 122 deletions
diff --git a/chrome_frame/test/no_interference_test.cc b/chrome_frame/test/no_interference_test.cc index f560adb..acd1d5c 100644 --- a/chrome_frame/test/no_interference_test.cc +++ b/chrome_frame/test/no_interference_test.cc @@ -64,6 +64,8 @@ class NoInterferenceTest : public ChromeFrameTestWithWebServer { // Launches IE and navigates to |url|, then waits until receiving a quit // message or the timeout is exceeded. void LaunchIEAndNavigate(const std::wstring& url) { + CloseIeAtEndOfScope last_resort_close_ie; + EXPECT_CALL(mock_, OnQuit()) .Times(testing::AtMost(1)) .WillOnce(QUIT_LOOP(loop_)); @@ -74,7 +76,6 @@ class NoInterferenceTest : public ChromeFrameTestWithWebServer { ASSERT_TRUE(mock_.web_browser2() != NULL); loop_.RunFor(kChromeFrameLongNavigationTimeoutInSeconds); - mock_.Uninitialize(); } const std::wstring GetTestUrl(const wchar_t* relative_path) { @@ -83,153 +84,46 @@ class NoInterferenceTest : public ChromeFrameTestWithWebServer { return UTF8ToWide(server_.Resolve(path.c_str()).spec()); } - const std::wstring empty_page_url() { - return GetTestUrl(L"empty.html"); - } - - // Returns the url for a page with a single link, which points to the - // empty page. - const std::wstring link_page_url() { - return GetTestUrl(L"link.html"); - } - - CloseIeAtEndOfScope last_resort_close_ie; chrome_frame_test::TimedMsgLoop loop_; - CComObjectStackEx<testing::StrictMock<MockWebBrowserEventSink> > mock_; + ComStackObjectWithUninitialize< + testing::StrictMock<MockWebBrowserEventSink> > mock_; }; ACTION_P(ExpectIERendererWindowHasFocus, mock) { mock->ExpectIERendererWindowHasFocus(); } -ACTION_P6(DelaySendMouseClickToIE, mock, loop, delay, x, y, button) { - loop->PostDelayedTask(FROM_HERE, NewRunnableMethod(mock, - &MockWebBrowserEventSink::SendMouseClickToIE, x, y, button), delay); -} - -ACTION_P2(OpenContextMenu, loop, delay) { - loop->PostDelayedTask(FROM_HERE, NewRunnableFunction( - simulate_input::SendScanCode, VK_F10, simulate_input::SHIFT), delay); -} - -ACTION_P3(SelectItem, loop, delay, index) { - chrome_frame_test::DelaySendExtendedKeysEnter(loop, delay, VK_DOWN, index + 1, - simulate_input::NONE); -} - -// A new IE renderer window should have focus. +// This tests that a new IE renderer window has focus. TEST_F(NoInterferenceTest, SimpleFocus) { - mock_.ExpectNavigationInIE(empty_page_url()); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(empty_page_url()))) + const std::wstring kEmptyFileUrl = GetTestUrl(L"empty.html"); + mock_.ExpectNavigationAndSwitch(kEmptyFileUrl); + + EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(kEmptyFileUrl))) .WillOnce(testing::DoAll( ExpectIERendererWindowHasFocus(&mock_), VerifyAddressBarUrl(&mock_), CloseBrowserMock(&mock_))); - LaunchIEAndNavigate(empty_page_url()); + LaunchIEAndNavigate(kEmptyFileUrl); } -// Javascript window.open should open a new window with an IE renderer. +// This tests that window.open does not get intercepted by Chrome Frame. TEST_F(NoInterferenceTest, FLAKY_JavascriptWindowOpen) { + const std::wstring kEmptyFileUrl = GetTestUrl(L"empty.html"); const std::wstring kWindowOpenUrl = GetTestUrl(L"window_open.html"); ComStackObjectWithUninitialize< testing::StrictMock<MockWebBrowserEventSink> > new_window_mock; - mock_.ExpectNavigationInIE(kWindowOpenUrl); + mock_.ExpectNavigationAndSwitch(kWindowOpenUrl); EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(kWindowOpenUrl))); - mock_.ExpectNewWindowWithIE(empty_page_url(), &new_window_mock); - EXPECT_CALL(new_window_mock, OnIELoad(testing::StrCaseEq(empty_page_url()))) - .WillOnce(testing::DoAll( - VerifyAddressBarUrl(&new_window_mock), - CloseBrowserMock(&new_window_mock))); + mock_.ExpectNewWindow(&new_window_mock); + EXPECT_CALL(new_window_mock, OnIELoad(testing::StrCaseEq(kEmptyFileUrl))) + .WillOnce(CloseBrowserMock(&new_window_mock)); EXPECT_CALL(new_window_mock, OnQuit()) .WillOnce(CloseBrowserMock(&mock_)); LaunchIEAndNavigate(kWindowOpenUrl); } -// Redirecting with window.location in Javascript should work. -TEST_F(NoInterferenceTest, JavascriptRedirect) { - const std::wstring kRedirectUrl = GetTestUrl(L"javascript_redirect.html"); - mock_.ExpectNavigationInIE(kRedirectUrl); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(kRedirectUrl))) - .WillOnce(VerifyAddressBarUrl(&mock_)); - - mock_.ExpectNavigationInIE(empty_page_url()); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(empty_page_url()))) - .WillOnce(testing::DoAll( - VerifyAddressBarUrl(&mock_), - CloseBrowserMock(&mock_))); - - LaunchIEAndNavigate(kRedirectUrl); -} - -TEST_F(NoInterferenceTest, FLAKY_FollowLink) { - mock_.ExpectNavigationInIE(link_page_url()); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(link_page_url()))) - .WillOnce(testing::DoAll( - DelaySendMouseClickToIE(&mock_, &loop_, 0, 1, 1, - simulate_input::LEFT), - DelaySendScanCode(&loop_, 500, VK_TAB, simulate_input::NONE), - DelaySendScanCode(&loop_, 1000, VK_RETURN, simulate_input::NONE))); - - mock_.ExpectNavigationInIE(empty_page_url()); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(empty_page_url()))) - .WillOnce(testing::DoAll( - VerifyAddressBarUrl(&mock_), - CloseBrowserMock(&mock_))); - - LaunchIEAndNavigate(link_page_url()); -} - -TEST_F(NoInterferenceTest, FLAKY_SelectContextMenuOpen) { - mock_.ExpectNavigationInIE(link_page_url()); - // Focus the renderer window by clicking and then tab once to highlight the - // link. - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(link_page_url()))) - .WillOnce(testing::DoAll( - DelaySendMouseClickToIE(&mock_, &loop_, 0, 1, 1, - simulate_input::LEFT), - DelaySendScanCode(&loop_, 500, VK_TAB, simulate_input::NONE), - OpenContextMenu(&loop_, 1000), - SelectItem(&loop_, 1500, 0))); - - mock_.ExpectNavigationInIE(empty_page_url()); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(empty_page_url()))) - .WillOnce(testing::DoAll( - VerifyAddressBarUrl(&mock_), - CloseBrowserMock(&mock_))); - - LaunchIEAndNavigate(link_page_url()); -} - -TEST_F(NoInterferenceTest, FLAKY_SelectContextMenuOpenInNewWindow) { - ComStackObjectWithUninitialize< - testing::StrictMock<MockWebBrowserEventSink> > new_window_mock; - int open_new_window_index = 2; - if (chrome_frame_test::GetInstalledIEVersion() == IE_6) - open_new_window_index = 1; - - // Focus the renderer window by clicking and then tab once to highlight the - // link. - mock_.ExpectNavigationInIE(link_page_url()); - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(link_page_url()))) - .WillOnce(testing::DoAll( - DelaySendMouseClickToIE(&mock_, &loop_, 0, 1, 1, - simulate_input::LEFT), - DelaySendScanCode(&loop_, 500, VK_TAB, simulate_input::NONE), - OpenContextMenu(&loop_, 1000), - SelectItem(&loop_, 1500, open_new_window_index))); - - mock_.ExpectNewWindowWithIE(empty_page_url(), &new_window_mock); - // TODO(kkania): Verifying the address bar is flaky with this, at least - // on XP ie6. Fix. - EXPECT_CALL(new_window_mock, OnIELoad(testing::StrCaseEq(empty_page_url()))) - .WillOnce(CloseBrowserMock(&new_window_mock)); - EXPECT_CALL(new_window_mock, OnQuit()).WillOnce(CloseBrowserMock(&mock_)); - - LaunchIEAndNavigate(link_page_url()); -} - } // namespace
\ No newline at end of file |