proxy_browsertest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Use of this source code is governed by a BSD-style license that can be 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// found in the LICENSE file. 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "base/command_line.h" 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "base/path_service.h" 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/strings/string_util.h" 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/strings/stringprintf.h" 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/strings/utf_string_conversions.h" 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/browser.h" 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/login/login_prompt.h" 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/browser/ui/tabs/tab_strip_model.h" 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/common/chrome_notification_types.h" 14ef52a2fb2ace36c92f88c6e125bd7defa17dafa5Chris Lattner#include "chrome/common/chrome_paths.h" 15ef52a2fb2ace36c92f88c6e125bd7defa17dafa5Chris Lattner#include "chrome/common/chrome_switches.h" 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/common/pref_names.h" 17391d77a26382dddf25da73e29fc1fa5aaaea4c6fChris Lattner#include "chrome/test/base/in_process_browser_test.h" 185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "chrome/test/base/ui_test_utils.h" 19da13870e99fe33934b2122f06528a5063f78ae4cChris Lattner#include "content/public/browser/notification_details.h" 2050b36741673258aaebcd3c7fe1260031901cae57Chris Lattner#include "content/public/browser/notification_source.h" 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "content/public/browser/web_contents.h" 225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "content/public/browser/web_contents_observer.h" 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "content/public/test/browser_test_utils.h" 245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "net/base/test_data_directory.h" 255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "net/test/spawned_test_server/spawned_test_server.h" 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace { 285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// PAC script that sends all requests to an invalid proxy server. 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerconst base::FilePath::CharType kPACScript[] = FILE_PATH_LITERAL( 31391d77a26382dddf25da73e29fc1fa5aaaea4c6fChris Lattner "bad_server.pac"); 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Verify kPACScript is installed as the PAC script. 345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid VerifyProxyScript(Browser* browser) { 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ui_test_utils::NavigateToURL(browser, GURL("http://google.com")); 365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Verify we get the ERR_PROXY_CONNECTION_FAILED screen. 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer bool result = false; 395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer browser->tab_strip_model()->GetActiveWebContents(), 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer "var textContent = document.body.textContent;" 425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer "var hasError = textContent.indexOf('ERR_PROXY_CONNECTION_FAILED') >= 0;" 435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer "domAutomationController.send(hasError);", 445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer &result)); 4551b09f2c528c8460b5465c676173324e44176d62Devang Patel EXPECT_TRUE(result); 4651b09f2c528c8460b5465c676173324e44176d62Devang Patel} 4751b09f2c528c8460b5465c676173324e44176d62Devang Patel 48fb1aeb804c08d5288a923fb278161783e6abdc66Anders Carlsson// This class observes chrome::NOTIFICATION_AUTH_NEEDED and supplies 49fb1aeb804c08d5288a923fb278161783e6abdc66Anders Carlsson// the credential which is required by the test proxy server. 505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// "foo:bar" is the required username and password for our test proxy server. 515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass LoginPromptObserver : public content::NotificationObserver { 525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer public: 535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LoginPromptObserver() : auth_handled_(false) {} 545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 55b0a721a51a85b7b1ea9b33dbe12f4a58232590e2Chris Lattner virtual void Observe(int type, 5630bf3ae03f2edd9474d1ad69e7af64613367fed2Chris Lattner const content::NotificationSource& source, 5730bf3ae03f2edd9474d1ad69e7af64613367fed2Chris Lattner const content::NotificationDetails& details) OVERRIDE { 587016a706c9fab0d7c1603e424c61abbff9077037Chris Lattner if (type == chrome::NOTIFICATION_AUTH_NEEDED) { 595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LoginNotificationDetails* login_details = 605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer content::Details<LoginNotificationDetails>(details).ptr(); 615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // |login_details->handler()| is the associated LoginHandler object. 625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // SetAuth() will close the login dialog. 635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer login_details->handler()->SetAuth(ASCIIToUTF16("foo"), 645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ASCIIToUTF16("bar")); 65213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman auth_handled_ = true; 66b0a721a51a85b7b1ea9b33dbe12f4a58232590e2Chris Lattner } 6794f05e36488fd08e404ac409d3bcb1db1da1bd4dChris Lattner } 68227426661be33ff3e21f2b6b9f97971da2da044fAnders Carlsson 695508518a2702b00be3b15a26d772bde968972f54Anders Carlsson bool auth_handled() const { return auth_handled_; } 70391d77a26382dddf25da73e29fc1fa5aaaea4c6fChris Lattner 71b84a06e68ffd71da22e3c75b6e4bbdba37816413Devang Patel private: 72b84a06e68ffd71da22e3c75b6e4bbdba37816413Devang Patel bool auth_handled_; 73248a753f6b670692523c99afaeb8fe98f7ae3ca7Steve Naroff 745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer DISALLOW_COPY_AND_ASSIGN(LoginPromptObserver); 755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 76472778eb4fce241721c563280886e98389bc7219Eli Friedman 775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ProxyBrowserTest : public InProcessBrowserTest { 785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer public: 79b84a06e68ffd71da22e3c75b6e4bbdba37816413Devang Patel ProxyBrowserTest() 8088a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel : proxy_server_(net::SpawnedTestServer::TYPE_BASIC_AUTH_PROXY, 815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer net::SpawnedTestServer::kLocalhost, 825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::FilePath()) { 839b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner } 849b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner 859b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner virtual void SetUp() OVERRIDE { 865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ASSERT_TRUE(proxy_server_.Start()); 879b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner InProcessBrowserTest::SetUp(); 885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 909b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer command_line->AppendSwitchASCII(switches::kProxyServer, 925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer proxy_server_.host_port_pair().ToString()); 935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer protected: 969b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner net::SpawnedTestServer proxy_server_; 979b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner 989b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner private: 995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1009b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner DISALLOW_COPY_AND_ASSIGN(ProxyBrowserTest); 1019b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner}; 1029b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner 1039b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner#if defined(OS_CHROMEOS) 1045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// We bypass manually installed proxy for localhost on chromeos. 1055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define MAYBE_BasicAuthWSConnect DISABLED_BasicAuthWSConnect 1069b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner#else 1079b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner#define MAYBE_BasicAuthWSConnect BasicAuthWSConnect 1089b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner#endif 1099b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner// Test that the browser can establish a WebSocket connection via a proxy 1109b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner// that requires basic authentication. 1119b65551d0b387a7597fb39356a4d8ef10046445eChris LattnerIN_PROC_BROWSER_TEST_F(ProxyBrowserTest, MAYBE_BasicAuthWSConnect) { 1125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Launch WebSocket server. 1135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer net::SpawnedTestServer ws_server(net::SpawnedTestServer::TYPE_WS, 1145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer net::SpawnedTestServer::kLocalhost, 1159b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner net::GetWebSocketTestDataDirectory()); 1165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ASSERT_TRUE(ws_server.Start()); 1175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer content::WebContents* tab = 1195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer browser()->tab_strip_model()->GetActiveWebContents(); 1209b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner content::NavigationController* controller = &tab->GetController(); 1219b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner content::NotificationRegistrar registrar; 1229b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner // The proxy server will request basic authentication. 1239b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner // |observer| supplies the credential. 1249b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner LoginPromptObserver observer; 1259b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner registrar.Add(&observer, chrome::NOTIFICATION_AUTH_NEEDED, 1269b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner content::Source<content::NavigationController>(controller)); 1279b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner 1289b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner content::TitleWatcher watcher(tab, ASCIIToUTF16("PASS")); 1299b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); 1309b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner 1319b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner // Visit a page that tries to establish WebSocket connection. The title 1329b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner // of the page will be 'PASS' on success. 1339b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner std::string scheme("http"); 1349b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner GURL::Replacements replacements; 1359b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner replacements.SetSchemeStr(scheme); 1365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ui_test_utils::NavigateToURL( 1375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer browser(), 1385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ws_server.GetURL("connect_check.html").ReplaceComponents(replacements)); 1395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1409b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner const string16 result = watcher.WaitAndGetTitle(); 1419b65551d0b387a7597fb39356a4d8ef10046445eChris Lattner EXPECT_TRUE(EqualsASCII(result, "PASS")); 1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer EXPECT_TRUE(observer.auth_handled()); 1435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} 1445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Fetch PAC script via an http:// URL. 1465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass HttpProxyScriptBrowserTest : public InProcessBrowserTest { 1475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer public: 1485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer HttpProxyScriptBrowserTest() 1495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : http_server_(net::SpawnedTestServer::TYPE_HTTP, 1505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer net::SpawnedTestServer::kLocalhost, 1515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { 1525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~HttpProxyScriptBrowserTest() {} 1545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 155349aaec106b459206479f7600990230b9d799c61Chris Lattner virtual void SetUp() OVERRIDE { 156349aaec106b459206479f7600990230b9d799c61Chris Lattner ASSERT_TRUE(http_server_.Start()); 157349aaec106b459206479f7600990230b9d799c61Chris Lattner InProcessBrowserTest::SetUp(); 158213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman } 1595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 1615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::FilePath pac_script_path(FILE_PATH_LITERAL("files")); 1625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer command_line->AppendSwitchASCII(switches::kProxyPacUrl, http_server_.GetURL( 1635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer pac_script_path.Append(kPACScript).MaybeAsASCII()).spec()); 164349aaec106b459206479f7600990230b9d799c61Chris Lattner } 165213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman 1663b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio private: 1673b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio net::SpawnedTestServer http_server_; 1683b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio 1693b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio DISALLOW_COPY_AND_ASSIGN(HttpProxyScriptBrowserTest); 1703b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio}; 1715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid SpencerIN_PROC_BROWSER_TEST_F(HttpProxyScriptBrowserTest, Verify) { 1735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer VerifyProxyScript(browser()); 1745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} 1755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 176213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman// Fetch PAC script via a file:// URL. 1775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass FileProxyScriptBrowserTest : public InProcessBrowserTest { 1785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer public: 1795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer FileProxyScriptBrowserTest() {} 1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~FileProxyScriptBrowserTest() {} 1815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 183213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman command_line->AppendSwitchASCII(switches::kProxyPacUrl, 184213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman ui_test_utils::GetTestUrl( 185213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman base::FilePath(base::FilePath::kCurrentDirectory), 186213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman base::FilePath(kPACScript)).spec()); 1876481a57fefbf1a313ff439028470fe4c27a3b7a3Chris Lattner } 188349aaec106b459206479f7600990230b9d799c61Chris Lattner 1893b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio private: 1903b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio DISALLOW_COPY_AND_ASSIGN(FileProxyScriptBrowserTest); 1913b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio}; 1923b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio 1933b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos VenancioIN_PROC_BROWSER_TEST_F(FileProxyScriptBrowserTest, Verify) { 1943b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio VerifyProxyScript(browser()); 1953b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio} 1963b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio 1973b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio// Fetch PAC script via an ftp:// URL. 1983b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancioclass FtpProxyScriptBrowserTest : public InProcessBrowserTest { 1993b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio public: 2003b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio FtpProxyScriptBrowserTest() 2013b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio : ftp_server_(net::SpawnedTestServer::TYPE_FTP, 2023b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio net::SpawnedTestServer::kLocalhost, 2033b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { 2045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~FtpProxyScriptBrowserTest() {} 2065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void SetUp() OVERRIDE { 2085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ASSERT_TRUE(ftp_server_.Start()); 2095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer InProcessBrowserTest::SetUp(); 2105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 2135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::FilePath pac_script_path(kPACScript); 2145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer command_line->AppendSwitchASCII( 2155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer switches::kProxyPacUrl, 2165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ftp_server_.GetURL(pac_script_path.MaybeAsASCII()).spec()); 2175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 219213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman private: 220349aaec106b459206479f7600990230b9d799c61Chris Lattner net::SpawnedTestServer ftp_server_; 221213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman 222349aaec106b459206479f7600990230b9d799c61Chris Lattner DISALLOW_COPY_AND_ASSIGN(FtpProxyScriptBrowserTest); 2236481a57fefbf1a313ff439028470fe4c27a3b7a3Chris Lattner}; 224349aaec106b459206479f7600990230b9d799c61Chris Lattner 225349aaec106b459206479f7600990230b9d799c61Chris LattnerIN_PROC_BROWSER_TEST_F(FtpProxyScriptBrowserTest, Verify) { 2263b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio VerifyProxyScript(browser()); 2273b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio} 2283b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio 2293b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio// Fetch PAC script via a data: URL. 2303b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancioclass DataProxyScriptBrowserTest : public InProcessBrowserTest { 2313b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio public: 2323b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio DataProxyScriptBrowserTest() {} 2333b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio virtual ~DataProxyScriptBrowserTest() {} 2343b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio 2353b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 2363b8c22d93da1432b2d4cea779d14912645c93866Lauro Ramos Venancio std::string contents; 2375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Read in kPACScript contents. 2385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ASSERT_TRUE(file_util::ReadFileToString(ui_test_utils::GetTestFilePath( 2395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::FilePath(base::FilePath::kCurrentDirectory), 2405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::FilePath(kPACScript)), 2415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer &contents)); 242bfc0c1ae4b505b52b36f572a9641f99e76879cabChris Lattner command_line->AppendSwitchASCII(switches::kProxyPacUrl, 2435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::string("data:,") + contents); 2445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 245bfc0c1ae4b505b52b36f572a9641f99e76879cabChris Lattner 24658dee10ed2eee34035f62d1c2d32b3639e9182f8Chris Lattner private: 24750b36741673258aaebcd3c7fe1260031901cae57Chris Lattner DISALLOW_COPY_AND_ASSIGN(DataProxyScriptBrowserTest); 2485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 249c8aa5f1f264fb230c38182adab944232bb160c2bChris Lattner 250c8aa5f1f264fb230c38182adab944232bb160c2bChris LattnerIN_PROC_BROWSER_TEST_F(DataProxyScriptBrowserTest, Verify) { 251391d77a26382dddf25da73e29fc1fa5aaaea4c6fChris Lattner VerifyProxyScript(browser()); 2525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} 2535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // namespace 2555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer