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