1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/net/firefox_proxy_settings.h"
7 #include "base/files/file_path.h"
8 #include "base/path_service.h"
9 #include "chrome/common/chrome_paths.h"
10 #include "net/proxy/proxy_config.h"
11 #include "testing/gtest/include/gtest/gtest.h"
13 class FirefoxProxySettingsTest
: public testing::Test
{
16 class TestFirefoxProxySettings
: public FirefoxProxySettings
{
18 TestFirefoxProxySettings() {}
20 static bool TestGetSettingsFromFile(const base::FilePath
& pref_file
,
21 FirefoxProxySettings
* settings
) {
22 return GetSettingsFromFile(pref_file
, settings
);
26 TEST_F(FirefoxProxySettingsTest
, TestParse
) {
27 FirefoxProxySettings settings
;
29 base::FilePath js_pref_path
;
30 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA
, &js_pref_path
));
31 js_pref_path
= js_pref_path
.AppendASCII("firefox3_pref.js");
33 EXPECT_TRUE(TestFirefoxProxySettings::TestGetSettingsFromFile(js_pref_path
,
35 EXPECT_EQ(FirefoxProxySettings::MANUAL
, settings
.config_type());
36 EXPECT_EQ("http_proxy", settings
.http_proxy());
37 EXPECT_EQ(1111, settings
.http_proxy_port());
38 EXPECT_EQ("ssl_proxy", settings
.ssl_proxy());
39 EXPECT_EQ(2222, settings
.ssl_proxy_port());
40 EXPECT_EQ("ftp_proxy", settings
.ftp_proxy());
41 EXPECT_EQ(3333, settings
.ftp_proxy_port());
42 EXPECT_EQ("gopher_proxy", settings
.gopher_proxy());
43 EXPECT_EQ(4444, settings
.gopher_proxy_port());
44 EXPECT_EQ("socks_host", settings
.socks_host());
45 EXPECT_EQ(5555, settings
.socks_port());
46 EXPECT_EQ(FirefoxProxySettings::V4
, settings
.socks_version());
47 ASSERT_EQ(3U, settings
.proxy_bypass_list().size());
48 EXPECT_EQ("localhost", settings
.proxy_bypass_list()[0]);
49 EXPECT_EQ("127.0.0.1", settings
.proxy_bypass_list()[1]);
50 EXPECT_EQ("noproxy.com", settings
.proxy_bypass_list()[2]);
51 EXPECT_EQ("", settings
.autoconfig_url());
53 // Test that ToProxyConfig() properly translates into a net::ProxyConfig.
54 net::ProxyConfig config
;
55 EXPECT_TRUE(settings
.ToProxyConfig(&config
));
58 net::ProxyConfig expected_config
;
59 expected_config
.proxy_rules().ParseFromString("http=http_proxy:1111; "
60 "https=ssl_proxy:2222; "
61 "ftp=ftp_proxy:3333; "
62 "socks=socks_host:5555");
63 expected_config
.proxy_rules().bypass_rules
.ParseFromString(
64 "*localhost, 127.0.0.1, *noproxy.com");
68 TEST_F(FirefoxProxySettingsTest
, TestParseAutoConfigUrl
) {
69 FirefoxProxySettings settings
;
71 base::FilePath js_pref_path
;
72 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA
, &js_pref_path
));
73 js_pref_path
= js_pref_path
.AppendASCII("firefox3_pref_pac_url.js");
75 EXPECT_TRUE(TestFirefoxProxySettings::TestGetSettingsFromFile(js_pref_path
,
77 EXPECT_EQ(FirefoxProxySettings::AUTO_FROM_URL
, settings
.config_type());
79 // Everything should be empty except for the autoconfig URL.
80 EXPECT_EQ("http://custom-pac-url/", settings
.autoconfig_url());
81 EXPECT_EQ("", settings
.http_proxy());
82 EXPECT_EQ(0, settings
.http_proxy_port());
83 EXPECT_EQ("", settings
.ssl_proxy());
84 EXPECT_EQ(0, settings
.ssl_proxy_port());
85 EXPECT_EQ("", settings
.ftp_proxy());
86 EXPECT_EQ(0, settings
.ftp_proxy_port());
87 EXPECT_EQ("", settings
.gopher_proxy());
88 EXPECT_EQ(0, settings
.gopher_proxy_port());
89 EXPECT_EQ("", settings
.socks_host());
90 EXPECT_EQ(0, settings
.socks_port());
91 EXPECT_EQ(0, settings
.socks_port());
92 EXPECT_EQ(0U, settings
.proxy_bypass_list().size());
94 // Test that ToProxyConfig() properly translates into a net::ProxyConfig.
95 net::ProxyConfig config
;
96 EXPECT_TRUE(settings
.ToProxyConfig(&config
));
98 EXPECT_TRUE(config
.Equals(net::ProxyConfig::CreateFromCustomPacURL(
99 GURL("http://custom-pac-url/"))));