Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: net/proxy/proxy_config_service_linux_unittest.cc

Issue 6597070: Allow ProxyConfigService to report "no configuration set" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Eric's comments. Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/proxy/proxy_config_service_linux.cc ('k') | net/proxy/proxy_config_service_mac.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
11 #include "base/file_path.h" 11 #include "base/file_path.h"
12 #include "base/file_util.h" 12 #include "base/file_util.h"
13 #include "base/format_macros.h" 13 #include "base/format_macros.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/string_util.h" 15 #include "base/string_util.h"
16 #include "base/stringprintf.h" 16 #include "base/stringprintf.h"
17 #include "base/synchronization/waitable_event.h"
17 #include "base/task.h" 18 #include "base/task.h"
18 #include "base/threading/thread.h" 19 #include "base/threading/thread.h"
19 #include "base/synchronization/waitable_event.h"
20 #include "net/proxy/proxy_config.h" 20 #include "net/proxy/proxy_config.h"
21 #include "net/proxy/proxy_config_service_common_unittest.h" 21 #include "net/proxy/proxy_config_service_common_unittest.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 #include "testing/platform_test.h" 23 #include "testing/platform_test.h"
24 24
25 namespace net { 25 namespace net {
26 namespace { 26 namespace {
27 27
28 // Set of values for all environment variables that we might 28 // Set of values for all environment variables that we might
29 // query. NULL represents an unset variable. 29 // query. NULL represents an unset variable.
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 // default glib main loop, which is the UI thread). 283 // default glib main loop, which is the UI thread).
284 void SetupAndInitialFetch() { 284 void SetupAndInitialFetch() {
285 MessageLoop* file_loop = io_thread_.message_loop(); 285 MessageLoop* file_loop = io_thread_.message_loop();
286 DCHECK_EQ(MessageLoop::TYPE_IO, file_loop->type()); 286 DCHECK_EQ(MessageLoop::TYPE_IO, file_loop->type());
287 // We pass the mock IO thread as both the IO and file threads. 287 // We pass the mock IO thread as both the IO and file threads.
288 config_service_->SetupAndFetchInitialConfig( 288 config_service_->SetupAndFetchInitialConfig(
289 MessageLoop::current(), io_thread_.message_loop(), 289 MessageLoop::current(), io_thread_.message_loop(),
290 static_cast<MessageLoopForIO*>(file_loop)); 290 static_cast<MessageLoopForIO*>(file_loop));
291 } 291 }
292 // Synchronously gets the proxy config. 292 // Synchronously gets the proxy config.
293 bool SyncGetLatestProxyConfig(net::ProxyConfig* config) { 293 net::ProxyConfigService::ConfigAvailability SyncGetLatestProxyConfig(
294 net::ProxyConfig* config) {
294 io_thread_.message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 295 io_thread_.message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
295 this, &SynchConfigGetter::GetLatestConfigOnIOThread)); 296 this, &SynchConfigGetter::GetLatestConfigOnIOThread));
296 Wait(); 297 Wait();
297 *config = proxy_config_; 298 *config = proxy_config_;
298 return get_latest_config_result_; 299 return get_latest_config_result_;
299 } 300 }
300 301
301 private: 302 private:
302 // [Runs on |io_thread_|] 303 // [Runs on |io_thread_|]
303 void Init() { 304 void Init() {
(...skipping 20 matching lines...) Expand all
324 } 325 }
325 326
326 base::WaitableEvent event_; 327 base::WaitableEvent event_;
327 base::Thread io_thread_; 328 base::Thread io_thread_;
328 329
329 net::ProxyConfigServiceLinux* config_service_; 330 net::ProxyConfigServiceLinux* config_service_;
330 331
331 // The config obtained by |io_thread_| and read back by the main 332 // The config obtained by |io_thread_| and read back by the main
332 // thread. 333 // thread.
333 net::ProxyConfig proxy_config_; 334 net::ProxyConfig proxy_config_;
334 bool get_latest_config_result_; // Return value from GetLatestProxyConfig(). 335
336 // Return value from GetLatestProxyConfig().
337 net::ProxyConfigService::ConfigAvailability get_latest_config_result_;
335 }; 338 };
336 339
337 DISABLE_RUNNABLE_METHOD_REFCOUNT(SynchConfigGetter); 340 DISABLE_RUNNABLE_METHOD_REFCOUNT(SynchConfigGetter);
338 341
339 namespace net { 342 namespace net {
340 343
341 // This test fixture is only really needed for the KDEConfigParser test case, 344 // This test fixture is only really needed for the KDEConfigParser test case,
342 // but all the test cases with the same prefix ("ProxyConfigServiceLinuxTest") 345 // but all the test cases with the same prefix ("ProxyConfigServiceLinuxTest")
343 // must use the same test fixture class (also "ProxyConfigServiceLinuxTest"). 346 // must use the same test fixture class (also "ProxyConfigServiceLinuxTest").
344 class ProxyConfigServiceLinuxTest : public PlatformTest { 347 class ProxyConfigServiceLinuxTest : public PlatformTest {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 390
388 // Inspired from proxy_config_service_win_unittest.cc. 391 // Inspired from proxy_config_service_win_unittest.cc.
389 // Very neat, but harder to track down failures though. 392 // Very neat, but harder to track down failures though.
390 const struct { 393 const struct {
391 // Short description to identify the test 394 // Short description to identify the test
392 std::string description; 395 std::string description;
393 396
394 // Input. 397 // Input.
395 GConfValues values; 398 GConfValues values;
396 399
397 // Expected outputs (fields of the ProxyConfig). 400 // Expected outputs (availability and fields of ProxyConfig).
401 ProxyConfigService::ConfigAvailability availability;
398 bool auto_detect; 402 bool auto_detect;
399 GURL pac_url; 403 GURL pac_url;
400 ProxyRulesExpectation proxy_rules; 404 ProxyRulesExpectation proxy_rules;
401 } tests[] = { 405 } tests[] = {
402 { 406 {
403 TEST_DESC("No proxying"), 407 TEST_DESC("No proxying"),
404 { // Input. 408 { // Input.
405 "none", // mode 409 "none", // mode
406 "", // autoconfig_url 410 "", // autoconfig_url
407 "", "", "", "", // hosts 411 "", "", "", "", // hosts
408 0, 0, 0, 0, // ports 412 0, 0, 0, 0, // ports
409 FALSE, FALSE, FALSE, // use, same, auth 413 FALSE, FALSE, FALSE, // use, same, auth
410 empty_ignores, // ignore_hosts 414 empty_ignores, // ignore_hosts
411 }, 415 },
412 416
413 // Expected result. 417 // Expected result.
418 ProxyConfigService::CONFIG_VALID,
414 false, // auto_detect 419 false, // auto_detect
415 GURL(), // pac_url 420 GURL(), // pac_url
416 ProxyRulesExpectation::Empty(), 421 ProxyRulesExpectation::Empty(),
417 }, 422 },
418 423
419 { 424 {
420 TEST_DESC("Auto detect"), 425 TEST_DESC("Auto detect"),
421 { // Input. 426 { // Input.
422 "auto", // mode 427 "auto", // mode
423 "", // autoconfig_url 428 "", // autoconfig_url
424 "", "", "", "", // hosts 429 "", "", "", "", // hosts
425 0, 0, 0, 0, // ports 430 0, 0, 0, 0, // ports
426 FALSE, FALSE, FALSE, // use, same, auth 431 FALSE, FALSE, FALSE, // use, same, auth
427 empty_ignores, // ignore_hosts 432 empty_ignores, // ignore_hosts
428 }, 433 },
429 434
430 // Expected result. 435 // Expected result.
436 ProxyConfigService::CONFIG_VALID,
431 true, // auto_detect 437 true, // auto_detect
432 GURL(), // pac_url 438 GURL(), // pac_url
433 ProxyRulesExpectation::Empty(), 439 ProxyRulesExpectation::Empty(),
434 }, 440 },
435 441
436 { 442 {
437 TEST_DESC("Valid PAC URL"), 443 TEST_DESC("Valid PAC URL"),
438 { // Input. 444 { // Input.
439 "auto", // mode 445 "auto", // mode
440 "http://wpad/wpad.dat", // autoconfig_url 446 "http://wpad/wpad.dat", // autoconfig_url
441 "", "", "", "", // hosts 447 "", "", "", "", // hosts
442 0, 0, 0, 0, // ports 448 0, 0, 0, 0, // ports
443 FALSE, FALSE, FALSE, // use, same, auth 449 FALSE, FALSE, FALSE, // use, same, auth
444 empty_ignores, // ignore_hosts 450 empty_ignores, // ignore_hosts
445 }, 451 },
446 452
447 // Expected result. 453 // Expected result.
454 ProxyConfigService::CONFIG_VALID,
448 false, // auto_detect 455 false, // auto_detect
449 GURL("http://wpad/wpad.dat"), // pac_url 456 GURL("http://wpad/wpad.dat"), // pac_url
450 ProxyRulesExpectation::Empty(), 457 ProxyRulesExpectation::Empty(),
451 }, 458 },
452 459
453 { 460 {
454 TEST_DESC("Invalid PAC URL"), 461 TEST_DESC("Invalid PAC URL"),
455 { // Input. 462 { // Input.
456 "auto", // mode 463 "auto", // mode
457 "wpad.dat", // autoconfig_url 464 "wpad.dat", // autoconfig_url
458 "", "", "", "", // hosts 465 "", "", "", "", // hosts
459 0, 0, 0, 0, // ports 466 0, 0, 0, 0, // ports
460 FALSE, FALSE, FALSE, // use, same, auth 467 FALSE, FALSE, FALSE, // use, same, auth
461 empty_ignores, // ignore_hosts 468 empty_ignores, // ignore_hosts
462 }, 469 },
463 470
464 // Expected result. 471 // Expected result.
465 false, // auto_detect 472 ProxyConfigService::CONFIG_VALID,
473 false, // auto_detect
466 GURL(), // pac_url 474 GURL(), // pac_url
467 ProxyRulesExpectation::Empty(), 475 ProxyRulesExpectation::Empty(),
468 }, 476 },
469 477
470 { 478 {
471 TEST_DESC("Single-host in proxy list"), 479 TEST_DESC("Single-host in proxy list"),
472 { // Input. 480 { // Input.
473 "manual", // mode 481 "manual", // mode
474 "", // autoconfig_url 482 "", // autoconfig_url
475 "www.google.com", "", "", "", // hosts 483 "www.google.com", "", "", "", // hosts
476 80, 0, 0, 0, // ports 484 80, 0, 0, 0, // ports
477 TRUE, TRUE, FALSE, // use, same, auth 485 TRUE, TRUE, FALSE, // use, same, auth
478 empty_ignores, // ignore_hosts 486 empty_ignores, // ignore_hosts
479 }, 487 },
480 488
481 // Expected result. 489 // Expected result.
490 ProxyConfigService::CONFIG_VALID,
482 false, // auto_detect 491 false, // auto_detect
483 GURL(), // pac_url 492 GURL(), // pac_url
484 ProxyRulesExpectation::Single( 493 ProxyRulesExpectation::Single(
485 "www.google.com:80", // single proxy 494 "www.google.com:80", // single proxy
486 ""), // bypass rules 495 ""), // bypass rules
487 }, 496 },
488 497
489 { 498 {
490 TEST_DESC("use_http_proxy is honored"), 499 TEST_DESC("use_http_proxy is honored"),
491 { // Input. 500 { // Input.
492 "manual", // mode 501 "manual", // mode
493 "", // autoconfig_url 502 "", // autoconfig_url
494 "www.google.com", "", "", "", // hosts 503 "www.google.com", "", "", "", // hosts
495 80, 0, 0, 0, // ports 504 80, 0, 0, 0, // ports
496 FALSE, TRUE, FALSE, // use, same, auth 505 FALSE, TRUE, FALSE, // use, same, auth
497 empty_ignores, // ignore_hosts 506 empty_ignores, // ignore_hosts
498 }, 507 },
499 508
500 // Expected result. 509 // Expected result.
510 ProxyConfigService::CONFIG_VALID,
501 false, // auto_detect 511 false, // auto_detect
502 GURL(), // pac_url 512 GURL(), // pac_url
503 ProxyRulesExpectation::Empty(), 513 ProxyRulesExpectation::Empty(),
504 }, 514 },
505 515
506 { 516 {
507 TEST_DESC("use_http_proxy and use_same_proxy are optional"), 517 TEST_DESC("use_http_proxy and use_same_proxy are optional"),
508 { // Input. 518 { // Input.
509 "manual", // mode 519 "manual", // mode
510 "", // autoconfig_url 520 "", // autoconfig_url
511 "www.google.com", "", "", "", // hosts 521 "www.google.com", "", "", "", // hosts
512 80, 0, 0, 0, // ports 522 80, 0, 0, 0, // ports
513 UNSET, UNSET, FALSE, // use, same, auth 523 UNSET, UNSET, FALSE, // use, same, auth
514 empty_ignores, // ignore_hosts 524 empty_ignores, // ignore_hosts
515 }, 525 },
516 526
517 // Expected result. 527 // Expected result.
528 ProxyConfigService::CONFIG_VALID,
518 false, // auto_detect 529 false, // auto_detect
519 GURL(), // pac_url 530 GURL(), // pac_url
520 ProxyRulesExpectation::PerScheme( 531 ProxyRulesExpectation::PerScheme(
521 "www.google.com:80", // http 532 "www.google.com:80", // http
522 "", // https 533 "", // https
523 "", // ftp 534 "", // ftp
524 ""), // bypass rules 535 ""), // bypass rules
525 }, 536 },
526 537
527 { 538 {
528 TEST_DESC("Single-host, different port"), 539 TEST_DESC("Single-host, different port"),
529 { // Input. 540 { // Input.
530 "manual", // mode 541 "manual", // mode
531 "", // autoconfig_url 542 "", // autoconfig_url
532 "www.google.com", "", "", "", // hosts 543 "www.google.com", "", "", "", // hosts
533 88, 0, 0, 0, // ports 544 88, 0, 0, 0, // ports
534 TRUE, TRUE, FALSE, // use, same, auth 545 TRUE, TRUE, FALSE, // use, same, auth
535 empty_ignores, // ignore_hosts 546 empty_ignores, // ignore_hosts
536 }, 547 },
537 548
538 // Expected result. 549 // Expected result.
550 ProxyConfigService::CONFIG_VALID,
539 false, // auto_detect 551 false, // auto_detect
540 GURL(), // pac_url 552 GURL(), // pac_url
541 ProxyRulesExpectation::Single( 553 ProxyRulesExpectation::Single(
542 "www.google.com:88", // single proxy 554 "www.google.com:88", // single proxy
543 ""), // bypass rules 555 ""), // bypass rules
544 }, 556 },
545 557
546 { 558 {
547 TEST_DESC("Per-scheme proxy rules"), 559 TEST_DESC("Per-scheme proxy rules"),
548 { // Input. 560 { // Input.
549 "manual", // mode 561 "manual", // mode
550 "", // autoconfig_url 562 "", // autoconfig_url
551 "www.google.com", // http_host 563 "www.google.com", // http_host
552 "www.foo.com", // secure_host 564 "www.foo.com", // secure_host
553 "ftp.foo.com", // ftp 565 "ftp.foo.com", // ftp
554 "", // socks 566 "", // socks
555 88, 110, 121, 0, // ports 567 88, 110, 121, 0, // ports
556 TRUE, FALSE, FALSE, // use, same, auth 568 TRUE, FALSE, FALSE, // use, same, auth
557 empty_ignores, // ignore_hosts 569 empty_ignores, // ignore_hosts
558 }, 570 },
559 571
560 // Expected result. 572 // Expected result.
573 ProxyConfigService::CONFIG_VALID,
561 false, // auto_detect 574 false, // auto_detect
562 GURL(), // pac_url 575 GURL(), // pac_url
563 ProxyRulesExpectation::PerScheme( 576 ProxyRulesExpectation::PerScheme(
564 "www.google.com:88", // http 577 "www.google.com:88", // http
565 "www.foo.com:110", // https 578 "www.foo.com:110", // https
566 "ftp.foo.com:121", // ftp 579 "ftp.foo.com:121", // ftp
567 ""), // bypass rules 580 ""), // bypass rules
568 }, 581 },
569 582
570 { 583 {
571 TEST_DESC("socks"), 584 TEST_DESC("socks"),
572 { // Input. 585 { // Input.
573 "manual", // mode 586 "manual", // mode
574 "", // autoconfig_url 587 "", // autoconfig_url
575 "", "", "", "socks.com", // hosts 588 "", "", "", "socks.com", // hosts
576 0, 0, 0, 99, // ports 589 0, 0, 0, 99, // ports
577 TRUE, FALSE, FALSE, // use, same, auth 590 TRUE, FALSE, FALSE, // use, same, auth
578 empty_ignores, // ignore_hosts 591 empty_ignores, // ignore_hosts
579 }, 592 },
580 593
581 // Expected result. 594 // Expected result.
595 ProxyConfigService::CONFIG_VALID,
582 false, // auto_detect 596 false, // auto_detect
583 GURL(), // pac_url 597 GURL(), // pac_url
584 ProxyRulesExpectation::Single( 598 ProxyRulesExpectation::Single(
585 "socks5://socks.com:99", // single proxy 599 "socks5://socks.com:99", // single proxy
586 "") // bypass rules 600 "") // bypass rules
587 }, 601 },
588 602
589 { 603 {
590 TEST_DESC("Bypass *.google.com"), 604 TEST_DESC("Bypass *.google.com"),
591 { // Input. 605 { // Input.
592 "manual", // mode 606 "manual", // mode
593 "", // autoconfig_url 607 "", // autoconfig_url
594 "www.google.com", "", "", "", // hosts 608 "www.google.com", "", "", "", // hosts
595 80, 0, 0, 0, // ports 609 80, 0, 0, 0, // ports
596 TRUE, TRUE, FALSE, // use, same, auth 610 TRUE, TRUE, FALSE, // use, same, auth
597 google_ignores, // ignore_hosts 611 google_ignores, // ignore_hosts
598 }, 612 },
599 613
614 ProxyConfigService::CONFIG_VALID,
600 false, // auto_detect 615 false, // auto_detect
601 GURL(), // pac_url 616 GURL(), // pac_url
602 ProxyRulesExpectation::Single( 617 ProxyRulesExpectation::Single(
603 "www.google.com:80", // single proxy 618 "www.google.com:80", // single proxy
604 "*.google.com"), // bypass rules 619 "*.google.com"), // bypass rules
605 }, 620 },
606 }; 621 };
607 622
608 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 623 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
609 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, 624 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
610 tests[i].description.c_str())); 625 tests[i].description.c_str()));
611 MockEnvironment* env = new MockEnvironment; 626 MockEnvironment* env = new MockEnvironment;
612 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; 627 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter;
613 SynchConfigGetter sync_config_getter( 628 SynchConfigGetter sync_config_getter(
614 new ProxyConfigServiceLinux(env, gconf_getter)); 629 new ProxyConfigServiceLinux(env, gconf_getter));
615 ProxyConfig config; 630 ProxyConfig config;
616 gconf_getter->values = tests[i].values; 631 gconf_getter->values = tests[i].values;
617 sync_config_getter.SetupAndInitialFetch(); 632 sync_config_getter.SetupAndInitialFetch();
618 sync_config_getter.SyncGetLatestProxyConfig(&config); 633 ProxyConfigService::ConfigAvailability availability =
634 sync_config_getter.SyncGetLatestProxyConfig(&config);
635 EXPECT_EQ(tests[i].availability, availability);
619 636
620 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); 637 if (availability == ProxyConfigService::CONFIG_VALID) {
621 EXPECT_EQ(tests[i].pac_url, config.pac_url()); 638 EXPECT_EQ(tests[i].auto_detect, config.auto_detect());
622 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); 639 EXPECT_EQ(tests[i].pac_url, config.pac_url());
640 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules()));
641 }
623 } 642 }
624 } 643 }
625 644
626 TEST_F(ProxyConfigServiceLinuxTest, BasicEnvTest) { 645 TEST_F(ProxyConfigServiceLinuxTest, BasicEnvTest) {
627 // Inspired from proxy_config_service_win_unittest.cc. 646 // Inspired from proxy_config_service_win_unittest.cc.
628 const struct { 647 const struct {
629 // Short description to identify the test 648 // Short description to identify the test
630 std::string description; 649 std::string description;
631 650
632 // Input. 651 // Input.
633 EnvVarValues values; 652 EnvVarValues values;
634 653
635 // Expected outputs (fields of the ProxyConfig). 654 // Expected outputs (availability and fields of ProxyConfig).
655 ProxyConfigService::ConfigAvailability availability;
636 bool auto_detect; 656 bool auto_detect;
637 GURL pac_url; 657 GURL pac_url;
638 ProxyRulesExpectation proxy_rules; 658 ProxyRulesExpectation proxy_rules;
639 } tests[] = { 659 } tests[] = {
640 { 660 {
641 TEST_DESC("No proxying"), 661 TEST_DESC("No proxying"),
642 { // Input. 662 { // Input.
643 NULL, // DESKTOP_SESSION 663 NULL, // DESKTOP_SESSION
644 NULL, // HOME 664 NULL, // HOME
645 NULL, // KDEHOME 665 NULL, // KDEHOME
646 NULL, // KDE_SESSION_VERSION 666 NULL, // KDE_SESSION_VERSION
647 NULL, // auto_proxy 667 NULL, // auto_proxy
648 NULL, // all_proxy 668 NULL, // all_proxy
649 NULL, NULL, NULL, // per-proto proxies 669 NULL, NULL, NULL, // per-proto proxies
650 NULL, NULL, // SOCKS 670 NULL, NULL, // SOCKS
651 "*", // no_proxy 671 "*", // no_proxy
652 }, 672 },
653 673
654 // Expected result. 674 // Expected result.
675 ProxyConfigService::CONFIG_VALID,
655 false, // auto_detect 676 false, // auto_detect
656 GURL(), // pac_url 677 GURL(), // pac_url
657 ProxyRulesExpectation::Empty(), 678 ProxyRulesExpectation::Empty(),
658 }, 679 },
659 680
660 { 681 {
661 TEST_DESC("Auto detect"), 682 TEST_DESC("Auto detect"),
662 { // Input. 683 { // Input.
663 NULL, // DESKTOP_SESSION 684 NULL, // DESKTOP_SESSION
664 NULL, // HOME 685 NULL, // HOME
665 NULL, // KDEHOME 686 NULL, // KDEHOME
666 NULL, // KDE_SESSION_VERSION 687 NULL, // KDE_SESSION_VERSION
667 "", // auto_proxy 688 "", // auto_proxy
668 NULL, // all_proxy 689 NULL, // all_proxy
669 NULL, NULL, NULL, // per-proto proxies 690 NULL, NULL, NULL, // per-proto proxies
670 NULL, NULL, // SOCKS 691 NULL, NULL, // SOCKS
671 NULL, // no_proxy 692 NULL, // no_proxy
672 }, 693 },
673 694
674 // Expected result. 695 // Expected result.
696 ProxyConfigService::CONFIG_VALID,
675 true, // auto_detect 697 true, // auto_detect
676 GURL(), // pac_url 698 GURL(), // pac_url
677 ProxyRulesExpectation::Empty(), 699 ProxyRulesExpectation::Empty(),
678 }, 700 },
679 701
680 { 702 {
681 TEST_DESC("Valid PAC URL"), 703 TEST_DESC("Valid PAC URL"),
682 { // Input. 704 { // Input.
683 NULL, // DESKTOP_SESSION 705 NULL, // DESKTOP_SESSION
684 NULL, // HOME 706 NULL, // HOME
685 NULL, // KDEHOME 707 NULL, // KDEHOME
686 NULL, // KDE_SESSION_VERSION 708 NULL, // KDE_SESSION_VERSION
687 "http://wpad/wpad.dat", // auto_proxy 709 "http://wpad/wpad.dat", // auto_proxy
688 NULL, // all_proxy 710 NULL, // all_proxy
689 NULL, NULL, NULL, // per-proto proxies 711 NULL, NULL, NULL, // per-proto proxies
690 NULL, NULL, // SOCKS 712 NULL, NULL, // SOCKS
691 NULL, // no_proxy 713 NULL, // no_proxy
692 }, 714 },
693 715
694 // Expected result. 716 // Expected result.
717 ProxyConfigService::CONFIG_VALID,
695 false, // auto_detect 718 false, // auto_detect
696 GURL("http://wpad/wpad.dat"), // pac_url 719 GURL("http://wpad/wpad.dat"), // pac_url
697 ProxyRulesExpectation::Empty(), 720 ProxyRulesExpectation::Empty(),
698 }, 721 },
699 722
700 { 723 {
701 TEST_DESC("Invalid PAC URL"), 724 TEST_DESC("Invalid PAC URL"),
702 { // Input. 725 { // Input.
703 NULL, // DESKTOP_SESSION 726 NULL, // DESKTOP_SESSION
704 NULL, // HOME 727 NULL, // HOME
705 NULL, // KDEHOME 728 NULL, // KDEHOME
706 NULL, // KDE_SESSION_VERSION 729 NULL, // KDE_SESSION_VERSION
707 "wpad.dat", // auto_proxy 730 "wpad.dat", // auto_proxy
708 NULL, // all_proxy 731 NULL, // all_proxy
709 NULL, NULL, NULL, // per-proto proxies 732 NULL, NULL, NULL, // per-proto proxies
710 NULL, NULL, // SOCKS 733 NULL, NULL, // SOCKS
711 NULL, // no_proxy 734 NULL, // no_proxy
712 }, 735 },
713 736
714 // Expected result. 737 // Expected result.
738 ProxyConfigService::CONFIG_VALID,
715 false, // auto_detect 739 false, // auto_detect
716 GURL(), // pac_url 740 GURL(), // pac_url
717 ProxyRulesExpectation::Empty(), 741 ProxyRulesExpectation::Empty(),
718 }, 742 },
719 743
720 { 744 {
721 TEST_DESC("Single-host in proxy list"), 745 TEST_DESC("Single-host in proxy list"),
722 { // Input. 746 { // Input.
723 NULL, // DESKTOP_SESSION 747 NULL, // DESKTOP_SESSION
724 NULL, // HOME 748 NULL, // HOME
725 NULL, // KDEHOME 749 NULL, // KDEHOME
726 NULL, // KDE_SESSION_VERSION 750 NULL, // KDE_SESSION_VERSION
727 NULL, // auto_proxy 751 NULL, // auto_proxy
728 "www.google.com", // all_proxy 752 "www.google.com", // all_proxy
729 NULL, NULL, NULL, // per-proto proxies 753 NULL, NULL, NULL, // per-proto proxies
730 NULL, NULL, // SOCKS 754 NULL, NULL, // SOCKS
731 NULL, // no_proxy 755 NULL, // no_proxy
732 }, 756 },
733 757
734 // Expected result. 758 // Expected result.
759 ProxyConfigService::CONFIG_VALID,
735 false, // auto_detect 760 false, // auto_detect
736 GURL(), // pac_url 761 GURL(), // pac_url
737 ProxyRulesExpectation::Single( 762 ProxyRulesExpectation::Single(
738 "www.google.com:80", // single proxy 763 "www.google.com:80", // single proxy
739 ""), // bypass rules 764 ""), // bypass rules
740 }, 765 },
741 766
742 { 767 {
743 TEST_DESC("Single-host, different port"), 768 TEST_DESC("Single-host, different port"),
744 { // Input. 769 { // Input.
745 NULL, // DESKTOP_SESSION 770 NULL, // DESKTOP_SESSION
746 NULL, // HOME 771 NULL, // HOME
747 NULL, // KDEHOME 772 NULL, // KDEHOME
748 NULL, // KDE_SESSION_VERSION 773 NULL, // KDE_SESSION_VERSION
749 NULL, // auto_proxy 774 NULL, // auto_proxy
750 "www.google.com:99", // all_proxy 775 "www.google.com:99", // all_proxy
751 NULL, NULL, NULL, // per-proto proxies 776 NULL, NULL, NULL, // per-proto proxies
752 NULL, NULL, // SOCKS 777 NULL, NULL, // SOCKS
753 NULL, // no_proxy 778 NULL, // no_proxy
754 }, 779 },
755 780
756 // Expected result. 781 // Expected result.
782 ProxyConfigService::CONFIG_VALID,
757 false, // auto_detect 783 false, // auto_detect
758 GURL(), // pac_url 784 GURL(), // pac_url
759 ProxyRulesExpectation::Single( 785 ProxyRulesExpectation::Single(
760 "www.google.com:99", // single 786 "www.google.com:99", // single
761 ""), // bypass rules 787 ""), // bypass rules
762 }, 788 },
763 789
764 { 790 {
765 TEST_DESC("Tolerate a scheme"), 791 TEST_DESC("Tolerate a scheme"),
766 { // Input. 792 { // Input.
767 NULL, // DESKTOP_SESSION 793 NULL, // DESKTOP_SESSION
768 NULL, // HOME 794 NULL, // HOME
769 NULL, // KDEHOME 795 NULL, // KDEHOME
770 NULL, // KDE_SESSION_VERSION 796 NULL, // KDE_SESSION_VERSION
771 NULL, // auto_proxy 797 NULL, // auto_proxy
772 "http://www.google.com:99", // all_proxy 798 "http://www.google.com:99", // all_proxy
773 NULL, NULL, NULL, // per-proto proxies 799 NULL, NULL, NULL, // per-proto proxies
774 NULL, NULL, // SOCKS 800 NULL, NULL, // SOCKS
775 NULL, // no_proxy 801 NULL, // no_proxy
776 }, 802 },
777 803
778 // Expected result. 804 // Expected result.
805 ProxyConfigService::CONFIG_VALID,
779 false, // auto_detect 806 false, // auto_detect
780 GURL(), // pac_url 807 GURL(), // pac_url
781 ProxyRulesExpectation::Single( 808 ProxyRulesExpectation::Single(
782 "www.google.com:99", // single proxy 809 "www.google.com:99", // single proxy
783 ""), // bypass rules 810 ""), // bypass rules
784 }, 811 },
785 812
786 { 813 {
787 TEST_DESC("Per-scheme proxy rules"), 814 TEST_DESC("Per-scheme proxy rules"),
788 { // Input. 815 { // Input.
789 NULL, // DESKTOP_SESSION 816 NULL, // DESKTOP_SESSION
790 NULL, // HOME 817 NULL, // HOME
791 NULL, // KDEHOME 818 NULL, // KDEHOME
792 NULL, // KDE_SESSION_VERSION 819 NULL, // KDE_SESSION_VERSION
793 NULL, // auto_proxy 820 NULL, // auto_proxy
794 NULL, // all_proxy 821 NULL, // all_proxy
795 "www.google.com:80", "www.foo.com:110", "ftp.foo.com:121", // per-proto 822 "www.google.com:80", "www.foo.com:110", "ftp.foo.com:121", // per-proto
796 NULL, NULL, // SOCKS 823 NULL, NULL, // SOCKS
797 NULL, // no_proxy 824 NULL, // no_proxy
798 }, 825 },
799 826
800 // Expected result. 827 // Expected result.
828 ProxyConfigService::CONFIG_VALID,
801 false, // auto_detect 829 false, // auto_detect
802 GURL(), // pac_url 830 GURL(), // pac_url
803 ProxyRulesExpectation::PerScheme( 831 ProxyRulesExpectation::PerScheme(
804 "www.google.com:80", // http 832 "www.google.com:80", // http
805 "www.foo.com:110", // https 833 "www.foo.com:110", // https
806 "ftp.foo.com:121", // ftp 834 "ftp.foo.com:121", // ftp
807 ""), // bypass rules 835 ""), // bypass rules
808 }, 836 },
809 837
810 { 838 {
811 TEST_DESC("socks"), 839 TEST_DESC("socks"),
812 { // Input. 840 { // Input.
813 NULL, // DESKTOP_SESSION 841 NULL, // DESKTOP_SESSION
814 NULL, // HOME 842 NULL, // HOME
815 NULL, // KDEHOME 843 NULL, // KDEHOME
816 NULL, // KDE_SESSION_VERSION 844 NULL, // KDE_SESSION_VERSION
817 NULL, // auto_proxy 845 NULL, // auto_proxy
818 "", // all_proxy 846 "", // all_proxy
819 NULL, NULL, NULL, // per-proto proxies 847 NULL, NULL, NULL, // per-proto proxies
820 "socks.com:888", NULL, // SOCKS 848 "socks.com:888", NULL, // SOCKS
821 NULL, // no_proxy 849 NULL, // no_proxy
822 }, 850 },
823 851
824 // Expected result. 852 // Expected result.
853 ProxyConfigService::CONFIG_VALID,
825 false, // auto_detect 854 false, // auto_detect
826 GURL(), // pac_url 855 GURL(), // pac_url
827 ProxyRulesExpectation::Single( 856 ProxyRulesExpectation::Single(
828 "socks5://socks.com:888", // single proxy 857 "socks5://socks.com:888", // single proxy
829 ""), // bypass rules 858 ""), // bypass rules
830 }, 859 },
831 860
832 { 861 {
833 TEST_DESC("socks4"), 862 TEST_DESC("socks4"),
834 { // Input. 863 { // Input.
835 NULL, // DESKTOP_SESSION 864 NULL, // DESKTOP_SESSION
836 NULL, // HOME 865 NULL, // HOME
837 NULL, // KDEHOME 866 NULL, // KDEHOME
838 NULL, // KDE_SESSION_VERSION 867 NULL, // KDE_SESSION_VERSION
839 NULL, // auto_proxy 868 NULL, // auto_proxy
840 "", // all_proxy 869 "", // all_proxy
841 NULL, NULL, NULL, // per-proto proxies 870 NULL, NULL, NULL, // per-proto proxies
842 "socks.com:888", "4", // SOCKS 871 "socks.com:888", "4", // SOCKS
843 NULL, // no_proxy 872 NULL, // no_proxy
844 }, 873 },
845 874
846 // Expected result. 875 // Expected result.
876 ProxyConfigService::CONFIG_VALID,
847 false, // auto_detect 877 false, // auto_detect
848 GURL(), // pac_url 878 GURL(), // pac_url
849 ProxyRulesExpectation::Single( 879 ProxyRulesExpectation::Single(
850 "socks4://socks.com:888", // single proxy 880 "socks4://socks.com:888", // single proxy
851 ""), // bypass rules 881 ""), // bypass rules
852 }, 882 },
853 883
854 { 884 {
855 TEST_DESC("socks default port"), 885 TEST_DESC("socks default port"),
856 { // Input. 886 { // Input.
857 NULL, // DESKTOP_SESSION 887 NULL, // DESKTOP_SESSION
858 NULL, // HOME 888 NULL, // HOME
859 NULL, // KDEHOME 889 NULL, // KDEHOME
860 NULL, // KDE_SESSION_VERSION 890 NULL, // KDE_SESSION_VERSION
861 NULL, // auto_proxy 891 NULL, // auto_proxy
862 "", // all_proxy 892 "", // all_proxy
863 NULL, NULL, NULL, // per-proto proxies 893 NULL, NULL, NULL, // per-proto proxies
864 "socks.com", NULL, // SOCKS 894 "socks.com", NULL, // SOCKS
865 NULL, // no_proxy 895 NULL, // no_proxy
866 }, 896 },
867 897
868 // Expected result. 898 // Expected result.
899 ProxyConfigService::CONFIG_VALID,
869 false, // auto_detect 900 false, // auto_detect
870 GURL(), // pac_url 901 GURL(), // pac_url
871 ProxyRulesExpectation::Single( 902 ProxyRulesExpectation::Single(
872 "socks5://socks.com:1080", // single proxy 903 "socks5://socks.com:1080", // single proxy
873 ""), // bypass rules 904 ""), // bypass rules
874 }, 905 },
875 906
876 { 907 {
877 TEST_DESC("bypass"), 908 TEST_DESC("bypass"),
878 { // Input. 909 { // Input.
879 NULL, // DESKTOP_SESSION 910 NULL, // DESKTOP_SESSION
880 NULL, // HOME 911 NULL, // HOME
881 NULL, // KDEHOME 912 NULL, // KDEHOME
882 NULL, // KDE_SESSION_VERSION 913 NULL, // KDE_SESSION_VERSION
883 NULL, // auto_proxy 914 NULL, // auto_proxy
884 "www.google.com", // all_proxy 915 "www.google.com", // all_proxy
885 NULL, NULL, NULL, // per-proto 916 NULL, NULL, NULL, // per-proto
886 NULL, NULL, // SOCKS 917 NULL, NULL, // SOCKS
887 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", // no_proxy 918 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", // no_proxy
888 }, 919 },
889 920
921 // Expected result.
922 ProxyConfigService::CONFIG_VALID,
890 false, // auto_detect 923 false, // auto_detect
891 GURL(), // pac_url 924 GURL(), // pac_url
892 ProxyRulesExpectation::Single( 925 ProxyRulesExpectation::Single(
893 "www.google.com:80", 926 "www.google.com:80",
894 "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"), 927 "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"),
895 }, 928 },
896 }; 929 };
897 930
898 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 931 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
899 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, 932 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
900 tests[i].description.c_str())); 933 tests[i].description.c_str()));
901 MockEnvironment* env = new MockEnvironment; 934 MockEnvironment* env = new MockEnvironment;
902 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; 935 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter;
903 SynchConfigGetter sync_config_getter( 936 SynchConfigGetter sync_config_getter(
904 new ProxyConfigServiceLinux(env, gconf_getter)); 937 new ProxyConfigServiceLinux(env, gconf_getter));
905 ProxyConfig config; 938 ProxyConfig config;
906 env->values = tests[i].values; 939 env->values = tests[i].values;
907 sync_config_getter.SetupAndInitialFetch(); 940 sync_config_getter.SetupAndInitialFetch();
908 sync_config_getter.SyncGetLatestProxyConfig(&config); 941 ProxyConfigService::ConfigAvailability availability =
942 sync_config_getter.SyncGetLatestProxyConfig(&config);
943 EXPECT_EQ(tests[i].availability, availability);
909 944
910 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); 945 if (availability == ProxyConfigService::CONFIG_VALID) {
911 EXPECT_EQ(tests[i].pac_url, config.pac_url()); 946 EXPECT_EQ(tests[i].auto_detect, config.auto_detect());
912 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); 947 EXPECT_EQ(tests[i].pac_url, config.pac_url());
948 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules()));
949 }
913 } 950 }
914 } 951 }
915 952
916 TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) { 953 TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) {
917 MockEnvironment* env = new MockEnvironment; 954 MockEnvironment* env = new MockEnvironment;
918 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; 955 MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter;
919 ProxyConfigServiceLinux* service = 956 ProxyConfigServiceLinux* service =
920 new ProxyConfigServiceLinux(env, gconf_getter); 957 new ProxyConfigServiceLinux(env, gconf_getter);
921 SynchConfigGetter sync_config_getter(service); 958 SynchConfigGetter sync_config_getter(service);
922 ProxyConfig config; 959 ProxyConfig config;
923 960
924 // Start with no proxy. 961 // Start with no proxy.
925 gconf_getter->values.mode = "none"; 962 gconf_getter->values.mode = "none";
926 sync_config_getter.SetupAndInitialFetch(); 963 sync_config_getter.SetupAndInitialFetch();
927 sync_config_getter.SyncGetLatestProxyConfig(&config); 964 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
965 sync_config_getter.SyncGetLatestProxyConfig(&config));
928 EXPECT_FALSE(config.auto_detect()); 966 EXPECT_FALSE(config.auto_detect());
929 967
930 // Now set to auto-detect. 968 // Now set to auto-detect.
931 gconf_getter->values.mode = "auto"; 969 gconf_getter->values.mode = "auto";
932 // Simulate gconf notification callback. 970 // Simulate gconf notification callback.
933 service->OnCheckProxyConfigSettings(); 971 service->OnCheckProxyConfigSettings();
934 sync_config_getter.SyncGetLatestProxyConfig(&config); 972 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
973 sync_config_getter.SyncGetLatestProxyConfig(&config));
935 EXPECT_TRUE(config.auto_detect()); 974 EXPECT_TRUE(config.auto_detect());
936 } 975 }
937 976
938 TEST_F(ProxyConfigServiceLinuxTest, KDEConfigParser) { 977 TEST_F(ProxyConfigServiceLinuxTest, KDEConfigParser) {
939 // One of the tests below needs a worst-case long line prefix. We build it 978 // One of the tests below needs a worst-case long line prefix. We build it
940 // programmatically so that it will always be the right size. 979 // programmatically so that it will always be the right size.
941 std::string long_line; 980 std::string long_line;
942 size_t limit = ProxyConfigServiceLinux::GConfSettingGetter::BUFFER_SIZE - 1; 981 size_t limit = ProxyConfigServiceLinux::GConfSettingGetter::BUFFER_SIZE - 1;
943 for (size_t i = 0; i < limit; ++i) 982 for (size_t i = 0; i < limit; ++i)
944 long_line += "-"; 983 long_line += "-";
945 984
946 // Inspired from proxy_config_service_win_unittest.cc. 985 // Inspired from proxy_config_service_win_unittest.cc.
947 const struct { 986 const struct {
948 // Short description to identify the test 987 // Short description to identify the test
949 std::string description; 988 std::string description;
950 989
951 // Input. 990 // Input.
952 std::string kioslaverc; 991 std::string kioslaverc;
953 EnvVarValues env_values; 992 EnvVarValues env_values;
954 993
955 // Expected outputs (fields of the ProxyConfig). 994 // Expected outputs (availability and fields of ProxyConfig).
995 ProxyConfigService::ConfigAvailability availability;
956 bool auto_detect; 996 bool auto_detect;
957 GURL pac_url; 997 GURL pac_url;
958 ProxyRulesExpectation proxy_rules; 998 ProxyRulesExpectation proxy_rules;
959 } tests[] = { 999 } tests[] = {
960 { 1000 {
961 TEST_DESC("No proxying"), 1001 TEST_DESC("No proxying"),
962 1002
963 // Input. 1003 // Input.
964 "[Proxy Settings]\nProxyType=0\n", 1004 "[Proxy Settings]\nProxyType=0\n",
965 {}, // env_values 1005 {}, // env_values
966 1006
967 // Expected result. 1007 // Expected result.
1008 ProxyConfigService::CONFIG_VALID,
968 false, // auto_detect 1009 false, // auto_detect
969 GURL(), // pac_url 1010 GURL(), // pac_url
970 ProxyRulesExpectation::Empty(), 1011 ProxyRulesExpectation::Empty(),
971 }, 1012 },
972 1013
973 { 1014 {
974 TEST_DESC("Auto detect"), 1015 TEST_DESC("Auto detect"),
975 1016
976 // Input. 1017 // Input.
977 "[Proxy Settings]\nProxyType=3\n", 1018 "[Proxy Settings]\nProxyType=3\n",
978 {}, // env_values 1019 {}, // env_values
979 1020
980 // Expected result. 1021 // Expected result.
1022 ProxyConfigService::CONFIG_VALID,
981 true, // auto_detect 1023 true, // auto_detect
982 GURL(), // pac_url 1024 GURL(), // pac_url
983 ProxyRulesExpectation::Empty(), 1025 ProxyRulesExpectation::Empty(),
984 }, 1026 },
985 1027
986 { 1028 {
987 TEST_DESC("Valid PAC URL"), 1029 TEST_DESC("Valid PAC URL"),
988 1030
989 // Input. 1031 // Input.
990 "[Proxy Settings]\nProxyType=2\n" 1032 "[Proxy Settings]\nProxyType=2\n"
991 "Proxy Config Script=http://wpad/wpad.dat\n", 1033 "Proxy Config Script=http://wpad/wpad.dat\n",
992 {}, // env_values 1034 {}, // env_values
993 1035
994 // Expected result. 1036 // Expected result.
1037 ProxyConfigService::CONFIG_VALID,
995 false, // auto_detect 1038 false, // auto_detect
996 GURL("http://wpad/wpad.dat"), // pac_url 1039 GURL("http://wpad/wpad.dat"), // pac_url
997 ProxyRulesExpectation::Empty(), 1040 ProxyRulesExpectation::Empty(),
998 }, 1041 },
999 1042
1000 { 1043 {
1001 TEST_DESC("Per-scheme proxy rules"), 1044 TEST_DESC("Per-scheme proxy rules"),
1002 1045
1003 // Input. 1046 // Input.
1004 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1047 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1005 "httpsProxy=www.foo.com\nftpProxy=ftp.foo.com\n", 1048 "httpsProxy=www.foo.com\nftpProxy=ftp.foo.com\n",
1006 {}, // env_values 1049 {}, // env_values
1007 1050
1008 // Expected result. 1051 // Expected result.
1052 ProxyConfigService::CONFIG_VALID,
1009 false, // auto_detect 1053 false, // auto_detect
1010 GURL(), // pac_url 1054 GURL(), // pac_url
1011 ProxyRulesExpectation::PerScheme( 1055 ProxyRulesExpectation::PerScheme(
1012 "www.google.com:80", // http 1056 "www.google.com:80", // http
1013 "www.foo.com:80", // https 1057 "www.foo.com:80", // https
1014 "ftp.foo.com:80", // http 1058 "ftp.foo.com:80", // http
1015 ""), // bypass rules 1059 ""), // bypass rules
1016 }, 1060 },
1017 1061
1018 { 1062 {
1019 TEST_DESC("Only HTTP proxy specified"), 1063 TEST_DESC("Only HTTP proxy specified"),
1020 1064
1021 // Input. 1065 // Input.
1022 "[Proxy Settings]\nProxyType=1\n" 1066 "[Proxy Settings]\nProxyType=1\n"
1023 "httpProxy=www.google.com\n", 1067 "httpProxy=www.google.com\n",
1024 {}, // env_values 1068 {}, // env_values
1025 1069
1026 // Expected result. 1070 // Expected result.
1071 ProxyConfigService::CONFIG_VALID,
1027 false, // auto_detect 1072 false, // auto_detect
1028 GURL(), // pac_url 1073 GURL(), // pac_url
1029 ProxyRulesExpectation::PerScheme( 1074 ProxyRulesExpectation::PerScheme(
1030 "www.google.com:80", // http 1075 "www.google.com:80", // http
1031 "", // https 1076 "", // https
1032 "", // ftp 1077 "", // ftp
1033 ""), // bypass rules 1078 ""), // bypass rules
1034 }, 1079 },
1035 1080
1036 { 1081 {
1037 TEST_DESC("Only HTTP proxy specified, different port"), 1082 TEST_DESC("Only HTTP proxy specified, different port"),
1038 1083
1039 // Input. 1084 // Input.
1040 "[Proxy Settings]\nProxyType=1\n" 1085 "[Proxy Settings]\nProxyType=1\n"
1041 "httpProxy=www.google.com:88\n", 1086 "httpProxy=www.google.com:88\n",
1042 {}, // env_values 1087 {}, // env_values
1043 1088
1044 // Expected result. 1089 // Expected result.
1090 ProxyConfigService::CONFIG_VALID,
1045 false, // auto_detect 1091 false, // auto_detect
1046 GURL(), // pac_url 1092 GURL(), // pac_url
1047 ProxyRulesExpectation::PerScheme( 1093 ProxyRulesExpectation::PerScheme(
1048 "www.google.com:88", // http 1094 "www.google.com:88", // http
1049 "", // https 1095 "", // https
1050 "", // ftp 1096 "", // ftp
1051 ""), // bypass rules 1097 ""), // bypass rules
1052 }, 1098 },
1053 1099
1054 { 1100 {
1055 TEST_DESC("Bypass *.google.com"), 1101 TEST_DESC("Bypass *.google.com"),
1056 1102
1057 // Input. 1103 // Input.
1058 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1104 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1059 "NoProxyFor=.google.com\n", 1105 "NoProxyFor=.google.com\n",
1060 {}, // env_values 1106 {}, // env_values
1061 1107
1108 // Expected result.
1109 ProxyConfigService::CONFIG_VALID,
1062 false, // auto_detect 1110 false, // auto_detect
1063 GURL(), // pac_url 1111 GURL(), // pac_url
1064 ProxyRulesExpectation::PerScheme( 1112 ProxyRulesExpectation::PerScheme(
1065 "www.google.com:80", // http 1113 "www.google.com:80", // http
1066 "", // https 1114 "", // https
1067 "", // ftp 1115 "", // ftp
1068 "*.google.com"), // bypass rules 1116 "*.google.com"), // bypass rules
1069 }, 1117 },
1070 1118
1071 { 1119 {
1072 TEST_DESC("Bypass *.google.com and *.kde.org"), 1120 TEST_DESC("Bypass *.google.com and *.kde.org"),
1073 1121
1074 // Input. 1122 // Input.
1075 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1123 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1076 "NoProxyFor=.google.com,.kde.org\n", 1124 "NoProxyFor=.google.com,.kde.org\n",
1077 {}, // env_values 1125 {}, // env_values
1078 1126
1127 // Expected result.
1128 ProxyConfigService::CONFIG_VALID,
1079 false, // auto_detect 1129 false, // auto_detect
1080 GURL(), // pac_url 1130 GURL(), // pac_url
1081 ProxyRulesExpectation::PerScheme( 1131 ProxyRulesExpectation::PerScheme(
1082 "www.google.com:80", // http 1132 "www.google.com:80", // http
1083 "", // https 1133 "", // https
1084 "", // ftp 1134 "", // ftp
1085 "*.google.com,*.kde.org"), // bypass rules 1135 "*.google.com,*.kde.org"), // bypass rules
1086 }, 1136 },
1087 1137
1088 { 1138 {
1089 TEST_DESC("Correctly parse bypass list with ReversedException"), 1139 TEST_DESC("Correctly parse bypass list with ReversedException"),
1090 1140
1091 // Input. 1141 // Input.
1092 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1142 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1093 "NoProxyFor=.google.com\nReversedException=true\n", 1143 "NoProxyFor=.google.com\nReversedException=true\n",
1094 {}, // env_values 1144 {}, // env_values
1095 1145
1146 // Expected result.
1147 ProxyConfigService::CONFIG_VALID,
1096 false, // auto_detect 1148 false, // auto_detect
1097 GURL(), // pac_url 1149 GURL(), // pac_url
1098 ProxyRulesExpectation::PerSchemeWithBypassReversed( 1150 ProxyRulesExpectation::PerSchemeWithBypassReversed(
1099 "www.google.com:80", // http 1151 "www.google.com:80", // http
1100 "", // https 1152 "", // https
1101 "", // ftp 1153 "", // ftp
1102 "*.google.com"), // bypass rules 1154 "*.google.com"), // bypass rules
1103 }, 1155 },
1104 1156
1105 { 1157 {
1106 TEST_DESC("Treat all hostname patterns as wildcard patterns"), 1158 TEST_DESC("Treat all hostname patterns as wildcard patterns"),
1107 1159
1108 // Input. 1160 // Input.
1109 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1161 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1110 "NoProxyFor=google.com,kde.org,<local>\n", 1162 "NoProxyFor=google.com,kde.org,<local>\n",
1111 {}, // env_values 1163 {}, // env_values
1112 1164
1165 // Expected result.
1166 ProxyConfigService::CONFIG_VALID,
1113 false, // auto_detect 1167 false, // auto_detect
1114 GURL(), // pac_url 1168 GURL(), // pac_url
1115 ProxyRulesExpectation::PerScheme( 1169 ProxyRulesExpectation::PerScheme(
1116 "www.google.com:80", // http 1170 "www.google.com:80", // http
1117 "", // https 1171 "", // https
1118 "", // ftp 1172 "", // ftp
1119 "*google.com,*kde.org,<local>"), // bypass rules 1173 "*google.com,*kde.org,<local>"), // bypass rules
1120 }, 1174 },
1121 1175
1122 { 1176 {
1123 TEST_DESC("Allow trailing whitespace after boolean value"), 1177 TEST_DESC("Allow trailing whitespace after boolean value"),
1124 1178
1125 // Input. 1179 // Input.
1126 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1180 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1127 "NoProxyFor=.google.com\nReversedException=true \n", 1181 "NoProxyFor=.google.com\nReversedException=true \n",
1128 {}, // env_values 1182 {}, // env_values
1129 1183
1184 // Expected result.
1185 ProxyConfigService::CONFIG_VALID,
1130 false, // auto_detect 1186 false, // auto_detect
1131 GURL(), // pac_url 1187 GURL(), // pac_url
1132 ProxyRulesExpectation::PerSchemeWithBypassReversed( 1188 ProxyRulesExpectation::PerSchemeWithBypassReversed(
1133 "www.google.com:80", // http 1189 "www.google.com:80", // http
1134 "", // https 1190 "", // https
1135 "", // ftp 1191 "", // ftp
1136 "*.google.com"), // bypass rules 1192 "*.google.com"), // bypass rules
1137 }, 1193 },
1138 1194
1139 { 1195 {
1140 TEST_DESC("Ignore settings outside [Proxy Settings]"), 1196 TEST_DESC("Ignore settings outside [Proxy Settings]"),
1141 1197
1142 // Input. 1198 // Input.
1143 "httpsProxy=www.foo.com\n[Proxy Settings]\nProxyType=1\n" 1199 "httpsProxy=www.foo.com\n[Proxy Settings]\nProxyType=1\n"
1144 "httpProxy=www.google.com\n[Other Section]\nftpProxy=ftp.foo.com\n", 1200 "httpProxy=www.google.com\n[Other Section]\nftpProxy=ftp.foo.com\n",
1145 {}, // env_values 1201 {}, // env_values
1146 1202
1203 // Expected result.
1204 ProxyConfigService::CONFIG_VALID,
1147 false, // auto_detect 1205 false, // auto_detect
1148 GURL(), // pac_url 1206 GURL(), // pac_url
1149 ProxyRulesExpectation::PerScheme( 1207 ProxyRulesExpectation::PerScheme(
1150 "www.google.com:80", // http 1208 "www.google.com:80", // http
1151 "", // https 1209 "", // https
1152 "", // ftp 1210 "", // ftp
1153 ""), // bypass rules 1211 ""), // bypass rules
1154 }, 1212 },
1155 1213
1156 { 1214 {
1157 TEST_DESC("Handle CRLF line endings"), 1215 TEST_DESC("Handle CRLF line endings"),
1158 1216
1159 // Input. 1217 // Input.
1160 "[Proxy Settings]\r\nProxyType=1\r\nhttpProxy=www.google.com\r\n", 1218 "[Proxy Settings]\r\nProxyType=1\r\nhttpProxy=www.google.com\r\n",
1161 {}, // env_values 1219 {}, // env_values
1162 1220
1221 // Expected result.
1222 ProxyConfigService::CONFIG_VALID,
1163 false, // auto_detect 1223 false, // auto_detect
1164 GURL(), // pac_url 1224 GURL(), // pac_url
1165 ProxyRulesExpectation::PerScheme( 1225 ProxyRulesExpectation::PerScheme(
1166 "www.google.com:80", // http 1226 "www.google.com:80", // http
1167 "", // https 1227 "", // https
1168 "", // ftp 1228 "", // ftp
1169 ""), // bypass rules 1229 ""), // bypass rules
1170 }, 1230 },
1171 1231
1172 { 1232 {
1173 TEST_DESC("Handle blank lines and mixed line endings"), 1233 TEST_DESC("Handle blank lines and mixed line endings"),
1174 1234
1175 // Input. 1235 // Input.
1176 "[Proxy Settings]\r\n\nProxyType=1\n\r\nhttpProxy=www.google.com\n\n", 1236 "[Proxy Settings]\r\n\nProxyType=1\n\r\nhttpProxy=www.google.com\n\n",
1177 {}, // env_values 1237 {}, // env_values
1178 1238
1239 // Expected result.
1240 ProxyConfigService::CONFIG_VALID,
1179 false, // auto_detect 1241 false, // auto_detect
1180 GURL(), // pac_url 1242 GURL(), // pac_url
1181 ProxyRulesExpectation::PerScheme( 1243 ProxyRulesExpectation::PerScheme(
1182 "www.google.com:80", // http 1244 "www.google.com:80", // http
1183 "", // https 1245 "", // https
1184 "", // ftp 1246 "", // ftp
1185 ""), // bypass rules 1247 ""), // bypass rules
1186 }, 1248 },
1187 1249
1188 { 1250 {
1189 TEST_DESC("Handle localized settings"), 1251 TEST_DESC("Handle localized settings"),
1190 1252
1191 // Input. 1253 // Input.
1192 "[Proxy Settings]\nProxyType[$e]=1\nhttpProxy[$e]=www.google.com\n", 1254 "[Proxy Settings]\nProxyType[$e]=1\nhttpProxy[$e]=www.google.com\n",
1193 {}, // env_values 1255 {}, // env_values
1194 1256
1257 // Expected result.
1258 ProxyConfigService::CONFIG_VALID,
1195 false, // auto_detect 1259 false, // auto_detect
1196 GURL(), // pac_url 1260 GURL(), // pac_url
1197 ProxyRulesExpectation::PerScheme( 1261 ProxyRulesExpectation::PerScheme(
1198 "www.google.com:80", // http 1262 "www.google.com:80", // http
1199 "", // https 1263 "", // https
1200 "", // ftp 1264 "", // ftp
1201 ""), // bypass rules 1265 ""), // bypass rules
1202 }, 1266 },
1203 1267
1204 { 1268 {
1205 TEST_DESC("Ignore malformed localized settings"), 1269 TEST_DESC("Ignore malformed localized settings"),
1206 1270
1207 // Input. 1271 // Input.
1208 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" 1272 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n"
1209 "httpsProxy$e]=www.foo.com\nftpProxy=ftp.foo.com\n", 1273 "httpsProxy$e]=www.foo.com\nftpProxy=ftp.foo.com\n",
1210 {}, // env_values 1274 {}, // env_values
1211 1275
1276 // Expected result.
1277 ProxyConfigService::CONFIG_VALID,
1212 false, // auto_detect 1278 false, // auto_detect
1213 GURL(), // pac_url 1279 GURL(), // pac_url
1214 ProxyRulesExpectation::PerScheme( 1280 ProxyRulesExpectation::PerScheme(
1215 "www.google.com:80", // http 1281 "www.google.com:80", // http
1216 "", // https 1282 "", // https
1217 "ftp.foo.com:80", // ftp 1283 "ftp.foo.com:80", // ftp
1218 ""), // bypass rules 1284 ""), // bypass rules
1219 }, 1285 },
1220 1286
1221 { 1287 {
1222 TEST_DESC("Handle strange whitespace"), 1288 TEST_DESC("Handle strange whitespace"),
1223 1289
1224 // Input. 1290 // Input.
1225 "[Proxy Settings]\nProxyType [$e] =2\n" 1291 "[Proxy Settings]\nProxyType [$e] =2\n"
1226 " Proxy Config Script = http:// foo\n", 1292 " Proxy Config Script = http:// foo\n",
1227 {}, // env_values 1293 {}, // env_values
1228 1294
1295 // Expected result.
1296 ProxyConfigService::CONFIG_VALID,
1229 false, // auto_detect 1297 false, // auto_detect
1230 GURL("http:// foo"), // pac_url 1298 GURL("http:// foo"), // pac_url
1231 ProxyRulesExpectation::Empty(), 1299 ProxyRulesExpectation::Empty(),
1232 }, 1300 },
1233 1301
1234 { 1302 {
1235 TEST_DESC("Ignore all of a line which is too long"), 1303 TEST_DESC("Ignore all of a line which is too long"),
1236 1304
1237 // Input. 1305 // Input.
1238 std::string("[Proxy Settings]\nProxyType=1\nftpProxy=ftp.foo.com\n") + 1306 std::string("[Proxy Settings]\nProxyType=1\nftpProxy=ftp.foo.com\n") +
1239 long_line + "httpsProxy=www.foo.com\nhttpProxy=www.google.com\n", 1307 long_line + "httpsProxy=www.foo.com\nhttpProxy=www.google.com\n",
1240 {}, // env_values 1308 {}, // env_values
1241 1309
1310 // Expected result.
1311 ProxyConfigService::CONFIG_VALID,
1242 false, // auto_detect 1312 false, // auto_detect
1243 GURL(), // pac_url 1313 GURL(), // pac_url
1244 ProxyRulesExpectation::PerScheme( 1314 ProxyRulesExpectation::PerScheme(
1245 "www.google.com:80", // http 1315 "www.google.com:80", // http
1246 "", // https 1316 "", // https
1247 "ftp.foo.com:80", // ftp 1317 "ftp.foo.com:80", // ftp
1248 ""), // bypass rules 1318 ""), // bypass rules
1249 }, 1319 },
1250 1320
1251 { 1321 {
1252 TEST_DESC("Indirect Proxy - no env vars set"), 1322 TEST_DESC("Indirect Proxy - no env vars set"),
1253 1323
1254 // Input. 1324 // Input.
1255 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" 1325 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n"
1256 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", 1326 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n",
1257 {}, // env_values 1327 {}, // env_values
1258 1328
1329 // Expected result.
1330 ProxyConfigService::CONFIG_VALID,
1259 false, // auto_detect 1331 false, // auto_detect
1260 GURL(), // pac_url 1332 GURL(), // pac_url
1261 ProxyRulesExpectation::Empty(), 1333 ProxyRulesExpectation::Empty(),
1262 }, 1334 },
1263 1335
1264 { 1336 {
1265 TEST_DESC("Indirect Proxy - with env vars set"), 1337 TEST_DESC("Indirect Proxy - with env vars set"),
1266 1338
1267 // Input. 1339 // Input.
1268 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" 1340 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n"
1269 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", 1341 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n",
1270 { // env_values 1342 { // env_values
1271 NULL, // DESKTOP_SESSION 1343 NULL, // DESKTOP_SESSION
1272 NULL, // HOME 1344 NULL, // HOME
1273 NULL, // KDEHOME 1345 NULL, // KDEHOME
1274 NULL, // KDE_SESSION_VERSION 1346 NULL, // KDE_SESSION_VERSION
1275 NULL, // auto_proxy 1347 NULL, // auto_proxy
1276 NULL, // all_proxy 1348 NULL, // all_proxy
1277 "www.normal.com", // http_proxy 1349 "www.normal.com", // http_proxy
1278 "www.secure.com", // https_proxy 1350 "www.secure.com", // https_proxy
1279 "ftp.foo.com", // ftp_proxy 1351 "ftp.foo.com", // ftp_proxy
1280 NULL, NULL, // SOCKS 1352 NULL, NULL, // SOCKS
1281 ".google.com, .kde.org", // no_proxy 1353 ".google.com, .kde.org", // no_proxy
1282 }, 1354 },
1283 1355
1356 // Expected result.
1357 ProxyConfigService::CONFIG_VALID,
1284 false, // auto_detect 1358 false, // auto_detect
1285 GURL(), // pac_url 1359 GURL(), // pac_url
1286 ProxyRulesExpectation::PerScheme( 1360 ProxyRulesExpectation::PerScheme(
1287 "www.normal.com:80", // http 1361 "www.normal.com:80", // http
1288 "www.secure.com:80", // https 1362 "www.secure.com:80", // https
1289 "ftp.foo.com:80", // ftp 1363 "ftp.foo.com:80", // ftp
1290 "*.google.com,*.kde.org"), // bypass rules 1364 "*.google.com,*.kde.org"), // bypass rules
1291 }, 1365 },
1292 1366
1293 }; 1367 };
1294 1368
1295 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 1369 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
1296 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, 1370 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
1297 tests[i].description.c_str())); 1371 tests[i].description.c_str()));
1298 MockEnvironment* env = new MockEnvironment; 1372 MockEnvironment* env = new MockEnvironment;
1299 env->values = tests[i].env_values; 1373 env->values = tests[i].env_values;
1300 // Force the KDE getter to be used and tell it where the test is. 1374 // Force the KDE getter to be used and tell it where the test is.
1301 env->values.DESKTOP_SESSION = "kde4"; 1375 env->values.DESKTOP_SESSION = "kde4";
1302 env->values.KDEHOME = kde_home_.value().c_str(); 1376 env->values.KDEHOME = kde_home_.value().c_str();
1303 SynchConfigGetter sync_config_getter( 1377 SynchConfigGetter sync_config_getter(
1304 new ProxyConfigServiceLinux(env)); 1378 new ProxyConfigServiceLinux(env));
1305 ProxyConfig config; 1379 ProxyConfig config;
1306 // Overwrite the kioslaverc file. 1380 // Overwrite the kioslaverc file.
1307 file_util::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(), 1381 file_util::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(),
1308 tests[i].kioslaverc.length()); 1382 tests[i].kioslaverc.length());
1309 sync_config_getter.SetupAndInitialFetch(); 1383 sync_config_getter.SetupAndInitialFetch();
1310 sync_config_getter.SyncGetLatestProxyConfig(&config); 1384 ProxyConfigService::ConfigAvailability availability =
1385 sync_config_getter.SyncGetLatestProxyConfig(&config);
1386 EXPECT_EQ(tests[i].availability, availability);
1311 1387
1312 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); 1388 if (availability == ProxyConfigService::CONFIG_VALID) {
1313 EXPECT_EQ(tests[i].pac_url, config.pac_url()); 1389 EXPECT_EQ(tests[i].auto_detect, config.auto_detect());
1314 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); 1390 EXPECT_EQ(tests[i].pac_url, config.pac_url());
1391 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules()));
1392 }
1315 } 1393 }
1316 } 1394 }
1317 1395
1318 TEST_F(ProxyConfigServiceLinuxTest, KDEHomePicker) { 1396 TEST_F(ProxyConfigServiceLinuxTest, KDEHomePicker) {
1319 // Auto detect proxy settings. 1397 // Auto detect proxy settings.
1320 std::string slaverc3 = "[Proxy Settings]\nProxyType=3\n"; 1398 std::string slaverc3 = "[Proxy Settings]\nProxyType=3\n";
1321 // Valid PAC URL. 1399 // Valid PAC URL.
1322 std::string slaverc4 = "[Proxy Settings]\nProxyType=2\n" 1400 std::string slaverc4 = "[Proxy Settings]\nProxyType=2\n"
1323 "Proxy Config Script=http://wpad/wpad.dat\n"; 1401 "Proxy Config Script=http://wpad/wpad.dat\n";
1324 GURL slaverc4_pac_url("http://wpad/wpad.dat"); 1402 GURL slaverc4_pac_url("http://wpad/wpad.dat");
1325 1403
1326 // Overwrite the .kde kioslaverc file. 1404 // Overwrite the .kde kioslaverc file.
1327 file_util::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length()); 1405 file_util::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length());
1328 1406
1329 // If .kde4 exists it will mess up the first test. It should not, as 1407 // If .kde4 exists it will mess up the first test. It should not, as
1330 // we created the directory for $HOME in the test setup. 1408 // we created the directory for $HOME in the test setup.
1331 CHECK(!file_util::DirectoryExists(kde4_home_)); 1409 CHECK(!file_util::DirectoryExists(kde4_home_));
1332 1410
1333 { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback"); 1411 { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback");
1334 MockEnvironment* env = new MockEnvironment; 1412 MockEnvironment* env = new MockEnvironment;
1335 env->values.DESKTOP_SESSION = "kde4"; 1413 env->values.DESKTOP_SESSION = "kde4";
1336 env->values.HOME = user_home_.value().c_str(); 1414 env->values.HOME = user_home_.value().c_str();
1337 SynchConfigGetter sync_config_getter( 1415 SynchConfigGetter sync_config_getter(
1338 new ProxyConfigServiceLinux(env)); 1416 new ProxyConfigServiceLinux(env));
1339 ProxyConfig config; 1417 ProxyConfig config;
1340 sync_config_getter.SetupAndInitialFetch(); 1418 sync_config_getter.SetupAndInitialFetch();
1341 sync_config_getter.SyncGetLatestProxyConfig(&config); 1419 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
1420 sync_config_getter.SyncGetLatestProxyConfig(&config));
1342 EXPECT_TRUE(config.auto_detect()); 1421 EXPECT_TRUE(config.auto_detect());
1343 EXPECT_EQ(GURL(), config.pac_url()); 1422 EXPECT_EQ(GURL(), config.pac_url());
1344 } 1423 }
1345 1424
1346 // Now create .kde4 and put a kioslaverc in the config directory. 1425 // Now create .kde4 and put a kioslaverc in the config directory.
1347 // Note that its timestamp will be at least as new as the .kde one. 1426 // Note that its timestamp will be at least as new as the .kde one.
1348 file_util::CreateDirectory(kde4_config_); 1427 file_util::CreateDirectory(kde4_config_);
1349 file_util::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length()); 1428 file_util::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length());
1350 CHECK(file_util::PathExists(kioslaverc4_)); 1429 CHECK(file_util::PathExists(kioslaverc4_));
1351 1430
1352 { SCOPED_TRACE("KDE4, .kde4 directory present, use it"); 1431 { SCOPED_TRACE("KDE4, .kde4 directory present, use it");
1353 MockEnvironment* env = new MockEnvironment; 1432 MockEnvironment* env = new MockEnvironment;
1354 env->values.DESKTOP_SESSION = "kde4"; 1433 env->values.DESKTOP_SESSION = "kde4";
1355 env->values.HOME = user_home_.value().c_str(); 1434 env->values.HOME = user_home_.value().c_str();
1356 SynchConfigGetter sync_config_getter( 1435 SynchConfigGetter sync_config_getter(
1357 new ProxyConfigServiceLinux(env)); 1436 new ProxyConfigServiceLinux(env));
1358 ProxyConfig config; 1437 ProxyConfig config;
1359 sync_config_getter.SetupAndInitialFetch(); 1438 sync_config_getter.SetupAndInitialFetch();
1360 sync_config_getter.SyncGetLatestProxyConfig(&config); 1439 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
1440 sync_config_getter.SyncGetLatestProxyConfig(&config));
1361 EXPECT_FALSE(config.auto_detect()); 1441 EXPECT_FALSE(config.auto_detect());
1362 EXPECT_EQ(slaverc4_pac_url, config.pac_url()); 1442 EXPECT_EQ(slaverc4_pac_url, config.pac_url());
1363 } 1443 }
1364 1444
1365 { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it"); 1445 { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it");
1366 MockEnvironment* env = new MockEnvironment; 1446 MockEnvironment* env = new MockEnvironment;
1367 env->values.DESKTOP_SESSION = "kde"; 1447 env->values.DESKTOP_SESSION = "kde";
1368 env->values.HOME = user_home_.value().c_str(); 1448 env->values.HOME = user_home_.value().c_str();
1369 SynchConfigGetter sync_config_getter( 1449 SynchConfigGetter sync_config_getter(
1370 new ProxyConfigServiceLinux(env)); 1450 new ProxyConfigServiceLinux(env));
1371 ProxyConfig config; 1451 ProxyConfig config;
1372 sync_config_getter.SetupAndInitialFetch(); 1452 sync_config_getter.SetupAndInitialFetch();
1373 sync_config_getter.SyncGetLatestProxyConfig(&config); 1453 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
1454 sync_config_getter.SyncGetLatestProxyConfig(&config));
1374 EXPECT_TRUE(config.auto_detect()); 1455 EXPECT_TRUE(config.auto_detect());
1375 EXPECT_EQ(GURL(), config.pac_url()); 1456 EXPECT_EQ(GURL(), config.pac_url());
1376 } 1457 }
1377 1458
1378 { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde"); 1459 { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde");
1379 MockEnvironment* env = new MockEnvironment; 1460 MockEnvironment* env = new MockEnvironment;
1380 env->values.DESKTOP_SESSION = "kde4"; 1461 env->values.DESKTOP_SESSION = "kde4";
1381 env->values.HOME = user_home_.value().c_str(); 1462 env->values.HOME = user_home_.value().c_str();
1382 env->values.KDEHOME = kde_home_.value().c_str(); 1463 env->values.KDEHOME = kde_home_.value().c_str();
1383 SynchConfigGetter sync_config_getter( 1464 SynchConfigGetter sync_config_getter(
1384 new ProxyConfigServiceLinux(env)); 1465 new ProxyConfigServiceLinux(env));
1385 ProxyConfig config; 1466 ProxyConfig config;
1386 sync_config_getter.SetupAndInitialFetch(); 1467 sync_config_getter.SetupAndInitialFetch();
1387 sync_config_getter.SyncGetLatestProxyConfig(&config); 1468 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
1469 sync_config_getter.SyncGetLatestProxyConfig(&config));
1388 EXPECT_TRUE(config.auto_detect()); 1470 EXPECT_TRUE(config.auto_detect());
1389 EXPECT_EQ(GURL(), config.pac_url()); 1471 EXPECT_EQ(GURL(), config.pac_url());
1390 } 1472 }
1391 1473
1392 // Finally, make the .kde4 config directory older than the .kde directory 1474 // Finally, make the .kde4 config directory older than the .kde directory
1393 // and make sure we then use .kde instead of .kde4 since it's newer. 1475 // and make sure we then use .kde instead of .kde4 since it's newer.
1394 file_util::SetLastModifiedTime(kde4_config_, base::Time()); 1476 file_util::SetLastModifiedTime(kde4_config_, base::Time());
1395 1477
1396 { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde"); 1478 { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde");
1397 MockEnvironment* env = new MockEnvironment; 1479 MockEnvironment* env = new MockEnvironment;
1398 env->values.DESKTOP_SESSION = "kde4"; 1480 env->values.DESKTOP_SESSION = "kde4";
1399 env->values.HOME = user_home_.value().c_str(); 1481 env->values.HOME = user_home_.value().c_str();
1400 SynchConfigGetter sync_config_getter( 1482 SynchConfigGetter sync_config_getter(
1401 new ProxyConfigServiceLinux(env)); 1483 new ProxyConfigServiceLinux(env));
1402 ProxyConfig config; 1484 ProxyConfig config;
1403 sync_config_getter.SetupAndInitialFetch(); 1485 sync_config_getter.SetupAndInitialFetch();
1404 sync_config_getter.SyncGetLatestProxyConfig(&config); 1486 EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
1487 sync_config_getter.SyncGetLatestProxyConfig(&config));
1405 EXPECT_TRUE(config.auto_detect()); 1488 EXPECT_TRUE(config.auto_detect());
1406 EXPECT_EQ(GURL(), config.pac_url()); 1489 EXPECT_EQ(GURL(), config.pac_url());
1407 } 1490 }
1408 } 1491 }
1409 1492
1410 } // namespace net 1493 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_config_service_linux.cc ('k') | net/proxy/proxy_config_service_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698