| Index: chrome_frame/test/no_interference_test.cc
|
| diff --git a/chrome_frame/test/no_interference_test.cc b/chrome_frame/test/no_interference_test.cc
|
| index acd1d5cb5e8810745a558821873a81bdfba4fe0e..f560adb6090492374cc910be3f0136090e5b844e 100644
|
| --- a/chrome_frame/test/no_interference_test.cc
|
| +++ b/chrome_frame/test/no_interference_test.cc
|
| @@ -64,8 +64,6 @@ 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_));
|
| @@ -76,6 +74,7 @@ class NoInterferenceTest : public ChromeFrameTestWithWebServer {
|
|
|
| ASSERT_TRUE(mock_.web_browser2() != NULL);
|
| loop_.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
|
| + mock_.Uninitialize();
|
| }
|
|
|
| const std::wstring GetTestUrl(const wchar_t* relative_path) {
|
| @@ -84,46 +83,153 @@ 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_;
|
| - ComStackObjectWithUninitialize<
|
| - testing::StrictMock<MockWebBrowserEventSink> > mock_;
|
| + CComObjectStackEx<testing::StrictMock<MockWebBrowserEventSink> > mock_;
|
| };
|
|
|
| ACTION_P(ExpectIERendererWindowHasFocus, mock) {
|
| mock->ExpectIERendererWindowHasFocus();
|
| }
|
|
|
| -// This tests that a new IE renderer window has focus.
|
| -TEST_F(NoInterferenceTest, SimpleFocus) {
|
| - const std::wstring kEmptyFileUrl = GetTestUrl(L"empty.html");
|
| - mock_.ExpectNavigationAndSwitch(kEmptyFileUrl);
|
| +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);
|
| +}
|
|
|
| - EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(kEmptyFileUrl)))
|
| +// A new IE renderer window should have focus.
|
| +TEST_F(NoInterferenceTest, SimpleFocus) {
|
| + mock_.ExpectNavigationInIE(empty_page_url());
|
| + EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(empty_page_url())))
|
| .WillOnce(testing::DoAll(
|
| ExpectIERendererWindowHasFocus(&mock_),
|
| VerifyAddressBarUrl(&mock_),
|
| CloseBrowserMock(&mock_)));
|
|
|
| - LaunchIEAndNavigate(kEmptyFileUrl);
|
| + LaunchIEAndNavigate(empty_page_url());
|
| }
|
|
|
| -// This tests that window.open does not get intercepted by Chrome Frame.
|
| +// Javascript window.open should open a new window with an IE renderer.
|
| 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_.ExpectNavigationAndSwitch(kWindowOpenUrl);
|
| + mock_.ExpectNavigationInIE(kWindowOpenUrl);
|
| EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(kWindowOpenUrl)));
|
|
|
| - mock_.ExpectNewWindow(&new_window_mock);
|
| - EXPECT_CALL(new_window_mock, OnIELoad(testing::StrCaseEq(kEmptyFileUrl)))
|
| - .WillOnce(CloseBrowserMock(&new_window_mock));
|
| + 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)));
|
| 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
|
|
|