blob: 637f37d19cf07b85f6e8bca10d99d15b5205af05 [file] [log] [blame]
// Copyright (c) 2006-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_with_web_server.h"
#include "base/file_version_info.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/helper.h"
#include "chrome_frame/utils.h"
#include "chrome_frame/test/chrome_frame_test_utils.h"
const wchar_t kDocRoot[] = L"chrome_frame\\test\\data";
const int kLongWaitTimeout = 60 * 1000;
const int kShortWaitTimeout = 25 * 1000;
const int kChromeFrameLaunchDelay = 5;
const int kChromeFrameLongNavigationTimeoutInSeconds = 10;
bool MonikerPatchEnabled() {
ProtocolPatchMethod patch_method =
static_cast<ProtocolPatchMethod>(
GetConfigInt(PATCH_METHOD_IBROWSER, kPatchProtocols));
LOG_IF(ERROR, patch_method != PATCH_METHOD_MONIKER)
<< "Not running test. Moniker patch not enabled.";
return patch_method == PATCH_METHOD_MONIKER;
}
class ChromeFrameTestEnvironment: public testing::Environment {
public:
~ChromeFrameTestEnvironment() {}
void SetUp() {
ScopedChromeFrameRegistrar::RegisterDefaults();
}
void TearDown() {}
};
::testing::Environment* const chrome_frame_env =
::testing::AddGlobalTestEnvironment(new ChromeFrameTestEnvironment);
void ChromeFrameTestWithWebServer::CloseAllBrowsers() {
// Web browsers tend to relaunch themselves in other processes, meaning the
// KillProcess stuff above might not have actually cleaned up all our browser
// instances, so make really sure browsers are dead.
base::KillProcesses(chrome_frame_test::kIEImageName, 0, NULL);
base::KillProcesses(chrome_frame_test::kIEBrokerImageName, 0, NULL);
base::KillProcesses(chrome_frame_test::kFirefoxImageName, 0, NULL);
base::KillProcesses(chrome_frame_test::kSafariImageName, 0, NULL);
// Endeavour to only kill off Chrome Frame derived Chrome processes.
KillAllNamedProcessesWithArgument(chrome_frame_test::kChromeImageName,
UTF8ToWide(switches::kChromeFrame));
}
void ChromeFrameTestWithWebServer::SetUp() {
// Make sure our playground is clean before we start.
CloseAllBrowsers();
// Make sure that we are not accidently enabling gcf protocol.
SetConfigBool(kEnableGCFProtocol, false);
PathService::Get(base::DIR_SOURCE_ROOT, &test_file_path_);
test_file_path_ = test_file_path_.Append(FILE_PATH_LITERAL("chrome_frame"))
.Append(FILE_PATH_LITERAL("test"))
.Append(FILE_PATH_LITERAL("data"));
server_.SetUp();
results_dir_ = server_.GetDataDir();
file_util::AppendToPath(&results_dir_, L"dump");
}
void ChromeFrameTestWithWebServer::TearDown() {
CloseBrowser();
CloseAllBrowsers();
server_.TearDown();
}
bool ChromeFrameTestWithWebServer::LaunchBrowser(BrowserKind browser,
const wchar_t* page) {
std::wstring url = page;
if (url.find(L"files/") != std::wstring::npos)
url = UTF8ToWide(server_.Resolve(page).spec());
browser_ = browser;
if (browser == IE) {
browser_handle_.Set(chrome_frame_test::LaunchIE(url));
} else if (browser == FIREFOX) {
browser_handle_.Set(chrome_frame_test::LaunchFirefox(url));
} else if (browser == OPERA) {
browser_handle_.Set(chrome_frame_test::LaunchOpera(url));
} else if (browser == SAFARI) {
browser_handle_.Set(chrome_frame_test::LaunchSafari(url));
} else if (browser == CHROME) {
browser_handle_.Set(chrome_frame_test::LaunchChrome(url));
} else {
NOTREACHED();
}
return browser_handle_.IsValid();
}
void ChromeFrameTestWithWebServer::CloseBrowser() {
if (!browser_handle_.IsValid())
return;
int attempts = 0;
if (browser_ == IE) {
attempts = chrome_frame_test::CloseAllIEWindows();
} else {
attempts = chrome_frame_test::CloseVisibleWindowsOnAllThreads(
browser_handle_);
}
if (attempts > 0) {
DWORD wait = ::WaitForSingleObject(browser_handle_, 20000);
if (wait == WAIT_OBJECT_0) {
browser_handle_.Close();
} else {
DLOG(ERROR) << "WaitForSingleObject returned " << wait;
}
} else {
DLOG(ERROR) << "No attempts to close browser windows";
}
if (browser_handle_.IsValid()) {
DWORD exit_code = 0;
if (!::GetExitCodeProcess(browser_handle_, &exit_code) ||
exit_code == STILL_ACTIVE) {
LOG(ERROR) << L"Forcefully killing browser process. Exit:" << exit_code;
base::KillProcess(browser_handle_, 0, true);
}
browser_handle_.Close();
}
}
bool ChromeFrameTestWithWebServer::BringBrowserToTop() {
return simulate_input::EnsureProcessInForeground(
GetProcessId(browser_handle_));
}
bool ChromeFrameTestWithWebServer::WaitForTestToComplete(int milliseconds) {
return server_.WaitToFinish(milliseconds);
}
bool ChromeFrameTestWithWebServer::WaitForOnLoad(int milliseconds) {
DWORD start = ::GetTickCount();
std::string data;
while (!ReadResultFile(L"OnLoadEvent", &data) || data.length() == 0) {
DWORD now = ::GetTickCount();
if (start > now) {
// Very simple check for overflow. In that case we just restart the
// wait.
start = now;
} else if (static_cast<int>(now - start) > milliseconds) {
break;
}
Sleep(100);
}
return data.compare("loaded") == 0;
}
bool ChromeFrameTestWithWebServer::ReadResultFile(const std::wstring& file_name,
std::string* data) {
std::wstring full_path = results_dir_;
file_util::AppendToPath(&full_path, file_name);
return file_util::ReadFileToString(full_path, data);
}
bool ChromeFrameTestWithWebServer::CheckResultFile(
const std::wstring& file_name, const std::string& expected_result) {
std::string data;
bool ret = ReadResultFile(file_name, &data);
if (ret)
ret = (data == expected_result);
if (!ret) {
LOG(ERROR) << "Error text: " << (data.empty() ? "<empty>" : data.c_str());
}
return ret;
}
void ChromeFrameTestWithWebServer::SimpleBrowserTest(BrowserKind browser,
const wchar_t* page, const wchar_t* result_file_to_check) {
ASSERT_TRUE(LaunchBrowser(browser, page));
ASSERT_TRUE(WaitForTestToComplete(kLongWaitTimeout));
ASSERT_TRUE(CheckResultFile(result_file_to_check, "OK"));
}
void ChromeFrameTestWithWebServer::OptionalBrowserTest(BrowserKind browser,
const wchar_t* page, const wchar_t* result_file_to_check) {
DCHECK(browser != CHROME) << "Chrome tests shouldn't be optional";
if (!LaunchBrowser(browser, page)) {
LOG(ERROR) << "Failed to launch browser " << ToString(browser);
} else {
ASSERT_TRUE(WaitForTestToComplete(kLongWaitTimeout));
ASSERT_TRUE(CheckResultFile(result_file_to_check, "OK"));
}
}
void ChromeFrameTestWithWebServer::VersionTest(BrowserKind browser,
const wchar_t* page, const wchar_t* result_file_to_check) {
std::wstring plugin_path;
PathService::Get(base::DIR_MODULE, &plugin_path);
file_util::AppendToPath(&plugin_path, L"servers");
file_util::AppendToPath(&plugin_path, kChromeFrameDllName);
static FileVersionInfo* version_info =
FileVersionInfo::CreateFileVersionInfo(plugin_path);
std::wstring version;
if (version_info)
version = version_info->product_version();
// If we can't find the Chrome Frame DLL in the src tree, we turn to
// the directory where chrome is installed.
if (!version_info) {
installer::Version* ver_system = InstallUtil::GetChromeVersion(true);
installer::Version* ver_user = InstallUtil::GetChromeVersion(false);
ASSERT_TRUE(ver_system || ver_user);
bool system_install = ver_system ? true : false;
std::wstring cf_dll_path(installer::GetChromeInstallPath(system_install));
file_util::AppendToPath(&cf_dll_path,
ver_system ? ver_system->GetString() : ver_user->GetString());
file_util::AppendToPath(&cf_dll_path, kChromeFrameDllName);
version_info = FileVersionInfo::CreateFileVersionInfo(cf_dll_path);
if (version_info)
version = version_info->product_version();
}
EXPECT_TRUE(version_info);
EXPECT_FALSE(version.empty());
EXPECT_TRUE(LaunchBrowser(browser, page));
ASSERT_TRUE(WaitForTestToComplete(kLongWaitTimeout));
ASSERT_TRUE(CheckResultFile(result_file_to_check, WideToUTF8(version)));
}
const wchar_t kPostMessageBasicPage[] = L"files/postmessage_basic_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_PostMessageBasic) {
SimpleBrowserTest(IE, kPostMessageBasicPage, L"PostMessage");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_PostMessageBasic) {
SimpleBrowserTest(FIREFOX, kPostMessageBasicPage, L"PostMessage");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_PostMessageBasic) {
OptionalBrowserTest(OPERA, kPostMessageBasicPage, L"PostMessage");
}
TEST_F(ChromeFrameTestWithWebServer, FullTabIE_MIMEFilterBasic) {
const wchar_t kMIMEFilterBasicPage[] =
L"files/chrome_frame_mime_filter_test.html";
// If this test fails for IE8 then it is possible that prebinding is enabled.
// A known workaround is to disable it until CF properly handles it.
//
// HKCU\Software\Microsoft\Internet Explorer\Main
// Value name: EnablePreBinding (REG_DWORD)
// Value: 0
SimpleBrowserTest(IE, kMIMEFilterBasicPage, L"MIMEFilter");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_Resize) {
SimpleBrowserTest(IE, L"files/chrome_frame_resize.html", L"Resize");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_Resize) {
SimpleBrowserTest(FIREFOX, L"files/chrome_frame_resize.html", L"Resize");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_Resize) {
OptionalBrowserTest(OPERA, L"files/chrome_frame_resize.html", L"Resize");
}
const wchar_t kNavigateURLAbsolutePage[] =
L"files/navigateurl_absolute_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_NavigateURLAbsolute) {
SimpleBrowserTest(IE, kNavigateURLAbsolutePage, L"NavigateURL");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_NavigateURLAbsolute) {
SimpleBrowserTest(FIREFOX, kNavigateURLAbsolutePage, L"NavigateURL");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_NavigateURLAbsolute) {
OptionalBrowserTest(OPERA, kNavigateURLAbsolutePage, L"NavigateURL");
}
const wchar_t kNavigateURLRelativePage[] =
L"files/navigateurl_relative_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_NavigateURLRelative) {
SimpleBrowserTest(IE, kNavigateURLRelativePage, L"NavigateURL");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_NavigateURLRelative) {
SimpleBrowserTest(FIREFOX, kNavigateURLRelativePage, L"NavigateURL");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_NavigateURLRelative) {
OptionalBrowserTest(OPERA, kNavigateURLRelativePage, L"NavigateURL");
}
const wchar_t kNavigateSimpleObjectFocus[] = L"files/simple_object_focus.html";
// http://crbug.com/37087
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_ObjectFocus) {
SimpleBrowserTest(FIREFOX, kNavigateSimpleObjectFocus, L"ObjectFocus");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_ObjectFocus) {
SimpleBrowserTest(IE, kNavigateSimpleObjectFocus, L"ObjectFocus");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_ObjectFocus) {
if (!LaunchBrowser(OPERA, kNavigateSimpleObjectFocus)) {
LOG(ERROR) << "Failed to launch browser " << ToString(OPERA);
} else {
ASSERT_TRUE(WaitForOnLoad(kLongWaitTimeout));
BringBrowserToTop();
// Tab through a couple of times. Once should be enough in theory
// but in practice activating the browser can take a few milliseconds more.
bool ok;
for (int i = 0;
i < 5 && (ok = CheckResultFile(L"ObjectFocus", "OK")) == false;
++i) {
Sleep(300);
simulate_input::SendMnemonic(VK_TAB, simulate_input::NONE, false, false);
}
ASSERT_TRUE(ok);
}
}
const wchar_t kiframeBasicPage[] = L"files/iframe_basic_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_iframeBasic) {
SimpleBrowserTest(IE, kiframeBasicPage, L"PostMessage");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_iframeBasic) {
SimpleBrowserTest(FIREFOX, kiframeBasicPage, L"PostMessage");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_iframeBasic) {
OptionalBrowserTest(OPERA, kiframeBasicPage, L"PostMessage");
}
const wchar_t kSrcPropertyTestPage[] = L"files/src_property_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_SrcProperty) {
SimpleBrowserTest(IE, kSrcPropertyTestPage, L"SrcProperty");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_SrcProperty) {
SimpleBrowserTest(FIREFOX, kSrcPropertyTestPage, L"SrcProperty");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_SrcProperty) {
OptionalBrowserTest(OPERA, kSrcPropertyTestPage, L"SrcProperty");
}
const wchar_t kCFInstanceBasicTestPage[] = L"files/CFInstance_basic_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceBasic) {
SimpleBrowserTest(IE, kCFInstanceBasicTestPage, L"CFInstanceBasic");
}
// http://crbug.com/37085
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_CFInstanceBasic) {
SimpleBrowserTest(FIREFOX, kCFInstanceBasicTestPage, L"CFInstanceBasic");
}
const wchar_t kCFISingletonPage[] = L"files/CFInstance_singleton_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceSingleton) {
SimpleBrowserTest(IE, kCFISingletonPage, L"CFInstanceSingleton");
}
// This test randomly fails on the ChromeFrame builder.
// Bug http://code.google.com/p/chromium/issues/detail?id=31532
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_CFInstanceSingleton) {
SimpleBrowserTest(FIREFOX, kCFISingletonPage, L"CFInstanceSingleton");
}
const wchar_t kCFIDelayPage[] = L"files/CFInstance_delay_host.html";
TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_CFInstanceDelay) {
SimpleBrowserTest(IE, kCFIDelayPage, L"CFInstanceDelay");
}
TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeFF_CFInstanceDelay) {
SimpleBrowserTest(FIREFOX, kCFIDelayPage, L"CFInstanceDelay");
}
TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeOpera_CFInstanceDelay) {
OptionalBrowserTest(OPERA, kCFIDelayPage, L"CFInstanceDelay");
}
const wchar_t kCFIFallbackPage[] = L"files/CFInstance_fallback_host.html";
// http://crbug.com/37088
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeIE_CFInstanceFallback) {
SimpleBrowserTest(IE, kCFIFallbackPage, L"CFInstanceFallback");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_CFInstanceFallback) {
SimpleBrowserTest(FIREFOX, kCFIFallbackPage, L"CFInstanceFallback");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_CFInstanceFallback) {
OptionalBrowserTest(OPERA, kCFIFallbackPage, L"CFInstanceFallback");
}
const wchar_t kCFINoSrcPage[] = L"files/CFInstance_no_src_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceNoSrc) {
SimpleBrowserTest(IE, kCFINoSrcPage, L"CFInstanceNoSrc");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_CFInstanceNoSrc) {
SimpleBrowserTest(FIREFOX, kCFINoSrcPage, L"CFInstanceNoSrc");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_CFInstanceNoSrc) {
OptionalBrowserTest(OPERA, kCFINoSrcPage, L"CFInstanceNoSrc");
}
const wchar_t kCFIIfrOnLoadPage[] = L"files/CFInstance_iframe_onload_host.html";
// disabled since it's unlikely that we care about this case
TEST_F(ChromeFrameTestWithWebServer,
DISABLED_WidgetModeIE_CFInstanceIfrOnLoad) {
SimpleBrowserTest(IE, kCFIIfrOnLoadPage, L"CFInstanceIfrOnLoad");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_CFInstanceIfrOnLoad) {
SimpleBrowserTest(FIREFOX, kCFIIfrOnLoadPage, L"CFInstanceIfrOnLoad");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_CFInstanceIfrOnLoad) {
OptionalBrowserTest(OPERA, kCFIIfrOnLoadPage, L"CFInstanceIfrOnLoad");
}
const wchar_t kCFIZeroSizePage[] = L"files/CFInstance_zero_size_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceZeroSize) {
SimpleBrowserTest(IE, kCFIZeroSizePage, L"CFInstanceZeroSize");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_CFInstanceZeroSize) {
SimpleBrowserTest(FIREFOX, kCFIZeroSizePage, L"CFInstanceZeroSize");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_CFInstanceZeroSize) {
OptionalBrowserTest(OPERA, kCFIZeroSizePage, L"CFInstanceZeroSize");
}
const wchar_t kCFIIfrPostPage[] = L"files/CFInstance_iframe_post_host.html";
// http://crbug.com/32321
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeIE_CFInstanceIfrPost) {
SimpleBrowserTest(IE, kCFIIfrPostPage, L"CFInstanceIfrPost");
}
// Flakes out on the bots, http://crbug.com/26372
TEST_F(ChromeFrameTestWithWebServer,
FLAKY_WidgetModeFF_CFInstanceIfrPost) {
SimpleBrowserTest(FIREFOX, kCFIIfrPostPage, L"CFInstanceIfrPost");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceIfrPost) {
SimpleBrowserTest(CHROME, kCFIIfrPostPage, L"CFInstanceIfrPost");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeSafari_CFInstanceIfrPost) {
OptionalBrowserTest(SAFARI, kCFIIfrPostPage, L"CFInstanceIfrPost");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_CFInstanceIfrPost) {
OptionalBrowserTest(OPERA, kCFIIfrPostPage, L"CFInstanceIfrPost");
}
const wchar_t kCFIPostPage[] = L"files/CFInstance_post_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstancePost) {
SimpleBrowserTest(IE, kCFIPostPage, L"CFInstancePost");
}
// This test randomly fails on the ChromeFrame builder.
// Bug http://code.google.com/p/chromium/issues/detail?id=31532
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_CFInstancePost) {
SimpleBrowserTest(FIREFOX, kCFIPostPage, L"CFInstancePost");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstancePost) {
SimpleBrowserTest(CHROME, kCFIPostPage, L"CFInstancePost");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeSafari_CFInstancePost) {
OptionalBrowserTest(SAFARI, kCFIPostPage, L"CFInstancePost");
}
TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeOpera_CFInstancePost) {
OptionalBrowserTest(OPERA, kCFIPostPage, L"CFInstancePost");
}
const wchar_t kCFIRPCPage[] = L"files/CFInstance_rpc_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceRPC) {
SimpleBrowserTest(IE, kCFIRPCPage, L"CFInstanceRPC");
}
// This test randomly fails on the ChromeFrame builder.
// Bug http://code.google.com/p/chromium/issues/detail?id=31532
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_CFInstanceRPC) {
SimpleBrowserTest(FIREFOX, kCFIRPCPage, L"CFInstanceRPC");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceRPC) {
SimpleBrowserTest(CHROME, kCFIRPCPage, L"CFInstanceRPC");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeSafari_CFInstanceRPC) {
OptionalBrowserTest(SAFARI, kCFIRPCPage, L"CFInstanceRPC");
}
TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeOpera_CFInstanceRPC) {
OptionalBrowserTest(OPERA, kCFIRPCPage, L"CFInstanceRPC");
}
const wchar_t kCFIRPCInternalPage[] =
L"files/CFInstance_rpc_internal_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceRPCInternal) {
SimpleBrowserTest(IE, kCFIRPCInternalPage, L"CFInstanceRPCInternal");
}
// http://code.google.com/p/chromium/issues/detail?id=37204
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_CFInstanceRPCInternal) {
SimpleBrowserTest(FIREFOX, kCFIRPCInternalPage, L"CFInstanceRPCInternal");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceRPCInternal) {
SimpleBrowserTest(CHROME, kCFIRPCInternalPage, L"CFInstanceRPCInternal");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeSafari_CFInstanceRPCInternal) {
OptionalBrowserTest(SAFARI, kCFIRPCInternalPage, L"CFInstanceRPCInternal");
}
const wchar_t kCFIDefaultCtorPage[] =
L"files/CFInstance_default_ctor_host.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceDefaultCtor) {
SimpleBrowserTest(IE, kCFIDefaultCtorPage, L"CFInstanceDefaultCtor");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_CFInstanceDefaultCtor) {
SimpleBrowserTest(FIREFOX, kCFIDefaultCtorPage, L"CFInstanceDefaultCtor");
}
const wchar_t kCFInstallBasicTestPage[] = L"files/CFInstall_basic.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallBasic) {
SimpleBrowserTest(IE, kCFInstallBasicTestPage, L"CFInstallBasic");
}
const wchar_t kCFInstallPlaceTestPage[] = L"files/CFInstall_place.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallPlace) {
SimpleBrowserTest(IE, kCFInstallPlaceTestPage, L"CFInstallPlace");
}
const wchar_t kCFInstallOverlayTestPage[] = L"files/CFInstall_overlay.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallOverlay) {
SimpleBrowserTest(IE, kCFInstallOverlayTestPage, L"CFInstallOverlay");
}
const wchar_t kCFInstallDismissTestPage[] = L"files/CFInstall_dismiss.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallDismiss) {
SimpleBrowserTest(IE, kCFInstallDismissTestPage, L"CFInstallDismiss");
}
const wchar_t kInitializeHiddenPage[] = L"files/initialize_hidden.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_InitializeHidden) {
SimpleBrowserTest(IE, kInitializeHiddenPage, L"InitializeHidden");
}
const wchar_t kFullTabHttpHeaderPage[] = L"files/chrome_frame_http_header.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderBasic) {
SimpleBrowserTest(IE, kFullTabHttpHeaderPage, L"FullTabHttpHeader");
}
const wchar_t kFullTabHttpHeaderPageIFrame[] =
L"files/chrome_frame_http_header_host.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderIFrame) {
SimpleBrowserTest(IE, kFullTabHttpHeaderPageIFrame,
L"FullTabHttpHeaderIFrame");
}
const wchar_t kFullTabHttpHeaderPageFrameset[] =
L"files/chrome_frame_http_header_frameset.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderFrameSet) {
SimpleBrowserTest(IE, kFullTabHttpHeaderPageFrameset,
L"FullTabHttpHeaderFrameset");
}
// Flaky on the build bots. See http://crbug.com/30622
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_InitializeHidden) {
SimpleBrowserTest(FIREFOX, kInitializeHiddenPage, L"InitializeHidden");
}
// Disabled due to a problem with Opera.
// http://b/issue?id=1708275
TEST_F(ChromeFrameTestWithWebServer,
DISABLED_WidgetModeOpera_InitializeHidden) {
OptionalBrowserTest(OPERA, kInitializeHiddenPage, L"InitializeHidden");
}
const wchar_t kInHeadPage[] = L"files/in_head.html";
// Flaky on build bots. See http://crbug.com/37009
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeFF_InHead) {
SimpleBrowserTest(FIREFOX, kInHeadPage, L"InHead");
}
const wchar_t kVersionPage[] = L"files/version.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_Version) {
VersionTest(IE, kVersionPage, L"version");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_Version) {
VersionTest(FIREFOX, kVersionPage, L"version");
}
const wchar_t kEventListenerPage[] = L"files/event_listener.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_EventListener) {
SimpleBrowserTest(IE, kEventListenerPage, L"EventListener");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_EventListener) {
SimpleBrowserTest(FIREFOX, kEventListenerPage, L"EventListener");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_EventListener) {
OptionalBrowserTest(OPERA, kEventListenerPage, L"EventListener");
}
const wchar_t kPrivilegedApisPage[] = L"files/privileged_apis_host.html";
// http://crbug.com/32321
TEST_F(ChromeFrameTestWithWebServer, FLAKY_WidgetModeIE_PrivilegedApis) {
SimpleBrowserTest(IE, kPrivilegedApisPage, L"PrivilegedApis");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeFF_PrivilegedApis) {
SimpleBrowserTest(FIREFOX, kPrivilegedApisPage, L"PrivilegedApis");
}
TEST_F(ChromeFrameTestWithWebServer, WidgetModeOpera_PrivilegedApis) {
OptionalBrowserTest(OPERA, kPrivilegedApisPage, L"PrivilegedApis");
}
const wchar_t kMetaTagPage[] = L"files/meta_tag.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_MetaTag) {
SimpleBrowserTest(IE, kMetaTagPage, L"meta_tag");
}
const wchar_t kCFProtocolPage[] = L"files/cf_protocol.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFProtocol) {
// Temporarily enable gcf: protocol for this test.
SetConfigBool(kEnableGCFProtocol, true);
SimpleBrowserTest(IE, kCFProtocolPage, L"chrome_frame_protocol");
SetConfigBool(kEnableGCFProtocol, false);
}
const wchar_t kPersistentCookieTest[] =
L"files/persistent_cookie_test_page.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_PersistentCookieTest) {
// Temporarily enable gcf: protocol for this test.
SetConfigBool(kEnableGCFProtocol, true);
SimpleBrowserTest(IE, kPersistentCookieTest, L"PersistentCookieTest");
SetConfigBool(kEnableGCFProtocol, false);
}
const wchar_t kNavigateOutPage[] = L"files/navigate_out.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_NavigateOut) {
SimpleBrowserTest(IE, kNavigateOutPage, L"navigate_out");
}
const wchar_t kReferrerMainTest[] = L"files/referrer_main.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_ReferrerTest) {
SimpleBrowserTest(IE, kReferrerMainTest, L"FullTab_ReferrerTest");
}
const wchar_t kSubFrameTestPage[] = L"files/full_tab_sub_frame_main.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_SubFrame) {
SimpleBrowserTest(IE, kSubFrameTestPage, L"sub_frame");
}
const wchar_t kSubIFrameTestPage[] = L"files/full_tab_sub_iframe_main.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_SubIFrame) {
SimpleBrowserTest(IE, kSubIFrameTestPage, L"sub_frame");
}
const wchar_t kXMLHttpRequestTestUrl[] =
L"files/xmlhttprequest_test.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_XHRTest) {
chrome_frame_test::TimedMsgLoop loop;
ASSERT_TRUE(LaunchBrowser(IE, kXMLHttpRequestTestUrl));
loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
chrome_frame_test::CloseAllIEWindows();
ASSERT_TRUE(CheckResultFile(L"FullTab_XMLHttpRequestTest", "OK"));
}
const wchar_t kMultipleCFInstancesTestUrl[] =
L"files/multiple_cf_instances_main.html";
TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_MultipleCFInstances) {
SimpleBrowserTest(IE, kMultipleCFInstancesTestUrl,
L"WidgetMode_MultipleInstancesTest");
}
// TODO(ananta)
// Disabled until I figure out why this does not work on Firefox.
TEST_F(ChromeFrameTestWithWebServer,
DISABLED_WidgetModeFF_MultipleCFInstances) {
SimpleBrowserTest(FIREFOX, kMultipleCFInstancesTestUrl,
L"WidgetMode_MultipleInstancesTest");
}
const wchar_t kXHRAuthHeaderTestUrl[] =
L"files/xmlhttprequest_authorization_header_test.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_XHRAuthHeaderTest) {
chrome_frame_test::TimedMsgLoop loop;
ASSERT_TRUE(LaunchBrowser(IE, kXHRAuthHeaderTestUrl));
loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
chrome_frame_test::CloseAllIEWindows();
ASSERT_TRUE(CheckResultFile(L"FullTabModeIE_XHRAuthHeaderTest", "OK"));
}
const wchar_t kDeleteCookieTest[] =
L"files/fulltab_delete_cookie_test.html";
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_DeleteCookieTest) {
chrome_frame_test::TimedMsgLoop loop;
ASSERT_TRUE(LaunchBrowser(IE, kDeleteCookieTest));
loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
chrome_frame_test::CloseAllIEWindows();
ASSERT_TRUE(CheckResultFile(L"FullTab_DeleteCookieTest", "OK"));
}
const wchar_t kAnchorUrlNavigate[] =
L"files/fulltab_anchor_url_navigate.html#chrome_frame";
// http://code.google.com/p/chromium/issues/detail?id=35341
TEST_F(ChromeFrameTestWithWebServer,
FLAKY_FullTabModeIE_AnchorUrlNavigateTest) {
chrome_frame_test::TimedMsgLoop loop;
ASSERT_TRUE(LaunchBrowser(IE, kAnchorUrlNavigate));
loop.RunFor(kChromeFrameLongNavigationTimeoutInSeconds);
chrome_frame_test::CloseAllIEWindows();
ASSERT_TRUE(CheckResultFile(L"FullTab_AnchorURLNavigateTest", "OK"));
}
// Test whether POST-ing a form from an mshtml page to a CF page will cause
// the request to get reissued. It should not.
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_TestPostReissue) {
if (!MonikerPatchEnabled())
return;
MessageLoopForUI loop; // must come before the server.
// The order of pages in this array is assumed to be mshtml, cf, script.
const wchar_t* kPages[] = {
L"full_tab_post_mshtml.html",
L"full_tab_post_target_cf.html",
L"chrome_frame_tester_helpers.js",
};
SimpleWebServerTest server(46664);
server.PopulateStaticFileList(kPages, arraysize(kPages), GetCFTestFilePath());
ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
loop.MessageLoop::Run();
// Check if the last request to /quit gave us the OK signal.
const test_server::Request& r = server.last_request();
EXPECT_EQ("OK", r.arguments());
if (r.arguments().compare("OK") == 0) {
// Check how many requests we got for the cf page. Also expect it to be
// a POST.
int requests = server.GetRequestCountForPage(kPages[1], "POST");
EXPECT_EQ(1, requests);
}
}
// Test whether following a link from an mshtml page to a CF page will cause
// multiple network requests. It should not.
TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_TestMultipleGet) {
if (!MonikerPatchEnabled())
return;
MessageLoopForUI loop; // must come before the server.
// The order of pages in this array is assumed to be mshtml, cf, script.
const wchar_t* kPages[] = {
L"full_tab_get_mshtml.html",
L"full_tab_get_target_cf.html",
L"chrome_frame_tester_helpers.js",
};
SimpleWebServerTest server(46664);
server.PopulateStaticFileList(kPages, arraysize(kPages), GetCFTestFilePath());
ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
loop.MessageLoop::Run();
// Check if the last request to /quit gave us the OK signal.
const test_server::Request& r = server.last_request();
EXPECT_EQ("OK", r.arguments());
if (r.arguments().compare("OK") == 0) {
// Check how many requests we got for the cf page and check that it was
// a GET.
int requests = server.GetRequestCountForPage(kPages[1], "GET");
EXPECT_EQ(1, requests);
}
}