summaryrefslogtreecommitdiffstats
path: root/chrome_frame/test/ui_test.cc
diff options
context:
space:
mode:
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