| Index: chrome_frame/test/test_with_web_server.cc
|
| diff --git a/chrome_frame/test/test_with_web_server.cc b/chrome_frame/test/test_with_web_server.cc
|
| deleted file mode 100644
|
| index d979dd9ee33d7203881ec96fac031ab14bc2f264..0000000000000000000000000000000000000000
|
| --- a/chrome_frame/test/test_with_web_server.cc
|
| +++ /dev/null
|
| @@ -1,1101 +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 "chrome_frame/test/test_with_web_server.h"
|
| -
|
| -#include "base/base_paths.h"
|
| -#include "base/file_util.h"
|
| -#include "base/file_version_info.h"
|
| -#include "base/files/memory_mapped_file.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/path_service.h"
|
| -#include "base/process/kill.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/test/test_timeouts.h"
|
| -#include "base/win/windows_version.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/installer/util/helper.h"
|
| -#include "chrome/installer/util/install_util.h"
|
| -#include "chrome/installer/util/product.h"
|
| -#include "chrome_frame/html_utils.h"
|
| -#include "chrome_frame/test/chrome_frame_test_utils.h"
|
| -#include "chrome_frame/test/mock_ie_event_sink_actions.h"
|
| -#include "chrome_frame/test/mock_ie_event_sink_test.h"
|
| -#include "chrome_frame/test/test_scrubber.h"
|
| -#include "chrome_frame/utils.h"
|
| -#include "net/base/mime_util.h"
|
| -#include "net/http/http_util.h"
|
| -#include "net/socket/stream_listen_socket.h"
|
| -
|
| -using chrome_frame_test::kChromeFrameLongNavigationTimeout;
|
| -using chrome_frame_test::kChromeFrameVeryLongNavigationTimeout;
|
| -
|
| -using testing::_;
|
| -using testing::StrCaseEq;
|
| -
|
| -const wchar_t kDocRoot[] = L"chrome_frame\\test\\data";
|
| -
|
| -namespace {
|
| -
|
| -// Helper method for creating the appropriate HTTP response headers.
|
| -std::string CreateHttpHeaders(CFInvocation invocation,
|
| - bool add_no_cache_header,
|
| - const std::string& content_type) {
|
| - std::ostringstream ss;
|
| - ss << "HTTP/1.1 200 OK\r\n"
|
| - << "Connection: close\r\n"
|
| - << "Content-Type: " << content_type << "\r\n";
|
| - if (invocation.type() == CFInvocation::HTTP_HEADER)
|
| - ss << "X-UA-Compatible: chrome=1\r\n";
|
| - if (add_no_cache_header) {
|
| - ss << "Cache-Control: no-cache\r\n";
|
| - ss << "Expires: Tue, 15 Nov 1994 08:12:31 GMT\r\n";
|
| - }
|
| - return ss.str();
|
| -}
|
| -
|
| -std::string GetMockHttpHeaders(const base::FilePath& mock_http_headers_path) {
|
| - std::string headers;
|
| - base::ReadFileToString(mock_http_headers_path, &headers);
|
| - return headers;
|
| -}
|
| -
|
| -class ChromeFrameTestEnvironment: public testing::Environment {
|
| - public:
|
| - virtual ~ChromeFrameTestEnvironment() {}
|
| - virtual void SetUp() OVERRIDE {
|
| - ScopedChromeFrameRegistrar::RegisterDefaults();
|
| - }
|
| -};
|
| -
|
| -::testing::Environment* const chrome_frame_env =
|
| - ::testing::AddGlobalTestEnvironment(new ChromeFrameTestEnvironment);
|
| -
|
| -} // namespace
|
| -
|
| -base::FilePath ChromeFrameTestWithWebServer::test_file_path_;
|
| -base::FilePath ChromeFrameTestWithWebServer::results_dir_;
|
| -base::FilePath ChromeFrameTestWithWebServer::CFInstall_path_;
|
| -base::FilePath ChromeFrameTestWithWebServer::CFInstance_path_;
|
| -base::ScopedTempDir ChromeFrameTestWithWebServer::temp_dir_;
|
| -base::FilePath ChromeFrameTestWithWebServer::chrome_user_data_dir_;
|
| -chrome_frame_test::TimedMsgLoop* ChromeFrameTestWithWebServer::loop_;
|
| -std::string ChromeFrameTestWithWebServer::local_address_;
|
| -testing::StrictMock<MockWebServerListener>*
|
| - ChromeFrameTestWithWebServer::listener_mock_;
|
| -testing::StrictMock<MockWebServer>* ChromeFrameTestWithWebServer::server_mock_;
|
| -
|
| -ChromeFrameTestWithWebServer::ChromeFrameTestWithWebServer() {
|
| -}
|
| -
|
| -// static
|
| -void ChromeFrameTestWithWebServer::SetUpTestCase() {
|
| - base::FilePath chrome_frame_source_path;
|
| - PathService::Get(base::DIR_SOURCE_ROOT, &chrome_frame_source_path);
|
| - chrome_frame_source_path = chrome_frame_source_path.Append(
|
| - FILE_PATH_LITERAL("chrome_frame"));
|
| -
|
| - test_file_path_ = chrome_frame_source_path
|
| - .Append(FILE_PATH_LITERAL("test"))
|
| - .Append(FILE_PATH_LITERAL("data"));
|
| -
|
| - results_dir_ = chrome_frame_test::GetTestDataFolder().AppendASCII("dump");
|
| -
|
| - // Copy the CFInstance.js and CFInstall.js files from src\chrome_frame to
|
| - // src\chrome_frame\test\data.
|
| - base::FilePath CFInstance_src_path;
|
| - base::FilePath CFInstall_src_path;
|
| -
|
| - CFInstance_src_path = chrome_frame_source_path.AppendASCII("CFInstance.js");
|
| - CFInstance_path_ = test_file_path_.AppendASCII("CFInstance.js");
|
| -
|
| - ASSERT_TRUE(base::CopyFile(CFInstance_src_path, CFInstance_path_));
|
| -
|
| - CFInstall_src_path = chrome_frame_source_path.AppendASCII("CFInstall.js");
|
| - CFInstall_path_ = test_file_path_.AppendASCII("CFInstall.js");
|
| -
|
| - ASSERT_TRUE(base::CopyFile(CFInstall_src_path, CFInstall_path_));
|
| -
|
| - loop_ = new chrome_frame_test::TimedMsgLoop();
|
| - loop_->set_snapshot_on_timeout(true);
|
| - local_address_ = chrome_frame_test::GetLocalIPv4Address();
|
| - listener_mock_ = new testing::StrictMock<MockWebServerListener>();
|
| - server_mock_ = new testing::StrictMock<MockWebServer>(
|
| - 1337, base::ASCIIToWide(local_address_),
|
| - chrome_frame_test::GetTestDataFolder());
|
| - server_mock_->set_listener(listener_mock_);
|
| -}
|
| -
|
| -// static
|
| -void ChromeFrameTestWithWebServer::TearDownTestCase() {
|
| - delete server_mock_;
|
| - server_mock_ = NULL;
|
| - delete listener_mock_;
|
| - listener_mock_ = NULL;
|
| - local_address_.clear();
|
| - delete loop_;
|
| - loop_ = NULL;
|
| - base::DeleteFile(CFInstall_path_, false);
|
| - base::DeleteFile(CFInstance_path_, false);
|
| - if (temp_dir_.IsValid())
|
| - EXPECT_TRUE(temp_dir_.Delete());
|
| -}
|
| -
|
| -// static
|
| -const base::FilePath&
|
| -ChromeFrameTestWithWebServer::GetChromeUserDataDirectory() {
|
| - if (!temp_dir_.IsValid()) {
|
| - EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| - chrome_user_data_dir_ = temp_dir_.path().AppendASCII("User Data");
|
| - }
|
| - return chrome_user_data_dir_;
|
| -}
|
| -
|
| -void ChromeFrameTestWithWebServer::SetUp() {
|
| - // Make sure that we are not accidentally enabling gcf protocol.
|
| - SetConfigBool(kAllowUnsafeURLs, false);
|
| -
|
| - server_mock().ClearResults();
|
| - server_mock().ExpectAndServeAnyRequests(CFInvocation(CFInvocation::NONE));
|
| - server_mock().set_expected_result("OK");
|
| -}
|
| -
|
| -void ChromeFrameTestWithWebServer::TearDown() {
|
| - CloseBrowser();
|
| - loop().RunUntilIdle();
|
| - testing::Mock::VerifyAndClear(listener_mock_);
|
| - testing::Mock::VerifyAndClear(server_mock_);
|
| -}
|
| -
|
| -bool ChromeFrameTestWithWebServer::LaunchBrowser(BrowserKind browser,
|
| - const wchar_t* page) {
|
| - std::wstring url = page;
|
| -
|
| - // We should resolve the URL only if it is a relative url.
|
| - GURL parsed_url(base::WideToUTF8(page));
|
| - if (!parsed_url.has_scheme()) {
|
| - url = server_mock().Resolve(page);
|
| - }
|
| -
|
| - browser_ = browser;
|
| - if (browser == IE) {
|
| - browser_handle_.Set(chrome_frame_test::LaunchIE(url));
|
| - } else if (browser == CHROME) {
|
| - const base::FilePath& user_data_dir = GetChromeUserDataDirectory();
|
| - chrome_frame_test::OverrideDataDirectoryForThisTest(user_data_dir.value());
|
| - browser_handle_.Set(chrome_frame_test::LaunchChrome(url, user_data_dir));
|
| - } 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 {
|
| - LOG(ERROR) << "WaitForSingleObject returned " << wait;
|
| - }
|
| - } else {
|
| - LOG(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(
|
| - base::TimeDelta duration) {
|
| - loop().RunFor(duration);
|
| - return !loop().WasTimedOut();
|
| -}
|
| -
|
| -bool ChromeFrameTestWithWebServer::WaitForOnLoad(int milliseconds) {
|
| - return false;
|
| -}
|
| -
|
| -const wchar_t kPostedResultSubstring[] = L"/writefile/";
|
| -
|
| -void ChromeFrameTestWithWebServer::SimpleBrowserTestExpectedResult(
|
| - BrowserKind browser, const wchar_t* page, const char* result) {
|
| - if (browser == IE && chrome_frame_test::GetInstalledIEVersion() >= IE_9) {
|
| - LOG(INFO) << "Temporarily disabling IE9 web server tests. "
|
| - "See http://crbug.com/143699";
|
| - return;
|
| - }
|
| -
|
| - int tries = 0;
|
| - ExpectAndHandlePostedResult();
|
| - // Retry tests that timeout once; see http://crbug.com/96449.
|
| - do {
|
| - // NOTE: Failed ASSERTs cause this function to exit immediately.
|
| - // Don't take a snapshot on the first try.
|
| - loop().set_snapshot_on_timeout(tries != 0);
|
| - ASSERT_TRUE(LaunchBrowser(browser, page));
|
| - if (WaitForTestToComplete(TestTimeouts::action_max_timeout())) {
|
| - // The test exited without timing out. Confirm that the expected response
|
| - // was posted and return.
|
| - ASSERT_EQ(result, server_mock().posted_result());
|
| - break;
|
| - }
|
| - ASSERT_EQ(std::string(), server_mock().posted_result())
|
| - << "Test timed out yet provided a result.";
|
| - ASSERT_EQ(0, tries++) << "Failing test due to two timeouts.";
|
| - // Close the browser and try a second time.
|
| - CloseBrowser();
|
| - LOG(ERROR) << "Retrying test once since it timed out.";
|
| - } while (true);
|
| - loop().set_snapshot_on_timeout(true);
|
| -}
|
| -
|
| -void ChromeFrameTestWithWebServer::SimpleBrowserTest(BrowserKind browser,
|
| - const wchar_t* page) {
|
| - SimpleBrowserTestExpectedResult(browser, page, "OK");
|
| -}
|
| -
|
| -void ChromeFrameTestWithWebServer::ExpectAndHandlePostedResult() {
|
| - EXPECT_CALL(listener_mock(), OnExpectedResponse())
|
| - .WillRepeatedly(QUIT_LOOP_SOON(loop(),
|
| - base::TimeDelta::FromMilliseconds(100)));
|
| - server_mock().ExpectAndHandlePostedResult(CFInvocation(CFInvocation::NONE),
|
| - kPostedResultSubstring);
|
| -}
|
| -
|
| -void ChromeFrameTestWithWebServer::VersionTest(BrowserKind browser,
|
| - const wchar_t* page) {
|
| - base::FilePath plugin_path;
|
| - PathService::Get(base::DIR_MODULE, &plugin_path);
|
| - plugin_path = plugin_path.Append(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) {
|
| - BrowserDistribution* dist = BrowserDistribution::GetDistribution();
|
| - Version ver_system;
|
| - InstallUtil::GetChromeVersion(dist, true, &ver_system);
|
| - Version ver_user;
|
| - InstallUtil::GetChromeVersion(dist, false, &ver_system);
|
| - ASSERT_TRUE(ver_system.IsValid() || ver_user.IsValid());
|
| -
|
| - bool system_install = ver_system.IsValid();
|
| - base::FilePath cf_dll_path(installer::GetChromeInstallPath(system_install, dist));
|
| - cf_dll_path = cf_dll_path.Append(base::UTF8ToWide(
|
| - ver_system.IsValid() ? ver_system.GetString() : ver_user.GetString()));
|
| - cf_dll_path = cf_dll_path.Append(kChromeFrameDllName);
|
| - version_info = FileVersionInfo::CreateFileVersionInfo(cf_dll_path);
|
| - if (version_info)
|
| - version = version_info->product_version();
|
| - }
|
| -
|
| - server_mock().set_expected_result(base::WideToUTF8(version));
|
| -
|
| - EXPECT_TRUE(version_info);
|
| - EXPECT_FALSE(version.empty());
|
| -
|
| - SimpleBrowserTestExpectedResult(browser, page, WideToASCII(version).c_str());
|
| -}
|
| -
|
| -// MockWebServer methods
|
| -void MockWebServer::ExpectAndServeRequest(CFInvocation invocation,
|
| - const std::wstring& url) {
|
| - ExpectAndServeRequestWithCardinality(invocation, url, testing::Exactly(1));
|
| -}
|
| -
|
| -void MockWebServer::ExpectAndServeRequestWithCardinality(
|
| - CFInvocation invocation, const std::wstring& url,
|
| - testing::Cardinality cardinality) {
|
| - EXPECT_CALL(*this, Get(_, chrome_frame_test::UrlPathEq(url), _))
|
| - .Times(cardinality)
|
| - .WillRepeatedly(SendResponse(this, invocation));
|
| -}
|
| -
|
| -void MockWebServer::ExpectAndServeRequestAllowCache(CFInvocation invocation,
|
| - const std::wstring &url) {
|
| - EXPECT_CALL(*this, Get(_, chrome_frame_test::UrlPathEq(url), _))
|
| - .WillOnce(SendResponse(this, invocation));
|
| -}
|
| -
|
| -void MockWebServer::ExpectAndServeRequestAnyNumberTimes(
|
| - CFInvocation invocation, const std::wstring& path_prefix) {
|
| - EXPECT_CALL(*this, Get(_, testing::StartsWith(path_prefix), _))
|
| - .WillRepeatedly(SendResponse(this, invocation));
|
| -}
|
| -
|
| -void MockWebServer::ExpectAndHandlePostedResult(
|
| - CFInvocation invocation, const std::wstring& post_suffix) {
|
| - EXPECT_CALL(*this, Post(_, testing::HasSubstr(post_suffix), _))
|
| - .WillRepeatedly(HandlePostedResponseHelper(this, invocation));
|
| -}
|
| -
|
| -void MockWebServer::HandlePostedResponse(
|
| - test_server::ConfigurableConnection* connection,
|
| - const test_server::Request& request) {
|
| - posted_result_ = request.content();
|
| - if (listener_ && posted_result_ == expected_result_)
|
| - listener_->OnExpectedResponse();
|
| - connection->Send("HTTP/1.1 200 OK\r\n", "");
|
| -}
|
| -
|
| -void MockWebServer::SendResponseHelper(
|
| - test_server::ConfigurableConnection* connection,
|
| - const std::wstring& request_uri,
|
| - const test_server::Request& request,
|
| - CFInvocation invocation,
|
| - bool add_no_cache_header) {
|
| - static const wchar_t kEchoHeader[] = L"/echoheader?";
|
| - if (request_uri.find(kEchoHeader) != std::wstring::npos) {
|
| - std::wstring header = request_uri.substr(
|
| - wcslen(kEchoHeader),
|
| - request_uri.length() - wcslen(kEchoHeader));
|
| -
|
| - std::string header_value = http_utils::GetHttpHeaderFromHeaderList(
|
| - base::WideToUTF8(header), request.headers());
|
| - connection->Send(header_value, "");
|
| - return;
|
| - }
|
| - // Convert |request_uri| to a path.
|
| - std::wstring path = request_uri;
|
| - size_t query_index = request_uri.find(L"?");
|
| - if (query_index != std::string::npos) {
|
| - path = path.erase(query_index);
|
| - }
|
| - base::FilePath file_path = root_dir_;
|
| - if (path.size())
|
| - file_path = file_path.Append(path.substr(1)); // remove first '/'
|
| -
|
| - std::string headers, body;
|
| - std::string content_type;
|
| - if (base::PathExists(file_path) &&
|
| - !base::DirectoryExists(file_path)) {
|
| - base::FilePath mock_http_headers(file_path.value() + L".mock-http-headers");
|
| - if (base::PathExists(mock_http_headers)) {
|
| - headers = GetMockHttpHeaders(mock_http_headers);
|
| - content_type = http_utils::GetHttpHeaderFromHeaderList("Content-type",
|
| - headers);
|
| - } else {
|
| - EXPECT_TRUE(net::GetMimeTypeFromFile(file_path, &content_type));
|
| - VLOG(1) << "Going to send file (" << base::WideToUTF8(file_path.value())
|
| - << ") with content type (" << content_type << ")";
|
| - headers = CreateHttpHeaders(invocation, add_no_cache_header,
|
| - content_type);
|
| - }
|
| -
|
| - EXPECT_FALSE(headers.empty());
|
| -
|
| - EXPECT_TRUE(base::ReadFileToString(file_path, &body))
|
| - << "Could not read file ("
|
| - << base::WideToUTF8(file_path.value()) << ")";
|
| - if (invocation.type() == CFInvocation::META_TAG &&
|
| - StartsWithASCII(content_type, "text/html", false)) {
|
| - EXPECT_TRUE(chrome_frame_test::AddCFMetaTag(&body)) << "Could not add "
|
| - << "meta tag to HTML file.";
|
| - }
|
| - } else {
|
| - VLOG(1) << "Going to send 404 for non-existent file ("
|
| - << base::WideToUTF8(file_path.value()) << ")";
|
| - headers = "HTTP/1.1 404 Not Found";
|
| - body = "";
|
| - }
|
| - connection->Send(headers, body);
|
| -}
|
| -
|
| -const wchar_t kPostMessageBasicPage[] = L"postmessage_basic_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_PostMessageBasic) {
|
| - SimpleBrowserTest(IE, kPostMessageBasicPage);
|
| -}
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabIE_MIMEFilterBasic) {
|
| - const wchar_t kMIMEFilterBasicPage[] =
|
| - L"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);
|
| -}
|
| -
|
| -// Times out: http://crbug.com/163728
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_Resize) {
|
| - SimpleBrowserTest(IE, L"chrome_frame_resize.html");
|
| -}
|
| -
|
| -const wchar_t kNavigateURLAbsolutePage[] =
|
| - L"navigateurl_absolute_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_NavigateURLAbsolute) {
|
| - SimpleBrowserTest(IE, kNavigateURLAbsolutePage);
|
| -}
|
| -
|
| -const wchar_t kNavigateURLRelativePage[] =
|
| - L"navigateurl_relative_host.html";
|
| -
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer,
|
| - DISABLED_WidgetModeIE_NavigateURLRelative) {
|
| - SimpleBrowserTest(IE, kNavigateURLRelativePage);
|
| -}
|
| -
|
| -const wchar_t kNavigateSimpleObjectFocus[] = L"simple_object_focus.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_ObjectFocus) {
|
| - SimpleBrowserTest(IE, kNavigateSimpleObjectFocus);
|
| -}
|
| -
|
| -const wchar_t kiframeBasicPage[] = L"iframe_basic_host.html";
|
| -
|
| -
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_iframeBasic) {
|
| - SimpleBrowserTest(IE, kiframeBasicPage);
|
| -}
|
| -
|
| -const wchar_t kSrcPropertyTestPage[] = L"src_property_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_SrcProperty) {
|
| - SimpleBrowserTest(IE, kSrcPropertyTestPage);
|
| -}
|
| -
|
| -const wchar_t kCFInstanceBasicTestPage[] = L"CFInstance_basic_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceBasic) {
|
| - SimpleBrowserTest(IE, kCFInstanceBasicTestPage);
|
| -}
|
| -
|
| -const wchar_t kCFISingletonPage[] = L"CFInstance_singleton_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceSingleton) {
|
| - SimpleBrowserTest(IE, kCFISingletonPage);
|
| -}
|
| -
|
| -const wchar_t kCFIDelayPage[] = L"CFInstance_delay_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceDelay) {
|
| - SimpleBrowserTest(IE, kCFIDelayPage);
|
| -}
|
| -
|
| -const wchar_t kCFIFallbackPage[] = L"CFInstance_fallback_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceFallback) {
|
| - SimpleBrowserTest(IE, kCFIFallbackPage);
|
| -}
|
| -
|
| -const wchar_t kCFINoSrcPage[] = L"CFInstance_no_src_host.html";
|
| -
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_CFInstanceNoSrc) {
|
| - SimpleBrowserTest(IE, kCFINoSrcPage);
|
| -}
|
| -
|
| -const wchar_t kCFIIfrOnLoadPage[] = L"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);
|
| -}
|
| -
|
| -const wchar_t kCFIZeroSizePage[] = L"CFInstance_zero_size_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceZeroSize) {
|
| - SimpleBrowserTest(IE, kCFIZeroSizePage);
|
| -}
|
| -
|
| -const wchar_t kCFIIfrPostPage[] = L"CFInstance_iframe_post_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceIfrPost) {
|
| - SimpleBrowserTest(IE, kCFIIfrPostPage);
|
| -}
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceIfrPost) {
|
| - SimpleBrowserTest(CHROME, kCFIIfrPostPage);
|
| -}
|
| -
|
| -const wchar_t kCFIPostPage[] = L"CFInstance_post_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstancePost) {
|
| - if (chrome_frame_test::GetInstalledIEVersion() == IE_9) {
|
| - LOG(INFO) << "Not running test on Vista/Windows 7 with IE9";
|
| - return;
|
| - }
|
| - SimpleBrowserTest(IE, kCFIPostPage);
|
| -}
|
| -
|
| -// This test randomly fails on the ChromeFrame builder.
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstancePost) {
|
| - SimpleBrowserTest(CHROME, kCFIPostPage);
|
| -}
|
| -
|
| -const wchar_t kCFIRPCPage[] = L"CFInstance_rpc_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceRPC) {
|
| - if (chrome_frame_test::GetInstalledIEVersion() == IE_9) {
|
| - LOG(INFO) << "Not running test on Vista/Windows 7 with IE9";
|
| - return;
|
| - }
|
| - SimpleBrowserTest(IE, kCFIRPCPage);
|
| -}
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceRPC) {
|
| - SimpleBrowserTest(CHROME, kCFIRPCPage);
|
| -}
|
| -
|
| -const wchar_t kCFIRPCInternalPage[] =
|
| - L"CFInstance_rpc_internal_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceRPCInternal) {
|
| - if (chrome_frame_test::GetInstalledIEVersion() == IE_9) {
|
| - LOG(INFO) << "Not running test on Vista/Windows 7 with IE9";
|
| - return;
|
| - }
|
| - SimpleBrowserTest(IE, kCFIRPCInternalPage);
|
| -}
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceRPCInternal) {
|
| - SimpleBrowserTest(CHROME, kCFIRPCInternalPage);
|
| -}
|
| -
|
| -const wchar_t kCFIDefaultCtorPage[] =
|
| - L"CFInstance_default_ctor_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceDefaultCtor) {
|
| - SimpleBrowserTest(IE, kCFIDefaultCtorPage);
|
| -}
|
| -
|
| -const wchar_t kCFInstallBasicTestPage[] = L"CFInstall_basic.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallBasic) {
|
| - SimpleBrowserTest(IE, kCFInstallBasicTestPage);
|
| -}
|
| -
|
| -const wchar_t kCFInstallPlaceTestPage[] = L"CFInstall_place.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallPlace) {
|
| - SimpleBrowserTest(IE, kCFInstallPlaceTestPage);
|
| -}
|
| -
|
| -const wchar_t kCFInstallOverlayTestPage[] = L"CFInstall_overlay.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallOverlay) {
|
| - SimpleBrowserTest(IE, kCFInstallOverlayTestPage);
|
| -}
|
| -
|
| -const wchar_t kCFInstallDismissTestPage[] = L"CFInstall_dismiss.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallDismiss) {
|
| - SimpleBrowserTest(IE, kCFInstallDismissTestPage);
|
| -}
|
| -
|
| -const wchar_t kInitializeHiddenPage[] = L"initialize_hidden.html";
|
| -// Times out: http://crbug.com/163728
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_InitializeHidden) {
|
| - SimpleBrowserTest(IE, kInitializeHiddenPage);
|
| -}
|
| -
|
| -const wchar_t kFullTabHttpHeaderPage[] = L"chrome_frame_http_header.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderBasic) {
|
| - SimpleBrowserTest(IE, kFullTabHttpHeaderPage);
|
| -}
|
| -
|
| -const wchar_t kFullTabHttpHeaderPageIFrame[] =
|
| - L"chrome_frame_http_header_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderIFrame) {
|
| - SimpleBrowserTest(IE, kFullTabHttpHeaderPageIFrame);
|
| -}
|
| -
|
| -const wchar_t kFullTabHttpHeaderPageFrameset[] =
|
| - L"chrome_frame_http_header_frameset.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderFrameSet) {
|
| - SimpleBrowserTest(IE, kFullTabHttpHeaderPageFrameset);
|
| -}
|
| -
|
| -const wchar_t kVersionPage[] = L"version.html";
|
| -
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_Version) {
|
| - VersionTest(IE, kVersionPage);
|
| -}
|
| -
|
| -const wchar_t kEventListenerPage[] = L"event_listener.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_EventListener) {
|
| - SimpleBrowserTest(IE, kEventListenerPage);
|
| -}
|
| -
|
| -const wchar_t kPrivilegedApisPage[] = L"privileged_apis_host.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_PrivilegedApis) {
|
| - SimpleBrowserTest(IE, kPrivilegedApisPage);
|
| -}
|
| -
|
| -const wchar_t kMetaTagPage[] = L"meta_tag.html";
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_MetaTag) {
|
| - SimpleBrowserTest(IE, kMetaTagPage);
|
| -}
|
| -
|
| -// Times out: http://crbug.com/163728
|
| -const wchar_t kCFProtocolPage[] = L"cf_protocol.html";
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_CFProtocol) {
|
| - // Temporarily enable gcf: protocol for this test.
|
| - SetConfigBool(kAllowUnsafeURLs, true);
|
| - SimpleBrowserTest(IE, kCFProtocolPage);
|
| - SetConfigBool(kAllowUnsafeURLs, false);
|
| -}
|
| -
|
| -const wchar_t kPersistentCookieTest[] =
|
| - L"persistent_cookie_test_page.html";
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_PersistentCookieTest) {
|
| - SimpleBrowserTest(IE, kPersistentCookieTest);
|
| -}
|
| -
|
| -const wchar_t kNavigateOutPage[] = L"navigate_out.html";
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_NavigateOut) {
|
| - SimpleBrowserTest(IE, kNavigateOutPage);
|
| -}
|
| -
|
| -const wchar_t kReferrerMainTest[] = L"referrer_main.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_ReferrerTest) {
|
| - SimpleBrowserTest(IE, kReferrerMainTest);
|
| -}
|
| -
|
| -// Times out: http://crbug.com/163728
|
| -const wchar_t kSubFrameTestPage[] = L"full_tab_sub_frame_main.html";
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_SubFrame) {
|
| - SimpleBrowserTest(IE, kSubFrameTestPage);
|
| -}
|
| -
|
| -const wchar_t kSubIFrameTestPage[] = L"full_tab_sub_iframe_main.html";
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_SubIFrame) {
|
| - SimpleBrowserTest(IE, kSubIFrameTestPage);
|
| -}
|
| -
|
| -const wchar_t kXMLHttpRequestTestUrl[] =
|
| - L"xmlhttprequest_test.html";
|
| -
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_XHRTest) {
|
| - SimpleBrowserTest(IE, kXMLHttpRequestTestUrl);
|
| -}
|
| -
|
| -const wchar_t kInstallFlowTestUrl[] =
|
| - L"install_flow_test.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_InstallFlowTest) {
|
| - if (base::win::GetVersion() < base::win::VERSION_VISTA) {
|
| - ScopedChromeFrameRegistrar::UnregisterAtPath(
|
| - GetChromeFrameBuildPath().value(),
|
| - chrome_frame_test::GetTestBedType());
|
| -
|
| - ASSERT_TRUE(LaunchBrowser(IE, kInstallFlowTestUrl));
|
| -
|
| - loop().RunFor(kChromeFrameLongNavigationTimeout);
|
| -
|
| - ScopedChromeFrameRegistrar::RegisterAtPath(
|
| - GetChromeFrameBuildPath().value(),
|
| - chrome_frame_test::GetTestBedType());
|
| -
|
| - ExpectAndHandlePostedResult();
|
| - loop().RunFor(kChromeFrameLongNavigationTimeout);
|
| -
|
| - chrome_frame_test::CloseAllIEWindows();
|
| - ASSERT_EQ("OK", server_mock().posted_result());
|
| - }
|
| -}
|
| -
|
| -const wchar_t kMultipleCFInstancesTestUrl[] =
|
| - L"multiple_cf_instances_main.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_MultipleCFInstances) {
|
| - SimpleBrowserTest(IE, kMultipleCFInstancesTestUrl);
|
| -}
|
| -
|
| -const wchar_t kXHRHeaderTestUrl[] =
|
| - L"xmlhttprequest_header_test.html";
|
| -
|
| -// Marking as flaky since it occasionally times out. crbug.com/127395.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_XHRHeaderTest) {
|
| - SimpleBrowserTest(IE, kXHRHeaderTestUrl);
|
| -}
|
| -
|
| -const wchar_t kDeleteCookieTest[] =
|
| - L"fulltab_delete_cookie_test.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_DeleteCookieTest) {
|
| - SimpleBrowserTest(IE, kDeleteCookieTest);
|
| -}
|
| -
|
| -const wchar_t kAnchorUrlNavigate[] =
|
| - L"fulltab_anchor_url_navigate.html#chrome_frame";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_AnchorUrlNavigateTest) {
|
| - SimpleBrowserTest(IE, kAnchorUrlNavigate);
|
| -}
|
| -
|
| -// Test whether POST-ing a form from an mshtml page to a CF page will cause
|
| -// the request to get reissued. It should not.
|
| -// https://code.google.com/p/chromium/issues/detail?id=143699
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_TestPostReissue) {
|
| - // 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(local_address_, 46664);
|
| - server.PopulateStaticFileListT<test_server::FileResponse>(kPages,
|
| - arraysize(kPages), GetCFTestFilePath());
|
| -
|
| - ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
|
| -
|
| - loop().RunFor(kChromeFrameLongNavigationTimeout);
|
| -
|
| - const test_server::Request* request = NULL;
|
| - server.FindRequest("/quit?OK", &request);
|
| - ASSERT_TRUE(request != NULL);
|
| - EXPECT_EQ("OK", request->arguments());
|
| -
|
| - if (request->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.
|
| -// Flaky, crbug.com/160497.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_TestMultipleGet) {
|
| - // 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(local_address_, 46664);
|
| -
|
| - server.PopulateStaticFileListT<test_server::FileResponse>(kPages,
|
| - arraysize(kPages), GetCFTestFilePath());
|
| -
|
| - ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
|
| -
|
| - loop().RunFor(kChromeFrameVeryLongNavigationTimeout);
|
| -
|
| - const test_server::Request* request = NULL;
|
| - server.FindRequest("/quit?OK", &request);
|
| - ASSERT_TRUE(request != NULL);
|
| - EXPECT_EQ("OK", request->arguments());
|
| -
|
| - if (request->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);
|
| - }
|
| -}
|
| -
|
| -const wchar_t kSetCookieTest[] =
|
| - L"fulltab_set_cookie_test.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_SetCookieTest) {
|
| - SimpleBrowserTest(IE, kSetCookieTest);
|
| -}
|
| -
|
| -const wchar_t kXHRConditionalHeaderTestUrl[] =
|
| - L"xmlhttprequest_conditional_header_test.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_XHRConditionalHeaderTest) {
|
| - SimpleBrowserTest(IE, kXHRConditionalHeaderTestUrl);
|
| -}
|
| -
|
| -const wchar_t kWindowCloseTestUrl[] =
|
| - L"window_close.html";
|
| -
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_WindowClose) {
|
| - SimpleBrowserTest(IE, kWindowCloseTestUrl);
|
| -}
|
| -
|
| -std::string GetHeaderValue(const std::string& headers,
|
| - const char* header_name) {
|
| - net::HttpUtil::HeadersIterator it(headers.begin(), headers.end(),
|
| - "\r\n");
|
| - while (it.GetNext()) {
|
| - if (lstrcmpiA(it.name().c_str(), header_name) == 0) {
|
| - return it.values();
|
| - }
|
| - }
|
| - return "";
|
| -}
|
| -
|
| -// Specialized implementation of test_server::FileResponse that supports
|
| -// adding the request's User-Agent header to the returned document.
|
| -// The class also supports $request_id$ which will be replaced with an
|
| -// id that's incremented each time the response is sent over a socket.
|
| -class UaTemplateFileResponse : public test_server::FileResponse {
|
| - public:
|
| - typedef test_server::FileResponse SuperClass;
|
| -
|
| - UaTemplateFileResponse(const char* request_path,
|
| - const base::FilePath& file_path)
|
| - : test_server::FileResponse(request_path, file_path), request_id_(0) {
|
| - }
|
| -
|
| - virtual bool Matches(const test_server::Request& r) const {
|
| - bool ret = SuperClass::Matches(r);
|
| - if (ret)
|
| - ua_ = GetHeaderValue(r.headers(), "User-Agent");
|
| - return ret;
|
| - }
|
| -
|
| - virtual size_t ContentLength() const {
|
| - const char kRequestIdTemplate[] = "$request_id$";
|
| - const char kUserAgentTemplate[] = "$UA$";
|
| -
|
| - size_t length = SuperClass::ContentLength();
|
| - DCHECK(length);
|
| - content_.assign(reinterpret_cast<const char*>(file_->data()),
|
| - file_->length());
|
| - size_t i = content_.find(kUserAgentTemplate);
|
| - if (i != std::string::npos)
|
| - content_.replace(i, arraysize(kUserAgentTemplate) - 1, ua_);
|
| - i = content_.find(kRequestIdTemplate);
|
| - if (i != std::string::npos) {
|
| - content_.replace(i, arraysize(kRequestIdTemplate) - 1,
|
| - base::StringPrintf("%i", request_id_));
|
| - }
|
| - return content_.length();
|
| - }
|
| -
|
| - virtual void WriteContents(net::StreamListenSocket* socket) const {
|
| - DCHECK(content_.length());
|
| - socket->Send(content_.c_str(), content_.length(), false);
|
| - request_id_++;
|
| - }
|
| -
|
| - protected:
|
| - mutable std::string ua_;
|
| - mutable std::string content_;
|
| - mutable int request_id_;
|
| -};
|
| -
|
| -// This test simulates a URL that on first request returns a document
|
| -// that should be rendered in mshtml, then pops up a sign-in page that
|
| -// after signing in, refreshes the original page that should then return
|
| -// a page that needs to be rendered in GCF.
|
| -//
|
| -// This test currently fails because GCF does not add the chromeframe header
|
| -// to requests that mshtml initiates via IInternetSession::CreateBinding.
|
| -TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_RefreshMshtmlTest) {
|
| - const wchar_t* kPages[] = {
|
| - L"mshtml_refresh_test.html",
|
| - L"mshtml_refresh_test_popup.html",
|
| - };
|
| -
|
| - SimpleWebServerTest server(local_address_, 46664);
|
| - server.PopulateStaticFileListT<UaTemplateFileResponse>(kPages,
|
| - arraysize(kPages), GetCFTestFilePath());
|
| -
|
| - ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str()));
|
| -
|
| - loop().RunFor(kChromeFrameLongNavigationTimeout);
|
| -
|
| - test_server::SimpleWebServer* ws = server.web_server();
|
| - const test_server::ConnectionList& connections = ws->connections();
|
| - test_server::ConnectionList::const_iterator it = connections.begin();
|
| - int requests_for_first_page = 0;
|
| - for (; it != connections.end(); ++it) {
|
| - test_server::Connection* c = (*it);
|
| - const test_server::Request& r = c->request();
|
| - if (!r.path().empty() &&
|
| - base::ASCIIToWide(r.path().substr(1)).compare(kPages[0]) == 0) {
|
| - requests_for_first_page++;
|
| - std::string ua(GetHeaderValue(r.headers(), "User-Agent"));
|
| - EXPECT_NE(std::string::npos, ua.find("chromeframe"));
|
| - }
|
| - }
|
| - EXPECT_GT(requests_for_first_page, 1);
|
| -}
|
| -
|
| -// See bug 36694 for details. http://crbug.com/36694
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_TestDownloadFromForm) {
|
| - chrome_frame_test::MockWindowObserver win_observer_mock;
|
| - win_observer_mock.WatchWindow("File Download", "");
|
| - win_observer_mock.WatchWindow("View Downloads*", "");
|
| -
|
| - // The content of our HTML test page. This will be returned whenever
|
| - // we reply to a GET request.
|
| - static const char kHtml[] =
|
| - "<html><head>\n"
|
| - "<title>ChromeFrame Form Download Test</title>\n"
|
| - // To see how this test runs with only IE (no CF in the picture), comment
|
| - // out this meta tag. The outcome of the test should be identical.
|
| - "<meta http-equiv=\"X-UA-Compatible\" content=\"chrome=1\" />\n"
|
| - "</head>\n"
|
| - "<script language=\"javascript\">\n"
|
| - "function SubmitForm() {\n"
|
| - " var form = document.forms['myform'];\n"
|
| - " form.action = document.location;\n"
|
| - " form.submit();\n"
|
| - " return true;\n"
|
| - "}\n"
|
| - "</script>\n"
|
| - "<body onload=\"SubmitForm();\">\n"
|
| - "<form method=\"post\" action=\"foo.html\" id=\"myform\">\n"
|
| - " <input type=\"hidden\" name=\"Field1\" value=\"myvalue\" />\n"
|
| - " <input type=\"button\" name=\"btn\" value=\"Test Download\" "
|
| - "onclick=\"return SubmitForm();\" id=\"Button1\"/>\n"
|
| - "</form></body></html>\n";
|
| -
|
| - // The content of our HTML test page. This will be returned whenever
|
| - // we reply to a POST request.
|
| - static const char kText[] =
|
| - "This is a text file (in case you were wondering).";
|
| -
|
| - // This http response class will return an HTML document that contains
|
| - // a form whenever it receives a GET request. Whenever it gets a POST
|
| - // request, it will respond with a text file that needs to be downloaded
|
| - // (content-disposition is "attachment").
|
| - class CustomResponse : public test_server::ResponseForPath {
|
| - public:
|
| - explicit CustomResponse(const char* path)
|
| - : test_server::ResponseForPath(path), is_post_(false),
|
| - post_requests_(0), get_requests_(0) {
|
| - }
|
| -
|
| - virtual bool GetContentType(std::string* content_type) const {
|
| - DCHECK(!is_post_);
|
| - return false;
|
| - }
|
| -
|
| - virtual size_t ContentLength() const {
|
| - DCHECK(!is_post_);
|
| - return sizeof(kHtml) - 1;
|
| - }
|
| -
|
| - virtual bool GetCustomHeaders(std::string* headers) const {
|
| - if (!is_post_)
|
| - return false;
|
| - *headers = base::StringPrintf(
|
| - "HTTP/1.1 200 OK\r\n"
|
| - "Content-Disposition: attachment;filename=\"test.txt\"\r\n"
|
| - "Content-Type: application/text\r\n"
|
| - "Connection: close\r\n"
|
| - "Content-Length: %i\r\n\r\n", sizeof(kText) - 1);
|
| - return true;
|
| - }
|
| -
|
| - virtual bool Matches(const test_server::Request& r) const {
|
| - bool match = __super::Matches(r);
|
| - if (match) {
|
| - is_post_ = LowerCaseEqualsASCII(r.method().c_str(), "post");
|
| - }
|
| - return match;
|
| - }
|
| -
|
| - virtual void WriteContents(net::StreamListenSocket* socket) const {
|
| - if (is_post_) {
|
| - socket->Send(kText, sizeof(kText) - 1, false);
|
| - } else {
|
| - socket->Send(kHtml, sizeof(kHtml) - 1, false);
|
| - }
|
| - }
|
| -
|
| - virtual void IncrementAccessCounter() {
|
| - __super::IncrementAccessCounter();
|
| - if (is_post_) {
|
| - post_requests_++;
|
| - } else {
|
| - get_requests_++;
|
| - }
|
| - }
|
| -
|
| - size_t get_request_count() const {
|
| - return get_requests_;
|
| - }
|
| -
|
| - size_t post_request_count() const {
|
| - return get_requests_;
|
| - }
|
| -
|
| - protected:
|
| - mutable bool is_post_;
|
| - size_t post_requests_;
|
| - size_t get_requests_;
|
| - };
|
| -
|
| - EXPECT_CALL(win_observer_mock, OnWindowOpen(_))
|
| - .Times(testing::AtMost(1))
|
| - .WillOnce(chrome_frame_test::DoCloseWindow());
|
| -
|
| - EXPECT_CALL(win_observer_mock, OnWindowClose(_))
|
| - .Times(testing::AtMost(1))
|
| - .WillOnce(QUIT_LOOP(loop()));
|
| -
|
| - SimpleWebServerTest server(local_address_, 46664);
|
| - CustomResponse* response = new CustomResponse("/form.html");
|
| - server.web_server()->AddResponse(response);
|
| -
|
| - std::wstring url(server.FormatHttpPath(L"form.html"));
|
| -
|
| - ASSERT_TRUE(LaunchBrowser(IE, url.c_str()));
|
| - loop().RunFor(kChromeFrameLongNavigationTimeout);
|
| -
|
| - EXPECT_EQ(1, response->get_request_count());
|
| - EXPECT_EQ(1, response->post_request_count());
|
| -}
|
| -
|
| -// This test loads a large page and ensures that the full page contents are
|
| -// actually loaded via a self-validating HTML page. This is done due to a bug
|
| -// whereby the middle of the response stream would sometimes be truncated when
|
| -// loading a CF document. See http://crbug.com/178421 for details.
|
| -TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_LargePageLoad) {
|
| - const wchar_t kLargePageLoadPage[] =
|
| - L"chrome_frame_large_page.html";
|
| -
|
| - SimpleBrowserTest(IE, kLargePageLoadPage);
|
| -}
|
|
|