OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/proxy/proxy_config_service_linux.h" | 5 #include "net/proxy/proxy_config_service_linux.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 typename map_type::const_iterator it = settings.find(key); | 71 typename map_type::const_iterator it = settings.find(key); |
72 // In case there's a typo or the unittest becomes out of sync. | 72 // In case there's a typo or the unittest becomes out of sync. |
73 CHECK(it != settings.end()) << "key " << key << " not found"; | 73 CHECK(it != settings.end()) << "key " << key << " not found"; |
74 value_type* value_ptr = it->second; | 74 value_type* value_ptr = it->second; |
75 return *value_ptr; | 75 return *value_ptr; |
76 } | 76 } |
77 | 77 |
78 map_type settings; | 78 map_type settings; |
79 }; | 79 }; |
80 | 80 |
81 class MockEnvVarGetter : public base::EnvVarGetter { | 81 class MockEnvironment : public base::Environment { |
82 public: | 82 public: |
83 MockEnvVarGetter() { | 83 MockEnvironment() { |
84 #define ENTRY(x) table.settings[#x] = &values.x | 84 #define ENTRY(x) table.settings[#x] = &values.x |
85 ENTRY(DESKTOP_SESSION); | 85 ENTRY(DESKTOP_SESSION); |
86 ENTRY(HOME); | 86 ENTRY(HOME); |
87 ENTRY(KDEHOME); | 87 ENTRY(KDEHOME); |
88 ENTRY(KDE_SESSION_VERSION); | 88 ENTRY(KDE_SESSION_VERSION); |
89 ENTRY(auto_proxy); | 89 ENTRY(auto_proxy); |
90 ENTRY(all_proxy); | 90 ENTRY(all_proxy); |
91 ENTRY(http_proxy); | 91 ENTRY(http_proxy); |
92 ENTRY(https_proxy); | 92 ENTRY(https_proxy); |
93 ENTRY(ftp_proxy); | 93 ENTRY(ftp_proxy); |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 GURL(), // pac_url | 598 GURL(), // pac_url |
599 ProxyRulesExpectation::Single( | 599 ProxyRulesExpectation::Single( |
600 "www.google.com:80", // single proxy | 600 "www.google.com:80", // single proxy |
601 "*.google.com"), // bypass rules | 601 "*.google.com"), // bypass rules |
602 }, | 602 }, |
603 }; | 603 }; |
604 | 604 |
605 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 605 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
606 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, | 606 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, |
607 tests[i].description.c_str())); | 607 tests[i].description.c_str())); |
608 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 608 MockEnvironment* env = new MockEnvironment; |
609 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; | 609 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; |
610 SynchConfigGetter sync_config_getter( | 610 SynchConfigGetter sync_config_getter( |
611 new ProxyConfigServiceLinux(env_getter, gconf_getter)); | 611 new ProxyConfigServiceLinux(env, gconf_getter)); |
612 ProxyConfig config; | 612 ProxyConfig config; |
613 gconf_getter->values = tests[i].values; | 613 gconf_getter->values = tests[i].values; |
614 sync_config_getter.SetupAndInitialFetch(); | 614 sync_config_getter.SetupAndInitialFetch(); |
615 sync_config_getter.SyncGetLatestProxyConfig(&config); | 615 sync_config_getter.SyncGetLatestProxyConfig(&config); |
616 | 616 |
617 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); | 617 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
618 EXPECT_EQ(tests[i].pac_url, config.pac_url()); | 618 EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
619 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); | 619 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
620 } | 620 } |
621 } | 621 } |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 GURL(), // pac_url | 888 GURL(), // pac_url |
889 ProxyRulesExpectation::Single( | 889 ProxyRulesExpectation::Single( |
890 "www.google.com:80", | 890 "www.google.com:80", |
891 "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"), | 891 "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"), |
892 }, | 892 }, |
893 }; | 893 }; |
894 | 894 |
895 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 895 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
896 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, | 896 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, |
897 tests[i].description.c_str())); | 897 tests[i].description.c_str())); |
898 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 898 MockEnvironment* env = new MockEnvironment; |
899 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; | 899 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; |
900 SynchConfigGetter sync_config_getter( | 900 SynchConfigGetter sync_config_getter( |
901 new ProxyConfigServiceLinux(env_getter, gconf_getter)); | 901 new ProxyConfigServiceLinux(env, gconf_getter)); |
902 ProxyConfig config; | 902 ProxyConfig config; |
903 env_getter->values = tests[i].values; | 903 env->values = tests[i].values; |
904 sync_config_getter.SetupAndInitialFetch(); | 904 sync_config_getter.SetupAndInitialFetch(); |
905 sync_config_getter.SyncGetLatestProxyConfig(&config); | 905 sync_config_getter.SyncGetLatestProxyConfig(&config); |
906 | 906 |
907 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); | 907 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
908 EXPECT_EQ(tests[i].pac_url, config.pac_url()); | 908 EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
909 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); | 909 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
910 } | 910 } |
911 } | 911 } |
912 | 912 |
913 TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) { | 913 TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) { |
914 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 914 MockEnvironment* env = new MockEnvironment; |
915 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; | 915 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; |
916 ProxyConfigServiceLinux* service = | 916 ProxyConfigServiceLinux* service = |
917 new ProxyConfigServiceLinux(env_getter, gconf_getter); | 917 new ProxyConfigServiceLinux(env, gconf_getter); |
918 SynchConfigGetter sync_config_getter(service); | 918 SynchConfigGetter sync_config_getter(service); |
919 ProxyConfig config; | 919 ProxyConfig config; |
920 | 920 |
921 // Start with no proxy. | 921 // Start with no proxy. |
922 gconf_getter->values.mode = "none"; | 922 gconf_getter->values.mode = "none"; |
923 sync_config_getter.SetupAndInitialFetch(); | 923 sync_config_getter.SetupAndInitialFetch(); |
924 sync_config_getter.SyncGetLatestProxyConfig(&config); | 924 sync_config_getter.SyncGetLatestProxyConfig(&config); |
925 EXPECT_FALSE(config.auto_detect()); | 925 EXPECT_FALSE(config.auto_detect()); |
926 | 926 |
927 // Now set to auto-detect. | 927 // Now set to auto-detect. |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1285 "www.secure.com:80", // https | 1285 "www.secure.com:80", // https |
1286 "ftp.foo.com:80", // ftp | 1286 "ftp.foo.com:80", // ftp |
1287 "*.google.com,*.kde.org"), // bypass rules | 1287 "*.google.com,*.kde.org"), // bypass rules |
1288 }, | 1288 }, |
1289 | 1289 |
1290 }; | 1290 }; |
1291 | 1291 |
1292 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 1292 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
1293 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, | 1293 SCOPED_TRACE(StringPrintf("Test[%" PRIuS "] %s", i, |
1294 tests[i].description.c_str())); | 1294 tests[i].description.c_str())); |
1295 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 1295 MockEnvironment* env = new MockEnvironment; |
1296 env_getter->values = tests[i].env_values; | 1296 env->values = tests[i].env_values; |
1297 // Force the KDE getter to be used and tell it where the test is. | 1297 // Force the KDE getter to be used and tell it where the test is. |
1298 env_getter->values.DESKTOP_SESSION = "kde4"; | 1298 env->values.DESKTOP_SESSION = "kde4"; |
1299 env_getter->values.KDEHOME = kde_home_.value().c_str(); | 1299 env->values.KDEHOME = kde_home_.value().c_str(); |
1300 SynchConfigGetter sync_config_getter( | 1300 SynchConfigGetter sync_config_getter( |
1301 new ProxyConfigServiceLinux(env_getter)); | 1301 new ProxyConfigServiceLinux(env)); |
1302 ProxyConfig config; | 1302 ProxyConfig config; |
1303 // Overwrite the kioslaverc file. | 1303 // Overwrite the kioslaverc file. |
1304 file_util::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(), | 1304 file_util::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(), |
1305 tests[i].kioslaverc.length()); | 1305 tests[i].kioslaverc.length()); |
1306 sync_config_getter.SetupAndInitialFetch(); | 1306 sync_config_getter.SetupAndInitialFetch(); |
1307 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1307 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1308 | 1308 |
1309 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); | 1309 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
1310 EXPECT_EQ(tests[i].pac_url, config.pac_url()); | 1310 EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
1311 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); | 1311 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
1312 } | 1312 } |
1313 } | 1313 } |
1314 | 1314 |
1315 TEST_F(ProxyConfigServiceLinuxTest, KDEHomePicker) { | 1315 TEST_F(ProxyConfigServiceLinuxTest, KDEHomePicker) { |
1316 // Auto detect proxy settings. | 1316 // Auto detect proxy settings. |
1317 std::string slaverc3 = "[Proxy Settings]\nProxyType=3\n"; | 1317 std::string slaverc3 = "[Proxy Settings]\nProxyType=3\n"; |
1318 // Valid PAC URL. | 1318 // Valid PAC URL. |
1319 std::string slaverc4 = "[Proxy Settings]\nProxyType=2\n" | 1319 std::string slaverc4 = "[Proxy Settings]\nProxyType=2\n" |
1320 "Proxy Config Script=http://wpad/wpad.dat\n"; | 1320 "Proxy Config Script=http://wpad/wpad.dat\n"; |
1321 GURL slaverc4_pac_url("http://wpad/wpad.dat"); | 1321 GURL slaverc4_pac_url("http://wpad/wpad.dat"); |
1322 | 1322 |
1323 // Overwrite the .kde kioslaverc file. | 1323 // Overwrite the .kde kioslaverc file. |
1324 file_util::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length()); | 1324 file_util::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length()); |
1325 | 1325 |
1326 // If .kde4 exists it will mess up the first test. It should not, as | 1326 // If .kde4 exists it will mess up the first test. It should not, as |
1327 // we created the directory for $HOME in the test setup. | 1327 // we created the directory for $HOME in the test setup. |
1328 CHECK(!file_util::DirectoryExists(kde4_home_)); | 1328 CHECK(!file_util::DirectoryExists(kde4_home_)); |
1329 | 1329 |
1330 { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback"); | 1330 { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback"); |
1331 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 1331 MockEnvironment* env = new MockEnvironment; |
1332 env_getter->values.DESKTOP_SESSION = "kde4"; | 1332 env->values.DESKTOP_SESSION = "kde4"; |
1333 env_getter->values.HOME = user_home_.value().c_str(); | 1333 env->values.HOME = user_home_.value().c_str(); |
1334 SynchConfigGetter sync_config_getter( | 1334 SynchConfigGetter sync_config_getter( |
1335 new ProxyConfigServiceLinux(env_getter)); | 1335 new ProxyConfigServiceLinux(env)); |
1336 ProxyConfig config; | 1336 ProxyConfig config; |
1337 sync_config_getter.SetupAndInitialFetch(); | 1337 sync_config_getter.SetupAndInitialFetch(); |
1338 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1338 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1339 EXPECT_TRUE(config.auto_detect()); | 1339 EXPECT_TRUE(config.auto_detect()); |
1340 EXPECT_EQ(GURL(), config.pac_url()); | 1340 EXPECT_EQ(GURL(), config.pac_url()); |
1341 } | 1341 } |
1342 | 1342 |
1343 // Now create .kde4 and put a kioslaverc in the config directory. | 1343 // Now create .kde4 and put a kioslaverc in the config directory. |
1344 // Note that its timestamp will be at least as new as the .kde one. | 1344 // Note that its timestamp will be at least as new as the .kde one. |
1345 file_util::CreateDirectory(kde4_config_); | 1345 file_util::CreateDirectory(kde4_config_); |
1346 file_util::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length()); | 1346 file_util::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length()); |
1347 CHECK(file_util::PathExists(kioslaverc4_)); | 1347 CHECK(file_util::PathExists(kioslaverc4_)); |
1348 | 1348 |
1349 { SCOPED_TRACE("KDE4, .kde4 directory present, use it"); | 1349 { SCOPED_TRACE("KDE4, .kde4 directory present, use it"); |
1350 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 1350 MockEnvironment* env = new MockEnvironment; |
1351 env_getter->values.DESKTOP_SESSION = "kde4"; | 1351 env->values.DESKTOP_SESSION = "kde4"; |
1352 env_getter->values.HOME = user_home_.value().c_str(); | 1352 env->values.HOME = user_home_.value().c_str(); |
1353 SynchConfigGetter sync_config_getter( | 1353 SynchConfigGetter sync_config_getter( |
1354 new ProxyConfigServiceLinux(env_getter)); | 1354 new ProxyConfigServiceLinux(env)); |
1355 ProxyConfig config; | 1355 ProxyConfig config; |
1356 sync_config_getter.SetupAndInitialFetch(); | 1356 sync_config_getter.SetupAndInitialFetch(); |
1357 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1357 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1358 EXPECT_FALSE(config.auto_detect()); | 1358 EXPECT_FALSE(config.auto_detect()); |
1359 EXPECT_EQ(slaverc4_pac_url, config.pac_url()); | 1359 EXPECT_EQ(slaverc4_pac_url, config.pac_url()); |
1360 } | 1360 } |
1361 | 1361 |
1362 { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it"); | 1362 { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it"); |
1363 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 1363 MockEnvironment* env = new MockEnvironment; |
1364 env_getter->values.DESKTOP_SESSION = "kde"; | 1364 env->values.DESKTOP_SESSION = "kde"; |
1365 env_getter->values.HOME = user_home_.value().c_str(); | 1365 env->values.HOME = user_home_.value().c_str(); |
1366 SynchConfigGetter sync_config_getter( | 1366 SynchConfigGetter sync_config_getter( |
1367 new ProxyConfigServiceLinux(env_getter)); | 1367 new ProxyConfigServiceLinux(env)); |
1368 ProxyConfig config; | 1368 ProxyConfig config; |
1369 sync_config_getter.SetupAndInitialFetch(); | 1369 sync_config_getter.SetupAndInitialFetch(); |
1370 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1370 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1371 EXPECT_TRUE(config.auto_detect()); | 1371 EXPECT_TRUE(config.auto_detect()); |
1372 EXPECT_EQ(GURL(), config.pac_url()); | 1372 EXPECT_EQ(GURL(), config.pac_url()); |
1373 } | 1373 } |
1374 | 1374 |
1375 { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde"); | 1375 { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde"); |
1376 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 1376 MockEnvironment* env = new MockEnvironment; |
1377 env_getter->values.DESKTOP_SESSION = "kde4"; | 1377 env->values.DESKTOP_SESSION = "kde4"; |
1378 env_getter->values.HOME = user_home_.value().c_str(); | 1378 env->values.HOME = user_home_.value().c_str(); |
1379 env_getter->values.KDEHOME = kde_home_.value().c_str(); | 1379 env->values.KDEHOME = kde_home_.value().c_str(); |
1380 SynchConfigGetter sync_config_getter( | 1380 SynchConfigGetter sync_config_getter( |
1381 new ProxyConfigServiceLinux(env_getter)); | 1381 new ProxyConfigServiceLinux(env)); |
1382 ProxyConfig config; | 1382 ProxyConfig config; |
1383 sync_config_getter.SetupAndInitialFetch(); | 1383 sync_config_getter.SetupAndInitialFetch(); |
1384 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1384 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1385 EXPECT_TRUE(config.auto_detect()); | 1385 EXPECT_TRUE(config.auto_detect()); |
1386 EXPECT_EQ(GURL(), config.pac_url()); | 1386 EXPECT_EQ(GURL(), config.pac_url()); |
1387 } | 1387 } |
1388 | 1388 |
1389 // Finally, make the .kde4 config directory older than the .kde directory | 1389 // Finally, make the .kde4 config directory older than the .kde directory |
1390 // and make sure we then use .kde instead of .kde4 since it's newer. | 1390 // and make sure we then use .kde instead of .kde4 since it's newer. |
1391 file_util::SetLastModifiedTime(kde4_config_, base::Time()); | 1391 file_util::SetLastModifiedTime(kde4_config_, base::Time()); |
1392 | 1392 |
1393 { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde"); | 1393 { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde"); |
1394 MockEnvVarGetter* env_getter = new MockEnvVarGetter; | 1394 MockEnvironment* env = new MockEnvironment; |
1395 env_getter->values.DESKTOP_SESSION = "kde4"; | 1395 env->values.DESKTOP_SESSION = "kde4"; |
1396 env_getter->values.HOME = user_home_.value().c_str(); | 1396 env->values.HOME = user_home_.value().c_str(); |
1397 SynchConfigGetter sync_config_getter( | 1397 SynchConfigGetter sync_config_getter( |
1398 new ProxyConfigServiceLinux(env_getter)); | 1398 new ProxyConfigServiceLinux(env)); |
1399 ProxyConfig config; | 1399 ProxyConfig config; |
1400 sync_config_getter.SetupAndInitialFetch(); | 1400 sync_config_getter.SetupAndInitialFetch(); |
1401 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1401 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1402 EXPECT_TRUE(config.auto_detect()); | 1402 EXPECT_TRUE(config.auto_detect()); |
1403 EXPECT_EQ(GURL(), config.pac_url()); | 1403 EXPECT_EQ(GURL(), config.pac_url()); |
1404 } | 1404 } |
1405 } | 1405 } |
1406 | 1406 |
1407 } // namespace net | 1407 } // namespace net |
OLD | NEW |