summaryrefslogtreecommitdiffstats
path: root/chrome_frame/test/ui_test.cc
diff options
context:
space:
mode:
authorkkania@chromium.org <kkania@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-12 22:07:03 +0000
committerkkania@chromium.org <kkania@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-12 22:07:03 +0000
commit6448b3abcfa035eaf65b7c0c15bb728513f228fe (patch)
tree3d8ee0bf2f528e93616a1d7721bc721ef6726189 /chrome_frame/test/ui_test.cc
parentbb2eb35a70fcbc47be253bf50c8648c65271a19e (diff)
downloadchromium_src-6448b3abcfa035eaf65b7c0c15bb728513f228fe.zip
chromium_src-6448b3abcfa035eaf65b7c0c15bb728513f228fe.tar.gz
chromium_src-6448b3abcfa035eaf65b7c0c15bb728513f228fe.tar.bz2
[chrome_frame] Refactor/merge IE no interference tests with other mock event sink tests. Have the test mock contain, not inherit the IE event sink. Use the new test server to verify the right requests are being sent.
BUG=none TEST=none Review URL: http://codereview.chromium.org/2822016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52137 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/test/ui_test.cc')
-rw-r--r--chrome_frame/test/ui_test.cc541
1 files changed, 541 insertions, 0 deletions
diff --git a/chrome_frame/test/ui_test.cc b/chrome_frame/test/ui_test.cc
new file mode 100644
index 0000000..19ad10a
--- /dev/null
+++ b/chrome_frame/test/ui_test.cc
@@ -0,0 +1,541 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <mshtmcid.h>
+#include <string>
+
+#include "chrome/common/url_constants.h"
+#include "chrome_frame/test/chrome_frame_test_utils.h"
+#include "chrome_frame/test/mock_ie_event_sink_actions.h"
+#include "chrome_frame/test/mock_ie_event_sink_test.h"
+
+using testing::_;
+using testing::InSequence;
+using testing::StrCaseEq;
+using testing::StrEq;
+
+namespace chrome_frame_test {
+
+// This parameterized test fixture uses the MockIEEventSink and is used by
+// UI-related tests.
+class FullTabUITest : public MockIEEventSinkTest,
+ public testing::TestWithParam<CFInvocation> {
+ public:
+ FullTabUITest() {}
+
+ virtual void SetUp() {
+ // These are UI-related tests, so we do not care about the exact requests
+ // and navigations that occur.
+ server_mock_.ExpectAndServeAnyRequests(GetParam());
+ ie_mock_.ExpectAnyNavigations();
+ }
+};
+
+// Instantiate each test case for the IE case and for CF meta tag case.
+// It does not seem too useful to also run the CF http header case since these
+// are UI, not navigation tests.
+INSTANTIATE_TEST_CASE_P(IE, FullTabUITest,
+ testing::Values(CFInvocation::None()));
+INSTANTIATE_TEST_CASE_P(CF, FullTabUITest,
+ testing::Values(CFInvocation::MetaTag()));
+
+// Tests keyboard input.
+// Marking this test FLAKY as it fails at times on the buildbot.
+// http://code.google.com/p/chromium/issues/detail?id=26549
+TEST_P(FullTabUITest, FLAKY_KeyboardInput) {
+ if (!GetParam().invokes_cf()) {
+ LOG(ERROR) << "Test not implemented for this configuration.";
+ return;
+ }
+ std::wstring key_event_url = GetTestUrl(L"keyevent.html");
+
+ const wchar_t* input = L"Chrome";
+ EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), StrEq(key_event_url)))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ DelaySendString(&loop_, 500, input)));
+
+ EXPECT_CALL(ie_mock_, OnMessage(StrCaseEq(input), _, _))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(key_event_url);
+}
+
+// Tests keyboard shortcuts for back and forward.
+// Marking this test FLAKY as it fails at times on the buildbot.
+// http://code.google.com/p/chromium/issues/detail?id=26549
+TEST_P(FullTabUITest, FLAKY_KeyboardBackForward) {
+ std::wstring page1 = GetSimplePageUrl();
+ std::wstring page2 = GetLinkPageUrl();
+ bool in_cf = GetParam().invokes_cf();
+ InSequence expect_in_sequence_for_scope;
+
+ // This test performs the following steps.
+ // 1. Launches IE and navigates to page1
+ // 2. It then navigates to page2
+ // 3. Sends the VK_BACK keystroke to IE, which should navigate back to
+ // page 1
+ // 4. Sends the Shift + VK_BACK keystroke to IE which should navigate
+ // forward to page2
+ EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page1)))
+ .WillOnce(Navigate(&ie_mock_, page2));
+
+ short bkspace = VkKeyScanA(VK_BACK); // NOLINT
+ EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2)))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ DelaySendScanCode(&loop_, 500, bkspace, simulate_input::NONE)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page1)))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ DelaySendScanCode(&loop_, 1000, bkspace, simulate_input::SHIFT)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2)))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIENavigateAndLoop(page1,
+ kChromeFrameLongNavigationTimeoutInSeconds * 2);
+}
+
+// Tests new window behavior with ctrl+N.
+TEST_P(FullTabUITest, FLAKY_CtrlN) {
+ bool is_cf = GetParam().invokes_cf();
+ if (!is_cf) {
+ LOG(ERROR) << "Test not implemented for this configuration.";
+ return;
+ }
+ // Ideally we want to use a ie_mock_ to watch for finer grained
+ // events for New Window, but for Crl+N we don't get any
+ // OnNewWindowX notifications. :(
+ MockWindowObserver win_observer_mock;
+ const wchar_t* kIEFrameClass = L"IEFrame";
+ EXPECT_CALL(ie_mock_, OnLoad(is_cf, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ WatchWindow(&win_observer_mock, kIEFrameClass),
+ SetFocusToRenderer(&ie_mock_),
+ DelaySendChar(&loop_, 1000, 'n', simulate_input::CONTROL)));
+
+ // Watch for new window
+ const char* kNewWindowTitle = "Internet Explorer";
+ EXPECT_CALL(win_observer_mock,
+ OnWindowDetected(_, testing::HasSubstr(kNewWindowTitle)))
+ .WillOnce(testing::DoAll(
+ DoCloseWindow(),
+ CloseBrowserMock(&ie_mock_)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+ // TODO(kkania): The new window does not close properly sometimes.
+}
+
+// Test that ctrl+r does cause a refresh.
+TEST_P(FullTabUITest, FLAKY_CtrlR) {
+ InSequence expect_in_sequence_for_scope;
+
+ EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(),
+ StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ DelaySendChar(&loop_, 1000, 'r', simulate_input::CONTROL)));
+
+ EXPECT_CALL(server_mock_, Get(_, UrlPathEq(GetSimplePageUrl()), _))
+ .WillOnce(testing::DoAll(
+ SendResponse(&server_mock_, GetParam()),
+ CloseBrowserMock(&ie_mock_)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+// Test window close with ctrl+w.
+TEST_P(FullTabUITest, FLAKY_CtrlW) {
+ EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(),
+ StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ DelaySendChar(&loop_, 1000, 'w', simulate_input::CONTROL)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+// Test address bar navigation with Alt+d and URL.
+TEST_P(FullTabUITest, FLAKY_AltD) {
+ if (IsIBrowserServicePatchEnabled()) {
+ LOG(ERROR) << "Not running test. IBrowserServicePatch is in place.";
+ return;
+ }
+ EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(),
+ StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ TypeUrlInAddressBar(&loop_, GetLinkPageUrl(), 1500)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(),
+ StrEq(GetLinkPageUrl())))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+// Tests that the renderer has focus after navigation.
+TEST_P(FullTabUITest, FLAKY_RendererHasFocus) {
+ EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(),
+ StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ ExpectRendererHasFocus(&ie_mock_),
+ CloseBrowserMock(&ie_mock_)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+// Tests that view source works.
+// This test has been marked FLAKY
+// http://code.google.com/p/chromium/issues/detail?id=35370
+TEST_P(FullTabUITest, FLAKY_ViewSource) {
+ bool in_cf = GetParam().invokes_cf();
+ if (!in_cf) {
+ LOG(ERROR) << "Test not implemented for this configuration.";
+ return;
+ }
+ MockIEEventSink view_source_mock;
+ view_source_mock.ExpectAnyNavigations();
+ InSequence expect_in_sequence_for_scope;
+
+ // After navigation invoke view soruce action using IWebBrowser2::ExecWB
+ VARIANT empty = ScopedVariant::kEmptyVariant;
+ EXPECT_CALL(ie_mock_, OnLoad(in_cf,
+ StrEq(GetSimplePageUrl())))
+ .WillOnce(DelayExecCommand(&ie_mock_, &loop_, 0, &CGID_MSHTML,
+ static_cast<OLECMDID>(IDM_VIEWSOURCE),
+ OLECMDEXECOPT_DONTPROMPTUSER, &empty, &empty));
+
+ // Expect notification for view-source window, handle new window event
+ // and attach a new ie_mock_ to the received web browser
+ std::wstring view_source_url;
+ view_source_url += UTF8ToWide(chrome::kViewSourceScheme);
+ view_source_url += L":";
+ view_source_url += GetSimplePageUrl();
+ std::wstring url_in_new_window = kChromeProtocolPrefix;
+ url_in_new_window += view_source_url;
+
+ ie_mock_.ExpectNewWindow(&view_source_mock);
+ // For some reason this happens occasionally at least on XP IE7.
+ EXPECT_CALL(view_source_mock, OnLoad(false, StrEq(url_in_new_window)))
+ .Times(testing::AtMost(1));
+ EXPECT_CALL(view_source_mock, OnLoad(in_cf, StrEq(view_source_url)))
+ .WillOnce(testing::DoAll(
+ VerifyAddressBarUrlWithGcf(&view_source_mock),
+ CloseBrowserMock(&view_source_mock)));
+
+ EXPECT_CALL(view_source_mock, OnQuit())
+ .Times(testing::AtMost(1))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+// Test fixture for tests related to the context menu UI. Since the context
+// menus for CF and IE are different, these tests are not parameterized.
+class ContextMenuTest : public MockIEEventSinkTest, public testing::Test {
+ public:
+ ContextMenuTest() {}
+
+ virtual void SetUp() {
+ // These are UI-related tests, so we do not care about the exact
+ // navigations that occur.
+ ie_mock_.ExpectAnyNavigations();
+ }
+};
+
+// Test Reload from context menu.
+// Marking this test FLAKY as it fails at times on the buildbot.
+// http://code.google.com/p/chromium/issues/detail?id=26549
+TEST_F(ContextMenuTest, FLAKY_CFReload) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
+ InSequence expect_in_sequence_for_scope;
+
+ // Reload using Rt-Click + DOWN + DOWN + DOWN + ENTER
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_DOWN, 3,
+ simulate_input::NONE)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+// Test view source using context menu
+// Marking this test FLAKY as it fails at times on the buildbot.
+// http://code.google.com/p/chromium/issues/detail?id=26549
+TEST_F(ContextMenuTest, FLAKY_CFViewSource) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
+ MockIEEventSink view_source_mock;
+ view_source_mock.ExpectAnyNavigations();
+ InSequence expect_in_sequence_for_scope;
+
+ // View source using Rt-Click + UP + UP + UP + UP + ENTER
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_UP, 4, simulate_input::NONE)));
+
+ // Expect notification for view-source window, handle new window event
+ // and attach a new ie_mock_ to the received web browser
+ std::wstring view_source_url;
+ view_source_url += UTF8ToWide(chrome::kViewSourceScheme);
+ view_source_url += L":";
+ view_source_url += GetSimplePageUrl();
+ std::wstring url_in_new_window = kChromeProtocolPrefix;
+ url_in_new_window += view_source_url;
+
+ ie_mock_.ExpectNewWindow(&view_source_mock);
+ EXPECT_CALL(view_source_mock, OnLoad(IN_CF, StrEq(view_source_url)))
+ .WillOnce(testing::DoAll(
+ VerifyAddressBarUrlWithGcf(&view_source_mock),
+ CloseBrowserMock(&view_source_mock)));
+ EXPECT_CALL(view_source_mock, OnQuit())
+ .Times(testing::AtMost(1))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+TEST_F(ContextMenuTest, FLAKY_CFPageInfo) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
+ MockWindowObserver win_observer_mock;
+ InSequence expect_in_sequence_for_scope;
+
+ // View page information using Rt-Click + UP + UP + UP + ENTER
+ const wchar_t* kPageInfoWindowClass = L"Chrome_WidgetWin_0";
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ WatchWindow(&win_observer_mock, kPageInfoWindowClass),
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_UP, 3, simulate_input::NONE)));
+
+ // Expect page info dialog to pop up. Dismiss the dialog with 'Esc' key
+ const char* kPageInfoCaption = "Security Information";
+ EXPECT_CALL(win_observer_mock, OnWindowDetected(_, StrEq(kPageInfoCaption)))
+ .WillOnce(testing::DoAll(
+ DelaySendChar(&loop_, 100, VK_ESCAPE, simulate_input::NONE),
+ DelayCloseBrowserMock(&loop_, 2000, &ie_mock_)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+TEST_F(ContextMenuTest, FLAKY_CFInspector) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
+ MockWindowObserver win_observer_mock;
+ InSequence expect_in_sequence_for_scope;
+
+ // Open developer tools using Rt-Click + UP + UP + ENTER
+ const wchar_t* kPageInfoWindowClass = L"Chrome_WidgetWin_0";
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ WatchWindow(&win_observer_mock, kPageInfoWindowClass),
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_UP, 2, simulate_input::NONE)));
+
+ // Devtools begins life with "Untitled" caption and it changes
+ // later to the 'Developer Tools - <url> form.
+ const char* kPageInfoCaption = "Untitled";
+ EXPECT_CALL(win_observer_mock,
+ OnWindowDetected(_, testing::StartsWith(kPageInfoCaption)))
+ .WillOnce(testing::DoAll(
+ SetFocusToRenderer(&ie_mock_),
+ DelayCloseBrowserMock(&loop_, 2000, &ie_mock_)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+TEST_F(ContextMenuTest, FLAKY_CFSaveAs) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
+ MockWindowObserver win_observer_mock;
+ InSequence expect_in_sequence_for_scope;
+
+ // Open'Save As' dialog using Rt-Click + DOWN + DOWN + DOWN + DOWN + ENTER
+ const wchar_t* kSaveDlgClass = L"#32770";
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ WatchWindow(&win_observer_mock, kSaveDlgClass),
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_DOWN, 4,
+ simulate_input::NONE)));
+
+ FilePath temp_file_path;
+ EXPECT_TRUE(file_util::CreateTemporaryFile(&temp_file_path));
+ temp_file_path = temp_file_path.ReplaceExtension(L".htm");
+
+ const wchar_t* kSaveFileName = temp_file_path.value().c_str();
+ DeleteFile(kSaveFileName);
+
+ const char* kSaveDlgCaption = "Save As";
+ EXPECT_CALL(win_observer_mock, OnWindowDetected(_, StrEq(kSaveDlgCaption)))
+ .WillOnce(testing::DoAll(
+ DelaySendString(&loop_, 100, kSaveFileName),
+ DelaySendChar(&loop_, 200, VK_RETURN, simulate_input::NONE),
+ DelayCloseBrowserMock(&loop_, 4000, &ie_mock_)));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+ ASSERT_NE(INVALID_FILE_ATTRIBUTES, GetFileAttributes(kSaveFileName));
+ ASSERT_TRUE(DeleteFile(kSaveFileName));
+}
+
+// This tests that the about:version page can be opened via the CF context menu.
+TEST_F(ContextMenuTest, FLAKY_CFAboutVersionLoads) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag());
+ const wchar_t* kAboutVersionUrl = L"gcf:about:version";
+ const wchar_t* kAboutVersionWithoutProtoUrl = L"about:version";
+ MockIEEventSink new_window_mock;
+ new_window_mock.ExpectAnyNavigations();
+
+ ie_mock_.ExpectNavigation(IN_CF, GetSimplePageUrl());
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_UP, 1, simulate_input::NONE)));
+
+ ie_mock_.ExpectNewWindow(&new_window_mock);
+ EXPECT_CALL(new_window_mock,
+ OnLoad(IN_CF, StrEq(kAboutVersionWithoutProtoUrl)))
+ .WillOnce(testing::DoAll(
+ VerifyAddressBarUrlWithGcf(&new_window_mock),
+ CloseBrowserMock(&new_window_mock)));
+
+ EXPECT_CALL(new_window_mock, OnQuit())
+ .Times(testing::AtMost(1))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(GetSimplePageUrl());
+}
+
+TEST_F(ContextMenuTest, FLAKY_IEOpen) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::None());
+ // Focus the renderer window by clicking and then tab once to highlight the
+ // link.
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetLinkPageUrl())))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 1, 1, simulate_input::LEFT),
+ DelaySendScanCode(&loop_, 1000, VK_TAB, simulate_input::NONE),
+ OpenContextMenu(&loop_, 2000),
+ SelectItem(&loop_, 3000, 0)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetSimplePageUrl())))
+ .WillOnce(testing::DoAll(
+ VerifyAddressBarUrl(&ie_mock_),
+ CloseBrowserMock(&ie_mock_)));
+
+ LaunchIEAndNavigate(GetLinkPageUrl());
+}
+
+TEST_F(ContextMenuTest, FLAKY_IEOpenInNewWindow) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::None());
+ MockIEEventSink new_window_mock;
+ new_window_mock.ExpectAnyNavigations();
+
+ 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.
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetLinkPageUrl())))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_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)));
+
+ ie_mock_.ExpectNewWindow(&new_window_mock);
+ EXPECT_CALL(new_window_mock, OnLoad(IN_IE, StrEq(GetSimplePageUrl())))
+ // TODO(kkania): Verifying the address bar is flaky with this, at least
+ // on XP ie6. Fix.
+ .WillOnce(CloseBrowserMock(&new_window_mock));
+
+ EXPECT_CALL(new_window_mock, OnQuit())
+ .Times(testing::AtMost(1))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(GetLinkPageUrl());
+}
+
+// Test Back/Forward from context menu.
+// Marking this test FLAKY as it fails at times on the buildbot.
+// http://code.google.com/p/chromium/issues/detail?id=26549
+TEST_F(ContextMenuTest, FLAKY_IEBackForward) {
+ server_mock_.ExpectAndServeAnyRequests(CFInvocation::None());
+ std::wstring page1 = GetLinkPageUrl();
+ std::wstring page2 = GetSimplePageUrl();
+ InSequence expect_in_sequence_for_scope;
+
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page1)))
+ .WillOnce(Navigate(&ie_mock_, page2));
+
+ // Go back using Rt-Click + DOWN + ENTER
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2)))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_DOWN, 1,
+ simulate_input::NONE)));
+
+ // Go forward using Rt-Click + DOWN + DOWN + ENTER
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page1)))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_DOWN, 2,
+ simulate_input::NONE)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2)))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(page1);
+}
+
+// Test Back/Forward from context menu. Loads page 1 in chrome and page 2
+// in IE. Then it tests back and forward using context menu
+// Disabling this test as it won't work as per the current chrome external tab
+// design.
+// http://code.google.com/p/chromium/issues/detail?id=46615
+TEST_F(ContextMenuTest, DISABLED_BackForwardWithSwitch) {
+ std::wstring page1 = GetLinkPageUrl();
+ std::wstring page2 = GetSimplePageUrl();
+ InSequence expect_in_sequence_for_scope;
+
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(page1)))
+ .WillOnce(Navigate(&ie_mock_, page2));
+
+ server_mock_.ExpectAndServeRequest(CFInvocation::None(), page2);
+ // Go back using Rt-Click + DOWN + ENTER
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2)))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_DOWN, 1,
+ simulate_input::NONE)));
+
+ // Go forward using Rt-Click + DOWN + DOWN + ENTER
+ EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(page1)))
+ .WillOnce(testing::DoAll(
+ DelaySendMouseClick(&ie_mock_, &loop_, 0, 10, 10,
+ simulate_input::RIGHT),
+ SendExtendedKeysEnter(&loop_, 500, VK_DOWN, 2,
+ simulate_input::NONE)));
+
+ EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2)))
+ .WillOnce(CloseBrowserMock(&ie_mock_));
+
+ LaunchIEAndNavigate(page1);
+}
+
+} // namespace chrome_frame_test \ No newline at end of file