test_with_web_server.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/test_with_web_server.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_paths.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/file_util.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_version_info.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/memory_mapped_file.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stringprintf.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_timeouts.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/windows_version.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/helper.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/installer/util/install_util.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/installer/util/product.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/html_utils.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/chrome_frame_test_utils.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/mock_ie_event_sink_actions.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/mock_ie_event_sink_test.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/test_scrubber.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome_frame/utils.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/mime_util.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_util.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/socket/stream_listen_socket.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using chrome_frame_test::kChromeFrameLongNavigationTimeout; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using chrome_frame_test::kChromeFrameVeryLongNavigationTimeout; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::StrCaseEq; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kDocRoot[] = L"chrome_frame\\test\\data"; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper method for creating the appropriate HTTP response headers. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string CreateHttpHeaders(CFInvocation invocation, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool add_no_cache_header, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& content_type) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::ostringstream ss; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ss << "HTTP/1.1 200 OK\r\n" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Connection: close\r\n" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Content-Type: " << content_type << "\r\n"; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (invocation.type() == CFInvocation::HTTP_HEADER) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ss << "X-UA-Compatible: chrome=1\r\n"; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (add_no_cache_header) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ss << "Cache-Control: no-cache\r\n"; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ss << "Expires: Tue, 15 Nov 1994 08:12:31 GMT\r\n"; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ss.str(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string GetMockHttpHeaders(const base::FilePath& mock_http_headers_path) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string headers; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_util::ReadFileToString(mock_http_headers_path, &headers); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return headers; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeFrameTestEnvironment: public testing::Environment { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ChromeFrameTestEnvironment() {} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedChromeFrameRegistrar::RegisterDefaults(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)::testing::Environment* const chrome_frame_env = 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::AddGlobalTestEnvironment(new ChromeFrameTestEnvironment); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeFrameTestWithWebServer::test_file_path_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeFrameTestWithWebServer::results_dir_; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeFrameTestWithWebServer::CFInstall_path_; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeFrameTestWithWebServer::CFInstance_path_; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ScopedTempDir ChromeFrameTestWithWebServer::temp_dir_; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ChromeFrameTestWithWebServer::chrome_user_data_dir_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chrome_frame_test::TimedMsgLoop* ChromeFrameTestWithWebServer::loop_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ChromeFrameTestWithWebServer::local_address_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testing::StrictMock<MockWebServerListener>* 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeFrameTestWithWebServer::listener_mock_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testing::StrictMock<MockWebServer>* ChromeFrameTestWithWebServer::server_mock_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeFrameTestWithWebServer::ChromeFrameTestWithWebServer() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::SetUpTestCase() { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_frame_source_path; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::DIR_SOURCE_ROOT, &chrome_frame_source_path); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_source_path = chrome_frame_source_path.Append( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("chrome_frame")); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_file_path_ = chrome_frame_source_path 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Append(FILE_PATH_LITERAL("test")) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Append(FILE_PATH_LITERAL("data")); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) results_dir_ = chrome_frame_test::GetTestDataFolder().AppendASCII("dump"); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy the CFInstance.js and CFInstall.js files from src\chrome_frame to 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // src\chrome_frame\test\data. 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath CFInstance_src_path; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath CFInstall_src_path; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInstance_src_path = chrome_frame_source_path.AppendASCII("CFInstance.js"); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInstance_path_ = test_file_path_.AppendASCII("CFInstance.js"); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::CopyFile(CFInstance_src_path, CFInstance_path_)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInstall_src_path = chrome_frame_source_path.AppendASCII("CFInstall.js"); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInstall_path_ = test_file_path_.AppendASCII("CFInstall.js"); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::CopyFile(CFInstall_src_path, CFInstall_path_)); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop_ = new chrome_frame_test::TimedMsgLoop(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop_->set_snapshot_on_timeout(true); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local_address_ = chrome_frame_test::GetLocalIPv4Address(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener_mock_ = new testing::StrictMock<MockWebServerListener>(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_ = new testing::StrictMock<MockWebServer>( 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1337, ASCIIToWide(local_address_), 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::GetTestDataFolder()); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_->set_listener(listener_mock_); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::TearDownTestCase() { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete server_mock_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_ = NULL; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete listener_mock_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener_mock_ = NULL; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) local_address_.clear(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete loop_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop_ = NULL; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_util::Delete(CFInstall_path_, false); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_util::Delete(CFInstance_path_, false); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (temp_dir_.IsValid()) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(temp_dir_.Delete()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath& 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeFrameTestWithWebServer::GetChromeUserDataDirectory() { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!temp_dir_.IsValid()) { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_user_data_dir_ = temp_dir_.path().AppendASCII("User Data"); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return chrome_user_data_dir_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::SetUp() { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that we are not accidentally enabling gcf protocol. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetConfigBool(kAllowUnsafeURLs, false); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock().ClearResults(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock().ExpectAndServeAnyRequests(CFInvocation(CFInvocation::NONE)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock().set_expected_result("OK"); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::TearDown() { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowser(); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop().RunUntilIdle(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Mock::VerifyAndClear(listener_mock_); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Mock::VerifyAndClear(server_mock_); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeFrameTestWithWebServer::LaunchBrowser(BrowserKind browser, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* page) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring url = page; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should resolve the URL only if it is a relative url. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL parsed_url(WideToUTF8(page)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!parsed_url.has_scheme()) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = server_mock().Resolve(page); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_ = browser; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser == IE) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_handle_.Set(chrome_frame_test::LaunchIE(url)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (browser == CHROME) { 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& user_data_dir = GetChromeUserDataDirectory(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::OverrideDataDirectoryForThisTest(user_data_dir.value()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_handle_.Set(chrome_frame_test::LaunchChrome(url, user_data_dir)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser_handle_.IsValid(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::CloseBrowser() { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!browser_handle_.IsValid()) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int attempts = 0; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_ == IE) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attempts = chrome_frame_test::CloseAllIEWindows(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attempts = chrome_frame_test::CloseVisibleWindowsOnAllThreads( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_handle_); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (attempts > 0) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD wait = ::WaitForSingleObject(browser_handle_, 20000); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wait == WAIT_OBJECT_0) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_handle_.Close(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "WaitForSingleObject returned " << wait; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "No attempts to close browser windows"; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_handle_.IsValid()) { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD exit_code = 0; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!::GetExitCodeProcess(browser_handle_, &exit_code) || 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit_code == STILL_ACTIVE) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << L"Forcefully killing browser process. Exit:" << exit_code; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::KillProcess(browser_handle_, 0, true); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_handle_.Close(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeFrameTestWithWebServer::BringBrowserToTop() { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return simulate_input::EnsureProcessInForeground( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcessId(browser_handle_)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeFrameTestWithWebServer::WaitForTestToComplete( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta duration) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(duration); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !loop().WasTimedOut(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeFrameTestWithWebServer::WaitForOnLoad(int milliseconds) { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kPostedResultSubstring[] = L"/writefile/"; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::SimpleBrowserTestExpectedResult( 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserKind browser, const wchar_t* page, const char* result) { 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (browser == IE && chrome_frame_test::GetInstalledIEVersion() >= IE_9) { 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(INFO) << "Temporarily disabling IE9 web server tests. " 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "See http://crbug.com/143699"; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tries = 0; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectAndHandlePostedResult(); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retry tests that timeout once; see http://crbug.com/96449. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: Failed ASSERTs cause this function to exit immediately. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't take a snapshot on the first try. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().set_snapshot_on_timeout(tries != 0); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LaunchBrowser(browser, page)); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (WaitForTestToComplete(TestTimeouts::action_max_timeout())) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The test exited without timing out. Confirm that the expected response 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was posted and return. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(result, server_mock().posted_result()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(std::string(), server_mock().posted_result()) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Test timed out yet provided a result."; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, tries++) << "Failing test due to two timeouts."; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browser and try a second time. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowser(); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Retrying test once since it timed out."; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while (true); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().set_snapshot_on_timeout(true); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::SimpleBrowserTest(BrowserKind browser, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* page) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTestExpectedResult(browser, page, "OK"); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::ExpectAndHandlePostedResult() { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(listener_mock(), OnExpectedResponse()) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(QUIT_LOOP_SOON(loop(), 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(100))); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock().ExpectAndHandlePostedResult(CFInvocation(CFInvocation::NONE), 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPostedResultSubstring); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeFrameTestWithWebServer::VersionTest(BrowserKind browser, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* page) { 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath plugin_path; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::DIR_MODULE, &plugin_path); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_path = plugin_path.Append(kChromeFrameDllName); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static FileVersionInfo* version_info = 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileVersionInfo::CreateFileVersionInfo(plugin_path); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring version; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (version_info) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version = version_info->product_version(); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we can't find the Chrome Frame DLL in the src tree, we turn to 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the directory where chrome is installed. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!version_info) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Version ver_system; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUtil::GetChromeVersion(dist, true, &ver_system); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Version ver_user; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallUtil::GetChromeVersion(dist, false, &ver_system); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ver_system.IsValid() || ver_user.IsValid()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_install = ver_system.IsValid(); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath cf_dll_path(installer::GetChromeInstallPath(system_install, dist)); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cf_dll_path = cf_dll_path.Append(UTF8ToWide( 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ver_system.IsValid() ? ver_system.GetString() : ver_user.GetString())); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cf_dll_path = cf_dll_path.Append(kChromeFrameDllName); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version_info = FileVersionInfo::CreateFileVersionInfo(cf_dll_path); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (version_info) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version = version_info->product_version(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock().set_expected_result(WideToUTF8(version)); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(version_info); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(version.empty()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTestExpectedResult(browser, page, WideToASCII(version).c_str()); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MockWebServer methods 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::ExpectAndServeRequest(CFInvocation invocation, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& url) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectAndServeRequestWithCardinality(invocation, url, testing::Exactly(1)); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::ExpectAndServeRequestWithCardinality( 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation invocation, const std::wstring& url, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Cardinality cardinality) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Get(_, chrome_frame_test::UrlPathEq(url), _)) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(cardinality) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(SendResponse(this, invocation)); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::ExpectAndServeRequestAllowCache(CFInvocation invocation, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring &url) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Get(_, chrome_frame_test::UrlPathEq(url), _)) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(SendResponse(this, invocation)); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::ExpectAndServeRequestAnyNumberTimes( 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation invocation, const std::wstring& path_prefix) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Get(_, testing::StartsWith(path_prefix), _)) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(SendResponse(this, invocation)); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::ExpectAndHandlePostedResult( 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation invocation, const std::wstring& post_suffix) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, Post(_, testing::HasSubstr(post_suffix), _)) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(HandlePostedResponseHelper(this, invocation)); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::HandlePostedResponse( 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server::ConfigurableConnection* connection, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const test_server::Request& request) { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) posted_result_ = request.content(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (listener_ && posted_result_ == expected_result_) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener_->OnExpectedResponse(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection->Send("HTTP/1.1 200 OK\r\n", ""); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockWebServer::SendResponseHelper( 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server::ConfigurableConnection* connection, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& request_uri, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const test_server::Request& request, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation invocation, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool add_no_cache_header) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kEchoHeader[] = L"/echoheader?"; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (request_uri.find(kEchoHeader) != std::wstring::npos) { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring header = request_uri.substr( 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wcslen(kEchoHeader), 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_uri.length() - wcslen(kEchoHeader)); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string header_value = http_utils::GetHttpHeaderFromHeaderList( 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF8(header), request.headers()); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection->Send(header_value, ""); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convert |request_uri| to a path. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring path = request_uri; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t query_index = request_uri.find(L"?"); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (query_index != std::string::npos) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.erase(query_index); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath file_path = root_dir_; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (path.size()) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_path = file_path.Append(path.substr(1)); // remove first '/' 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string headers, body; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_type; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_util::PathExists(file_path) && 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !file_util::DirectoryExists(file_path)) { 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath mock_http_headers(file_path.value() + L".mock-http-headers"); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (file_util::PathExists(mock_http_headers)) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers = GetMockHttpHeaders(mock_http_headers); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type = http_utils::GetHttpHeaderFromHeaderList("Content-type", 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(net::GetMimeTypeFromFile(file_path, &content_type)); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Going to send file (" << WideToUTF8(file_path.value()) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ") with content type (" << content_type << ")"; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers = CreateHttpHeaders(invocation, add_no_cache_header, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(headers.empty()); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(file_util::ReadFileToString(file_path, &body)) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Could not read file (" << WideToUTF8(file_path.value()) << ")"; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (invocation.type() == CFInvocation::META_TAG && 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartsWithASCII(content_type, "text/html", false)) { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(chrome_frame_test::AddCFMetaTag(&body)) << "Could not add " 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "meta tag to HTML file."; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Going to send 404 for non-existent file (" 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << WideToUTF8(file_path.value()) << ")"; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers = "HTTP/1.1 404 Not Found"; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) body = ""; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) connection->Send(headers, body); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kPostMessageBasicPage[] = L"postmessage_basic_host.html"; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_PostMessageBasic) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kPostMessageBasicPage); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabIE_MIMEFilterBasic) { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t kMIMEFilterBasicPage[] = 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"chrome_frame_mime_filter_test.html"; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this test fails for IE8 then it is possible that prebinding is enabled. 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A known workaround is to disable it until CF properly handles it. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HKCU\Software\Microsoft\Internet Explorer\Main 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Value name: EnablePreBinding (REG_DWORD) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Value: 0 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kMIMEFilterBasicPage); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Times out: http://crbug.com/163728 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_Resize) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, L"chrome_frame_resize.html"); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kNavigateURLAbsolutePage[] = 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"navigateurl_absolute_host.html"; 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_NavigateURLAbsolute) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kNavigateURLAbsolutePage); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kNavigateURLRelativePage[] = 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"navigateurl_relative_host.html"; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_WidgetModeIE_NavigateURLRelative) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kNavigateURLRelativePage); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kNavigateSimpleObjectFocus[] = L"simple_object_focus.html"; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_ObjectFocus) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kNavigateSimpleObjectFocus); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kiframeBasicPage[] = L"iframe_basic_host.html"; 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_iframeBasic) { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kiframeBasicPage); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kSrcPropertyTestPage[] = L"src_property_host.html"; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_SrcProperty) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kSrcPropertyTestPage); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFInstanceBasicTestPage[] = L"CFInstance_basic_host.html"; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceBasic) { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFInstanceBasicTestPage); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFISingletonPage[] = L"CFInstance_singleton_host.html"; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceSingleton) { 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFISingletonPage); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIDelayPage[] = L"CFInstance_delay_host.html"; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceDelay) { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIDelayPage); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIFallbackPage[] = L"CFInstance_fallback_host.html"; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceFallback) { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIFallbackPage); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFINoSrcPage[] = L"CFInstance_no_src_host.html"; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_CFInstanceNoSrc) { 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFINoSrcPage); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIIfrOnLoadPage[] = L"CFInstance_iframe_onload_host.html"; 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// disabled since it's unlikely that we care about this case 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_WidgetModeIE_CFInstanceIfrOnLoad) { 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIIfrOnLoadPage); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIZeroSizePage[] = L"CFInstance_zero_size_host.html"; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceZeroSize) { 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIZeroSizePage); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIIfrPostPage[] = L"CFInstance_iframe_post_host.html"; 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceIfrPost) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIIfrPostPage); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceIfrPost) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(CHROME, kCFIIfrPostPage); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIPostPage[] = L"CFInstance_post_host.html"; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstancePost) { 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chrome_frame_test::GetInstalledIEVersion() == IE_9) { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista/Windows 7 with IE9"; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIPostPage); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test randomly fails on the ChromeFrame builder. 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstancePost) { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(CHROME, kCFIPostPage); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIRPCPage[] = L"CFInstance_rpc_host.html"; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceRPC) { 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chrome_frame_test::GetInstalledIEVersion() == IE_9) { 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista/Windows 7 with IE9"; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIRPCPage); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceRPC) { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(CHROME, kCFIRPCPage); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIRPCInternalPage[] = 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"CFInstance_rpc_internal_host.html"; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceRPCInternal) { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (chrome_frame_test::GetInstalledIEVersion() == IE_9) { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista/Windows 7 with IE9"; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIRPCInternalPage); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeChrome_CFInstanceRPCInternal) { 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(CHROME, kCFIRPCInternalPage); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFIDefaultCtorPage[] = 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"CFInstance_default_ctor_host.html"; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_CFInstanceDefaultCtor) { 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFIDefaultCtorPage); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFInstallBasicTestPage[] = L"CFInstall_basic.html"; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallBasic) { 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFInstallBasicTestPage); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFInstallPlaceTestPage[] = L"CFInstall_place.html"; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallPlace) { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFInstallPlaceTestPage); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFInstallOverlayTestPage[] = L"CFInstall_overlay.html"; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallOverlay) { 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFInstallOverlayTestPage); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFInstallDismissTestPage[] = L"CFInstall_dismiss.html"; 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabIE_CFInstallDismiss) { 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFInstallDismissTestPage); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kInitializeHiddenPage[] = L"initialize_hidden.html"; 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Times out: http://crbug.com/163728 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_InitializeHidden) { 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kInitializeHiddenPage); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kFullTabHttpHeaderPage[] = L"chrome_frame_http_header.html"; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderBasic) { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kFullTabHttpHeaderPage); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kFullTabHttpHeaderPageIFrame[] = 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"chrome_frame_http_header_host.html"; 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderIFrame) { 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kFullTabHttpHeaderPageIFrame); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kFullTabHttpHeaderPageFrameset[] = 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"chrome_frame_http_header_frameset.html"; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_CFHttpHeaderFrameSet) { 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kFullTabHttpHeaderPageFrameset); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kVersionPage[] = L"version.html"; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_WidgetModeIE_Version) { 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VersionTest(IE, kVersionPage); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kEventListenerPage[] = L"event_listener.html"; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_EventListener) { 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kEventListenerPage); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kPrivilegedApisPage[] = L"privileged_apis_host.html"; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_PrivilegedApis) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kPrivilegedApisPage); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kMetaTagPage[] = L"meta_tag.html"; 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_MetaTag) { 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kMetaTagPage); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Times out: http://crbug.com/163728 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCFProtocolPage[] = L"cf_protocol.html"; 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_CFProtocol) { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporarily enable gcf: protocol for this test. 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetConfigBool(kAllowUnsafeURLs, true); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kCFProtocolPage); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetConfigBool(kAllowUnsafeURLs, false); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kPersistentCookieTest[] = 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"persistent_cookie_test_page.html"; 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_PersistentCookieTest) { 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kPersistentCookieTest); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kNavigateOutPage[] = L"navigate_out.html"; 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_NavigateOut) { 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kNavigateOutPage); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kReferrerMainTest[] = L"referrer_main.html"; 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_ReferrerTest) { 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kReferrerMainTest); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Times out: http://crbug.com/163728 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kSubFrameTestPage[] = L"full_tab_sub_frame_main.html"; 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_SubFrame) { 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kSubFrameTestPage); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kSubIFrameTestPage[] = L"full_tab_sub_iframe_main.html"; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_SubIFrame) { 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kSubIFrameTestPage); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kXMLHttpRequestTestUrl[] = 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"xmlhttprequest_test.html"; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_XHRTest) { 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kXMLHttpRequestTestUrl); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kInstallFlowTestUrl[] = 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"install_flow_test.html"; 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_InstallFlowTest) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedChromeFrameRegistrar::UnregisterAtPath( 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetChromeFrameBuildPath().value(), 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::GetTestBedType()); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LaunchBrowser(IE, kInstallFlowTestUrl)); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(kChromeFrameLongNavigationTimeout); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedChromeFrameRegistrar::RegisterAtPath( 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetChromeFrameBuildPath().value(), 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::GetTestBedType()); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectAndHandlePostedResult(); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(kChromeFrameLongNavigationTimeout); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::CloseAllIEWindows(); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("OK", server_mock().posted_result()); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kMultipleCFInstancesTestUrl[] = 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"multiple_cf_instances_main.html"; 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, WidgetModeIE_MultipleCFInstances) { 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kMultipleCFInstancesTestUrl); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kXHRHeaderTestUrl[] = 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"xmlhttprequest_header_test.html"; 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Marking as flaky since it occasionally times out. crbug.com/127395. 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_XHRHeaderTest) { 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kXHRHeaderTestUrl); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kDeleteCookieTest[] = 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"fulltab_delete_cookie_test.html"; 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_DeleteCookieTest) { 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kDeleteCookieTest); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kAnchorUrlNavigate[] = 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"fulltab_anchor_url_navigate.html#chrome_frame"; 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_AnchorUrlNavigateTest) { 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kAnchorUrlNavigate); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test whether POST-ing a form from an mshtml page to a CF page will cause 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the request to get reissued. It should not. 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// https://code.google.com/p/chromium/issues/detail?id=143699 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_TestPostReissue) { 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The order of pages in this array is assumed to be mshtml, cf, script. 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* kPages[] = { 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"full_tab_post_mshtml.html", 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"full_tab_post_target_cf.html", 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"chrome_frame_tester_helpers.js", 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleWebServerTest server(local_address_, 46664); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server.PopulateStaticFileListT<test_server::FileResponse>(kPages, 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kPages), GetCFTestFilePath()); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str())); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(kChromeFrameLongNavigationTimeout); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const test_server::Request* request = NULL; 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server.FindRequest("/quit?OK", &request); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(request != NULL); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("OK", request->arguments()); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (request->arguments().compare("OK") == 0) { 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check how many requests we got for the cf page. Also expect it to be 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a POST. 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int requests = server.GetRequestCountForPage(kPages[1], "POST"); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, requests); 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test whether following a link from an mshtml page to a CF page will cause 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// multiple network requests. It should not. 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, crbug.com/160497. 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_TestMultipleGet) { 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The order of pages in this array is assumed to be mshtml, cf, script. 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* kPages[] = { 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"full_tab_get_mshtml.html", 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"full_tab_get_target_cf.html", 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"chrome_frame_tester_helpers.js", 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleWebServerTest server(local_address_, 46664); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server.PopulateStaticFileListT<test_server::FileResponse>(kPages, 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kPages), GetCFTestFilePath()); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str())); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(kChromeFrameVeryLongNavigationTimeout); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const test_server::Request* request = NULL; 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server.FindRequest("/quit?OK", &request); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(request != NULL); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("OK", request->arguments()); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (request->arguments().compare("OK") == 0) { 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check how many requests we got for the cf page and check that it was 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a GET. 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int requests = server.GetRequestCountForPage(kPages[1], "GET"); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, requests); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kSetCookieTest[] = 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"fulltab_set_cookie_test.html"; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_SetCookieTest) { 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kSetCookieTest); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kXHRConditionalHeaderTestUrl[] = 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"xmlhttprequest_conditional_header_test.html"; 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_XHRConditionalHeaderTest) { 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kXHRConditionalHeaderTestUrl); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kWindowCloseTestUrl[] = 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"window_close.html"; 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_WindowClose) { 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleBrowserTest(IE, kWindowCloseTestUrl); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetHeaderValue(const std::string& headers, 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* header_name) { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HttpUtil::HeadersIterator it(headers.begin(), headers.end(), 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\r\n"); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (it.GetNext()) { 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lstrcmpiA(it.name().c_str(), header_name) == 0) { 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return it.values(); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ""; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specialized implementation of test_server::FileResponse that supports 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// adding the request's User-Agent header to the returned document. 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The class also supports $request_id$ which will be replaced with an 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// id that's incremented each time the response is sent over a socket. 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UaTemplateFileResponse : public test_server::FileResponse { 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef test_server::FileResponse SuperClass; 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UaTemplateFileResponse(const char* request_path, 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& file_path) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : test_server::FileResponse(request_path, file_path), request_id_(0) { 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Matches(const test_server::Request& r) const { 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ret = SuperClass::Matches(r); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret) 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ua_ = GetHeaderValue(r.headers(), "User-Agent"); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret; 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual size_t ContentLength() const { 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kRequestIdTemplate[] = "$request_id$"; 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kUserAgentTemplate[] = "$UA$"; 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t length = SuperClass::ContentLength(); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(length); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_.assign(reinterpret_cast<const char*>(file_->data()), 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_->length()); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t i = content_.find(kUserAgentTemplate); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i != std::string::npos) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_.replace(i, arraysize(kUserAgentTemplate) - 1, ua_); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = content_.find(kRequestIdTemplate); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i != std::string::npos) { 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_.replace(i, arraysize(kRequestIdTemplate) - 1, 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("%i", request_id_)); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_.length(); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WriteContents(net::StreamListenSocket* socket) const { 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(content_.length()); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket->Send(content_.c_str(), content_.length(), false); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id_++; 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mutable std::string ua_; 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mutable std::string content_; 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mutable int request_id_; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test simulates a URL that on first request returns a document 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that should be rendered in mshtml, then pops up a sign-in page that 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// after signing in, refreshes the original page that should then return 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a page that needs to be rendered in GCF. 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test currently fails because GCF does not add the chromeframe header 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to requests that mshtml initiates via IInternetSession::CreateBinding. 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, DISABLED_FullTabModeIE_RefreshMshtmlTest) { 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* kPages[] = { 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"mshtml_refresh_test.html", 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"mshtml_refresh_test_popup.html", 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleWebServerTest server(local_address_, 46664); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server.PopulateStaticFileListT<UaTemplateFileResponse>(kPages, 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arraysize(kPages), GetCFTestFilePath()); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LaunchBrowser(IE, server.FormatHttpPath(kPages[0]).c_str())); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(kChromeFrameLongNavigationTimeout); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server::SimpleWebServer* ws = server.web_server(); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const test_server::ConnectionList& connections = ws->connections(); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server::ConnectionList::const_iterator it = connections.begin(); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int requests_for_first_page = 0; 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; it != connections.end(); ++it) { 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server::Connection* c = (*it); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const test_server::Request& r = c->request(); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!r.path().empty() && 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToWide(r.path().substr(1)).compare(kPages[0]) == 0) { 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) requests_for_first_page++; 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ua(GetHeaderValue(r.headers(), "User-Agent")); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string::npos, ua.find("chromeframe")); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT(requests_for_first_page, 1); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See bug 36694 for details. http://crbug.com/36694 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_TestDownloadFromForm) { 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::MockWindowObserver win_observer_mock; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) win_observer_mock.WatchWindow("File Download", ""); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) win_observer_mock.WatchWindow("View Downloads*", ""); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The content of our HTML test page. This will be returned whenever 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we reply to a GET request. 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kHtml[] = 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<html><head>\n" 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<title>ChromeFrame Form Download Test</title>\n" 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To see how this test runs with only IE (no CF in the picture), comment 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // out this meta tag. The outcome of the test should be identical. 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<meta http-equiv=\"X-UA-Compatible\" content=\"chrome=1\" />\n" 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</head>\n" 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<script language=\"javascript\">\n" 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "function SubmitForm() {\n" 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " var form = document.forms['myform'];\n" 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " form.action = document.location;\n" 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " form.submit();\n" 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " return true;\n" 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "}\n" 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</script>\n" 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<body onload=\"SubmitForm();\">\n" 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<form method=\"post\" action=\"foo.html\" id=\"myform\">\n" 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <input type=\"hidden\" name=\"Field1\" value=\"myvalue\" />\n" 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <input type=\"button\" name=\"btn\" value=\"Test Download\" " 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "onclick=\"return SubmitForm();\" id=\"Button1\"/>\n" 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</form></body></html>\n"; 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The content of our HTML test page. This will be returned whenever 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we reply to a POST request. 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kText[] = 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "This is a text file (in case you were wondering)."; 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This http response class will return an HTML document that contains 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a form whenever it receives a GET request. Whenever it gets a POST 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request, it will respond with a text file that needs to be downloaded 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (content-disposition is "attachment"). 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class CustomResponse : public test_server::ResponseForPath { 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit CustomResponse(const char* path) 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : test_server::ResponseForPath(path), is_post_(false), 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_requests_(0), get_requests_(0) { 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetContentType(std::string* content_type) const { 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!is_post_); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual size_t ContentLength() const { 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!is_post_); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sizeof(kHtml) - 1; 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetCustomHeaders(std::string* headers) const { 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_post_) 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *headers = base::StringPrintf( 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "HTTP/1.1 200 OK\r\n" 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Content-Disposition: attachment;filename=\"test.txt\"\r\n" 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Content-Type: application/text\r\n" 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Connection: close\r\n" 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Content-Length: %i\r\n\r\n", sizeof(kText) - 1); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Matches(const test_server::Request& r) const { 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool match = __super::Matches(r); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (match) { 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_post_ = LowerCaseEqualsASCII(r.method().c_str(), "post"); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return match; 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WriteContents(net::StreamListenSocket* socket) const { 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_post_) { 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket->Send(kText, sizeof(kText) - 1, false); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) socket->Send(kHtml, sizeof(kHtml) - 1, false); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void IncrementAccessCounter() { 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __super::IncrementAccessCounter(); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_post_) { 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) post_requests_++; 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_requests_++; 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t get_request_count() const { 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_requests_; 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t post_request_count() const { 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return get_requests_; 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mutable bool is_post_; 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t post_requests_; 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t get_requests_; 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(chrome_frame_test::DoCloseWindow()); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(QUIT_LOOP(loop())); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimpleWebServerTest server(local_address_, 46664); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CustomResponse* response = new CustomResponse("/form.html"); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server.web_server()->AddResponse(response); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring url(server.FormatHttpPath(L"form.html")); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(LaunchBrowser(IE, url.c_str())); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loop().RunFor(kChromeFrameLongNavigationTimeout); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, response->get_request_count()); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, response->post_request_count()); 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test loads a large page and ensures that the full page contents are 10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// actually loaded via a self-validating HTML page. This is done due to a bug 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// whereby the middle of the response stream would sometimes be truncated when 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// loading a CF document. See http://crbug.com/178421 for details. 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ChromeFrameTestWithWebServer, FullTabModeIE_LargePageLoad) { 10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const wchar_t kLargePageLoadPage[] = 10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) L"chrome_frame_large_page.html"; 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SimpleBrowserTest(IE, kLargePageLoadPage); 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1100