Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6648)

Unified Diff: chrome_frame/test/no_interference_test.cc

Issue 2173002: Add chrome frame tests for common navigation cases to ensure IE is not broken. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: final Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/test/data/no_interference/link.html ('k') | chrome_frame/test/simulate_input.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome_frame/test/data/no_interference/link.html ('k') | chrome_frame/test/simulate_input.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698