Chromium Code Reviews| Index: chrome/browser/net/proxy_browsertest.cc |
| diff --git a/chrome/browser/net/proxy_browsertest.cc b/chrome/browser/net/proxy_browsertest.cc |
| index 16bd7c519b7f4ea77c2a7076f07231a69a7d1872..2fc82cf276e467a52e50d58c5c4c1d19e7e8612f 100644 |
| --- a/chrome/browser/net/proxy_browsertest.cc |
| +++ b/chrome/browser/net/proxy_browsertest.cc |
| @@ -123,4 +123,139 @@ IN_PROC_BROWSER_TEST_F(ProxyBrowserTest, MAYBE_BasicAuthWSConnect) { |
| EXPECT_TRUE(observer.auth_handled()); |
| } |
| +// PAC script that sends all requests to an invalid proxy server. |
| +const base::FilePath::CharType kPACScript[] = FILE_PATH_LITERAL( |
|
James Hawkins
2013/05/29 17:24:33
Optional nit: Move helpers and related constants t
pauljensen
2013/05/29 18:45:15
Done.
|
| + "bad_server.pac"); |
| + |
| +// Verify kPACScript is installed as the PAC script. |
| +void VerifyProxyScript(Browser* browser) { |
| + content::WebContents* tab = |
| + browser->tab_strip_model()->GetActiveWebContents(); |
| + const char *expected_title = "http://google.com/ is not available"; |
|
eroman
2013/05/29 17:45:52
nit: asterisk on the left.
nit: [optional] make it
pauljensen
2013/05/29 18:45:15
I deleted this code per mmenke's comment.
|
| + content::TitleWatcher watcher(tab, ASCIIToUTF16(expected_title)); |
| + ui_test_utils::NavigateToURL(browser, GURL("http://google.com")); |
|
mmenke
2013/05/29 18:06:25
Not a big fan of depending on UI strings, since I
pauljensen
2013/05/29 18:45:15
Done.
|
| + |
| + const string16 title = watcher.WaitAndGetTitle(); |
| + EXPECT_TRUE(EqualsASCII(title, expected_title)); |
| + // Verify we get the ERR_PROXY_CONNECTION_FAILED screen. |
| + bool result = false; |
| + EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
| + browser->tab_strip_model()->GetActiveWebContents(), |
| + "var textContent = document.body.textContent;" |
| + "var hasError = textContent.indexOf(" |
| + " 'Unable to connect to the proxy server') >= 0;" |
|
mmenke
2013/05/29 18:06:25
Rather than depend on UI strings, how about search
pauljensen
2013/05/29 18:45:15
I tried that first, but ERR_PROXY_CONNECTION_FAILE
mmenke
2013/05/29 18:47:51
Hmm... textContent includes the entire raw page,
mmenke
2013/05/29 18:50:28
Just tested it manually with ERR_UNSAFE_PORT, and
pauljensen
2013/05/29 18:54:52
Huh, you're right. I've changed it to look for ER
|
| + "domAutomationController.send(hasError);", |
| + &result)); |
| + EXPECT_TRUE(result); |
| +} |
| + |
| +// Fetch PAC script via an http:// URL. |
| +class HttpProxyScriptBrowserTest : public InProcessBrowserTest { |
| + public: |
| + HttpProxyScriptBrowserTest() |
| + : http_server_(net::SpawnedTestServer::TYPE_HTTP, |
| + net::SpawnedTestServer::kLocalhost, |
| + base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { |
| + } |
| + virtual ~HttpProxyScriptBrowserTest() {} |
| + |
| + virtual void SetUp() OVERRIDE { |
| + ASSERT_TRUE(http_server_.Start()); |
| + InProcessBrowserTest::SetUp(); |
| + } |
| + |
| + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| + base::FilePath pac_script_path(FILE_PATH_LITERAL("files")); |
| + command_line->AppendSwitchASCII(switches::kProxyPacUrl, http_server_.GetURL( |
| + pac_script_path.Append(kPACScript).MaybeAsASCII()).spec()); |
| + } |
| + |
| + private: |
| + net::SpawnedTestServer http_server_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(HttpProxyScriptBrowserTest); |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(HttpProxyScriptBrowserTest, Verify) { |
| + VerifyProxyScript(browser()); |
| +} |
| + |
| +// Fetch PAC script via a file:// URL. |
| +class FileProxyScriptBrowserTest : public InProcessBrowserTest { |
| + public: |
| + FileProxyScriptBrowserTest() {} |
| + virtual ~FileProxyScriptBrowserTest() {} |
| + |
| + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| + command_line->AppendSwitchASCII(switches::kProxyPacUrl, |
| + ui_test_utils::GetTestUrl( |
| + base::FilePath(base::FilePath::kCurrentDirectory), |
| + base::FilePath(kPACScript)).spec()); |
| + } |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(FileProxyScriptBrowserTest); |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(FileProxyScriptBrowserTest, Verify) { |
| + VerifyProxyScript(browser()); |
| +} |
| + |
| +// Fetch PAC script via an ftp:// URL. |
| +class FtpProxyScriptBrowserTest : public InProcessBrowserTest { |
| + public: |
| + FtpProxyScriptBrowserTest() |
| + : ftp_server_(net::SpawnedTestServer::TYPE_FTP, |
| + net::SpawnedTestServer::kLocalhost, |
| + base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { |
| + } |
| + virtual ~FtpProxyScriptBrowserTest() {} |
| + |
| + virtual void SetUp() OVERRIDE { |
| + ASSERT_TRUE(ftp_server_.Start()); |
| + InProcessBrowserTest::SetUp(); |
| + } |
| + |
| + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| + base::FilePath pac_script_path(kPACScript); |
| + command_line->AppendSwitchASCII( |
| + switches::kProxyPacUrl, |
| + ftp_server_.GetURL(pac_script_path.MaybeAsASCII()).spec()); |
| + } |
| + |
| + private: |
| + net::SpawnedTestServer ftp_server_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(FtpProxyScriptBrowserTest); |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(FtpProxyScriptBrowserTest, Verify) { |
| + VerifyProxyScript(browser()); |
| +} |
| + |
| +// Fetch PAC script via a data: URL. |
| +class DataProxyScriptBrowserTest : public InProcessBrowserTest { |
| + public: |
| + DataProxyScriptBrowserTest() {} |
| + virtual ~DataProxyScriptBrowserTest() {} |
| + |
| + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| + std::string contents; |
| + // Read in kPACScript contents. |
| + ASSERT_TRUE(file_util::ReadFileToString(ui_test_utils::GetTestFilePath( |
| + base::FilePath(base::FilePath::kCurrentDirectory), |
| + base::FilePath(kPACScript)), |
| + &contents)); |
| + command_line->AppendSwitchASCII(switches::kProxyPacUrl, |
| + std::string("data:,") + contents); |
| + } |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(DataProxyScriptBrowserTest); |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(DataProxyScriptBrowserTest, Verify) { |
| + VerifyProxyScript(browser()); |
| +} |
| + |
| } // namespace |