OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 17 matching lines...) Expand all Loading... |
28 #include "testing/platform_test.h" | 28 #include "testing/platform_test.h" |
29 | 29 |
30 namespace net { | 30 namespace net { |
31 namespace { | 31 namespace { |
32 | 32 |
33 // Set of values for all environment variables that we might | 33 // Set of values for all environment variables that we might |
34 // query. NULL represents an unset variable. | 34 // query. NULL represents an unset variable. |
35 struct EnvVarValues { | 35 struct EnvVarValues { |
36 // The strange capitalization is so that the field matches the | 36 // The strange capitalization is so that the field matches the |
37 // environment variable name exactly. | 37 // environment variable name exactly. |
38 const char *DESKTOP_SESSION, *HOME, | 38 const char* DESKTOP_SESSION; |
39 *KDEHOME, *KDE_SESSION_VERSION, | 39 const char* HOME; |
40 *XDG_CURRENT_DESKTOP, | 40 const char* KDEHOME; |
41 *auto_proxy, *all_proxy, | 41 const char* KDE_SESSION_VERSION; |
42 *http_proxy, *https_proxy, *ftp_proxy, | 42 const char* XDG_CURRENT_DESKTOP; |
43 *SOCKS_SERVER, *SOCKS_VERSION, | 43 const char* auto_proxy; |
44 *no_proxy; | 44 const char* all_proxy; |
| 45 const char* http_proxy; |
| 46 const char* https_proxy; |
| 47 const char* ftp_proxy; |
| 48 const char* SOCKS_SERVER; |
| 49 const char* SOCKS_VERSION; |
| 50 const char* no_proxy; |
45 }; | 51 }; |
46 | 52 |
47 // Undo macro pollution from GDK includes (from message_loop.h). | 53 // Undo macro pollution from GDK includes (from message_loop.h). |
48 #undef TRUE | 54 #undef TRUE |
49 #undef FALSE | 55 #undef FALSE |
50 | 56 |
51 // So as to distinguish between an unset gconf boolean variable and | 57 // So as to distinguish between an unset gconf boolean variable and |
52 // one that is false. | 58 // one that is false. |
53 enum BoolSettingValue { | 59 enum BoolSettingValue { |
54 UNSET = 0, TRUE, FALSE | 60 UNSET = 0, TRUE, FALSE |
55 }; | 61 }; |
56 | 62 |
57 // Set of values for all gconf settings that we might query. | 63 // Set of values for all gconf settings that we might query. |
58 struct GConfValues { | 64 struct GConfValues { |
59 // strings | 65 // strings |
60 const char *mode, *autoconfig_url, | 66 const char* mode; |
61 *http_host, *secure_host, *ftp_host, *socks_host; | 67 const char* autoconfig_url; |
| 68 const char* http_host; |
| 69 const char* secure_host; |
| 70 const char* ftp_host; |
| 71 const char* socks_host; |
62 // integers | 72 // integers |
63 int http_port, secure_port, ftp_port, socks_port; | 73 int http_port; |
| 74 int secure_port; |
| 75 int ftp_port; |
| 76 int socks_port; |
64 // booleans | 77 // booleans |
65 BoolSettingValue use_proxy, same_proxy, use_auth; | 78 BoolSettingValue use_proxy; |
| 79 BoolSettingValue same_proxy; |
| 80 BoolSettingValue use_auth; |
66 // string list | 81 // string list |
67 std::vector<std::string> ignore_hosts; | 82 std::vector<std::string> ignore_hosts; |
68 }; | 83 }; |
69 | 84 |
70 // Mapping from a setting name to the location of the corresponding | 85 // Mapping from a setting name to the location of the corresponding |
71 // value (inside a EnvVarValues or GConfValues struct). | 86 // value (inside a EnvVarValues or GConfValues struct). |
72 template<typename key_type, typename value_type> | 87 template<typename key_type, typename value_type> |
73 struct SettingsTable { | 88 struct SettingsTable { |
74 typedef std::map<key_type, value_type*> map_type; | 89 typedef std::map<key_type, value_type*> map_type; |
75 | 90 |
76 // Gets the value from its location | 91 // Gets the value from its location |
77 value_type Get(key_type key) { | 92 value_type Get(key_type key) { |
78 typename map_type::const_iterator it = settings.find(key); | 93 auto it = settings.find(key); |
79 // In case there's a typo or the unittest becomes out of sync. | 94 // In case there's a typo or the unittest becomes out of sync. |
80 CHECK(it != settings.end()) << "key " << key << " not found"; | 95 CHECK(it != settings.end()) << "key " << key << " not found"; |
81 value_type* value_ptr = it->second; | 96 value_type* value_ptr = it->second; |
82 return *value_ptr; | 97 return *value_ptr; |
83 } | 98 } |
84 | 99 |
85 map_type settings; | 100 map_type settings; |
86 }; | 101 }; |
87 | 102 |
88 class MockEnvironment : public base::Environment { | 103 class MockEnvironment : public base::Environment { |
89 public: | 104 public: |
90 MockEnvironment() { | 105 MockEnvironment() { |
91 #define ENTRY(x) table[#x] = &values.x | 106 #define ENTRY(x) table_[#x] = &values.x |
92 ENTRY(DESKTOP_SESSION); | 107 ENTRY(DESKTOP_SESSION); |
93 ENTRY(HOME); | 108 ENTRY(HOME); |
94 ENTRY(KDEHOME); | 109 ENTRY(KDEHOME); |
95 ENTRY(KDE_SESSION_VERSION); | 110 ENTRY(KDE_SESSION_VERSION); |
96 ENTRY(XDG_CURRENT_DESKTOP); | 111 ENTRY(XDG_CURRENT_DESKTOP); |
97 ENTRY(auto_proxy); | 112 ENTRY(auto_proxy); |
98 ENTRY(all_proxy); | 113 ENTRY(all_proxy); |
99 ENTRY(http_proxy); | 114 ENTRY(http_proxy); |
100 ENTRY(https_proxy); | 115 ENTRY(https_proxy); |
101 ENTRY(ftp_proxy); | 116 ENTRY(ftp_proxy); |
102 ENTRY(no_proxy); | 117 ENTRY(no_proxy); |
103 ENTRY(SOCKS_SERVER); | 118 ENTRY(SOCKS_SERVER); |
104 ENTRY(SOCKS_VERSION); | 119 ENTRY(SOCKS_VERSION); |
105 #undef ENTRY | 120 #undef ENTRY |
106 Reset(); | 121 Reset(); |
107 } | 122 } |
108 | 123 |
109 // Zeroes all environment values. | 124 // Zeroes all environment values. |
110 void Reset() { | 125 void Reset() { |
111 EnvVarValues zero_values = { 0 }; | 126 EnvVarValues zero_values = { 0 }; |
112 values = zero_values; | 127 values = zero_values; |
113 } | 128 } |
114 | 129 |
115 // Begin base::Environment implementation. | 130 // Begin base::Environment implementation. |
116 bool GetVar(const char* variable_name, std::string* result) override { | 131 bool GetVar(base::StringPiece variable_name, std::string* result) override { |
117 std::map<std::string, const char**>::iterator it = | 132 auto it = table_.find(variable_name); |
118 table.find(variable_name); | 133 if (it == table_.end() || !*it->second) |
119 if (it != table.end() && *(it->second) != NULL) { | 134 return false; |
120 // Note that the variable may be defined but empty. | 135 |
121 *result = *(it->second); | 136 // Note that the variable may be defined but empty. |
122 return true; | 137 *result = *(it->second); |
123 } | 138 return true; |
124 return false; | |
125 } | 139 } |
126 | 140 |
127 bool SetVar(const char* variable_name, | 141 bool SetVar(base::StringPiece variable_name, |
128 const std::string& new_value) override { | 142 const std::string& new_value) override { |
129 ADD_FAILURE(); | 143 ADD_FAILURE(); |
130 return false; | 144 return false; |
131 } | 145 } |
132 | 146 |
133 bool UnSetVar(const char* variable_name) override { | 147 bool UnSetVar(base::StringPiece variable_name) override { |
134 ADD_FAILURE(); | 148 ADD_FAILURE(); |
135 return false; | 149 return false; |
136 } | 150 } |
137 // End base::Environment implementation. | 151 // End base::Environment implementation. |
138 | 152 |
139 // Intentionally public, for convenience when setting up a test. | 153 // Intentionally public, for convenience when setting up a test. |
140 EnvVarValues values; | 154 EnvVarValues values; |
141 | 155 |
142 private: | 156 private: |
143 std::map<std::string, const char**> table; | 157 std::map<base::StringPiece, const char**> table_; |
144 }; | 158 }; |
145 | 159 |
146 class MockSettingGetter | 160 class MockSettingGetter |
147 : public ProxyConfigServiceLinux::SettingGetter { | 161 : public ProxyConfigServiceLinux::SettingGetter { |
148 public: | 162 public: |
149 typedef ProxyConfigServiceLinux::SettingGetter SettingGetter; | 163 typedef ProxyConfigServiceLinux::SettingGetter SettingGetter; |
150 MockSettingGetter() { | 164 MockSettingGetter() { |
151 #define ENTRY(key, field) \ | 165 #define ENTRY(key, field) \ |
152 strings_table.settings[SettingGetter::key] = &values.field | 166 strings_table.settings[SettingGetter::key] = &values.field |
153 ENTRY(PROXY_MODE, mode); | 167 ENTRY(PROXY_MODE, mode); |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
681 GURL(), // pac_url | 695 GURL(), // pac_url |
682 ProxyRulesExpectation::Single( | 696 ProxyRulesExpectation::Single( |
683 "www.google.com:80", // single proxy | 697 "www.google.com:80", // single proxy |
684 "*.google.com"), // bypass rules | 698 "*.google.com"), // bypass rules |
685 }, | 699 }, |
686 }; | 700 }; |
687 | 701 |
688 for (size_t i = 0; i < arraysize(tests); ++i) { | 702 for (size_t i = 0; i < arraysize(tests); ++i) { |
689 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, | 703 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, |
690 tests[i].description.c_str())); | 704 tests[i].description.c_str())); |
691 MockEnvironment* env = new MockEnvironment; | 705 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
692 MockSettingGetter* setting_getter = new MockSettingGetter; | 706 MockSettingGetter* setting_getter = new MockSettingGetter; |
693 SynchConfigGetter sync_config_getter( | 707 SynchConfigGetter sync_config_getter( |
694 new ProxyConfigServiceLinux(env, setting_getter)); | 708 new ProxyConfigServiceLinux(std::move(env), setting_getter)); |
695 ProxyConfig config; | 709 ProxyConfig config; |
696 setting_getter->values = tests[i].values; | 710 setting_getter->values = tests[i].values; |
697 sync_config_getter.SetupAndInitialFetch(); | 711 sync_config_getter.SetupAndInitialFetch(); |
698 ProxyConfigService::ConfigAvailability availability = | 712 ProxyConfigService::ConfigAvailability availability = |
699 sync_config_getter.SyncGetLatestProxyConfig(&config); | 713 sync_config_getter.SyncGetLatestProxyConfig(&config); |
700 EXPECT_EQ(tests[i].availability, availability); | 714 EXPECT_EQ(tests[i].availability, availability); |
701 | 715 |
702 if (availability == ProxyConfigService::CONFIG_VALID) { | 716 if (availability == ProxyConfigService::CONFIG_VALID) { |
703 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); | 717 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
704 EXPECT_EQ(tests[i].pac_url, config.pac_url()); | 718 EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
(...skipping 10 matching lines...) Expand all Loading... |
715 | 729 |
716 // Input. | 730 // Input. |
717 EnvVarValues values; | 731 EnvVarValues values; |
718 | 732 |
719 // Expected outputs (availability and fields of ProxyConfig). | 733 // Expected outputs (availability and fields of ProxyConfig). |
720 ProxyConfigService::ConfigAvailability availability; | 734 ProxyConfigService::ConfigAvailability availability; |
721 bool auto_detect; | 735 bool auto_detect; |
722 GURL pac_url; | 736 GURL pac_url; |
723 ProxyRulesExpectation proxy_rules; | 737 ProxyRulesExpectation proxy_rules; |
724 } tests[] = { | 738 } tests[] = { |
725 { | 739 { |
726 TEST_DESC("No proxying"), | 740 TEST_DESC("No proxying"), |
727 { // Input. | 741 { |
728 NULL, // DESKTOP_SESSION | 742 // Input. |
729 NULL, // HOME | 743 nullptr, // DESKTOP_SESSION |
730 NULL, // KDEHOME | 744 nullptr, // HOME |
731 NULL, // KDE_SESSION_VERSION | 745 nullptr, // KDEHOME |
732 NULL, // XDG_CURRENT_DESKTOP | 746 nullptr, // KDE_SESSION_VERSION |
733 NULL, // auto_proxy | 747 nullptr, // XDG_CURRENT_DESKTOP |
734 NULL, // all_proxy | 748 nullptr, // auto_proxy |
735 NULL, NULL, NULL, // per-proto proxies | 749 nullptr, // all_proxy |
736 NULL, NULL, // SOCKS | 750 nullptr, nullptr, nullptr, // per-proto proxies |
737 "*", // no_proxy | 751 nullptr, nullptr, // SOCKS |
738 }, | 752 "*", // no_proxy |
739 | 753 }, |
740 // Expected result. | 754 |
741 ProxyConfigService::CONFIG_VALID, | 755 // Expected result. |
742 false, // auto_detect | 756 ProxyConfigService::CONFIG_VALID, |
743 GURL(), // pac_url | 757 false, // auto_detect |
744 ProxyRulesExpectation::Empty(), | 758 GURL(), // pac_url |
745 }, | 759 ProxyRulesExpectation::Empty(), |
746 | 760 }, |
747 { | 761 |
748 TEST_DESC("Auto detect"), | 762 { |
749 { // Input. | 763 TEST_DESC("Auto detect"), |
750 NULL, // DESKTOP_SESSION | 764 { |
751 NULL, // HOME | 765 // Input. |
752 NULL, // KDEHOME | 766 nullptr, // DESKTOP_SESSION |
753 NULL, // KDE_SESSION_VERSION | 767 nullptr, // HOME |
754 NULL, // XDG_CURRENT_DESKTOP | 768 nullptr, // KDEHOME |
755 "", // auto_proxy | 769 nullptr, // KDE_SESSION_VERSION |
756 NULL, // all_proxy | 770 nullptr, // XDG_CURRENT_DESKTOP |
757 NULL, NULL, NULL, // per-proto proxies | 771 "", // auto_proxy |
758 NULL, NULL, // SOCKS | 772 nullptr, // all_proxy |
759 NULL, // no_proxy | 773 nullptr, nullptr, nullptr, // per-proto proxies |
760 }, | 774 nullptr, nullptr, // SOCKS |
761 | 775 nullptr, // no_proxy |
762 // Expected result. | 776 }, |
763 ProxyConfigService::CONFIG_VALID, | 777 |
764 true, // auto_detect | 778 // Expected result. |
765 GURL(), // pac_url | 779 ProxyConfigService::CONFIG_VALID, |
766 ProxyRulesExpectation::Empty(), | 780 true, // auto_detect |
767 }, | 781 GURL(), // pac_url |
768 | 782 ProxyRulesExpectation::Empty(), |
769 { | 783 }, |
770 TEST_DESC("Valid PAC URL"), | 784 |
771 { // Input. | 785 { |
772 NULL, // DESKTOP_SESSION | 786 TEST_DESC("Valid PAC URL"), |
773 NULL, // HOME | 787 { |
774 NULL, // KDEHOME | 788 // Input. |
775 NULL, // KDE_SESSION_VERSION | 789 nullptr, // DESKTOP_SESSION |
776 NULL, // XDG_CURRENT_DESKTOP | 790 nullptr, // HOME |
777 "http://wpad/wpad.dat", // auto_proxy | 791 nullptr, // KDEHOME |
778 NULL, // all_proxy | 792 nullptr, // KDE_SESSION_VERSION |
779 NULL, NULL, NULL, // per-proto proxies | 793 nullptr, // XDG_CURRENT_DESKTOP |
780 NULL, NULL, // SOCKS | 794 "http://wpad/wpad.dat", // auto_proxy |
781 NULL, // no_proxy | 795 nullptr, // all_proxy |
782 }, | 796 nullptr, nullptr, nullptr, // per-proto proxies |
783 | 797 nullptr, nullptr, // SOCKS |
784 // Expected result. | 798 nullptr, // no_proxy |
785 ProxyConfigService::CONFIG_VALID, | 799 }, |
786 false, // auto_detect | 800 |
787 GURL("http://wpad/wpad.dat"), // pac_url | 801 // Expected result. |
788 ProxyRulesExpectation::Empty(), | 802 ProxyConfigService::CONFIG_VALID, |
789 }, | 803 false, // auto_detect |
790 | 804 GURL("http://wpad/wpad.dat"), // pac_url |
791 { | 805 ProxyRulesExpectation::Empty(), |
792 TEST_DESC("Invalid PAC URL"), | 806 }, |
793 { // Input. | 807 |
794 NULL, // DESKTOP_SESSION | 808 { |
795 NULL, // HOME | 809 TEST_DESC("Invalid PAC URL"), |
796 NULL, // KDEHOME | 810 { |
797 NULL, // KDE_SESSION_VERSION | 811 // Input. |
798 NULL, // XDG_CURRENT_DESKTOP | 812 nullptr, // DESKTOP_SESSION |
799 "wpad.dat", // auto_proxy | 813 nullptr, // HOME |
800 NULL, // all_proxy | 814 nullptr, // KDEHOME |
801 NULL, NULL, NULL, // per-proto proxies | 815 nullptr, // KDE_SESSION_VERSION |
802 NULL, NULL, // SOCKS | 816 nullptr, // XDG_CURRENT_DESKTOP |
803 NULL, // no_proxy | 817 "wpad.dat", // auto_proxy |
804 }, | 818 nullptr, // all_proxy |
805 | 819 nullptr, nullptr, nullptr, // per-proto proxies |
806 // Expected result. | 820 nullptr, nullptr, // SOCKS |
807 ProxyConfigService::CONFIG_VALID, | 821 nullptr, // no_proxy |
808 false, // auto_detect | 822 }, |
809 GURL(), // pac_url | 823 |
810 ProxyRulesExpectation::Empty(), | 824 // Expected result. |
811 }, | 825 ProxyConfigService::CONFIG_VALID, |
812 | 826 false, // auto_detect |
813 { | 827 GURL(), // pac_url |
814 TEST_DESC("Single-host in proxy list"), | 828 ProxyRulesExpectation::Empty(), |
815 { // Input. | 829 }, |
816 NULL, // DESKTOP_SESSION | 830 |
817 NULL, // HOME | 831 { |
818 NULL, // KDEHOME | 832 TEST_DESC("Single-host in proxy list"), |
819 NULL, // KDE_SESSION_VERSION | 833 { |
820 NULL, // XDG_CURRENT_DESKTOP | 834 // Input. |
821 NULL, // auto_proxy | 835 nullptr, // DESKTOP_SESSION |
822 "www.google.com", // all_proxy | 836 nullptr, // HOME |
823 NULL, NULL, NULL, // per-proto proxies | 837 nullptr, // KDEHOME |
824 NULL, NULL, // SOCKS | 838 nullptr, // KDE_SESSION_VERSION |
825 NULL, // no_proxy | 839 nullptr, // XDG_CURRENT_DESKTOP |
826 }, | 840 nullptr, // auto_proxy |
827 | 841 "www.google.com", // all_proxy |
828 // Expected result. | 842 nullptr, nullptr, nullptr, // per-proto proxies |
829 ProxyConfigService::CONFIG_VALID, | 843 nullptr, nullptr, // SOCKS |
830 false, // auto_detect | 844 nullptr, // no_proxy |
831 GURL(), // pac_url | 845 }, |
832 ProxyRulesExpectation::Single( | 846 |
833 "www.google.com:80", // single proxy | 847 // Expected result. |
834 ""), // bypass rules | 848 ProxyConfigService::CONFIG_VALID, |
835 }, | 849 false, // auto_detect |
836 | 850 GURL(), // pac_url |
837 { | 851 ProxyRulesExpectation::Single("www.google.com:80", // single proxy |
838 TEST_DESC("Single-host, different port"), | 852 ""), // bypass rules |
839 { // Input. | 853 }, |
840 NULL, // DESKTOP_SESSION | 854 |
841 NULL, // HOME | 855 { |
842 NULL, // KDEHOME | 856 TEST_DESC("Single-host, different port"), |
843 NULL, // KDE_SESSION_VERSION | 857 { |
844 NULL, // XDG_CURRENT_DESKTOP | 858 // Input. |
845 NULL, // auto_proxy | 859 nullptr, // DESKTOP_SESSION |
846 "www.google.com:99", // all_proxy | 860 nullptr, // HOME |
847 NULL, NULL, NULL, // per-proto proxies | 861 nullptr, // KDEHOME |
848 NULL, NULL, // SOCKS | 862 nullptr, // KDE_SESSION_VERSION |
849 NULL, // no_proxy | 863 nullptr, // XDG_CURRENT_DESKTOP |
850 }, | 864 nullptr, // auto_proxy |
851 | 865 "www.google.com:99", // all_proxy |
852 // Expected result. | 866 nullptr, nullptr, nullptr, // per-proto proxies |
853 ProxyConfigService::CONFIG_VALID, | 867 nullptr, nullptr, // SOCKS |
854 false, // auto_detect | 868 nullptr, // no_proxy |
855 GURL(), // pac_url | 869 }, |
856 ProxyRulesExpectation::Single( | 870 |
857 "www.google.com:99", // single | 871 // Expected result. |
858 ""), // bypass rules | 872 ProxyConfigService::CONFIG_VALID, |
859 }, | 873 false, // auto_detect |
860 | 874 GURL(), // pac_url |
861 { | 875 ProxyRulesExpectation::Single("www.google.com:99", // single |
862 TEST_DESC("Tolerate a scheme"), | 876 ""), // bypass rules |
863 { // Input. | 877 }, |
864 NULL, // DESKTOP_SESSION | 878 |
865 NULL, // HOME | 879 { |
866 NULL, // KDEHOME | 880 TEST_DESC("Tolerate a scheme"), |
867 NULL, // KDE_SESSION_VERSION | 881 { |
868 NULL, // XDG_CURRENT_DESKTOP | 882 // Input. |
869 NULL, // auto_proxy | 883 nullptr, // DESKTOP_SESSION |
870 "http://www.google.com:99", // all_proxy | 884 nullptr, // HOME |
871 NULL, NULL, NULL, // per-proto proxies | 885 nullptr, // KDEHOME |
872 NULL, NULL, // SOCKS | 886 nullptr, // KDE_SESSION_VERSION |
873 NULL, // no_proxy | 887 nullptr, // XDG_CURRENT_DESKTOP |
874 }, | 888 nullptr, // auto_proxy |
875 | 889 "http://www.google.com:99", // all_proxy |
876 // Expected result. | 890 nullptr, nullptr, nullptr, // per-proto proxies |
877 ProxyConfigService::CONFIG_VALID, | 891 nullptr, nullptr, // SOCKS |
878 false, // auto_detect | 892 nullptr, // no_proxy |
879 GURL(), // pac_url | 893 }, |
880 ProxyRulesExpectation::Single( | 894 |
881 "www.google.com:99", // single proxy | 895 // Expected result. |
882 ""), // bypass rules | 896 ProxyConfigService::CONFIG_VALID, |
883 }, | 897 false, // auto_detect |
884 | 898 GURL(), // pac_url |
885 { | 899 ProxyRulesExpectation::Single("www.google.com:99", // single proxy |
886 TEST_DESC("Per-scheme proxy rules"), | 900 ""), // bypass rules |
887 { // Input. | 901 }, |
888 NULL, // DESKTOP_SESSION | 902 |
889 NULL, // HOME | 903 { |
890 NULL, // KDEHOME | 904 TEST_DESC("Per-scheme proxy rules"), |
891 NULL, // KDE_SESSION_VERSION | 905 { |
892 NULL, // XDG_CURRENT_DESKTOP | 906 // Input. |
893 NULL, // auto_proxy | 907 nullptr, // DESKTOP_SESSION |
894 NULL, // all_proxy | 908 nullptr, // HOME |
895 "www.google.com:80", "www.foo.com:110", "ftp.foo.com:121", // per-proto | 909 nullptr, // KDEHOME |
896 NULL, NULL, // SOCKS | 910 nullptr, // KDE_SESSION_VERSION |
897 NULL, // no_proxy | 911 nullptr, // XDG_CURRENT_DESKTOP |
898 }, | 912 nullptr, // auto_proxy |
899 | 913 nullptr, // all_proxy |
900 // Expected result. | 914 "www.google.com:80", "www.foo.com:110", |
901 ProxyConfigService::CONFIG_VALID, | 915 "ftp.foo.com:121", // per-proto |
902 false, // auto_detect | 916 nullptr, nullptr, // SOCKS |
903 GURL(), // pac_url | 917 nullptr, // no_proxy |
904 ProxyRulesExpectation::PerScheme( | 918 }, |
905 "www.google.com:80", // http | 919 |
906 "www.foo.com:110", // https | 920 // Expected result. |
907 "ftp.foo.com:121", // ftp | 921 ProxyConfigService::CONFIG_VALID, |
908 ""), // bypass rules | 922 false, // auto_detect |
909 }, | 923 GURL(), // pac_url |
910 | 924 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
911 { | 925 "www.foo.com:110", // https |
912 TEST_DESC("socks"), | 926 "ftp.foo.com:121", // ftp |
913 { // Input. | 927 ""), // bypass rules |
914 NULL, // DESKTOP_SESSION | 928 }, |
915 NULL, // HOME | 929 |
916 NULL, // KDEHOME | 930 { |
917 NULL, // KDE_SESSION_VERSION | 931 TEST_DESC("socks"), |
918 NULL, // XDG_CURRENT_DESKTOP | 932 { |
919 NULL, // auto_proxy | 933 // Input. |
920 "", // all_proxy | 934 nullptr, // DESKTOP_SESSION |
921 NULL, NULL, NULL, // per-proto proxies | 935 nullptr, // HOME |
922 "socks.com:888", NULL, // SOCKS | 936 nullptr, // KDEHOME |
923 NULL, // no_proxy | 937 nullptr, // KDE_SESSION_VERSION |
924 }, | 938 nullptr, // XDG_CURRENT_DESKTOP |
925 | 939 nullptr, // auto_proxy |
926 // Expected result. | 940 "", // all_proxy |
927 ProxyConfigService::CONFIG_VALID, | 941 nullptr, nullptr, nullptr, // per-proto proxies |
928 false, // auto_detect | 942 "socks.com:888", nullptr, // SOCKS |
929 GURL(), // pac_url | 943 nullptr, // no_proxy |
930 ProxyRulesExpectation::Single( | 944 }, |
931 "socks5://socks.com:888", // single proxy | 945 |
932 ""), // bypass rules | 946 // Expected result. |
933 }, | 947 ProxyConfigService::CONFIG_VALID, |
934 | 948 false, // auto_detect |
935 { | 949 GURL(), // pac_url |
936 TEST_DESC("socks4"), | 950 ProxyRulesExpectation::Single( |
937 { // Input. | 951 "socks5://socks.com:888", // single proxy |
938 NULL, // DESKTOP_SESSION | 952 ""), // bypass rules |
939 NULL, // HOME | 953 }, |
940 NULL, // KDEHOME | 954 |
941 NULL, // KDE_SESSION_VERSION | 955 { |
942 NULL, // XDG_CURRENT_DESKTOP | 956 TEST_DESC("socks4"), |
943 NULL, // auto_proxy | 957 { |
944 "", // all_proxy | 958 // Input. |
945 NULL, NULL, NULL, // per-proto proxies | 959 nullptr, // DESKTOP_SESSION |
946 "socks.com:888", "4", // SOCKS | 960 nullptr, // HOME |
947 NULL, // no_proxy | 961 nullptr, // KDEHOME |
948 }, | 962 nullptr, // KDE_SESSION_VERSION |
949 | 963 nullptr, // XDG_CURRENT_DESKTOP |
950 // Expected result. | 964 nullptr, // auto_proxy |
951 ProxyConfigService::CONFIG_VALID, | 965 "", // all_proxy |
952 false, // auto_detect | 966 nullptr, nullptr, nullptr, // per-proto proxies |
953 GURL(), // pac_url | 967 "socks.com:888", "4", // SOCKS |
954 ProxyRulesExpectation::Single( | 968 nullptr, // no_proxy |
955 "socks4://socks.com:888", // single proxy | 969 }, |
956 ""), // bypass rules | 970 |
957 }, | 971 // Expected result. |
958 | 972 ProxyConfigService::CONFIG_VALID, |
959 { | 973 false, // auto_detect |
960 TEST_DESC("socks default port"), | 974 GURL(), // pac_url |
961 { // Input. | 975 ProxyRulesExpectation::Single( |
962 NULL, // DESKTOP_SESSION | 976 "socks4://socks.com:888", // single proxy |
963 NULL, // HOME | 977 ""), // bypass rules |
964 NULL, // KDEHOME | 978 }, |
965 NULL, // KDE_SESSION_VERSION | 979 |
966 NULL, // XDG_CURRENT_DESKTOP | 980 { |
967 NULL, // auto_proxy | 981 TEST_DESC("socks default port"), |
968 "", // all_proxy | 982 { |
969 NULL, NULL, NULL, // per-proto proxies | 983 // Input. |
970 "socks.com", NULL, // SOCKS | 984 nullptr, // DESKTOP_SESSION |
971 NULL, // no_proxy | 985 nullptr, // HOME |
972 }, | 986 nullptr, // KDEHOME |
973 | 987 nullptr, // KDE_SESSION_VERSION |
974 // Expected result. | 988 nullptr, // XDG_CURRENT_DESKTOP |
975 ProxyConfigService::CONFIG_VALID, | 989 nullptr, // auto_proxy |
976 false, // auto_detect | 990 "", // all_proxy |
977 GURL(), // pac_url | 991 nullptr, nullptr, nullptr, // per-proto proxies |
978 ProxyRulesExpectation::Single( | 992 "socks.com", nullptr, // SOCKS |
979 "socks5://socks.com:1080", // single proxy | 993 nullptr, // no_proxy |
980 ""), // bypass rules | 994 }, |
981 }, | 995 |
982 | 996 // Expected result. |
983 { | 997 ProxyConfigService::CONFIG_VALID, |
984 TEST_DESC("bypass"), | 998 false, // auto_detect |
985 { // Input. | 999 GURL(), // pac_url |
986 NULL, // DESKTOP_SESSION | 1000 ProxyRulesExpectation::Single( |
987 NULL, // HOME | 1001 "socks5://socks.com:1080", // single proxy |
988 NULL, // KDEHOME | 1002 ""), // bypass rules |
989 NULL, // KDE_SESSION_VERSION | 1003 }, |
990 NULL, // XDG_CURRENT_DESKTOP | 1004 |
991 NULL, // auto_proxy | 1005 { |
992 "www.google.com", // all_proxy | 1006 TEST_DESC("bypass"), |
993 NULL, NULL, NULL, // per-proto | 1007 { |
994 NULL, NULL, // SOCKS | 1008 // Input. |
995 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", // no_proxy | 1009 nullptr, // DESKTOP_SESSION |
996 }, | 1010 nullptr, // HOME |
997 | 1011 nullptr, // KDEHOME |
998 // Expected result. | 1012 nullptr, // KDE_SESSION_VERSION |
999 ProxyConfigService::CONFIG_VALID, | 1013 nullptr, // XDG_CURRENT_DESKTOP |
1000 false, // auto_detect | 1014 nullptr, // auto_proxy |
1001 GURL(), // pac_url | 1015 "www.google.com", // all_proxy |
1002 ProxyRulesExpectation::Single( | 1016 nullptr, nullptr, nullptr, // per-proto |
1003 "www.google.com:80", | 1017 nullptr, nullptr, // SOCKS |
1004 "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"), | 1018 ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", // no_proxy |
1005 }, | 1019 }, |
| 1020 |
| 1021 // Expected result. |
| 1022 ProxyConfigService::CONFIG_VALID, |
| 1023 false, // auto_detect |
| 1024 GURL(), // pac_url |
| 1025 ProxyRulesExpectation::Single( |
| 1026 "www.google.com:80", |
| 1027 "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"), |
| 1028 }, |
1006 }; | 1029 }; |
1007 | 1030 |
1008 for (size_t i = 0; i < arraysize(tests); ++i) { | 1031 for (size_t i = 0; i < arraysize(tests); ++i) { |
1009 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, | 1032 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, |
1010 tests[i].description.c_str())); | 1033 tests[i].description.c_str())); |
1011 MockEnvironment* env = new MockEnvironment; | 1034 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
| 1035 env->values = tests[i].values; |
1012 MockSettingGetter* setting_getter = new MockSettingGetter; | 1036 MockSettingGetter* setting_getter = new MockSettingGetter; |
1013 SynchConfigGetter sync_config_getter( | 1037 SynchConfigGetter sync_config_getter( |
1014 new ProxyConfigServiceLinux(env, setting_getter)); | 1038 new ProxyConfigServiceLinux(std::move(env), setting_getter)); |
1015 ProxyConfig config; | 1039 ProxyConfig config; |
1016 env->values = tests[i].values; | |
1017 sync_config_getter.SetupAndInitialFetch(); | 1040 sync_config_getter.SetupAndInitialFetch(); |
1018 ProxyConfigService::ConfigAvailability availability = | 1041 ProxyConfigService::ConfigAvailability availability = |
1019 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1042 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1020 EXPECT_EQ(tests[i].availability, availability); | 1043 EXPECT_EQ(tests[i].availability, availability); |
1021 | 1044 |
1022 if (availability == ProxyConfigService::CONFIG_VALID) { | 1045 if (availability == ProxyConfigService::CONFIG_VALID) { |
1023 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); | 1046 EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
1024 EXPECT_EQ(tests[i].pac_url, config.pac_url()); | 1047 EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
1025 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); | 1048 EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
1026 } | 1049 } |
1027 } | 1050 } |
1028 } | 1051 } |
1029 | 1052 |
1030 TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) { | 1053 TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) { |
1031 MockEnvironment* env = new MockEnvironment; | 1054 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1032 MockSettingGetter* setting_getter = new MockSettingGetter; | 1055 MockSettingGetter* setting_getter = new MockSettingGetter; |
1033 ProxyConfigServiceLinux* service = | 1056 ProxyConfigServiceLinux* service = |
1034 new ProxyConfigServiceLinux(env, setting_getter); | 1057 new ProxyConfigServiceLinux(std::move(env), setting_getter); |
1035 SynchConfigGetter sync_config_getter(service); | 1058 SynchConfigGetter sync_config_getter(service); |
1036 ProxyConfig config; | 1059 ProxyConfig config; |
1037 | 1060 |
1038 // Start with no proxy. | 1061 // Start with no proxy. |
1039 setting_getter->values.mode = "none"; | 1062 setting_getter->values.mode = "none"; |
1040 sync_config_getter.SetupAndInitialFetch(); | 1063 sync_config_getter.SetupAndInitialFetch(); |
1041 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1064 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1042 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1065 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1043 EXPECT_FALSE(config.auto_detect()); | 1066 EXPECT_FALSE(config.auto_detect()); |
1044 | 1067 |
(...skipping 22 matching lines...) Expand all Loading... |
1067 // Input. | 1090 // Input. |
1068 std::string kioslaverc; | 1091 std::string kioslaverc; |
1069 EnvVarValues env_values; | 1092 EnvVarValues env_values; |
1070 | 1093 |
1071 // Expected outputs (availability and fields of ProxyConfig). | 1094 // Expected outputs (availability and fields of ProxyConfig). |
1072 ProxyConfigService::ConfigAvailability availability; | 1095 ProxyConfigService::ConfigAvailability availability; |
1073 bool auto_detect; | 1096 bool auto_detect; |
1074 GURL pac_url; | 1097 GURL pac_url; |
1075 ProxyRulesExpectation proxy_rules; | 1098 ProxyRulesExpectation proxy_rules; |
1076 } tests[] = { | 1099 } tests[] = { |
1077 { | 1100 { |
1078 TEST_DESC("No proxying"), | 1101 TEST_DESC("No proxying"), |
1079 | 1102 |
1080 // Input. | 1103 // Input. |
1081 "[Proxy Settings]\nProxyType=0\n", | 1104 "[Proxy Settings]\nProxyType=0\n", |
1082 {}, // env_values | 1105 {}, // env_values |
1083 | 1106 |
1084 // Expected result. | 1107 // Expected result. |
1085 ProxyConfigService::CONFIG_VALID, | 1108 ProxyConfigService::CONFIG_VALID, |
1086 false, // auto_detect | 1109 false, // auto_detect |
1087 GURL(), // pac_url | 1110 GURL(), // pac_url |
1088 ProxyRulesExpectation::Empty(), | 1111 ProxyRulesExpectation::Empty(), |
1089 }, | 1112 }, |
1090 | 1113 |
1091 { | 1114 { |
1092 TEST_DESC("Auto detect"), | 1115 TEST_DESC("Auto detect"), |
1093 | 1116 |
1094 // Input. | 1117 // Input. |
1095 "[Proxy Settings]\nProxyType=3\n", | 1118 "[Proxy Settings]\nProxyType=3\n", |
1096 {}, // env_values | 1119 {}, // env_values |
1097 | 1120 |
1098 // Expected result. | 1121 // Expected result. |
1099 ProxyConfigService::CONFIG_VALID, | 1122 ProxyConfigService::CONFIG_VALID, |
1100 true, // auto_detect | 1123 true, // auto_detect |
1101 GURL(), // pac_url | 1124 GURL(), // pac_url |
1102 ProxyRulesExpectation::Empty(), | 1125 ProxyRulesExpectation::Empty(), |
1103 }, | 1126 }, |
1104 | 1127 |
1105 { | 1128 { |
1106 TEST_DESC("Valid PAC URL"), | 1129 TEST_DESC("Valid PAC URL"), |
1107 | 1130 |
1108 // Input. | 1131 // Input. |
1109 "[Proxy Settings]\nProxyType=2\n" | 1132 "[Proxy Settings]\nProxyType=2\n" |
1110 "Proxy Config Script=http://wpad/wpad.dat\n", | 1133 "Proxy Config Script=http://wpad/wpad.dat\n", |
1111 {}, // env_values | 1134 {}, // env_values |
1112 | 1135 |
1113 // Expected result. | 1136 // Expected result. |
1114 ProxyConfigService::CONFIG_VALID, | 1137 ProxyConfigService::CONFIG_VALID, |
1115 false, // auto_detect | 1138 false, // auto_detect |
1116 GURL("http://wpad/wpad.dat"), // pac_url | 1139 GURL("http://wpad/wpad.dat"), // pac_url |
1117 ProxyRulesExpectation::Empty(), | 1140 ProxyRulesExpectation::Empty(), |
1118 }, | 1141 }, |
1119 | 1142 |
1120 { | 1143 { |
1121 TEST_DESC("Valid PAC file without file://"), | 1144 TEST_DESC("Valid PAC file without file://"), |
1122 | 1145 |
1123 // Input. | 1146 // Input. |
1124 "[Proxy Settings]\nProxyType=2\n" | 1147 "[Proxy Settings]\nProxyType=2\n" |
1125 "Proxy Config Script=/wpad/wpad.dat\n", | 1148 "Proxy Config Script=/wpad/wpad.dat\n", |
1126 {}, // env_values | 1149 {}, // env_values |
1127 | 1150 |
1128 // Expected result. | 1151 // Expected result. |
1129 ProxyConfigService::CONFIG_VALID, | 1152 ProxyConfigService::CONFIG_VALID, |
1130 false, // auto_detect | 1153 false, // auto_detect |
1131 GURL("file:///wpad/wpad.dat"), // pac_url | 1154 GURL("file:///wpad/wpad.dat"), // pac_url |
1132 ProxyRulesExpectation::Empty(), | 1155 ProxyRulesExpectation::Empty(), |
1133 }, | 1156 }, |
1134 | 1157 |
1135 { | 1158 { |
1136 TEST_DESC("Per-scheme proxy rules"), | 1159 TEST_DESC("Per-scheme proxy rules"), |
1137 | 1160 |
1138 // Input. | 1161 // Input. |
1139 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | 1162 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1140 "httpsProxy=www.foo.com\nftpProxy=ftp.foo.com\n", | 1163 "httpsProxy=www.foo.com\nftpProxy=ftp.foo.com\n", |
1141 {}, // env_values | 1164 {}, // env_values |
1142 | 1165 |
1143 // Expected result. | 1166 // Expected result. |
1144 ProxyConfigService::CONFIG_VALID, | 1167 ProxyConfigService::CONFIG_VALID, |
1145 false, // auto_detect | 1168 false, // auto_detect |
1146 GURL(), // pac_url | 1169 GURL(), // pac_url |
1147 ProxyRulesExpectation::PerScheme( | 1170 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1148 "www.google.com:80", // http | 1171 "www.foo.com:80", // https |
1149 "www.foo.com:80", // https | 1172 "ftp.foo.com:80", // http |
1150 "ftp.foo.com:80", // http | 1173 ""), // bypass rules |
1151 ""), // bypass rules | 1174 }, |
1152 }, | 1175 |
1153 | 1176 { |
1154 { | 1177 TEST_DESC("Only HTTP proxy specified"), |
1155 TEST_DESC("Only HTTP proxy specified"), | 1178 |
1156 | 1179 // Input. |
1157 // Input. | 1180 "[Proxy Settings]\nProxyType=1\n" |
1158 "[Proxy Settings]\nProxyType=1\n" | |
1159 "httpProxy=www.google.com\n", | 1181 "httpProxy=www.google.com\n", |
1160 {}, // env_values | 1182 {}, // env_values |
1161 | 1183 |
1162 // Expected result. | 1184 // Expected result. |
1163 ProxyConfigService::CONFIG_VALID, | 1185 ProxyConfigService::CONFIG_VALID, |
1164 false, // auto_detect | 1186 false, // auto_detect |
1165 GURL(), // pac_url | 1187 GURL(), // pac_url |
1166 ProxyRulesExpectation::PerScheme( | 1188 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1167 "www.google.com:80", // http | 1189 "", // https |
1168 "", // https | 1190 "", // ftp |
1169 "", // ftp | 1191 ""), // bypass rules |
1170 ""), // bypass rules | 1192 }, |
1171 }, | 1193 |
1172 | 1194 { |
1173 { | 1195 TEST_DESC("Only HTTP proxy specified, different port"), |
1174 TEST_DESC("Only HTTP proxy specified, different port"), | 1196 |
1175 | 1197 // Input. |
1176 // Input. | 1198 "[Proxy Settings]\nProxyType=1\n" |
1177 "[Proxy Settings]\nProxyType=1\n" | |
1178 "httpProxy=www.google.com:88\n", | 1199 "httpProxy=www.google.com:88\n", |
1179 {}, // env_values | 1200 {}, // env_values |
1180 | 1201 |
1181 // Expected result. | 1202 // Expected result. |
1182 ProxyConfigService::CONFIG_VALID, | 1203 ProxyConfigService::CONFIG_VALID, |
1183 false, // auto_detect | 1204 false, // auto_detect |
1184 GURL(), // pac_url | 1205 GURL(), // pac_url |
1185 ProxyRulesExpectation::PerScheme( | 1206 ProxyRulesExpectation::PerScheme("www.google.com:88", // http |
1186 "www.google.com:88", // http | 1207 "", // https |
1187 "", // https | 1208 "", // ftp |
1188 "", // ftp | 1209 ""), // bypass rules |
1189 ""), // bypass rules | 1210 }, |
1190 }, | 1211 |
1191 | 1212 { |
1192 { | 1213 TEST_DESC( |
1193 TEST_DESC("Only HTTP proxy specified, different port, space-delimited"), | 1214 "Only HTTP proxy specified, different port, space-delimited"), |
1194 | 1215 |
1195 // Input. | 1216 // Input. |
1196 "[Proxy Settings]\nProxyType=1\n" | 1217 "[Proxy Settings]\nProxyType=1\n" |
1197 "httpProxy=www.google.com 88\n", | 1218 "httpProxy=www.google.com 88\n", |
1198 {}, // env_values | 1219 {}, // env_values |
1199 | 1220 |
1200 // Expected result. | 1221 // Expected result. |
1201 ProxyConfigService::CONFIG_VALID, | 1222 ProxyConfigService::CONFIG_VALID, |
1202 false, // auto_detect | 1223 false, // auto_detect |
1203 GURL(), // pac_url | 1224 GURL(), // pac_url |
1204 ProxyRulesExpectation::PerScheme( | 1225 ProxyRulesExpectation::PerScheme("www.google.com:88", // http |
1205 "www.google.com:88", // http | 1226 "", // https |
1206 "", // https | 1227 "", // ftp |
1207 "", // ftp | 1228 ""), // bypass rules |
1208 ""), // bypass rules | 1229 }, |
1209 }, | 1230 |
1210 | 1231 { |
1211 { | 1232 TEST_DESC("Bypass *.google.com"), |
1212 TEST_DESC("Bypass *.google.com"), | 1233 |
1213 | 1234 // Input. |
1214 // Input. | 1235 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1215 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | |
1216 "NoProxyFor=.google.com\n", | 1236 "NoProxyFor=.google.com\n", |
1217 {}, // env_values | 1237 {}, // env_values |
1218 | 1238 |
1219 // Expected result. | 1239 // Expected result. |
1220 ProxyConfigService::CONFIG_VALID, | 1240 ProxyConfigService::CONFIG_VALID, |
1221 false, // auto_detect | 1241 false, // auto_detect |
1222 GURL(), // pac_url | 1242 GURL(), // pac_url |
1223 ProxyRulesExpectation::PerScheme( | 1243 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1224 "www.google.com:80", // http | 1244 "", // https |
1225 "", // https | 1245 "", // ftp |
1226 "", // ftp | 1246 "*.google.com"), // bypass rules |
1227 "*.google.com"), // bypass rules | 1247 }, |
1228 }, | 1248 |
1229 | 1249 { |
1230 { | 1250 TEST_DESC("Bypass *.google.com and *.kde.org"), |
1231 TEST_DESC("Bypass *.google.com and *.kde.org"), | 1251 |
1232 | 1252 // Input. |
1233 // Input. | 1253 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1234 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | |
1235 "NoProxyFor=.google.com,.kde.org\n", | 1254 "NoProxyFor=.google.com,.kde.org\n", |
1236 {}, // env_values | 1255 {}, // env_values |
1237 | 1256 |
1238 // Expected result. | 1257 // Expected result. |
1239 ProxyConfigService::CONFIG_VALID, | 1258 ProxyConfigService::CONFIG_VALID, |
1240 false, // auto_detect | 1259 false, // auto_detect |
1241 GURL(), // pac_url | 1260 GURL(), // pac_url |
1242 ProxyRulesExpectation::PerScheme( | 1261 ProxyRulesExpectation::PerScheme( |
1243 "www.google.com:80", // http | 1262 "www.google.com:80", // http |
1244 "", // https | 1263 "", // https |
1245 "", // ftp | 1264 "", // ftp |
1246 "*.google.com,*.kde.org"), // bypass rules | 1265 "*.google.com,*.kde.org"), // bypass rules |
1247 }, | 1266 }, |
1248 | 1267 |
1249 { | 1268 { |
1250 TEST_DESC("Correctly parse bypass list with ReversedException"), | 1269 TEST_DESC("Correctly parse bypass list with ReversedException"), |
1251 | 1270 |
1252 // Input. | 1271 // Input. |
1253 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | 1272 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1254 "NoProxyFor=.google.com\nReversedException=true\n", | 1273 "NoProxyFor=.google.com\nReversedException=true\n", |
1255 {}, // env_values | 1274 {}, // env_values |
1256 | 1275 |
1257 // Expected result. | 1276 // Expected result. |
1258 ProxyConfigService::CONFIG_VALID, | 1277 ProxyConfigService::CONFIG_VALID, |
1259 false, // auto_detect | 1278 false, // auto_detect |
1260 GURL(), // pac_url | 1279 GURL(), // pac_url |
1261 ProxyRulesExpectation::PerSchemeWithBypassReversed( | 1280 ProxyRulesExpectation::PerSchemeWithBypassReversed( |
1262 "www.google.com:80", // http | 1281 "www.google.com:80", // http |
1263 "", // https | 1282 "", // https |
1264 "", // ftp | 1283 "", // ftp |
1265 "*.google.com"), // bypass rules | 1284 "*.google.com"), // bypass rules |
1266 }, | 1285 }, |
1267 | 1286 |
1268 { | 1287 { |
1269 TEST_DESC("socks"), | 1288 TEST_DESC("socks"), |
1270 | 1289 |
1271 // Input. | 1290 // Input. |
1272 "[Proxy Settings]\nProxyType=1\nsocksProxy=socks.com 888\n", | 1291 "[Proxy Settings]\nProxyType=1\nsocksProxy=socks.com 888\n", |
1273 {}, // env_values | 1292 {}, // env_values |
1274 | 1293 |
1275 // Expected result. | 1294 // Expected result. |
1276 ProxyConfigService::CONFIG_VALID, | 1295 ProxyConfigService::CONFIG_VALID, |
1277 false, // auto_detect | 1296 false, // auto_detect |
1278 GURL(), // pac_url | 1297 GURL(), // pac_url |
1279 ProxyRulesExpectation::Single( | 1298 ProxyRulesExpectation::Single( |
1280 "socks5://socks.com:888", // single proxy | 1299 "socks5://socks.com:888", // single proxy |
1281 ""), // bypass rules | 1300 ""), // bypass rules |
1282 }, | 1301 }, |
1283 | 1302 |
1284 { | 1303 { |
1285 TEST_DESC("socks4"), | 1304 TEST_DESC("socks4"), |
1286 | 1305 |
1287 // Input. | 1306 // Input. |
1288 "[Proxy Settings]\nProxyType=1\nsocksProxy=socks4://socks.com 888\n", | 1307 "[Proxy Settings]\nProxyType=1\nsocksProxy=socks4://socks.com 888\n", |
1289 {}, // env_values | 1308 {}, // env_values |
1290 | 1309 |
1291 // Expected result. | 1310 // Expected result. |
1292 ProxyConfigService::CONFIG_VALID, | 1311 ProxyConfigService::CONFIG_VALID, |
1293 false, // auto_detect | 1312 false, // auto_detect |
1294 GURL(), // pac_url | 1313 GURL(), // pac_url |
1295 ProxyRulesExpectation::Single( | 1314 ProxyRulesExpectation::Single( |
1296 "socks4://socks.com:888", // single proxy | 1315 "socks4://socks.com:888", // single proxy |
1297 ""), // bypass rules | 1316 ""), // bypass rules |
1298 }, | 1317 }, |
1299 | 1318 |
1300 { | 1319 { |
1301 TEST_DESC("Treat all hostname patterns as wildcard patterns"), | 1320 TEST_DESC("Treat all hostname patterns as wildcard patterns"), |
1302 | 1321 |
1303 // Input. | 1322 // Input. |
1304 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | 1323 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1305 "NoProxyFor=google.com,kde.org,<local>\n", | 1324 "NoProxyFor=google.com,kde.org,<local>\n", |
1306 {}, // env_values | 1325 {}, // env_values |
1307 | 1326 |
1308 // Expected result. | 1327 // Expected result. |
1309 ProxyConfigService::CONFIG_VALID, | 1328 ProxyConfigService::CONFIG_VALID, |
1310 false, // auto_detect | 1329 false, // auto_detect |
1311 GURL(), // pac_url | 1330 GURL(), // pac_url |
1312 ProxyRulesExpectation::PerScheme( | 1331 ProxyRulesExpectation::PerScheme( |
1313 "www.google.com:80", // http | 1332 "www.google.com:80", // http |
1314 "", // https | 1333 "", // https |
1315 "", // ftp | 1334 "", // ftp |
1316 "*google.com,*kde.org,<local>"), // bypass rules | 1335 "*google.com,*kde.org,<local>"), // bypass rules |
1317 }, | 1336 }, |
1318 | 1337 |
1319 { | 1338 { |
1320 TEST_DESC("Allow trailing whitespace after boolean value"), | 1339 TEST_DESC("Allow trailing whitespace after boolean value"), |
1321 | 1340 |
1322 // Input. | 1341 // Input. |
1323 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | 1342 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1324 "NoProxyFor=.google.com\nReversedException=true \n", | 1343 "NoProxyFor=.google.com\nReversedException=true \n", |
1325 {}, // env_values | 1344 {}, // env_values |
1326 | 1345 |
1327 // Expected result. | 1346 // Expected result. |
1328 ProxyConfigService::CONFIG_VALID, | 1347 ProxyConfigService::CONFIG_VALID, |
1329 false, // auto_detect | 1348 false, // auto_detect |
1330 GURL(), // pac_url | 1349 GURL(), // pac_url |
1331 ProxyRulesExpectation::PerSchemeWithBypassReversed( | 1350 ProxyRulesExpectation::PerSchemeWithBypassReversed( |
1332 "www.google.com:80", // http | 1351 "www.google.com:80", // http |
1333 "", // https | 1352 "", // https |
1334 "", // ftp | 1353 "", // ftp |
1335 "*.google.com"), // bypass rules | 1354 "*.google.com"), // bypass rules |
1336 }, | 1355 }, |
1337 | 1356 |
1338 { | 1357 { |
1339 TEST_DESC("Ignore settings outside [Proxy Settings]"), | 1358 TEST_DESC("Ignore settings outside [Proxy Settings]"), |
1340 | 1359 |
1341 // Input. | 1360 // Input. |
1342 "httpsProxy=www.foo.com\n[Proxy Settings]\nProxyType=1\n" | 1361 "httpsProxy=www.foo.com\n[Proxy Settings]\nProxyType=1\n" |
1343 "httpProxy=www.google.com\n[Other Section]\nftpProxy=ftp.foo.com\n", | 1362 "httpProxy=www.google.com\n[Other Section]\nftpProxy=ftp.foo.com\n", |
1344 {}, // env_values | 1363 {}, // env_values |
1345 | 1364 |
1346 // Expected result. | 1365 // Expected result. |
1347 ProxyConfigService::CONFIG_VALID, | 1366 ProxyConfigService::CONFIG_VALID, |
1348 false, // auto_detect | 1367 false, // auto_detect |
1349 GURL(), // pac_url | 1368 GURL(), // pac_url |
1350 ProxyRulesExpectation::PerScheme( | 1369 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1351 "www.google.com:80", // http | 1370 "", // https |
1352 "", // https | 1371 "", // ftp |
1353 "", // ftp | 1372 ""), // bypass rules |
1354 ""), // bypass rules | 1373 }, |
1355 }, | 1374 |
1356 | 1375 { |
1357 { | 1376 TEST_DESC("Handle CRLF line endings"), |
1358 TEST_DESC("Handle CRLF line endings"), | 1377 |
1359 | 1378 // Input. |
1360 // Input. | 1379 "[Proxy Settings]\r\nProxyType=1\r\nhttpProxy=www.google.com\r\n", |
1361 "[Proxy Settings]\r\nProxyType=1\r\nhttpProxy=www.google.com\r\n", | 1380 {}, // env_values |
1362 {}, // env_values | 1381 |
1363 | 1382 // Expected result. |
1364 // Expected result. | 1383 ProxyConfigService::CONFIG_VALID, |
1365 ProxyConfigService::CONFIG_VALID, | 1384 false, // auto_detect |
1366 false, // auto_detect | 1385 GURL(), // pac_url |
1367 GURL(), // pac_url | 1386 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1368 ProxyRulesExpectation::PerScheme( | 1387 "", // https |
1369 "www.google.com:80", // http | 1388 "", // ftp |
1370 "", // https | 1389 ""), // bypass rules |
1371 "", // ftp | 1390 }, |
1372 ""), // bypass rules | 1391 |
1373 }, | 1392 { |
1374 | 1393 TEST_DESC("Handle blank lines and mixed line endings"), |
1375 { | 1394 |
1376 TEST_DESC("Handle blank lines and mixed line endings"), | 1395 // Input. |
1377 | 1396 "[Proxy Settings]\r\n\nProxyType=1\n\r\nhttpProxy=www.google.com\n\n", |
1378 // Input. | 1397 {}, // env_values |
1379 "[Proxy Settings]\r\n\nProxyType=1\n\r\nhttpProxy=www.google.com\n\n", | 1398 |
1380 {}, // env_values | 1399 // Expected result. |
1381 | 1400 ProxyConfigService::CONFIG_VALID, |
1382 // Expected result. | 1401 false, // auto_detect |
1383 ProxyConfigService::CONFIG_VALID, | 1402 GURL(), // pac_url |
1384 false, // auto_detect | 1403 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1385 GURL(), // pac_url | 1404 "", // https |
1386 ProxyRulesExpectation::PerScheme( | 1405 "", // ftp |
1387 "www.google.com:80", // http | 1406 ""), // bypass rules |
1388 "", // https | 1407 }, |
1389 "", // ftp | 1408 |
1390 ""), // bypass rules | 1409 { |
1391 }, | 1410 TEST_DESC("Handle localized settings"), |
1392 | 1411 |
1393 { | 1412 // Input. |
1394 TEST_DESC("Handle localized settings"), | 1413 "[Proxy Settings]\nProxyType[$e]=1\nhttpProxy[$e]=www.google.com\n", |
1395 | 1414 {}, // env_values |
1396 // Input. | 1415 |
1397 "[Proxy Settings]\nProxyType[$e]=1\nhttpProxy[$e]=www.google.com\n", | 1416 // Expected result. |
1398 {}, // env_values | 1417 ProxyConfigService::CONFIG_VALID, |
1399 | 1418 false, // auto_detect |
1400 // Expected result. | 1419 GURL(), // pac_url |
1401 ProxyConfigService::CONFIG_VALID, | 1420 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1402 false, // auto_detect | 1421 "", // https |
1403 GURL(), // pac_url | 1422 "", // ftp |
1404 ProxyRulesExpectation::PerScheme( | 1423 ""), // bypass rules |
1405 "www.google.com:80", // http | 1424 }, |
1406 "", // https | 1425 |
1407 "", // ftp | 1426 { |
1408 ""), // bypass rules | 1427 TEST_DESC("Ignore malformed localized settings"), |
1409 }, | 1428 |
1410 | 1429 // Input. |
1411 { | 1430 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
1412 TEST_DESC("Ignore malformed localized settings"), | |
1413 | |
1414 // Input. | |
1415 "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" | |
1416 "httpsProxy$e]=www.foo.com\nftpProxy=ftp.foo.com\n", | 1431 "httpsProxy$e]=www.foo.com\nftpProxy=ftp.foo.com\n", |
1417 {}, // env_values | 1432 {}, // env_values |
1418 | 1433 |
1419 // Expected result. | 1434 // Expected result. |
1420 ProxyConfigService::CONFIG_VALID, | 1435 ProxyConfigService::CONFIG_VALID, |
1421 false, // auto_detect | 1436 false, // auto_detect |
1422 GURL(), // pac_url | 1437 GURL(), // pac_url |
1423 ProxyRulesExpectation::PerScheme( | 1438 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1424 "www.google.com:80", // http | 1439 "", // https |
1425 "", // https | 1440 "ftp.foo.com:80", // ftp |
1426 "ftp.foo.com:80", // ftp | 1441 ""), // bypass rules |
1427 ""), // bypass rules | 1442 }, |
1428 }, | 1443 |
1429 | 1444 { |
1430 { | 1445 TEST_DESC("Handle strange whitespace"), |
1431 TEST_DESC("Handle strange whitespace"), | 1446 |
1432 | 1447 // Input. |
1433 // Input. | 1448 "[Proxy Settings]\nProxyType [$e] =2\n" |
1434 "[Proxy Settings]\nProxyType [$e] =2\n" | |
1435 " Proxy Config Script = http:// foo\n", | 1449 " Proxy Config Script = http:// foo\n", |
1436 {}, // env_values | 1450 {}, // env_values |
1437 | 1451 |
1438 // Expected result. | 1452 // Expected result. |
1439 ProxyConfigService::CONFIG_VALID, | 1453 ProxyConfigService::CONFIG_VALID, |
1440 false, // auto_detect | 1454 false, // auto_detect |
1441 GURL("http:// foo"), // pac_url | 1455 GURL("http:// foo"), // pac_url |
1442 ProxyRulesExpectation::Empty(), | 1456 ProxyRulesExpectation::Empty(), |
1443 }, | 1457 }, |
1444 | 1458 |
1445 { | 1459 { |
1446 TEST_DESC("Ignore all of a line which is too long"), | 1460 TEST_DESC("Ignore all of a line which is too long"), |
1447 | 1461 |
1448 // Input. | 1462 // Input. |
1449 std::string("[Proxy Settings]\nProxyType=1\nftpProxy=ftp.foo.com\n") + | 1463 std::string("[Proxy Settings]\nProxyType=1\nftpProxy=ftp.foo.com\n") + |
1450 long_line + "httpsProxy=www.foo.com\nhttpProxy=www.google.com\n", | 1464 long_line + "httpsProxy=www.foo.com\nhttpProxy=www.google.com\n", |
1451 {}, // env_values | 1465 {}, // env_values |
1452 | 1466 |
1453 // Expected result. | 1467 // Expected result. |
1454 ProxyConfigService::CONFIG_VALID, | 1468 ProxyConfigService::CONFIG_VALID, |
1455 false, // auto_detect | 1469 false, // auto_detect |
1456 GURL(), // pac_url | 1470 GURL(), // pac_url |
1457 ProxyRulesExpectation::PerScheme( | 1471 ProxyRulesExpectation::PerScheme("www.google.com:80", // http |
1458 "www.google.com:80", // http | 1472 "", // https |
1459 "", // https | 1473 "ftp.foo.com:80", // ftp |
1460 "ftp.foo.com:80", // ftp | 1474 ""), // bypass rules |
1461 ""), // bypass rules | 1475 }, |
1462 }, | 1476 |
1463 | 1477 { |
1464 { | 1478 TEST_DESC("Indirect Proxy - no env vars set"), |
1465 TEST_DESC("Indirect Proxy - no env vars set"), | 1479 |
1466 | 1480 // Input. |
1467 // Input. | 1481 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" |
1468 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" | |
1469 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", | 1482 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", |
1470 {}, // env_values | 1483 {}, // env_values |
1471 | 1484 |
1472 // Expected result. | 1485 // Expected result. |
1473 ProxyConfigService::CONFIG_VALID, | 1486 ProxyConfigService::CONFIG_VALID, |
1474 false, // auto_detect | 1487 false, // auto_detect |
1475 GURL(), // pac_url | 1488 GURL(), // pac_url |
1476 ProxyRulesExpectation::Empty(), | 1489 ProxyRulesExpectation::Empty(), |
1477 }, | 1490 }, |
1478 | 1491 |
1479 { | 1492 { |
1480 TEST_DESC("Indirect Proxy - with env vars set"), | 1493 TEST_DESC("Indirect Proxy - with env vars set"), |
1481 | 1494 |
1482 // Input. | 1495 // Input. |
1483 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" | 1496 "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" |
1484 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", | 1497 "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", |
1485 { // env_values | 1498 { |
1486 NULL, // DESKTOP_SESSION | 1499 // env_values |
1487 NULL, // HOME | 1500 nullptr, // DESKTOP_SESSION |
1488 NULL, // KDEHOME | 1501 nullptr, // HOME |
1489 NULL, // KDE_SESSION_VERSION | 1502 nullptr, // KDEHOME |
1490 NULL, // XDG_CURRENT_DESKTOP | 1503 nullptr, // KDE_SESSION_VERSION |
1491 NULL, // auto_proxy | 1504 nullptr, // XDG_CURRENT_DESKTOP |
1492 NULL, // all_proxy | 1505 nullptr, // auto_proxy |
1493 "www.normal.com", // http_proxy | 1506 nullptr, // all_proxy |
1494 "www.secure.com", // https_proxy | 1507 "www.normal.com", // http_proxy |
1495 "ftp.foo.com", // ftp_proxy | 1508 "www.secure.com", // https_proxy |
1496 NULL, NULL, // SOCKS | 1509 "ftp.foo.com", // ftp_proxy |
1497 ".google.com, .kde.org", // no_proxy | 1510 nullptr, nullptr, // SOCKS |
1498 }, | 1511 ".google.com, .kde.org", // no_proxy |
1499 | 1512 }, |
1500 // Expected result. | 1513 |
1501 ProxyConfigService::CONFIG_VALID, | 1514 // Expected result. |
1502 false, // auto_detect | 1515 ProxyConfigService::CONFIG_VALID, |
1503 GURL(), // pac_url | 1516 false, // auto_detect |
1504 ProxyRulesExpectation::PerScheme( | 1517 GURL(), // pac_url |
1505 "www.normal.com:80", // http | 1518 ProxyRulesExpectation::PerScheme( |
1506 "www.secure.com:80", // https | 1519 "www.normal.com:80", // http |
1507 "ftp.foo.com:80", // ftp | 1520 "www.secure.com:80", // https |
1508 "*.google.com,*.kde.org"), // bypass rules | 1521 "ftp.foo.com:80", // ftp |
1509 }, | 1522 "*.google.com,*.kde.org"), // bypass rules |
1510 | 1523 }, |
1511 }; | 1524 }; |
1512 | 1525 |
1513 for (size_t i = 0; i < arraysize(tests); ++i) { | 1526 for (size_t i = 0; i < arraysize(tests); ++i) { |
1514 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, | 1527 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, |
1515 tests[i].description.c_str())); | 1528 tests[i].description.c_str())); |
1516 MockEnvironment* env = new MockEnvironment; | 1529 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1517 env->values = tests[i].env_values; | 1530 env->values = tests[i].env_values; |
1518 // Force the KDE getter to be used and tell it where the test is. | 1531 // Force the KDE getter to be used and tell it where the test is. |
1519 env->values.DESKTOP_SESSION = "kde4"; | 1532 env->values.DESKTOP_SESSION = "kde4"; |
1520 env->values.KDEHOME = kde_home_.value().c_str(); | 1533 env->values.KDEHOME = kde_home_.value().c_str(); |
1521 SynchConfigGetter sync_config_getter( | 1534 SynchConfigGetter sync_config_getter( |
1522 new ProxyConfigServiceLinux(env)); | 1535 new ProxyConfigServiceLinux(std::move(env))); |
1523 ProxyConfig config; | 1536 ProxyConfig config; |
1524 // Overwrite the kioslaverc file. | 1537 // Overwrite the kioslaverc file. |
1525 base::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(), | 1538 base::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(), |
1526 tests[i].kioslaverc.length()); | 1539 tests[i].kioslaverc.length()); |
1527 sync_config_getter.SetupAndInitialFetch(); | 1540 sync_config_getter.SetupAndInitialFetch(); |
1528 ProxyConfigService::ConfigAvailability availability = | 1541 ProxyConfigService::ConfigAvailability availability = |
1529 sync_config_getter.SyncGetLatestProxyConfig(&config); | 1542 sync_config_getter.SyncGetLatestProxyConfig(&config); |
1530 EXPECT_EQ(tests[i].availability, availability); | 1543 EXPECT_EQ(tests[i].availability, availability); |
1531 | 1544 |
1532 if (availability == ProxyConfigService::CONFIG_VALID) { | 1545 if (availability == ProxyConfigService::CONFIG_VALID) { |
(...skipping 21 matching lines...) Expand all Loading... |
1554 ""); // bypass rules | 1567 ""); // bypass rules |
1555 | 1568 |
1556 // Overwrite the .kde kioslaverc file. | 1569 // Overwrite the .kde kioslaverc file. |
1557 base::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length()); | 1570 base::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length()); |
1558 | 1571 |
1559 // If .kde4 exists it will mess up the first test. It should not, as | 1572 // If .kde4 exists it will mess up the first test. It should not, as |
1560 // we created the directory for $HOME in the test setup. | 1573 // we created the directory for $HOME in the test setup. |
1561 CHECK(!base::DirectoryExists(kde4_home_)); | 1574 CHECK(!base::DirectoryExists(kde4_home_)); |
1562 | 1575 |
1563 { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback"); | 1576 { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback"); |
1564 MockEnvironment* env = new MockEnvironment; | 1577 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1565 env->values.DESKTOP_SESSION = "kde4"; | 1578 env->values.DESKTOP_SESSION = "kde4"; |
1566 env->values.HOME = user_home_.value().c_str(); | 1579 env->values.HOME = user_home_.value().c_str(); |
1567 SynchConfigGetter sync_config_getter( | 1580 SynchConfigGetter sync_config_getter( |
1568 new ProxyConfigServiceLinux(env)); | 1581 new ProxyConfigServiceLinux(std::move(env))); |
1569 ProxyConfig config; | 1582 ProxyConfig config; |
1570 sync_config_getter.SetupAndInitialFetch(); | 1583 sync_config_getter.SetupAndInitialFetch(); |
1571 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1584 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1572 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1585 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1573 EXPECT_TRUE(config.auto_detect()); | 1586 EXPECT_TRUE(config.auto_detect()); |
1574 EXPECT_EQ(GURL(), config.pac_url()); | 1587 EXPECT_EQ(GURL(), config.pac_url()); |
1575 } | 1588 } |
1576 | 1589 |
1577 // Now create .kde4 and put a kioslaverc in the config directory. | 1590 // Now create .kde4 and put a kioslaverc in the config directory. |
1578 // Note that its timestamp will be at least as new as the .kde one. | 1591 // Note that its timestamp will be at least as new as the .kde one. |
1579 base::CreateDirectory(kde4_config_); | 1592 base::CreateDirectory(kde4_config_); |
1580 base::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length()); | 1593 base::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length()); |
1581 CHECK(base::PathExists(kioslaverc4_)); | 1594 CHECK(base::PathExists(kioslaverc4_)); |
1582 | 1595 |
1583 { SCOPED_TRACE("KDE4, .kde4 directory present, use it"); | 1596 { SCOPED_TRACE("KDE4, .kde4 directory present, use it"); |
1584 MockEnvironment* env = new MockEnvironment; | 1597 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1585 env->values.DESKTOP_SESSION = "kde4"; | 1598 env->values.DESKTOP_SESSION = "kde4"; |
1586 env->values.HOME = user_home_.value().c_str(); | 1599 env->values.HOME = user_home_.value().c_str(); |
1587 SynchConfigGetter sync_config_getter( | 1600 SynchConfigGetter sync_config_getter( |
1588 new ProxyConfigServiceLinux(env)); | 1601 new ProxyConfigServiceLinux(std::move(env))); |
1589 ProxyConfig config; | 1602 ProxyConfig config; |
1590 sync_config_getter.SetupAndInitialFetch(); | 1603 sync_config_getter.SetupAndInitialFetch(); |
1591 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1604 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1592 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1605 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1593 EXPECT_FALSE(config.auto_detect()); | 1606 EXPECT_FALSE(config.auto_detect()); |
1594 EXPECT_EQ(slaverc4_pac_url, config.pac_url()); | 1607 EXPECT_EQ(slaverc4_pac_url, config.pac_url()); |
1595 } | 1608 } |
1596 | 1609 |
1597 { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it"); | 1610 { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it"); |
1598 MockEnvironment* env = new MockEnvironment; | 1611 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1599 env->values.DESKTOP_SESSION = "kde"; | 1612 env->values.DESKTOP_SESSION = "kde"; |
1600 env->values.HOME = user_home_.value().c_str(); | 1613 env->values.HOME = user_home_.value().c_str(); |
1601 SynchConfigGetter sync_config_getter( | 1614 SynchConfigGetter sync_config_getter( |
1602 new ProxyConfigServiceLinux(env)); | 1615 new ProxyConfigServiceLinux(std::move(env))); |
1603 ProxyConfig config; | 1616 ProxyConfig config; |
1604 sync_config_getter.SetupAndInitialFetch(); | 1617 sync_config_getter.SetupAndInitialFetch(); |
1605 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1618 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1606 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1619 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1607 EXPECT_TRUE(config.auto_detect()); | 1620 EXPECT_TRUE(config.auto_detect()); |
1608 EXPECT_EQ(GURL(), config.pac_url()); | 1621 EXPECT_EQ(GURL(), config.pac_url()); |
1609 } | 1622 } |
1610 | 1623 |
1611 { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde"); | 1624 { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde"); |
1612 MockEnvironment* env = new MockEnvironment; | 1625 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1613 env->values.DESKTOP_SESSION = "kde4"; | 1626 env->values.DESKTOP_SESSION = "kde4"; |
1614 env->values.HOME = user_home_.value().c_str(); | 1627 env->values.HOME = user_home_.value().c_str(); |
1615 env->values.KDEHOME = kde_home_.value().c_str(); | 1628 env->values.KDEHOME = kde_home_.value().c_str(); |
1616 SynchConfigGetter sync_config_getter( | 1629 SynchConfigGetter sync_config_getter( |
1617 new ProxyConfigServiceLinux(env)); | 1630 new ProxyConfigServiceLinux(std::move(env))); |
1618 ProxyConfig config; | 1631 ProxyConfig config; |
1619 sync_config_getter.SetupAndInitialFetch(); | 1632 sync_config_getter.SetupAndInitialFetch(); |
1620 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1633 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1621 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1634 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1622 EXPECT_TRUE(config.auto_detect()); | 1635 EXPECT_TRUE(config.auto_detect()); |
1623 EXPECT_EQ(GURL(), config.pac_url()); | 1636 EXPECT_EQ(GURL(), config.pac_url()); |
1624 } | 1637 } |
1625 | 1638 |
1626 // Finally, make the .kde4 config directory older than the .kde directory | 1639 // Finally, make the .kde4 config directory older than the .kde directory |
1627 // and make sure we then use .kde instead of .kde4 since it's newer. | 1640 // and make sure we then use .kde instead of .kde4 since it's newer. |
1628 base::TouchFile(kde4_config_, base::Time(), base::Time()); | 1641 base::TouchFile(kde4_config_, base::Time(), base::Time()); |
1629 | 1642 |
1630 { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde"); | 1643 { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde"); |
1631 MockEnvironment* env = new MockEnvironment; | 1644 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1632 env->values.DESKTOP_SESSION = "kde4"; | 1645 env->values.DESKTOP_SESSION = "kde4"; |
1633 env->values.HOME = user_home_.value().c_str(); | 1646 env->values.HOME = user_home_.value().c_str(); |
1634 SynchConfigGetter sync_config_getter( | 1647 SynchConfigGetter sync_config_getter( |
1635 new ProxyConfigServiceLinux(env)); | 1648 new ProxyConfigServiceLinux(std::move(env))); |
1636 ProxyConfig config; | 1649 ProxyConfig config; |
1637 sync_config_getter.SetupAndInitialFetch(); | 1650 sync_config_getter.SetupAndInitialFetch(); |
1638 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1651 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1639 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1652 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1640 EXPECT_TRUE(config.auto_detect()); | 1653 EXPECT_TRUE(config.auto_detect()); |
1641 EXPECT_EQ(GURL(), config.pac_url()); | 1654 EXPECT_EQ(GURL(), config.pac_url()); |
1642 } | 1655 } |
1643 | 1656 |
1644 // For KDE 5 create ${HOME}/.config and put a kioslaverc in the directory. | 1657 // For KDE 5 create ${HOME}/.config and put a kioslaverc in the directory. |
1645 base::CreateDirectory(config_home_); | 1658 base::CreateDirectory(config_home_); |
1646 base::WriteFile(kioslaverc5_, slaverc5.c_str(), slaverc5.length()); | 1659 base::WriteFile(kioslaverc5_, slaverc5.c_str(), slaverc5.length()); |
1647 CHECK(base::PathExists(kioslaverc5_)); | 1660 CHECK(base::PathExists(kioslaverc5_)); |
1648 | 1661 |
1649 { | 1662 { |
1650 SCOPED_TRACE("KDE5, .kde and .kde4 present, use .config"); | 1663 SCOPED_TRACE("KDE5, .kde and .kde4 present, use .config"); |
1651 MockEnvironment* env = new MockEnvironment; | 1664 std::unique_ptr<MockEnvironment> env(new MockEnvironment); |
1652 env->values.XDG_CURRENT_DESKTOP = "KDE"; | 1665 env->values.XDG_CURRENT_DESKTOP = "KDE"; |
1653 env->values.KDE_SESSION_VERSION = "5"; | 1666 env->values.KDE_SESSION_VERSION = "5"; |
1654 env->values.HOME = user_home_.value().c_str(); | 1667 env->values.HOME = user_home_.value().c_str(); |
1655 SynchConfigGetter sync_config_getter(new ProxyConfigServiceLinux(env)); | 1668 SynchConfigGetter sync_config_getter( |
| 1669 new ProxyConfigServiceLinux(std::move(env))); |
1656 ProxyConfig config; | 1670 ProxyConfig config; |
1657 sync_config_getter.SetupAndInitialFetch(); | 1671 sync_config_getter.SetupAndInitialFetch(); |
1658 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, | 1672 EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
1659 sync_config_getter.SyncGetLatestProxyConfig(&config)); | 1673 sync_config_getter.SyncGetLatestProxyConfig(&config)); |
1660 EXPECT_FALSE(config.auto_detect()); | 1674 EXPECT_FALSE(config.auto_detect()); |
1661 EXPECT_TRUE(slaverc5_rules.Matches(config.proxy_rules())); | 1675 EXPECT_TRUE(slaverc5_rules.Matches(config.proxy_rules())); |
1662 } | 1676 } |
1663 } | 1677 } |
1664 | 1678 |
1665 } // namespace | 1679 } // namespace |
1666 | 1680 |
1667 } // namespace net | 1681 } // namespace net |
OLD | NEW |