| 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 |