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

Unified Diff: chrome_frame/test/no_interference_test.cc

Issue 2822016: [chrome_frame] Refactor/merge IE no interference tests with other mock event ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 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/navigation_test.cc ('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
===================================================================
--- chrome_frame/test/no_interference_test.cc (revision 51119)
+++ chrome_frame/test/no_interference_test.cc (working copy)
@@ -1,269 +0,0 @@
-// 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 "chrome_frame/test/test_mock_with_web_server.h"
-
-#include "base/scoped_variant_win.h"
-#include "base/utf_string_conversions.h"
-#include "chrome_frame/test/simulate_input.h"
-#include "chrome_frame/test/test_with_web_server.h"
-
-using chrome_frame_test::CloseIeAtEndOfScope;
-using chrome_frame_test::ComStackObjectWithUninitialize;
-using chrome_frame_test::kChromeFrameLongNavigationTimeoutInSeconds;
-using testing::_;
-
-namespace {
-
-// The same as MockWebBrowserEventSink, except OnDocumentComplete is added.
-// This class can be merged with its base class, but it would require some
-// modification to most of the test cases.
-class MockWebBrowserEventSink
- : public chrome_frame_test::MockWebBrowserEventSink {
- public:
- // This method is called for each OnDocumentComplete event in which the
- // document is rendered by IE and not CF.
- MOCK_METHOD1(OnIELoad, void (const wchar_t* url)); // NOLINT
-
- // The OnDocumentComplete event is received for every document load,
- // regardless of whether IE or CF is hosting. This method will call
- // OnIELoad iff the document was loaded in an IE renderer.
- STDMETHOD_(void, OnDocumentComplete)(IDispatch* dispatch,
- VARIANT* url_variant) {
- ScopedVariant url;
- if (url_variant)
- url.Reset(*url_variant);
- // To determine if the document is loaded in IE or CF, check if
- // IHTMLDocument2 can be retrieved. If so, call OnIELoad.
- ScopedComPtr<IWebBrowser2> web_browser2;
- web_browser2.QueryFrom(dispatch);
- EXPECT_TRUE(web_browser2);
- if (web_browser2) {
- ScopedComPtr<IDispatch> doc_dispatch;
- HRESULT hr = web_browser2->get_Document(doc_dispatch.Receive());
- EXPECT_HRESULT_SUCCEEDED(hr);
- EXPECT_TRUE(doc_dispatch);
- if (doc_dispatch) {
- ScopedComPtr<IHTMLDocument2> doc;
- doc.QueryFrom(doc_dispatch);
- if (doc) {
- OnIELoad(V_BSTR(&url));
- }
- }
- }
- }
-};
-
-// Fixture for tests which ensure that Chrome Frame does not interfere with
-// normal IE operation.
-// TODO(kkania): Move this fixture to test_mock_with_web_server.h and change
-// those tests to use this too.
-class NoInterferenceTest : public ChromeFrameTestWithWebServer {
- protected:
- // Launches IE and navigates to |url|, then waits until receiving a quit
- // message or the timeout is exceeded.
- void LaunchIEAndNavigate(const std::wstring& url) {
- EXPECT_CALL(mock_, OnQuit())
- .Times(testing::AtMost(1))
- .WillOnce(QUIT_LOOP(loop_));
- HRESULT hr = mock_.LaunchIEAndNavigate(url);
- ASSERT_HRESULT_SUCCEEDED(hr);
- if (hr == S_FALSE)
- return;
-
- ASSERT_TRUE(mock_.web_browser2() != NULL);
- loop_.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
- mock_.Uninitialize();
- }
-
- const std::wstring GetTestUrl(const wchar_t* relative_path) {
- std::wstring path = std::wstring(L"files/no_interference/") +
- relative_path;
- 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_;
- CComObjectStackEx<testing::StrictMock<MockWebBrowserEventSink> > mock_;
-};
-
-ACTION_P(ExpectIERendererWindowHasFocus, mock) {
- mock->ExpectIERendererWindowHasFocus();
-}
-
-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);
-}
-
-// A new IE renderer window should have focus.
-TEST_F(NoInterferenceTest, FLAKY_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(empty_page_url());
-}
-
-// Javascript window.open should open a new window with an IE renderer.
-TEST_F(NoInterferenceTest, FLAKY_JavascriptWindowOpen) {
- const std::wstring kWindowOpenUrl = GetTestUrl(L"window_open.html");
- ComStackObjectWithUninitialize<
- testing::StrictMock<MockWebBrowserEventSink> > new_window_mock;
-
- mock_.ExpectNavigationInIE(kWindowOpenUrl);
- EXPECT_CALL(mock_, OnIELoad(testing::StrCaseEq(kWindowOpenUrl)))
- .WillOnce(testing::DoAll(
- DelaySendMouseClickToIE(&mock_, &loop_, 0, 100, 100,
- simulate_input::LEFT),
- DelaySendMouseClickToIE(&mock_, &loop_, 0, 100, 100,
- simulate_input::LEFT)));
-
- EXPECT_CALL(mock_, OnNewWindow3(_, _, _, _, _));
-
- EXPECT_CALL(mock_, OnNewBrowserWindow(_, _))
- .WillOnce(testing::WithArgs<0>(testing::Invoke(CreateFunctor(
- &new_window_mock, &MockWebBrowserEventSink::Attach))));
-
- EXPECT_CALL(new_window_mock, OnBeforeNavigate2(_,
- testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(empty_page_url())),
- _, _, _, _, _));
-
- EXPECT_CALL(new_window_mock, OnFileDownload(VARIANT_TRUE, _))
- .Times(testing::AnyNumber());
-
- EXPECT_CALL(new_window_mock, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal,
- testing::StrCaseEq(empty_page_url()))))
- .WillOnce(testing::DoAll(
- testing::InvokeWithoutArgs(CreateFunctor(&new_window_mock,
- &chrome_frame_test::MockWebBrowserEventSink::ExpectAddressBarUrl,
- empty_page_url())),
- DelayCloseBrowserMock(&loop_, 2000, &new_window_mock)));
-
- // The DocumentComplete at times fires twice for new windows. Hack to account
- // for that.
- EXPECT_CALL(new_window_mock,
- OnIELoad(testing::StrCaseEq(empty_page_url())))
- .Times(testing::AtMost(2));
-
- EXPECT_CALL(new_window_mock, OnQuit())
- .WillOnce(DelayCloseBrowserMock(&loop_, 2000, &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);
- // The DocumentComplete at times fires twice for new windows. Hack to account
- // for that.
- // 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())))
- .Times(testing::AtMost(2))
- .WillOnce(DelayCloseBrowserMock(&loop_, 2000, &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/navigation_test.cc ('k') | chrome_frame/test/simulate_input.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698