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

Unified Diff: chrome_frame/test/navigation_test.cc

Issue 126143005: Remove Chrome Frame code and resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync to r244038 Created 6 years, 11 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/mock_ie_event_sink_test.cc ('k') | chrome_frame/test/net/fake_external_tab.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/test/navigation_test.cc
diff --git a/chrome_frame/test/navigation_test.cc b/chrome_frame/test/navigation_test.cc
deleted file mode 100644
index 78db86200f8fc1750471e67e353dec9708d8e36a..0000000000000000000000000000000000000000
--- a/chrome_frame/test/navigation_test.cc
+++ /dev/null
@@ -1,1299 +0,0 @@
-// Copyright (c) 2012 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 <string>
-
-#include "base/file_util.h"
-#include "base/test/test_file_util.h"
-#include "base/win/scoped_comptr.h"
-#include "base/win/windows_version.h"
-#include "chrome_frame/test/chrome_frame_test_utils.h"
-#include "chrome_frame/test/chrome_frame_ui_test_utils.h"
-#include "chrome_frame/test/mock_ie_event_sink_actions.h"
-#include "chrome_frame/test/mock_ie_event_sink_test.h"
-#include "net/http/http_util.h"
-
-// Needed for CreateFunctor.
-#define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
-#include "testing/gmock_mutant.h"
-
-using testing::InSequence;
-using testing::StrEq;
-using testing::_;
-
-namespace chrome_frame_test {
-
-// Test fixture for navigation-related tests. Each test is run thrice: IE, CF
-// with meta tag invocation, and CF with http header invocation. This is
-// accomplished by using gTest's parameterized test.
-class FullTabNavigationTest
- : public MockIEEventSinkTest, public testing::TestWithParam<CFInvocation> {
- public:
- FullTabNavigationTest() {}
-};
-
-// Instantiate each test case. Instead of doing in one statement, it is split
-// into three so gTest prints nicer names.
-INSTANTIATE_TEST_CASE_P(IE, FullTabNavigationTest, testing::Values(
- CFInvocation(CFInvocation::NONE)));
-INSTANTIATE_TEST_CASE_P(MetaTag, FullTabNavigationTest, testing::Values(
- CFInvocation(CFInvocation::META_TAG)));
-INSTANTIATE_TEST_CASE_P(HttpHeader, FullTabNavigationTest, testing::Values(
- CFInvocation(CFInvocation::HTTP_HEADER)));
-
-// This tests navigation to a typed URL.
-TEST_P(FullTabNavigationTest, TypeUrl) {
- MockAccEventObserver acc_observer;
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
- AccObjectMatcher address_matcher(L"Address*", L"editable text");
- AccObjectMatcher go_matcher(L"Go*", L"push button");
-
- ie_mock_.ExpectNavigation(IN_IE, GetSimplePageUrl());
- server_mock_.ExpectAndServeRequest(CFInvocation::None(), GetSimplePageUrl());
- // Enter the new url into the address bar.
- EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetSimplePageUrl())))
- .WillOnce(testing::DoAll(
- AccSetValueInBrowser(&ie_mock_, address_matcher, GetAnchorPageUrl(0)),
- AccWatchForOneValueChange(&acc_observer, address_matcher)));
- // Click the go button once the address has changed.
- EXPECT_CALL(acc_observer, OnAccValueChange(_, _, GetAnchorPageUrl(0)))
- .WillOnce(AccLeftClickInBrowser(&ie_mock_, go_matcher));
-
- bool in_cf = GetParam().invokes_cf();
- ie_mock_.ExpectNavigation(in_cf, GetAnchorPageUrl(0));
- server_mock_.ExpectAndServeRequest(GetParam(), GetAnchorPageUrl(0));
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(0))))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(GetSimplePageUrl());
-}
-
-// This tests navigation to a typed URL containing an fragment.
-TEST_P(FullTabNavigationTest, TypeAnchorUrl) {
- MockAccEventObserver acc_observer;
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
- AccObjectMatcher address_matcher(L"Address*", L"editable text");
- AccObjectMatcher go_matcher(L"Go*", L"push button");
-
- ie_mock_.ExpectNavigation(IN_IE, GetSimplePageUrl());
- server_mock_.ExpectAndServeRequest(CFInvocation::None(), GetSimplePageUrl());
-
- // Enter the new url into the address bar.
- EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetSimplePageUrl())))
- .WillOnce(testing::DoAll(
- AccSetValueInBrowser(&ie_mock_, address_matcher, GetAnchorPageUrl(1)),
- AccWatchForOneValueChange(&acc_observer, address_matcher)));
- // Click the go button once the address has changed.
- EXPECT_CALL(acc_observer, OnAccValueChange(_, _, GetAnchorPageUrl(1)))
- .WillOnce(AccLeftClickInBrowser(&ie_mock_, go_matcher));
-
- bool in_cf = GetParam().invokes_cf();
- ie_mock_.ExpectNavigation(in_cf, GetAnchorPageUrl(1));
- server_mock_.ExpectAndServeRequest(GetParam(), GetAnchorPageUrl(1));
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(1))))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(GetSimplePageUrl());
-}
-
-// Tests refreshing causes a page load.
-TEST_P(FullTabNavigationTest, Refresh) {
- if (GetInstalledIEVersion() == IE_7) {
- LOG(ERROR) << "Test disabled for this configuration.";
- return;
- }
- bool in_cf = GetParam().invokes_cf();
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- InSequence expect_in_sequence_for_scope;
-
- ie_mock_.ExpectNavigation(IN_IE, GetSimplePageUrl());
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetSimplePageUrl())))
- .WillOnce(DelayRefresh(&ie_mock_, &loop_, base::TimeDelta()));
-
- if (in_cf) {
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetSimplePageUrl())))
- .WillOnce(CloseBrowserMock(&ie_mock_));
- } else {
- // For some reason IE still requests the resource again, but does not
- // trigger another load.
- EXPECT_CALL(server_mock_, Get(_, UrlPathEq(GetSimplePageUrl()), _))
- .WillOnce(CloseBrowserMock(&ie_mock_));
- }
-
- LaunchIEAndNavigate(GetSimplePageUrl());
-}
-
-// Test that multiple back and forward requests work.
-// TODO(tsepez): http://crbug.com/83133
-TEST_P(FullTabNavigationTest, DISABLED_MultipleBackForward) {
- std::wstring page1 = GetSimplePageUrl();
- std::wstring page2 = GetLinkPageUrl();
- std::wstring page3 = GetAnchorPageUrl(0);
- bool in_cf = GetParam().invokes_cf();
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- InSequence expect_in_sequence_for_scope;
-
- // Navigate to url 2 after the previous navigation is complete.
- ie_mock_.ExpectNavigation(in_cf, page1);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page1)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- Navigate(&ie_mock_, page2)));
-
- // Navigate to url 3 after the previous navigation is complete.
- ie_mock_.ExpectNavigation(in_cf, page2);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- Navigate(&ie_mock_, page3)));
-
- // We have reached url 3 and have two back entries for url 1 & 2.
- // Go back to url 2 now.
- ie_mock_.ExpectNavigation(in_cf, page3);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page3)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoBack(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We have reached url 2 and have 1 back & 1 forward entries for url 1 & 3.
- // Go back to url 1 now.
- ie_mock_.ExpectNavigation(in_cf, page2);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoBack(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We have reached url 1 and have 0 back & 2 forward entries for url 2 & 3.
- // Go forward to url 2 now.
- ie_mock_.ExpectNavigation(in_cf, page1);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page1)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoForward(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We have reached url 2 and have 1 back & 1 forward entries for url 1 & 3.
- // Go forward to url 3 now.
- ie_mock_.ExpectNavigation(in_cf, page2);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoForward(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We have reached url 2 and have 1 back & 1 forward entries for url 1 & 3.
- ie_mock_.ExpectNavigation(in_cf, page3);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page3)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- CloseBrowserMock(&ie_mock_)));
-
- LaunchIENavigateAndLoop(page1, kChromeFrameLongNavigationTimeout * 2);
-}
-
-// Test multiple back and forward operations among urls with anchors.
-TEST_P(FullTabNavigationTest, BackForwardAnchor) {
- std::wstring title(GetAnchorPageTitle());
- bool in_cf = GetParam().invokes_cf();
- ie_mock_.ExpectAnyNavigations();
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- MockAccEventObserver acc_observer;
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
-
- // Navigate to anchor 1.
- // Back/Forward state at this point:
- // Back: 0
- // Forward: 0
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(0))))
- .Times(testing::AtMost(1));
- EXPECT_CALL(acc_observer, OnAccDocLoad(TabContentsTitleEq(GetAnchorPageUrl(0),
- title)))
- .WillOnce(AccDoDefaultAction(AccObjectMatcher(L"*1", L"link")))
- .RetiresOnSaturation();
-
- InSequence expect_in_sequence_for_scope;
- // Navigate to anchor 2 after the previous navigation is complete
- // Back/Forward state at this point:
- // Back: 1 (kAnchorUrl)
- // Forward: 0
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(1))))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- AccDoDefaultActionInRenderer(&ie_mock_,
- AccObjectMatcher(L"*2", L"link"))));
-
- // Navigate to anchor 3 after the previous navigation is complete
- // Back/Forward state at this point:
- // Back: 2 (kAnchorUrl, kAnchor1Url)
- // Forward: 0
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(2))))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- AccDoDefaultActionInRenderer(&ie_mock_,
- AccObjectMatcher(L"*3", L"link"))));
-
- // We will reach anchor 3 once the navigation is complete,
- // then go back to anchor 2
- // Back/Forward state at this point:
- // Back: 3 (kAnchorUrl, kAnchor1Url, kAnchor2Url)
- // Forward: 0
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(3))))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoBack(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We will reach anchor 2 once the navigation is complete,
- // then go back to anchor 1
- // Back/Forward state at this point:
- // Back: 3 (kAnchorUrl, kAnchor1Url, kAnchor2Url)
- // Forward: 1 (kAnchor3Url)
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(2))))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoBack(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We will reach anchor 1 once the navigation is complete,
- // now go forward to anchor 2
- // Back/Forward state at this point:
- // Back: 2 (kAnchorUrl, kAnchor1Url)
- // Forward: 2 (kAnchor2Url, kAnchor3Url)
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(1))))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoForward(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We have reached anchor 2, go forward to anchor 3 again
- // Back/Forward state at this point:
- // Back: 3 (kAnchorUrl, kAnchor1Url, kAnchor2Url)
- // Forward: 1 (kAnchor3Url)
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(2))))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoForward(&ie_mock_, &loop_, base::TimeDelta())));
-
- // We have gone a few steps back and forward, this should be enough for now.
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(GetAnchorPageUrl(3))))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(GetAnchorPageUrl(0));
-}
-
-// Test that a user cannot navigate to a restricted site and that the security
-// dialog appears.
-TEST_P(FullTabNavigationTest, RestrictedSite) {
- // Add the server to restricted sites zone.
- base::win::ScopedComPtr<IInternetSecurityManager> security_manager;
- HRESULT hr = security_manager.CreateInstance(CLSID_InternetSecurityManager);
- ASSERT_HRESULT_SUCCEEDED(hr);
- hr = security_manager->SetZoneMapping(URLZONE_UNTRUSTED,
- GetTestUrl(L"").c_str(), SZM_CREATE);
-
- EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber());
- server_mock_.ExpectAndServeAnyRequests(GetParam());
-
- MockWindowObserver win_observer_mock;
-
- // If the page is loaded in mshtml, then IE allows the page to be loaded
- // and just shows 'Restricted sites' in the status bar.
- if (!GetParam().invokes_cf()) {
- ie_mock_.ExpectNavigation(IN_IE, GetSimplePageUrl());
- EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetSimplePageUrl())))
- .Times(1)
- .WillOnce(CloseBrowserMock(&ie_mock_));
- } else {
- // If the page is being loaded in chrome frame then we will see
- // a security dialog.
- const char* kAlertDlgCaption = "Security Alert";
- win_observer_mock.WatchWindow(kAlertDlgCaption, "");
-
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
- testing::HasSubstr(GetSimplePageUrl())), _, _, _, _, _))
- .Times(testing::AtMost(2));
-
- EXPECT_CALL(ie_mock_, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal, StrEq(GetSimplePageUrl()))))
- .Times(testing::AtMost(1));
-
- EXPECT_CALL(win_observer_mock, OnWindowOpen(_))
- .Times(1)
- .WillOnce(DoCloseWindow());
- EXPECT_CALL(win_observer_mock, OnWindowClose(_))
- .Times(1)
- .WillOnce(CloseBrowserMock(&ie_mock_));
- }
-
- LaunchIEAndNavigate(GetSimplePageUrl());
-
- ASSERT_HRESULT_SUCCEEDED(security_manager->SetZoneMapping(URLZONE_UNTRUSTED,
- GetTestUrl(L"").c_str(), SZM_DELETE));
-}
-
-// This test checks if window.open calls with target blank issued for a
-// different domain make it back to IE instead of completing the navigation
-// within Chrome. We validate this by initiating a navigation to a non existent
-// url which ensures we would get an error during navigation.
-// Marking this disabled as it leaves behind Chrome processes, at least on
-// IE 6 XP (http://crbug.com/48732).
-TEST_P(FullTabNavigationTest, DISABLED_JavascriptWindowOpenDifferentDomain) {
- if (!GetParam().invokes_cf() || GetInstalledIEVersion() == IE_7) {
- LOG(ERROR) << "Test disabled for this configuration.";
- return;
- }
- std::wstring parent_url = GetWindowOpenUrl(L"http://www.nonexistent.com");
- MockAccEventObserver acc_observer;
- MockIEEventSink new_window_mock;
- ie_mock_.ExpectAnyNavigations();
- new_window_mock.ExpectAnyNavigations();
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
-
- EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), StrEq(parent_url)));
- EXPECT_CALL(acc_observer,
- OnAccDocLoad(TabContentsTitleEq(parent_url,
- GetWindowOpenTitle())))
- .WillOnce(AccLeftClick(AccObjectMatcher()));
-
- ie_mock_.ExpectNewWindow(&new_window_mock);
- EXPECT_CALL(new_window_mock, OnNavigateError(_, _, _, _, _))
- .Times(1)
- .WillOnce(CloseBrowserMock(&new_window_mock));
-
- EXPECT_CALL(new_window_mock, OnLoad(_, _))
- .Times(testing::AtMost(1));
-
- EXPECT_CALL(new_window_mock, OnQuit())
- .Times(1)
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- // OnNavigateError can take a long time to fire.
- LaunchIENavigateAndLoop(parent_url, kChromeFrameLongNavigationTimeout * 4);
- ASSERT_TRUE(new_window_mock.event_sink()->web_browser2() != NULL);
-}
-
-// Tests that the parent window can successfully close its popup through
-// the javascript close method.
-TEST_P(FullTabNavigationTest, JavascriptWindowOpenCanClose) {
- // Please see http://code.google.com/p/chromium/issues/detail?id=60987
- // for more information on why this test is disabled for Vista with IE7.
- if (base::win::GetVersion() == base::win::VERSION_VISTA &&
- GetInstalledIEVersion() == IE_7) {
- LOG(INFO) << "Not running test on Vista with IE7";
- return;
- }
-
- std::wstring parent_url = GetWindowOpenUrl(L"simple.html");
- MockAccEventObserver acc_observer;
- MockIEEventSink new_window_mock;
- ie_mock_.ExpectAnyNavigations();
- new_window_mock.ExpectAnyNavigations();
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
-
- // Tell the page to open the popup. Some versions of IE will prevent a popup
- // unless a click is involved.
- EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), StrEq(parent_url)));
- EXPECT_CALL(acc_observer,
- OnAccDocLoad(TabContentsTitleEq(parent_url,
- GetWindowOpenTitle())))
- .WillOnce(AccLeftClick(AccObjectMatcher()));
-
- ie_mock_.ExpectNewWindow(&new_window_mock);
- EXPECT_CALL(new_window_mock, OnLoad(_, StrEq(GetSimplePageUrl())))
- .Times(testing::AtMost(2))
- .WillOnce(PostKeyMessageToRenderer(&ie_mock_, 'c')) // close the popup
- .WillOnce(testing::Return());
-
- EXPECT_CALL(new_window_mock, OnQuit())
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIENavigateAndLoop(parent_url, kChromeFrameLongNavigationTimeout * 2);
-}
-
-// Parameter for tests using the NavigationTransitionTest fixture. Includes two
-// pages, each with their own possible CF invocation.
-struct NavigationTransitionTestParameter {
- NavigationTransitionTestParameter(CFInvocation::Type type1,
- CFInvocation::Type type2) {
- page1_ = CFInvocation(type1);
- page2_ = CFInvocation(type2);
- }
- CFInvocation page1_;
- CFInvocation page2_;
-};
-
-// Parameterized test fixture for tests which test navigation transitions
-// between two pages.
-class NavigationTransitionTest
- : public MockIEEventSinkTest,
- public testing::TestWithParam<NavigationTransitionTestParameter> {
- public:
- NavigationTransitionTest() {}
-
- virtual void SetUp() {
- page1_ = GetParam().page1_;
- page2_ = GetParam().page2_;
- }
-
- protected:
- CFInvocation page1_;
- CFInvocation page2_;
-};
-
-// This instantiates each parameterized test with some of the different CF
-// invocation methods.
-INSTANTIATE_TEST_CASE_P(
- IEToIE,
- NavigationTransitionTest,
- testing::Values(NavigationTransitionTestParameter(
- CFInvocation::NONE, CFInvocation::NONE)));
-INSTANTIATE_TEST_CASE_P(
- IEToMetaTag,
- NavigationTransitionTest,
- testing::Values(NavigationTransitionTestParameter(
- CFInvocation::NONE, CFInvocation::META_TAG)));
-INSTANTIATE_TEST_CASE_P(
- IEToHttpHeader,
- NavigationTransitionTest,
- testing::Values(NavigationTransitionTestParameter(
- CFInvocation::NONE, CFInvocation::HTTP_HEADER)));
-INSTANTIATE_TEST_CASE_P(
- CFToCF,
- NavigationTransitionTest,
- testing::Values(NavigationTransitionTestParameter(
- CFInvocation::META_TAG, CFInvocation::META_TAG)));
-INSTANTIATE_TEST_CASE_P(
- CFToIE,
- NavigationTransitionTest,
- testing::Values(NavigationTransitionTestParameter(
- CFInvocation::META_TAG, CFInvocation::NONE)));
-
-// Test window.open calls.
-TEST_P(NavigationTransitionTest, JavascriptWindowOpen) {
- // Please see http://code.google.com/p/chromium/issues/detail?id=60987
- // for more information on why this test is disabled for Vista with IE7.
- if (base::win::GetVersion() == base::win::VERSION_VISTA &&
- GetInstalledIEVersion() == IE_7) {
- LOG(INFO) << "Not running test on Vista with IE7";
- return;
- }
-
- std::wstring parent_url = GetWindowOpenUrl(L"simple.html");
- std::wstring new_window_url = GetSimplePageUrl();
- MockAccEventObserver acc_observer;
- testing::StrictMock<MockIEEventSink> new_window_mock;
-
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
- ie_mock_.ExpectNavigation(page1_.invokes_cf(), parent_url);
- server_mock_.ExpectAndServeRequest(page1_, parent_url);
- EXPECT_CALL(ie_mock_, OnLoad(page1_.invokes_cf(), StrEq(parent_url)));
- // Tell the page to open the popup. Some versions of IE will prevent a popup
- // unless a click is involved.
- EXPECT_CALL(acc_observer,
- OnAccDocLoad(TabContentsTitleEq(parent_url,
- GetWindowOpenTitle())))
- .WillOnce(AccLeftClick(AccObjectMatcher()));
-
- // If the parent window is in CF, the child should always load in CF since
- // the domain is the same.
- bool expect_cf = page1_.invokes_cf() || page2_.invokes_cf();
- ie_mock_.ExpectNewWindow(&new_window_mock);
- new_window_mock.ExpectJavascriptWindowOpenNavigation(page1_.invokes_cf(),
- expect_cf,
- new_window_url);
- server_mock_.ExpectAndServeRequest(page2_, new_window_url);
- EXPECT_CALL(new_window_mock, OnLoad(expect_cf, StrEq(new_window_url)))
- .WillOnce(testing::DoAll(
- ValidateWindowSize(&new_window_mock, 10, 10, 250, 250),
- CloseBrowserMock(&new_window_mock)));
-
- EXPECT_CALL(new_window_mock, OnQuit())
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIENavigateAndLoop(parent_url, kChromeFrameLongNavigationTimeout * 2);
-}
-
-// Test redirection with window.location in Javascript.
-// Disabled because crashes IE occasionally: http://crbug.com/48849.
-TEST_P(NavigationTransitionTest, DISABLED_JavascriptRedirection) {
- std::wstring redirect_url = GetTestUrl(L"javascript_redirect.html");
-
- ie_mock_.ExpectNavigation(page1_.invokes_cf(), redirect_url);
- server_mock_.ExpectAndServeRequest(page1_, redirect_url);
- EXPECT_CALL(ie_mock_, OnLoad(page1_.invokes_cf(), StrEq(redirect_url)))
- .WillOnce(VerifyAddressBarUrl(&ie_mock_));
-
- ie_mock_.ExpectNavigation(page2_.invokes_cf(), GetSimplePageUrl());
- server_mock_.ExpectAndServeRequest(page2_, GetSimplePageUrl());
- EXPECT_CALL(ie_mock_, OnLoad(page2_.invokes_cf(), StrEq(GetSimplePageUrl())))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- CloseBrowserMock(&ie_mock_)));
-
- LaunchIEAndNavigate(redirect_url);
-}
-
-// Test following a link.
-TEST_P(NavigationTransitionTest, FollowLink) {
- if (page1_.invokes_cf() && page2_.invokes_cf()) {
- // For some reason IE 7 and 8 send two BeforeNavigate events for the second
- // page for this case. All versions do not send the OnLoad event for the
- // second page if both pages are renderered in CF.
- LOG(ERROR) << "Test disabled for this configuration.";
- return;
- }
- MockAccEventObserver acc_observer;
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
-
- ie_mock_.ExpectNavigation(page1_.invokes_cf(), GetLinkPageUrl());
- // Two requests are made when going from CF to IE, at least on Win7 IE8.
- EXPECT_CALL(server_mock_, Get(_, UrlPathEq(GetLinkPageUrl()), _))
- .Times(testing::Between(1, 2))
- .WillRepeatedly(SendResponse(&server_mock_, page1_));
- EXPECT_CALL(ie_mock_, OnLoad(page1_.invokes_cf(), StrEq(GetLinkPageUrl())));
- EXPECT_CALL(acc_observer,
- OnAccDocLoad(TabContentsTitleEq(GetLinkPageUrl(),
- GetLinkPageTitle())))
- .WillOnce(AccDoDefaultAction(AccObjectMatcher(L"", L"link")))
- .RetiresOnSaturation();
-
- ie_mock_.ExpectNavigation(page2_.invokes_cf(), GetSimplePageUrl());
- server_mock_.ExpectAndServeRequest(page2_, GetSimplePageUrl());
- EXPECT_CALL(ie_mock_, OnLoad(page2_.invokes_cf(), StrEq(GetSimplePageUrl())))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- CloseBrowserMock(&ie_mock_)));
-
- LaunchIEAndNavigate(GetLinkPageUrl());
-}
-
-// gMock matcher which tests if a url is blank.
-MATCHER(BlankUrl, "is \"\" or NULL") {
- return arg == NULL || wcslen(arg) == 0;
-}
-
-// Basic navigation test fixture which uses the MockIEEventSink. These tests
-// are not parameterized.
-class NavigationTest : public MockIEEventSinkTest, public testing::Test {
- public:
- NavigationTest() {}
-
- void TestDisAllowedUrl(const wchar_t* url) {
- // If a navigation fails then IE issues a navigation to an interstitial
- // page. Catch this to track navigation errors as the NavigateError
- // notification does not seem to fire reliably.
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
- StrEq(url)),
- _, _, _, _, _));
- EXPECT_CALL(ie_mock_, OnLoad(IN_IE, BlankUrl()))
- .Times(testing::AtMost(1));
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
- testing::StartsWith(L"res:")),
- _, _, _, _, _));
- EXPECT_CALL(ie_mock_, OnFileDownload(VARIANT_TRUE, _))
- .Times(testing::AnyNumber())
- .WillRepeatedly(testing::Return());
- EXPECT_CALL(ie_mock_, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(url))));
- // Although we expect a load event for this, we should never receive a
- // corresponding GET request.
- EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(url)))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(url);
- }
-
-};
-
-// Test navigation to a disallowed gcf: url with file scheme.
-// Times out sporadically; http://crbug.com/119718.
-TEST_F(NavigationTest, DISABLED_GcfProtocol1) {
- // Make sure that we are not accidently enabling gcf protocol.
- SetConfigBool(kAllowUnsafeURLs, false);
- TestDisAllowedUrl(L"gcf:file:///C:/");
-}
-
-// Test navigation to a disallowed gcf: url with http scheme.
-TEST_F(NavigationTest, GcfProtocol2) {
- // Make sure that we are not accidently enabling gcf protocol.
- SetConfigBool(kAllowUnsafeURLs, false);
- TestDisAllowedUrl(L"gcf:http://www.google.com");
-}
-
-// Test navigation to a disallowed gcf: url with https scheme.
-TEST_F(NavigationTest, GcfProtocol3) {
- // Make sure that we are not accidently enabling gcf protocol.
- SetConfigBool(kAllowUnsafeURLs, false);
- TestDisAllowedUrl(L"gcf:https://www.google.com");
-}
-
-// NOTE: This test is currently disabled as we haven't finished implementing
-// support for this yet. The test (as written) works fine for IE. CF might
-// have a different set of requirements once we fully support this and hence
-// the test might need some refining before being enabled.
-TEST_F(NavigationTest, DISABLED_DownloadInNewWindow) {
- MockIEEventSink new_window_mock;
- std::wstring kDownloadFromNewWin =
- GetTestUrl(L"full_tab_download_from_new_window.html");
-
- ie_mock_.ExpectNavigation(IN_CF, kDownloadFromNewWin);
-
- EXPECT_CALL(ie_mock_, OnNewWindow3(_, _, _, _, _));
-
- EXPECT_CALL(ie_mock_, OnNewBrowserWindow(_, _))
- .WillOnce(testing::WithArgs<0>(testing::Invoke(testing::CreateFunctor(
- &new_window_mock, &MockIEEventSink::Attach))));
- EXPECT_CALL(new_window_mock, OnBeforeNavigate2(_, _, _, _, _, _, _));
-
- EXPECT_CALL(new_window_mock, OnFileDownload(VARIANT_FALSE, _))
- .Times(2)
- .WillRepeatedly(CloseBrowserMock(&new_window_mock));
-
- EXPECT_CALL(new_window_mock, OnNavigateComplete2(_, _));
-
- EXPECT_CALL(new_window_mock, OnQuit()).WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(kDownloadFromNewWin);
-}
-
-// Flaky on ie6, http://crbug.com/255098.
-TEST_P(FullTabNavigationTest, DISABLED_FormPostBackForward) {
- bool in_cf = GetParam().invokes_cf();
- // Navigate to the form-get.html page:
- // - First set focus to chrome renderer window
- // - Send over a character to the window.
- // - This should initiate a form post which eventually navigates to the
- // action.html page.
- // Navigate backwards from the action.html page and then navigate forward
- // from the form-get.html page.
- std::wstring kFormPostUrl = GetTestUrl(L"form-get.html");
- std::wstring kFormPostActionUrl =
- GetTestUrl(L"action.html?field1=a&field2=b&submit=Submit");
- std::wstring kFormPostTitle(L"ChromeFrame form submit test(GET method)");
-
- MockAccEventObserver acc_observer;
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
-
- EXPECT_CALL(acc_observer, OnAccDocLoad(TabContentsTitleEq(kFormPostUrl,
- kFormPostTitle)))
- .WillOnce(AccDoDefaultAction(AccObjectMatcher(L"Submit")))
- .RetiresOnSaturation();
-
- InSequence expect_in_sequence_for_scope;
-
- ie_mock_.ExpectNavigation(in_cf, kFormPostUrl);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(kFormPostUrl)));
-
- ie_mock_.ExpectNavigationOptionalBefore(in_cf, kFormPostActionUrl);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(kFormPostActionUrl)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoBack(&ie_mock_, &loop_, base::TimeDelta())));
-
- ie_mock_.ExpectNavigation(in_cf, kFormPostUrl);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(kFormPostUrl)))
- .WillOnce(testing::DoAll(
- VerifyAddressBarUrl(&ie_mock_),
- DelayGoForward(&ie_mock_, &loop_, base::TimeDelta())));
-
- ie_mock_.ExpectNavigationOptionalBefore(in_cf, kFormPostActionUrl);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(kFormPostActionUrl)))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(kFormPostUrl);
-}
-
-TEST_P(FullTabNavigationTest, CF_UnloadEventTest) {
- bool in_cf = GetParam().invokes_cf();
- if (!in_cf) {
- LOG(ERROR) << "Test not yet implemented.";
- return;
- }
-
- std::wstring kUnloadEventTestUrl =
- GetTestUrl(L"fulltab_before_unload_event_test.html");
-
- std::wstring kUnloadEventMainUrl =
- GetTestUrl(L"fulltab_before_unload_event_main.html");
-
- server_mock_.ExpectAndServeAnyRequests(GetParam());
- InSequence expect_in_sequence_for_scope;
-
- ie_mock_.ExpectNavigation(in_cf, kUnloadEventTestUrl);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(kUnloadEventTestUrl)));
-
- ie_mock_.ExpectNavigationOptionalBefore(in_cf, kUnloadEventMainUrl);
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(kUnloadEventMainUrl)));
-
- EXPECT_CALL(ie_mock_, OnMessage(_, _, _))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(kUnloadEventTestUrl);
-}
-
-// Fixture for ChromeFrame download tests.
-class FullTabDownloadTest
- : public MockIEEventSinkTest, public testing::TestWithParam<CFInvocation> {
- public:
- FullTabDownloadTest() {}
-};
-
-void SaveOwnerWindow(HWND* owner_window, HWND window) {
- *owner_window = GetWindow(window, GW_OWNER);
-}
-
-void CloseWindow(HWND* window) {
- if (window)
- PostMessage(*window, WM_CLOSE, 0, 0);
-}
-
-// See bug http://crbug.com/36694
-// This test does the following:-
-// Navigates IE to a URL which in ChromeFrame.
-// Performs a top level form post in the document
-// In response to the POST we send over an attachment via the
-// content-disposition header.
-// IE brings up a file open dialog in this context.
-// We bring up the Save dialog via accessibility and save the file
-// and validate that all is well.
-TEST_F(FullTabDownloadTest, CF_DownloadFileFromPost) {
- // Please see http://code.google.com/p/chromium/issues/detail?id=60987
- // for more information on why this test is disabled for Vista with IE7.
- if (base::win::GetVersion() >= base::win::VERSION_VISTA) {
- if (GetInstalledIEVersion() == IE_7) {
- LOG(INFO) << "Not running test on Vista with IE7";
- return;
- } else if (GetInstalledIEVersion() == IE_9) {
- LOG(INFO) << "Not running test on Vista/Windows 7 with IE9";
- return;
- }
- }
-
- chrome_frame_test::MockWindowObserver download_watcher;
- download_watcher.WatchWindow("File Download", "");
-
- chrome_frame_test::MockWindowObserver save_dialog_watcher;
- save_dialog_watcher.WatchWindow("Save As", "");
-
- testing::StrictMock<MockIEEventSink> download_window_mock;
-
- EXPECT_CALL(server_mock_, Get(_, StrEq(L"/post_source.html"), _)).WillOnce(
- SendFast(
- "HTTP/1.1 200 OK\r\n"
- "Content-Type: text/html\r\n",
- "<html>"
- "<head><meta http-equiv=\"x-ua-compatible\" content=\"chrome=1\" />"
- " <script type=\"text/javascript\">"
- " function onLoad() {"
- " document.getElementById(\"myform\").submit();}</script></head>"
- " <body onload=\"setTimeout(onLoad, 2000);\">"
- " <form id=\"myform\" action=\"post_target.html\" method=\"POST\">"
- "</form></body></html>"));
-
- EXPECT_CALL(server_mock_, Post(_, StrEq(L"/post_target.html"), _))
- .Times(2)
- .WillRepeatedly(
- SendFast(
- "HTTP/1.1 200 OK\r\n"
- "content-disposition: attachment;filename=\"hello.txt\"\r\n"
- "Content-Type: application/text\r\n"
- "Cache-Control: private\r\n",
- "hello"));
-
- // If you want to debug this action then you may need to
- // SendMessage(parent_window, WM_NCACTIVATE, TRUE, 0);
- // SendMessage(parent_window, WM_COMMAND, MAKEWPARAM(0x114B, BN_CLICKED),
- // control_window);
- // For the uninitiated, please debug IEFrame!CDialogActivateGuard::*
- EXPECT_CALL(download_watcher, OnWindowOpen(_))
- .Times(2)
- .WillOnce(DelayAccDoDefaultAction(
- AccObjectMatcher(L"Save", L"push button"),
- 1000))
- .WillOnce(testing::Return());
-
- EXPECT_CALL(download_watcher, OnWindowClose(_))
- .Times(testing::AnyNumber());
-
- std::wstring src_url = server_mock_.Resolve(L"/post_source.html");
- std::wstring tgt_url = server_mock_.Resolve(L"/post_target.html");
-
- EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber());
-
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(src_url)), _, _, _, _, _));
- EXPECT_CALL(ie_mock_, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(src_url))));
- EXPECT_CALL(ie_mock_, OnLoad(true, StrEq(src_url)))
- .Times(testing::AnyNumber());
-
- ie_mock_.ExpectNewWindow(&download_window_mock);
- EXPECT_CALL(ie_mock_, OnLoadError(StrEq(tgt_url)))
- .Times(testing::AnyNumber());
-
- EXPECT_CALL(download_window_mock, OnFileDownload(_, _))
- .Times(testing::AnyNumber());
- EXPECT_CALL(download_window_mock, OnLoadError(StrEq(tgt_url)))
- .Times(testing::AtMost(1));
- EXPECT_CALL(download_window_mock, OnBeforeNavigate2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(tgt_url)), _, _, _, _, _));
- EXPECT_CALL(download_window_mock, OnLoad(false, _));
- EXPECT_CALL(download_window_mock, OnQuit()).Times(testing::AtMost(1));
-
- base::FilePath temp_file_path;
- ASSERT_TRUE(base::CreateTemporaryFile(&temp_file_path));
- file_util::DieFileDie(temp_file_path, false);
-
- temp_file_path = temp_file_path.ReplaceExtension(L"txt");
- file_util::DieFileDie(temp_file_path, false);
-
- AccObjectMatcher file_name_box(L"File name:", L"editable text");
-
- HWND owner_window = NULL;
-
- EXPECT_CALL(save_dialog_watcher, OnWindowOpen(_))
- .WillOnce(testing::DoAll(
- testing::Invoke(testing::CreateFunctor(
- SaveOwnerWindow, &owner_window)),
- AccSendCharMessage(file_name_box, L'a'),
- AccSetValue(file_name_box, temp_file_path.value()),
- AccDoDefaultAction(AccObjectMatcher(L"Save", L"push button"))));
-
- EXPECT_CALL(save_dialog_watcher, OnWindowClose(_))
- .WillOnce(testing::DoAll(
- WaitForFileSave(temp_file_path, 3000),
- testing::InvokeWithoutArgs(
- testing::CreateFunctor(CloseWindow, &owner_window)),
- CloseBrowserMock(&ie_mock_)));
- LaunchIENavigateAndLoop(src_url, kChromeFrameVeryLongNavigationTimeout);
-
- std::string data;
- EXPECT_TRUE(base::ReadFileToString(temp_file_path, &data));
- EXPECT_EQ("hello", data);
- file_util::DieFileDie(temp_file_path, false);
-}
-
-// Test fixture for testing if http header works for supported content types
-class HttpHeaderTest : public MockIEEventSinkTest, public testing::Test {
- public:
- HttpHeaderTest() {}
-
- void HeaderTestWithData(const char* content_type, const char* data) {
- const wchar_t* relative_url = L"/header_test";
- const char* kHeaderFormat =
- "HTTP/1.1 200 OK\r\n"
- "Connection: close\r\n"
- "Content-Type: %s\r\n"
- "X-UA-Compatible: chrome=1\r\n";
- std::string header = base::StringPrintf(kHeaderFormat, content_type);
- std::wstring url = server_mock_.Resolve(relative_url);
- EXPECT_CALL(server_mock_, Get(_, StrEq(relative_url), _))
- .WillRepeatedly(SendFast(header, data));
-
- InSequence expect_in_sequence_for_scope;
-
- ie_mock_.ExpectNavigation(IN_CF, url);
- EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(url)))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIEAndNavigate(url);
- }
-};
-
-const char* kXmlContent =
- "<tree>"
- "<node href=\"root.htm\" text=\"Root\">"
- "<node href=\"child1.htm\" text=\"Child 1\" />"
- "<node href=\"child2.htm\" text=\"Child 2\" />"
- "</node>"
- "</tree>";
-
-TEST_F(HttpHeaderTest, ApplicationXhtml) {
- HeaderTestWithData("application/xhtml+xml", kXmlContent);
-}
-
-TEST_F(HttpHeaderTest, ApplicationXml) {
- HeaderTestWithData("application/xml", kXmlContent);
-}
-
-TEST_F(HttpHeaderTest, TextXml) {
- HeaderTestWithData("text/xml", kXmlContent);
-}
-
-const char* kImageSvg =
- "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" "
- "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">"
- "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\">"
- "<rect height=\"100\" width=\"300\" "
- "style=\"fill:rgb(0,0,255);stroke-width:2;\"/>"
- "</svg>";
-
-TEST_F(HttpHeaderTest, DISABLED_ImageSvg) {
- HeaderTestWithData("image/svg", kImageSvg);
-}
-
-TEST_F(HttpHeaderTest, ImageSvgXml) {
- HeaderTestWithData("image/svg+xml", kImageSvg);
-}
-
-// Tests refreshing causes a page load.
-TEST_P(FullTabNavigationTest, RefreshContents) {
- bool in_cf = GetParam().invokes_cf();
- if (!in_cf) {
- VLOG(1) << "Disabled for this configuration";
- return;
- }
-
- const char kHeaders[] =
- "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"
- "X-UA-Compatible: chrome=1\r\nCache-control: no-cache\r\n";
-
- const char kBody[] = "<html><body>Hi there. Got new content?"
- "</body></html>";
-
- std::wstring src_url = server_mock_.Resolve(L"/refresh_src.html");
-
- EXPECT_CALL(server_mock_, Get(_, StrEq(L"/refresh_src.html"), _))
- .Times(2)
- .WillRepeatedly(SendFast(kHeaders, kBody));
-
- EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber());
-
- EXPECT_CALL(ie_mock_,
- OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
- StrEq(src_url)),
- _, _, _, _, _));
- EXPECT_CALL(ie_mock_,
- OnNavigateComplete2(_, testing::Field(&VARIANT::bstrVal,
- StrEq(src_url))));
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(src_url)))
- .Times(2)
- .WillOnce(DelayRefresh(
- &ie_mock_, &loop_, base::TimeDelta::FromMilliseconds(50)))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIENavigateAndLoop(src_url, kChromeFrameVeryLongNavigationTimeout);
-}
-
-class FullTabSeleniumTest
- : public MockIEEventSinkTest, public testing::TestWithParam<CFInvocation> {
- public:
- FullTabSeleniumTest()
- : MockIEEventSinkTest(1337, L"127.0.0.1", GetSeleniumTestFolder()) {}
-};
-
-ACTION(VerifySeleniumCoreTestResults) {
- int num_tests = 0;
- int failed_tests = 0;
-
- swscanf(arg0, L"%d/%d", &num_tests, &failed_tests);
-
- // Currently we run total 505 tests and 8 steps fail.
- // TODO(amit): send results as JSON, diagnose and eliminate failures.
- EXPECT_LE(failed_tests, 15) << "Expected failures: " << 15 <<
- " Actual failures: " << failed_tests;
- EXPECT_GE(num_tests, 500) << "Expected to run: " << 500 << " tests." <<
- " Actual number of tests run: " << num_tests;
-}
-
-// Crashes flakily: http://crbug.com/109114
-// Tests refreshing causes a page load.
-TEST_F(FullTabSeleniumTest, DISABLED_Core) {
- // Please see http://code.google.com/p/chromium/issues/detail?id=60987
- // for more information on why this test is disabled for Vista with IE7.
- if (base::win::GetVersion() == base::win::VERSION_VISTA &&
- GetInstalledIEVersion() == IE_7) {
- LOG(INFO) << "Not running test on Vista with IE7";
- return;
- }
-
- server_mock_.ExpectAndServeAnyRequests(CFInvocation::HttpHeader());
- std::wstring url = GetTestUrl(L"core/TestRunner.html");
-
- // Expectations for TestRunner.html
- EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber());
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_,
- testing::Field(&VARIANT::bstrVal,
- testing::StartsWith(url)), _, _, _, _, _))
- .Times(testing::AnyNumber());
- EXPECT_CALL(ie_mock_, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal,
- testing::StartsWith(url))))
- .Times(testing::AnyNumber());
- EXPECT_CALL(ie_mock_, OnLoad(true, testing::StartsWith(url)))
- .Times(testing::AnyNumber());
-
- // Expectation for cookie test
- EXPECT_CALL(ie_mock_, OnLoadError(testing::StartsWith(url)))
- .Times(testing::AtMost(3));
-
- // Expectations for popups
- std::wstring attach_url_prefix = GetTestUrl(L"?attach_external_tab&");
- EXPECT_CALL(ie_mock_, OnNewWindow3(_, _, _, _,
- testing::StartsWith(attach_url_prefix)))
- .Times(testing::AnyNumber());
- EXPECT_CALL(ie_mock_, OnNewBrowserWindow(_,
- testing::StartsWith(attach_url_prefix)))
- .Times(testing::AnyNumber());
-
- // At the end the tests will post us a message. See _onTestSuiteComplete in
- // ...\src\data\selenium_core\core\scripts\selenium-testrunner.js
- EXPECT_CALL(ie_mock_, OnMessage(_, _, _))
- .WillOnce(testing::DoAll(VerifySeleniumCoreTestResults(),
- CloseBrowserMock(&ie_mock_)));
-
- // Selenium tests take longer to finish, lets give it 2 mins.
- const base::TimeDelta kSeleniumTestTimeout = base::TimeDelta::FromMinutes(2);
- LaunchIENavigateAndLoop(url, kSeleniumTestTimeout);
-}
-
-// See bug http://code.google.com/p/chromium/issues/detail?id=64901
-// This test does the following:-
-// Navigates IE to a non ChromeFrame URL.
-// Performs a top level form post in the document
-// In response to the POST send over a html document containing a meta tag
-// This would cause IE to switch to ChromeFrame.
-// Refresh the page in ChromeFrame.
-// This should bring up a confirmation dialog which we hit yes on. This should
-// reissue the top level post request in response to which the html content
-// containing the meta tag is sent again.
-TEST_F(FullTabDownloadTest, TopLevelPostReissueFromChromeFramePage) {
- chrome_frame_test::MockWindowObserver post_reissue_watcher;
- post_reissue_watcher.WatchWindow("Confirm Form Resubmission", "");
-
- EXPECT_CALL(server_mock_, Get(_, StrEq(L"/post_source.html"), _))
- .WillOnce(SendFast(
- "HTTP/1.1 200 OK\r\n"
- "Content-Type: text/html\r\n",
- "<html>"
- "<head>"
- " <script type=\"text/javascript\">"
- " function onLoad() {"
- " document.getElementById(\"myform\").submit();}</script></head>"
- " <body onload=\"setTimeout(onLoad, 2000);\">"
- " <form id=\"myform\" action=\"post_target.html\" method=\"POST\">"
- "</form></body></html>"));
-
- EXPECT_CALL(server_mock_, Post(_, StrEq(L"/post_target.html"), _))
- .Times(2)
- .WillRepeatedly(
- SendFast(
- "HTTP/1.1 200 OK\r\n"
- "Content-Type: text/html\r\n",
- "<html>"
- "<head><meta http-equiv=\"x-ua-compatible\" content=\"chrome=1\" />"
- "</head>"
- "<body> Target page in ChromeFrame </body>"
- "</html>"));
-
- EXPECT_CALL(post_reissue_watcher, OnWindowOpen(_))
- .WillOnce(DelayAccDoDefaultAction(
- AccObjectMatcher(L"Yes", L"push button"),
- 1000));
-
- EXPECT_CALL(post_reissue_watcher, OnWindowClose(_));
-
- std::wstring src_url = server_mock_.Resolve(L"/post_source.html");
- std::wstring tgt_url = server_mock_.Resolve(L"/post_target.html");
-
- EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber());
-
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(src_url)), _, _, _, _, _));
- EXPECT_CALL(ie_mock_, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(src_url))));
- EXPECT_CALL(ie_mock_, OnLoad(false, StrEq(src_url)));
-
- EXPECT_CALL(ie_mock_, OnLoad(true, StrEq(tgt_url)))
- .Times(2)
- .WillOnce(DelayRefresh(
- &ie_mock_, &loop_, base::TimeDelta::FromMilliseconds(50)))
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- EXPECT_CALL(ie_mock_, OnBeforeNavigate2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(tgt_url)), _, _, _, _, _))
- .Times(2);
-
- EXPECT_CALL(ie_mock_, OnNavigateComplete2(_,
- testing::Field(&VARIANT::bstrVal,
- StrEq(tgt_url))))
- .Times(2);
-
- LaunchIENavigateAndLoop(src_url, kChromeFrameVeryLongNavigationTimeout);
-}
-
-MATCHER_P(UserAgentHeaderMatcher, ua_string, "") {
- std::string headers = arg.headers();
- StringToUpperASCII(&headers);
-
- std::string ua_string_to_search = ua_string;
- StringToUpperASCII(&ua_string_to_search);
-
- net::HttpUtil::HeadersIterator it(headers.begin(), headers.end(),
- "\r\n");
- while (it.GetNext()) {
- if (lstrcmpiA(it.name().c_str(), "User-Agent") == 0) {
- if (it.values().find(ua_string_to_search) != std::string::npos)
- return true;
- }
- }
- return false;
-}
-
-// Tests refreshing causes a page load and that the chrome frame user agent
-// string is appended to the UA in the incoming top level HTTP requests.
-TEST_P(FullTabNavigationTest, RefreshContentsUATest) {
- const char kBody[] = "<html><head></head>"
- "<body>Hi there. Got new content?"
- "</body></html>";
-
- std::string headers = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"
- "Cache-control: no-cache\r\n";
- bool in_cf = GetParam().invokes_cf();
- if (in_cf) {
- headers.append("X-UA-Compatible: chrome=1\r\n");
- } else {
- if (GetInstalledIEVersion() == IE_9) {
- LOG(ERROR) << "Test disabled for IE9";
- return;
- }
- }
-
- std::wstring src_url = server_mock_.Resolve(L"/refresh_src.html");
-
- if (in_cf) {
- // In the case of Chrome Frame, end the test when the second OnLoad is
- // fired.
- EXPECT_CALL(server_mock_, Get(_, StrEq(L"/refresh_src.html"),
- UserAgentHeaderMatcher("chromeframe")))
- .Times(2)
- .WillRepeatedly(SendFast(headers, kBody));
- } else {
- // In the case of IE, we never receive a second OnLoad event, so end the
- // test when the second request is made on the server.
- EXPECT_CALL(server_mock_, Get(_, StrEq(L"/refresh_src.html"),
- UserAgentHeaderMatcher("chromeframe")))
- .Times(2)
- .WillOnce(SendFast(headers, kBody))
- .WillOnce(testing::DoAll(
- SendFast(headers, kBody),
- CloseBrowserMock(&ie_mock_)));
- }
-
- EXPECT_CALL(ie_mock_, OnFileDownload(_, _)).Times(testing::AnyNumber());
-
- EXPECT_CALL(ie_mock_,
- OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
- StrEq(src_url)),
- _, _, _, _, _));
- EXPECT_CALL(ie_mock_,
- OnNavigateComplete2(_, testing::Field(&VARIANT::bstrVal,
- StrEq(src_url))));
- if (in_cf) {
- // As mentioned above, end the test once the refreshed document is loaded.
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(src_url)))
- .Times(2)
- .WillOnce(DelayRefresh(
- &ie_mock_, &loop_, base::TimeDelta::FromMilliseconds(50)))
- .WillOnce(CloseBrowserMock(&ie_mock_));
- } else {
- // As mentioned above, we only receive an OnLoad for the intial load, not
- // for the refresh.
- EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(src_url)))
- .WillOnce(DelayRefresh(
- &ie_mock_, &loop_, base::TimeDelta::FromMilliseconds(50)));
- }
-
- LaunchIENavigateAndLoop(src_url, kChromeFrameVeryLongNavigationTimeout);
-}
-
-// Link navigations in the same domain specified with the noreferrer flag
-// should be opened in the host browser.
-TEST_F(FullTabNavigationTest, JavascriptWindowOpenNoReferrerOpensInHost) {
- // Please see http://code.google.com/p/chromium/issues/detail?id=60987
- // for more information on why this test is disabled for Vista with IE7.
- if (base::win::GetVersion() == base::win::VERSION_VISTA &&
- GetInstalledIEVersion() == IE_7) {
- LOG(INFO) << "Not running test on Vista with IE7";
- return;
- }
-
- MockAccEventObserver acc_observer;
- EXPECT_CALL(acc_observer, OnAccDocLoad(_)).Times(testing::AnyNumber());
-
- testing::StrictMock<MockIEEventSink> new_window_mock;
- testing::StrictMock<MockIEEventSink>
- no_referrer_target_opener_window_mock;
-
- std::wstring initial_url =
- GetWindowOpenUrl(L"open_href_target_no_referrer.html");
-
- std::wstring parent_url = GetTestUrl(
- L"open_href_target_no_referrer.html");
-
- std::wstring new_window_url = GetSimplePageUrl();
-
- ie_mock_.ExpectNavigation(false, initial_url);
- EXPECT_CALL(ie_mock_, OnLoad(false, StrEq(initial_url)));
-
- EXPECT_CALL(acc_observer,
- OnAccDocLoad(TabContentsTitleEq(initial_url,
- GetWindowOpenTitle())))
- .WillOnce(AccLeftClick(AccObjectMatcher()))
- .RetiresOnSaturation();
-
- ie_mock_.ExpectNewWindow(&no_referrer_target_opener_window_mock);
-
- no_referrer_target_opener_window_mock.ExpectNavigation(true, parent_url);
-
- server_mock_.ExpectAndServeRequest(CFInvocation::MetaTag(), parent_url);
- server_mock_.ExpectAndServeRequest(CFInvocation::None(), new_window_url);
- server_mock_.ExpectAndServeRequest(CFInvocation::None(), initial_url);
-
- EXPECT_CALL(no_referrer_target_opener_window_mock,
- OnLoad(false, StrEq(parent_url)))
- .Times(testing::AnyNumber());
-
- EXPECT_CALL(no_referrer_target_opener_window_mock,
- OnLoad(true, StrEq(parent_url)))
- .WillOnce(DelayAccDoDefaultActionInRenderer(
- &no_referrer_target_opener_window_mock,
- AccObjectMatcher(L"", L"link"), 1000));
-
- // The parent window is in CF and opens a child window with the no referrer
- // flag in which case it should open in IE.
- no_referrer_target_opener_window_mock.ExpectNewWindow(&new_window_mock);
- new_window_mock.ExpectNavigation(false, new_window_url);
-
- EXPECT_CALL(new_window_mock, OnFileDownload(_, _))
- .Times(testing::AnyNumber());
-
- EXPECT_CALL(new_window_mock,
- OnBeforeNavigate2(_, testing::Field(&VARIANT::bstrVal,
- testing::HasSubstr(L"attach")),
- _, _, _, _, _));
- EXPECT_CALL(new_window_mock,
- OnNavigateComplete2(_, testing::Field(&VARIANT::bstrVal,
- testing::HasSubstr(L"attach"))))
- .Times(testing::AtMost(1));
-
- EXPECT_CALL(new_window_mock, OnLoad(false, StrEq(new_window_url)))
- .WillOnce(CloseBrowserMock(&new_window_mock));
-
- EXPECT_CALL(new_window_mock, OnQuit())
- .WillOnce(CloseBrowserMock(
- &no_referrer_target_opener_window_mock));
-
- EXPECT_CALL(no_referrer_target_opener_window_mock, OnQuit())
- .WillOnce(CloseBrowserMock(&ie_mock_));
-
- LaunchIENavigateAndLoop(initial_url, kChromeFrameVeryLongNavigationTimeout);
-}
-
-} // namespace chrome_frame_test
« no previous file with comments | « chrome_frame/test/mock_ie_event_sink_test.cc ('k') | chrome_frame/test/net/fake_external_tab.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698