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

Unified Diff: chrome_frame/test/test_mock_with_web_server.cc

Issue 604014: First batch of context menu tests... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 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
Index: chrome_frame/test/test_mock_with_web_server.cc
===================================================================
--- chrome_frame/test/test_mock_with_web_server.cc (revision 38776)
+++ chrome_frame/test/test_mock_with_web_server.cc (working copy)
@@ -19,6 +19,8 @@
const int kChromeFrameLongNavigationTimeoutInSeconds = 10;
const wchar_t kChromeFrameFileUrl[] = L"gcf:file:///C:/";
+const wchar_t enter_key[] = { VK_RETURN, 0 };
+const wchar_t tab_enter_keys[] = { VK_TAB, VK_RETURN, 0 };
TEST(ChromeFrameTest, FullTabModeIE_DisallowedUrls) {
chrome_frame_test::TimedMsgLoop loop;
@@ -56,10 +58,80 @@
chrome_frame_test::CloseAllIEWindows();
}
-const wchar_t kChromeFrameFullTabWindowOpenTestUrl[] =
+const wchar_t kKeyEventUrl[] = L"http://localhost:1337/files/keyevent.html";
+
+// Marking this test FLAKY as it fails at times on the buildbot.
+// http://code.google.com/p/chromium/issues/detail?id=26549
+TEST_F(ChromeFrameTestWithWebServer, FLAKY_FullTabModeIE_KeyboardTest) {
+ chrome_frame_test::TimedMsgLoop loop;
+ CComObjectStackEx<MockWebBrowserEventSink> mock;
+
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kKeyEventUrl)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ const wchar_t* input = L"Chrome";
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kKeyEventUrl)))
+ .WillOnce(testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableMethod(
+ &mock,
+ &MockWebBrowserEventSink::SendKeys, input), 500)));
+
+ EXPECT_CALL(mock, OnMessage(testing::StrEq(input), _, _))
+ .WillOnce(QUIT_LOOP(loop));
+
+ HRESULT hr = mock.LaunchIEAndNavigate(kKeyEventUrl);
+ ASSERT_HRESULT_SUCCEEDED(hr);
+ if (hr == S_FALSE)
+ return;
+
+ loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
+
+ mock.Uninitialize();
+ chrome_frame_test::CloseAllIEWindows();
+}
+
+const wchar_t kAboutVersionUrl[] = L"gcf:about:version";
+const wchar_t kAboutVersion[] = L"about:version";
+
+TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_FocusTest) {
+ chrome_frame_test::TimedMsgLoop loop;
+ CComObjectStackEx<MockWebBrowserEventSink> mock;
+
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kAboutVersionUrl)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kAboutVersion)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::ExpectRendererWindowHasfocus)),
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::IgnoreResult(testing::InvokeWithoutArgs(
+ &chrome_frame_test::CloseAllIEWindows)),
+ QUIT_LOOP_SOON(loop, 2)));
+
+ HRESULT hr = mock.LaunchIEAndNavigate(kAboutVersionUrl);
+
+ // Allow some time for chrome to be launched.
+ loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
+
+ mock.Uninitialize();
+ chrome_frame_test::CloseAllIEWindows();
+}
+
+const wchar_t kFullTabWindowOpenTestUrl[] =
L"http://localhost:1337/files/chrome_frame_window_open.html";
-const wchar_t kChromeFrameFullTabWindowOpenPopupUrl[] =
+const wchar_t kFullTabWindowOpenPopupUrl[] =
L"http://localhost:1337/files/chrome_frame_window_open_popup.html";
// This test checks if window.open calls issued by a full tab mode ChromeFrame
@@ -80,23 +152,19 @@
EXPECT_CALL(mock,
OnBeforeNavigate2(
_, testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(kChromeFrameFullTabWindowOpenTestUrl)),
+ testing::StrCaseEq(kFullTabWindowOpenTestUrl)),
_, _, _, _, _))
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
EXPECT_CALL(mock, OnNavigateComplete2(_, _))
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+ const wchar_t* input = L"A";
EXPECT_CALL(mock,
- OnLoad(testing::StrEq(kChromeFrameFullTabWindowOpenTestUrl)))
- .WillOnce(testing::DoAll(
- testing::InvokeWithoutArgs(CreateFunctor(&mock,
- &chrome_frame_test::WebBrowserEventSink::SetFocusToChrome)),
- testing::InvokeWithoutArgs(CreateFunctor(&loop,
- &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
- NewRunnableMethod(
- &mock,
- &chrome_frame_test::WebBrowserEventSink::SendInputToChrome,
- std::string("A")), 0))));
+ OnLoad(testing::StrEq(kFullTabWindowOpenTestUrl)))
+ .WillOnce(testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableMethod(
+ &mock, &MockWebBrowserEventSink::SendKeys, input), 500)));
// Watch for new window
CComObjectStackEx<MockWebBrowserEventSink> new_window_mock;
@@ -113,7 +181,7 @@
EXPECT_CALL(new_window_mock, OnNavigateComplete2(_, _))
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
EXPECT_CALL(new_window_mock,
- OnLoad(testing::StrEq(kChromeFrameFullTabWindowOpenPopupUrl)))
+ OnLoad(testing::StrEq(kFullTabWindowOpenPopupUrl)))
.WillOnce(testing::DoAll(
testing::InvokeWithoutArgs(CreateFunctor(&mock,
&MockWebBrowserEventSink::Uninitialize)),
@@ -123,7 +191,7 @@
&chrome_frame_test::CloseAllIEWindows)),
QUIT_LOOP_SOON(loop, 2)));
- HRESULT hr = mock.LaunchIEAndNavigate(kChromeFrameFullTabWindowOpenTestUrl);
+ HRESULT hr = mock.LaunchIEAndNavigate(kFullTabWindowOpenTestUrl);
ASSERT_HRESULT_SUCCEEDED(hr);
if (hr == S_FALSE)
return;
@@ -134,17 +202,13 @@
mock.Uninitialize();
chrome_frame_test::CloseAllIEWindows();
- ASSERT_TRUE(CheckResultFile(L"ChromeFrameWindowOpenPopup", "OK"));
}
const wchar_t kSubFrameUrl1[] =
L"http://localhost:1337/files/sub_frame1.html";
-const wchar_t kChromeFrameAboutVersion[] =
- L"gcf:about:version";
-
// This test launches chrome frame in full tab mode in IE by having IE navigate
-// to gcf:about:blank. It then looks for the chrome renderer window and posts
+// to a url. It then looks for the chrome renderer window and posts
// the WM_RBUTTONDOWN/WM_RBUTTONUP messages to it, which bring up the context
// menu. This is followed by keyboard messages sent via SendInput to select
// the About chrome frame menu option, which would then bring up a new window
@@ -157,8 +221,7 @@
chrome_frame_test::TimedMsgLoop loop;
CComObjectStackEx<MockWebBrowserEventSink> mock;
- EXPECT_CALL(mock,
- OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
testing::StrCaseEq(kSubFrameUrl1)),
_, _, _, _, _))
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
@@ -166,21 +229,51 @@
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl1)))
- .WillOnce(testing::InvokeWithoutArgs(
- &chrome_frame_test::ShowChromeFrameContextMenu));
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::SendMouseClick, 10, 10,
+ simulate_input::RIGHT)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_UP, false, false, false),
+ 500)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendString<wchar_t>, &enter_key[0]),
+ 600))));
- EXPECT_CALL(mock,
- OnNewWindow3(_, _, _, _,
- testing::StrCaseEq(kChromeFrameAboutVersion)))
- .WillOnce(QUIT_LOOP(loop));
+ // Watch for new window
+ CComObjectStackEx<MockWebBrowserEventSink> new_window_mock;
+ EXPECT_CALL(mock, OnNewWindow3(_, _, _, _,
+ testing::StrCaseEq(kAboutVersionUrl)));
+ EXPECT_CALL(mock, OnNewBrowserWindow(_, _))
+ .WillOnce(testing::WithArgs<0>(
+ testing::Invoke(CreateFunctor(&new_window_mock,
+ &MockWebBrowserEventSink::Attach))));
+ // Expect navigations on the new mock
+ EXPECT_CALL(new_window_mock, OnBeforeNavigate2(_, _, _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(new_window_mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+ EXPECT_CALL(new_window_mock, OnLoad(testing::StrEq(kAboutVersion)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::InvokeWithoutArgs(CreateFunctor(&new_window_mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::IgnoreResult(testing::InvokeWithoutArgs(
+ &chrome_frame_test::CloseAllIEWindows)),
+ QUIT_LOOP_SOON(loop, 2)));
+
HRESULT hr = mock.LaunchIEAndNavigate(kSubFrameUrl1);
ASSERT_HRESULT_SUCCEEDED(hr);
if (hr == S_FALSE)
return;
ASSERT_TRUE(mock.web_browser2() != NULL);
-
loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
mock.Uninitialize();
@@ -346,8 +439,6 @@
// Marking this test FLAKY as it fails at times on the buildbot.
// http://code.google.com/p/chromium/issues/detail?id=26549
TEST_F(ChromeFrameTestWithWebServer, FLAKY_FullTabModeIE_BackForwardAnchor) {
- const char tab_enter_keystrokes[] = { VK_TAB, VK_RETURN, 0 };
- static const std::string tab_enter(tab_enter_keystrokes);
chrome_frame_test::TimedMsgLoop loop;
CComObjectStackEx<MockWebBrowserEventSink> mock;
::testing::InSequence sequence; // Everything in sequence
@@ -390,10 +481,9 @@
&chrome_frame_test::WebBrowserEventSink::SetFocusToChrome)),
testing::InvokeWithoutArgs(CreateFunctor(&loop,
&chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
- NewRunnableMethod(
- &mock,
- &chrome_frame_test::WebBrowserEventSink::SendInputToChrome,
- std::string(tab_enter)), 0))));
+ NewRunnableFunction(
+ &simulate_input::SendString<wchar_t>,
+ &tab_enter_keys[0]), 200))));
EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
testing::StrCaseEq(kAnchor1Url)),
_, _, _, _, _))
@@ -410,10 +500,9 @@
CreateFunctor(
&loop, &chrome_frame_test::TimedMsgLoop::PostDelayedTask,
FROM_HERE,
- NewRunnableMethod(
- &mock,
- &chrome_frame_test::WebBrowserEventSink::SendInputToChrome,
- std::string(tab_enter)), 0)));
+ NewRunnableFunction(
+ &simulate_input::SendString<wchar_t>,
+ &tab_enter_keys[0]), 200)));
EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
testing::StrCaseEq(kAnchor2Url)),
_, _, _, _, _))
@@ -430,10 +519,9 @@
CreateFunctor(
&loop, &chrome_frame_test::TimedMsgLoop::PostDelayedTask,
FROM_HERE,
- NewRunnableMethod(
- &mock,
- &chrome_frame_test::WebBrowserEventSink::SendInputToChrome,
- std::string(tab_enter)), 0)));
+ NewRunnableFunction(
+ &simulate_input::SendString<wchar_t>,
+ &tab_enter_keys[0]), 200)));
EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
testing::StrCaseEq(kAnchor3Url)),
_, _, _, _, _))
@@ -550,11 +638,10 @@
VARIANT empty = ScopedVariant::kEmptyVariant;
EXPECT_CALL(mock, OnLoad(testing::StrEq(kAnchorUrl)))
- .WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(
- CreateFunctor(ReceivePointer(mock.web_browser2_),
- &IWebBrowser2::ExecWB,
+ .WillOnce(testing::InvokeWithoutArgs(
+ CreateFunctor(&mock, &MockWebBrowserEventSink::Exec, &CGID_MSHTML,
static_cast<OLECMDID>(IDM_VIEWSOURCE),
- OLECMDEXECOPT_DONTPROMPTUSER, &empty, &empty))));
+ OLECMDEXECOPT_DONTPROMPTUSER, &empty, &empty)));
// Expect notification for view-source window, handle new window event
// and attach a new mock to the received web browser
@@ -600,14 +687,13 @@
chrome_frame_test::CloseAllIEWindows();
}
-const wchar_t kChromeFrameFullTabModeBeforeUnloadEventTest[] =
+const wchar_t kFullTabModeBeforeUnloadEventTest[] =
L"http://localhost:1337/files/fulltab_before_unload_event_test.html";
-const wchar_t kChromeFrameFullTabModeBeforeUnloadEventMain[] =
+const wchar_t kFullTabModeBeforeUnloadEventMain[] =
L"http://localhost:1337/files/fulltab_before_unload_event_main.html";
-TEST_F(ChromeFrameTestWithWebServer,
- FullTabModeIE_ChromeFrameUnloadEventTest) {
+TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_UnloadEventTest) {
chrome_frame_test::TimedMsgLoop loop;
CComObjectStackEx<MockWebBrowserEventSink> mock;
::testing::InSequence sequence; // Everything in sequence
@@ -618,7 +704,7 @@
mock,
OnBeforeNavigate2(
_, testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(kChromeFrameFullTabModeBeforeUnloadEventTest)),
+ testing::StrCaseEq(kFullTabModeBeforeUnloadEventTest)),
_, _, _, _, _))
.WillOnce(testing::Return(S_OK));
@@ -629,7 +715,7 @@
mock,
OnBeforeNavigate2(
_, testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(kChromeFrameFullTabModeBeforeUnloadEventTest)),
+ testing::StrCaseEq(kFullTabModeBeforeUnloadEventTest)),
_, _, _, _, _))
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
@@ -644,7 +730,7 @@
mock,
OnBeforeNavigate2(
_, testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(kChromeFrameFullTabModeBeforeUnloadEventMain)),
+ testing::StrCaseEq(kFullTabModeBeforeUnloadEventMain)),
_, _, _, _, _))
.WillOnce(testing::Return(S_OK));
@@ -655,7 +741,7 @@
mock,
OnBeforeNavigate2(
_, testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(kChromeFrameFullTabModeBeforeUnloadEventMain)),
+ testing::StrCaseEq(kFullTabModeBeforeUnloadEventMain)),
_, _, _, _, _))
.Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
@@ -664,7 +750,7 @@
EXPECT_CALL(mock, OnLoad(_)).WillOnce(testing::Return());
- EXPECT_CALL(mock, OnMessage(_))
+ EXPECT_CALL(mock, OnMessage(_, _, _))
.WillOnce(testing::DoAll(
testing::InvokeWithoutArgs(CreateFunctor(&mock,
&chrome_frame_test::WebBrowserEventSink::Uninitialize)),
@@ -672,8 +758,7 @@
&chrome_frame_test::CloseAllIEWindows)),
QUIT_LOOP_SOON(loop, 2)));
- HRESULT hr =
- mock.LaunchIEAndNavigate(kChromeFrameFullTabModeBeforeUnloadEventTest);
+ HRESULT hr = mock.LaunchIEAndNavigate(kFullTabModeBeforeUnloadEventTest);
ASSERT_HRESULT_SUCCEEDED(hr);
if (hr == S_FALSE)
return;
@@ -684,3 +769,296 @@
chrome_frame_test::CloseAllIEWindows();
}
+// 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
+TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_ContextMenuBackForward) {
+ chrome_frame_test::TimedMsgLoop loop;
+ CComObjectStackEx<MockWebBrowserEventSink> mock;
+
+ ::testing::InSequence sequence; // Everything in sequence
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl1)),
+ _, _, _, _, _))
+ .WillOnce(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _)).WillOnce(testing::Return());
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl1)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ // Navigate to url 2 after the previous navigation is complete.
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl1)))
+ .WillOnce(testing::IgnoreResult(testing::InvokeWithoutArgs(
+ CreateFunctor(&mock,
+ &chrome_frame_test::WebBrowserEventSink::Navigate,
+ std::wstring(kSubFrameUrl2)))));
+
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl2)),
+ _, _, _, _, _))
+ .WillOnce(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _)).WillOnce(testing::Return());
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl2)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ // Go back using Rt-Click + DOWN + ENTER
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl2)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::SendMouseClick, 10, 10,
+ simulate_input::RIGHT)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_DOWN, false, false,
+ false),
+ 500)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendString<wchar_t>, &enter_key[0]),
+ 600))));
+
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl1)),
+ _, _, _, _, _))
+ .WillOnce(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _)).WillOnce(testing::Return());
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl1)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ // Go forward using Rt-Click + DOWN + DOWN + ENTER
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl1)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::SendMouseClick, 10, 10,
+ simulate_input::RIGHT)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_DOWN, false, false,
+ false),
+ 500)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_DOWN, false, false,
+ false),
+ 600)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendString<wchar_t>, &enter_key[0]),
+ 700))));
+
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl2)),
+ _, _, _, _, _))
+ .WillOnce(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _)).WillOnce(testing::Return());
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl2)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl2)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::IgnoreResult(testing::InvokeWithoutArgs(
+ &chrome_frame_test::CloseAllIEWindows)),
+ QUIT_LOOP_SOON(loop, 2)));
+
+ HRESULT hr = mock.LaunchIEAndNavigate(kSubFrameUrl1);
+ ASSERT_HRESULT_SUCCEEDED(hr);
+ if (hr == S_FALSE)
+ return;
+
+ ASSERT_TRUE(mock.web_browser2() != NULL);
+ loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
+ mock.Uninitialize();
+ chrome_frame_test::CloseAllIEWindows();
+}
+
+// Test Reload from context menu.
+TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_ContextMenuReload) {
+ chrome_frame_test::TimedMsgLoop loop;
+ CComObjectStackEx<MockWebBrowserEventSink> mock;
+
+ ::testing::InSequence sequence; // Everything in sequence
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl1)),
+ _, _, _, _, _))
+ .WillOnce(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _)).WillOnce(testing::Return());
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kSubFrameUrl1)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ // Reload using Rt-Click + DOWN + DOWN + DOWN + ENTER
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl1)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::SendMouseClick, 10, 10,
+ simulate_input::RIGHT)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_DOWN, false, false,
+ false),
+ 500)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_DOWN, false, false,
+ false),
+ 600)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_DOWN, false, false,
+ false),
+ 700)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendString<wchar_t>, &enter_key[0]),
+ 800))));
+
+ // Go forward using Rt-Click + DOWN + DOWN + ENTER
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kSubFrameUrl1)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::IgnoreResult(testing::InvokeWithoutArgs(
+ &chrome_frame_test::CloseAllIEWindows)),
+ QUIT_LOOP_SOON(loop, 2)));
+
+ HRESULT hr = mock.LaunchIEAndNavigate(kSubFrameUrl1);
+ ASSERT_HRESULT_SUCCEEDED(hr);
+ if (hr == S_FALSE)
+ return;
+
+ ASSERT_TRUE(mock.web_browser2() != NULL);
+ loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
+ mock.Uninitialize();
+ chrome_frame_test::CloseAllIEWindows();
+}
+
+// Test view source using context menu
+TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_ContextMenuViewSource) {
+ chrome_frame_test::TimedMsgLoop loop;
+ CComObjectStackEx<MockWebBrowserEventSink> mock;
+ CComObjectStackEx<MockWebBrowserEventSink> view_source_mock;
+ ::testing::InSequence sequence; // Everything in sequence
+
+ // After navigation invoke view soruce action using IWebBrowser2::ExecWB
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kAnchorUrl)),
+ _, _, _, _, _))
+ .WillOnce(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .WillOnce(testing::Return());
+ EXPECT_CALL(mock, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(kAnchorUrl)),
+ _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(mock, OnNavigateComplete2(_, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return());
+
+ // view soruce using Rt-Click + UP + UP + UP + UP + ENTER
+ EXPECT_CALL(mock, OnLoad(testing::StrEq(kAnchorUrl)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::SendMouseClick, 10, 10,
+ simulate_input::RIGHT)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_UP, false, false,
+ false),
+ 500)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_UP, false, false,
+ false),
+ 600)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_UP, false, false,
+ false),
+ 700)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendExtendedKey, VK_UP, false, false,
+ false),
+ 800)),
+ testing::InvokeWithoutArgs(CreateFunctor(&loop,
+ &chrome_frame_test::TimedMsgLoop::PostDelayedTask, FROM_HERE,
+ NewRunnableFunction(
+ simulate_input::SendString<wchar_t>, &enter_key[0]),
+ 900))));
+
+ // Expect notification for view-source window, handle new window event
+ // and attach a new mock to the received web browser
+ std::wstring view_source_url;
+ view_source_url += UTF8ToWide(chrome::kViewSourceScheme);
+ view_source_url += L":";
+ view_source_url += kAnchorUrl;
+ std::wstring url_in_new_window = kChromeProtocolPrefix;
+ url_in_new_window += view_source_url;
+
+ EXPECT_CALL(mock, OnNewWindow3(_, _, _, _,
+ testing::StrCaseEq(url_in_new_window)));
+ EXPECT_CALL(mock, OnNewBrowserWindow(_, _))
+ .WillOnce(testing::WithArgs<0>(
+ testing::Invoke(CreateFunctor(&view_source_mock,
+ &MockWebBrowserEventSink::Attach))));
+
+ // Expect navigations on the new mock
+ EXPECT_CALL(view_source_mock, OnBeforeNavigate2(_,
+ testing::Field(&VARIANT::bstrVal,
+ testing::StrCaseEq(url_in_new_window)), _, _, _, _, _))
+ .Times(testing::AnyNumber()).WillRepeatedly(testing::Return(S_OK));
+ EXPECT_CALL(view_source_mock, OnNavigateComplete2(_, _))
+ .WillOnce(testing::Return());
+ EXPECT_CALL(view_source_mock, OnLoad(testing::StrEq(view_source_url)))
+ .WillOnce(testing::DoAll(
+ testing::InvokeWithoutArgs(CreateFunctor(&mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::InvokeWithoutArgs(CreateFunctor(&view_source_mock,
+ &MockWebBrowserEventSink::Uninitialize)),
+ testing::IgnoreResult(testing::InvokeWithoutArgs(
+ &chrome_frame_test::CloseAllIEWindows)),
+ QUIT_LOOP_SOON(loop, 2)));
+
+ HRESULT hr = mock.LaunchIEAndNavigate(kAnchorUrl);
+ ASSERT_HRESULT_SUCCEEDED(hr);
+ if (hr == S_FALSE)
+ return;
+
+ ASSERT_TRUE(mock.web_browser2() != NULL);
+ loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
+ mock.Uninitialize();
+ chrome_frame_test::CloseAllIEWindows();
+}
+
+

Powered by Google App Engine
This is Rietveld 408576698