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 // Unit tests for helper functions for the Chrome Extensions Proxy Settings API. | 5 // Unit tests for helper functions for the Chrome Extensions Proxy Settings API. |
6 | 6 |
7 #include "chrome/browser/extensions/api/proxy/proxy_api_helpers.h" | 7 #include "chrome/browser/extensions/api/proxy/proxy_api_helpers.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/memory/ptr_util.h" | |
13 #include "base/values.h" | 12 #include "base/values.h" |
14 #include "chrome/browser/extensions/api/proxy/proxy_api_constants.h" | 13 #include "chrome/browser/extensions/api/proxy/proxy_api_constants.h" |
15 #include "components/proxy_config/proxy_config_dictionary.h" | 14 #include "components/proxy_config/proxy_config_dictionary.h" |
16 #include "components/proxy_config/proxy_prefs.h" | 15 #include "components/proxy_config/proxy_prefs.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
18 | 17 |
19 namespace extensions { | 18 namespace extensions { |
20 | 19 |
21 namespace keys = proxy_api_constants; | 20 namespace keys = proxy_api_constants; |
22 | 21 |
23 namespace { | 22 namespace { |
24 | 23 |
25 const char kSamplePacScript[] = "test"; | 24 const char kSamplePacScript[] = "test"; |
26 const char kSamplePacScriptAsDataUrl[] = | 25 const char kSamplePacScriptAsDataUrl[] = |
27 "data:application/x-ns-proxy-autoconfig;base64,dGVzdA=="; | 26 "data:application/x-ns-proxy-autoconfig;base64,dGVzdA=="; |
28 const char kSamplePacScriptAsDataUrl2[] = | 27 const char kSamplePacScriptAsDataUrl2[] = |
29 "data:;base64,dGVzdA=="; | 28 "data:;base64,dGVzdA=="; |
30 const char kSamplePacScriptUrl[] = "http://wpad/wpad.dat"; | 29 const char kSamplePacScriptUrl[] = "http://wpad/wpad.dat"; |
31 | 30 |
32 // Helper function to create a ProxyServer dictionary as defined in the | 31 // Helper function to create a ProxyServer dictionary as defined in the |
33 // extension API. | 32 // extension API. |
34 std::unique_ptr<base::DictionaryValue> CreateTestProxyServerDict( | 33 base::DictionaryValue* CreateTestProxyServerDict(const std::string& host) { |
35 const std::string& host) { | 34 base::DictionaryValue* dict = new base::DictionaryValue; |
36 auto dict = base::MakeUnique<base::DictionaryValue>(); | |
37 dict->SetString(keys::kProxyConfigRuleHost, host); | 35 dict->SetString(keys::kProxyConfigRuleHost, host); |
38 return dict; | 36 return dict; |
39 } | 37 } |
40 | 38 |
41 // Helper function to create a ProxyServer dictionary as defined in the | 39 // Helper function to create a ProxyServer dictionary as defined in the |
42 // extension API. | 40 // extension API. |
43 std::unique_ptr<base::DictionaryValue> CreateTestProxyServerDict( | 41 base::DictionaryValue* CreateTestProxyServerDict(const std::string& schema, |
44 const std::string& schema, | 42 const std::string& host, |
45 const std::string& host, | 43 int port) { |
46 int port) { | 44 base::DictionaryValue* dict = new base::DictionaryValue; |
47 auto dict = base::MakeUnique<base::DictionaryValue>(); | |
48 dict->SetString(keys::kProxyConfigRuleScheme, schema); | 45 dict->SetString(keys::kProxyConfigRuleScheme, schema); |
49 dict->SetString(keys::kProxyConfigRuleHost, host); | 46 dict->SetString(keys::kProxyConfigRuleHost, host); |
50 dict->SetInteger(keys::kProxyConfigRulePort, port); | 47 dict->SetInteger(keys::kProxyConfigRulePort, port); |
51 return dict; | 48 return dict; |
52 } | 49 } |
53 | 50 |
54 } // namespace | 51 } // namespace |
55 | 52 |
56 namespace proxy_api_helpers { | 53 namespace proxy_api_helpers { |
57 | 54 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 | 109 |
113 // Currently we are still missing a PAC script entry. | 110 // Currently we are still missing a PAC script entry. |
114 // This is silently ignored. | 111 // This is silently ignored. |
115 ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error, | 112 ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error, |
116 &bad_message)); | 113 &bad_message)); |
117 EXPECT_EQ(std::string(), out); | 114 EXPECT_EQ(std::string(), out); |
118 EXPECT_EQ(std::string(), error); | 115 EXPECT_EQ(std::string(), error); |
119 EXPECT_FALSE(bad_message); | 116 EXPECT_FALSE(bad_message); |
120 | 117 |
121 // Set up a pac script. | 118 // Set up a pac script. |
122 auto pacScriptDict = base::MakeUnique<base::DictionaryValue>(); | 119 base::DictionaryValue* pacScriptDict = new base::DictionaryValue; |
123 pacScriptDict->SetString(keys::kProxyConfigPacScriptUrl, kSamplePacScriptUrl); | 120 pacScriptDict->SetString(keys::kProxyConfigPacScriptUrl, kSamplePacScriptUrl); |
124 proxy_config.Set(keys::kProxyConfigPacScript, std::move(pacScriptDict)); | 121 proxy_config.Set(keys::kProxyConfigPacScript, pacScriptDict); |
125 | 122 |
126 ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error, | 123 ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error, |
127 &bad_message)); | 124 &bad_message)); |
128 EXPECT_EQ(kSamplePacScriptUrl, out); | 125 EXPECT_EQ(kSamplePacScriptUrl, out); |
129 EXPECT_EQ(std::string(), error); | 126 EXPECT_EQ(std::string(), error); |
130 EXPECT_FALSE(bad_message); | 127 EXPECT_FALSE(bad_message); |
131 } | 128 } |
132 | 129 |
133 TEST(ExtensionProxyApiHelpers, GetPacDataFromExtensionPref) { | 130 TEST(ExtensionProxyApiHelpers, GetPacDataFromExtensionPref) { |
134 std::string out; | 131 std::string out; |
135 std::string error; | 132 std::string error; |
136 bool bad_message = false; | 133 bool bad_message = false; |
137 | 134 |
138 base::DictionaryValue proxy_config; | 135 base::DictionaryValue proxy_config; |
139 proxy_config.SetString( | 136 proxy_config.SetString( |
140 keys::kProxyConfigMode, | 137 keys::kProxyConfigMode, |
141 ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT)); | 138 ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT)); |
142 | 139 |
143 // Currently we are still missing a PAC data entry. This is silently ignored. | 140 // Currently we are still missing a PAC data entry. This is silently ignored. |
144 ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error, | 141 ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error, |
145 &bad_message)); | 142 &bad_message)); |
146 EXPECT_EQ(std::string(), out); | 143 EXPECT_EQ(std::string(), out); |
147 EXPECT_EQ(std::string(), error); | 144 EXPECT_EQ(std::string(), error); |
148 EXPECT_FALSE(bad_message); | 145 EXPECT_FALSE(bad_message); |
149 | 146 |
150 // Set up a PAC script. | 147 // Set up a PAC script. |
151 auto pacScriptDict = base::MakeUnique<base::DictionaryValue>(); | 148 base::DictionaryValue* pacScriptDict = new base::DictionaryValue; |
152 pacScriptDict->SetString(keys::kProxyConfigPacScriptData, kSamplePacScript); | 149 pacScriptDict->SetString(keys::kProxyConfigPacScriptData, kSamplePacScript); |
153 proxy_config.Set(keys::kProxyConfigPacScript, std::move(pacScriptDict)); | 150 proxy_config.Set(keys::kProxyConfigPacScript, pacScriptDict); |
154 | 151 |
155 ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error, | 152 ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error, |
156 &bad_message)); | 153 &bad_message)); |
157 EXPECT_EQ(kSamplePacScript, out); | 154 EXPECT_EQ(kSamplePacScript, out); |
158 EXPECT_EQ(std::string(), error); | 155 EXPECT_EQ(std::string(), error); |
159 EXPECT_FALSE(bad_message); | 156 EXPECT_FALSE(bad_message); |
160 } | 157 } |
161 | 158 |
162 TEST(ExtensionProxyApiHelpers, GetProxyRulesStringFromExtensionPref) { | 159 TEST(ExtensionProxyApiHelpers, GetProxyRulesStringFromExtensionPref) { |
163 std::string out; | 160 std::string out; |
164 std::string error; | 161 std::string error; |
165 bool bad_message = false; | 162 bool bad_message = false; |
166 | 163 |
167 base::DictionaryValue proxy_config; | 164 base::DictionaryValue proxy_config; |
168 proxy_config.SetString( | 165 proxy_config.SetString( |
169 keys::kProxyConfigMode, | 166 keys::kProxyConfigMode, |
170 ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); | 167 ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); |
171 | 168 |
172 // Currently we are still missing a proxy config entry. | 169 // Currently we are still missing a proxy config entry. |
173 // This is silently ignored. | 170 // This is silently ignored. |
174 ASSERT_TRUE( | 171 ASSERT_TRUE( |
175 GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error, | 172 GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error, |
176 &bad_message)); | 173 &bad_message)); |
177 EXPECT_EQ(std::string(), out); | 174 EXPECT_EQ(std::string(), out); |
178 EXPECT_EQ(std::string(), error); | 175 EXPECT_EQ(std::string(), error); |
179 | 176 |
180 auto proxy_rules = base::MakeUnique<base::DictionaryValue>(); | 177 base::DictionaryValue* proxy_rules = new base::DictionaryValue; |
181 proxy_rules->Set(keys::field_name[1], CreateTestProxyServerDict("proxy1")); | 178 proxy_rules->Set(keys::field_name[1], CreateTestProxyServerDict("proxy1")); |
182 proxy_rules->Set(keys::field_name[2], CreateTestProxyServerDict("proxy2")); | 179 proxy_rules->Set(keys::field_name[2], CreateTestProxyServerDict("proxy2")); |
183 proxy_config.Set(keys::kProxyConfigRules, std::move(proxy_rules)); | 180 proxy_config.Set(keys::kProxyConfigRules, proxy_rules); |
184 | 181 |
185 ASSERT_TRUE( | 182 ASSERT_TRUE( |
186 GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error, | 183 GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error, |
187 &bad_message)); | 184 &bad_message)); |
188 EXPECT_EQ("http=proxy1:80;https=proxy2:80", out); | 185 EXPECT_EQ("http=proxy1:80;https=proxy2:80", out); |
189 EXPECT_EQ(std::string(), error); | 186 EXPECT_EQ(std::string(), error); |
190 EXPECT_FALSE(bad_message); | 187 EXPECT_FALSE(bad_message); |
191 } | 188 } |
192 | 189 |
193 TEST(ExtensionProxyApiHelpers, GetBypassListFromExtensionPref) { | 190 TEST(ExtensionProxyApiHelpers, GetBypassListFromExtensionPref) { |
194 std::string out; | 191 std::string out; |
195 std::string error; | 192 std::string error; |
196 bool bad_message = false; | 193 bool bad_message = false; |
197 | 194 |
198 base::DictionaryValue proxy_config; | 195 base::DictionaryValue proxy_config; |
199 proxy_config.SetString( | 196 proxy_config.SetString( |
200 keys::kProxyConfigMode, | 197 keys::kProxyConfigMode, |
201 ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); | 198 ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); |
202 | 199 |
203 // Currently we are still missing a proxy config entry. | 200 // Currently we are still missing a proxy config entry. |
204 // This is silently ignored. | 201 // This is silently ignored. |
205 ASSERT_TRUE( | 202 ASSERT_TRUE( |
206 GetBypassListFromExtensionPref(&proxy_config, &out, &error, | 203 GetBypassListFromExtensionPref(&proxy_config, &out, &error, |
207 &bad_message)); | 204 &bad_message)); |
208 EXPECT_EQ(std::string(), out); | 205 EXPECT_EQ(std::string(), out); |
209 EXPECT_EQ(std::string(), error); | 206 EXPECT_EQ(std::string(), error); |
210 EXPECT_FALSE(bad_message); | 207 EXPECT_FALSE(bad_message); |
211 | 208 |
212 auto bypass_list = base::MakeUnique<base::ListValue>(); | 209 base::ListValue* bypass_list = new base::ListValue; |
213 bypass_list->AppendString("host1"); | 210 bypass_list->AppendString("host1"); |
214 bypass_list->AppendString("host2"); | 211 bypass_list->AppendString("host2"); |
215 auto proxy_rules = base::MakeUnique<base::DictionaryValue>(); | 212 base::DictionaryValue* proxy_rules = new base::DictionaryValue; |
216 proxy_rules->Set(keys::kProxyConfigBypassList, std::move(bypass_list)); | 213 proxy_rules->Set(keys::kProxyConfigBypassList, bypass_list); |
217 proxy_config.Set(keys::kProxyConfigRules, std::move(proxy_rules)); | 214 proxy_config.Set(keys::kProxyConfigRules, proxy_rules); |
218 | 215 |
219 ASSERT_TRUE( | 216 ASSERT_TRUE( |
220 GetBypassListFromExtensionPref(&proxy_config, &out, &error, | 217 GetBypassListFromExtensionPref(&proxy_config, &out, &error, |
221 &bad_message)); | 218 &bad_message)); |
222 EXPECT_EQ("host1,host2", out); | 219 EXPECT_EQ("host1,host2", out); |
223 EXPECT_EQ(std::string(), error); | 220 EXPECT_EQ(std::string(), error); |
224 EXPECT_FALSE(bad_message); | 221 EXPECT_FALSE(bad_message); |
225 } | 222 } |
226 | 223 |
227 TEST(ExtensionProxyApiHelpers, CreateProxyConfigDict) { | 224 TEST(ExtensionProxyApiHelpers, CreateProxyConfigDict) { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 | 320 |
324 std::unique_ptr<base::DictionaryValue> expected(new base::DictionaryValue); | 321 std::unique_ptr<base::DictionaryValue> expected(new base::DictionaryValue); |
325 expected->Set("proxyForHttp", | 322 expected->Set("proxyForHttp", |
326 CreateTestProxyServerDict("http", "proxy1", 80)); | 323 CreateTestProxyServerDict("http", "proxy1", 80)); |
327 expected->Set("proxyForHttps", | 324 expected->Set("proxyForHttps", |
328 CreateTestProxyServerDict("http", "proxy2", 80)); | 325 CreateTestProxyServerDict("http", "proxy2", 80)); |
329 expected->Set("proxyForFtp", | 326 expected->Set("proxyForFtp", |
330 CreateTestProxyServerDict("http", "proxy3", 80)); | 327 CreateTestProxyServerDict("http", "proxy3", 80)); |
331 expected->Set("fallbackProxy", | 328 expected->Set("fallbackProxy", |
332 CreateTestProxyServerDict("socks4", "proxy4", 80)); | 329 CreateTestProxyServerDict("socks4", "proxy4", 80)); |
333 auto bypass_list = base::MakeUnique<base::ListValue>(); | 330 base::ListValue* bypass_list = new base::ListValue; |
334 bypass_list->AppendString("localhost"); | 331 bypass_list->AppendString("localhost"); |
335 expected->Set(keys::kProxyConfigBypassList, std::move(bypass_list)); | 332 expected->Set(keys::kProxyConfigBypassList, bypass_list); |
336 | 333 |
337 EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); | 334 EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); |
338 } | 335 } |
339 | 336 |
340 // Test multiple proxies per scheme -- expect that only the first is returned. | 337 // Test multiple proxies per scheme -- expect that only the first is returned. |
341 TEST(ExtensionProxyApiHelpers, CreateProxyRulesDictMultipleProxies) { | 338 TEST(ExtensionProxyApiHelpers, CreateProxyRulesDictMultipleProxies) { |
342 std::unique_ptr<base::DictionaryValue> browser_pref( | 339 std::unique_ptr<base::DictionaryValue> browser_pref( |
343 ProxyConfigDictionary::CreateFixedServers( | 340 ProxyConfigDictionary::CreateFixedServers( |
344 "http=proxy1:80,default://;https=proxy2:80,proxy1:80;ftp=proxy3:80," | 341 "http=proxy1:80,default://;https=proxy2:80,proxy1:80;ftp=proxy3:80," |
345 "https://proxy5:443;socks=proxy4:80,proxy1:80", | 342 "https://proxy5:443;socks=proxy4:80,proxy1:80", |
346 "localhost")); | 343 "localhost")); |
347 ProxyConfigDictionary config(std::move(browser_pref)); | 344 ProxyConfigDictionary config(std::move(browser_pref)); |
348 std::unique_ptr<base::DictionaryValue> extension_pref( | 345 std::unique_ptr<base::DictionaryValue> extension_pref( |
349 CreateProxyRulesDict(config)); | 346 CreateProxyRulesDict(config)); |
350 ASSERT_TRUE(extension_pref.get()); | 347 ASSERT_TRUE(extension_pref.get()); |
351 | 348 |
352 std::unique_ptr<base::DictionaryValue> expected(new base::DictionaryValue); | 349 std::unique_ptr<base::DictionaryValue> expected(new base::DictionaryValue); |
353 expected->Set("proxyForHttp", | 350 expected->Set("proxyForHttp", |
354 CreateTestProxyServerDict("http", "proxy1", 80)); | 351 CreateTestProxyServerDict("http", "proxy1", 80)); |
355 expected->Set("proxyForHttps", | 352 expected->Set("proxyForHttps", |
356 CreateTestProxyServerDict("http", "proxy2", 80)); | 353 CreateTestProxyServerDict("http", "proxy2", 80)); |
357 expected->Set("proxyForFtp", | 354 expected->Set("proxyForFtp", |
358 CreateTestProxyServerDict("http", "proxy3", 80)); | 355 CreateTestProxyServerDict("http", "proxy3", 80)); |
359 expected->Set("fallbackProxy", | 356 expected->Set("fallbackProxy", |
360 CreateTestProxyServerDict("socks4", "proxy4", 80)); | 357 CreateTestProxyServerDict("socks4", "proxy4", 80)); |
361 auto bypass_list = base::MakeUnique<base::ListValue>(); | 358 base::ListValue* bypass_list = new base::ListValue; |
362 bypass_list->AppendString("localhost"); | 359 bypass_list->AppendString("localhost"); |
363 expected->Set(keys::kProxyConfigBypassList, std::move(bypass_list)); | 360 expected->Set(keys::kProxyConfigBypassList, bypass_list); |
364 | 361 |
365 EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); | 362 EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); |
366 } | 363 } |
367 | 364 |
368 // Test if a PAC script URL is specified. | 365 // Test if a PAC script URL is specified. |
369 TEST(ExtensionProxyApiHelpers, CreatePacScriptDictWithUrl) { | 366 TEST(ExtensionProxyApiHelpers, CreatePacScriptDictWithUrl) { |
370 std::unique_ptr<base::DictionaryValue> browser_pref( | 367 std::unique_ptr<base::DictionaryValue> browser_pref( |
371 ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false)); | 368 ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false)); |
372 ProxyConfigDictionary config(std::move(browser_pref)); | 369 ProxyConfigDictionary config(std::move(browser_pref)); |
373 std::unique_ptr<base::DictionaryValue> extension_pref( | 370 std::unique_ptr<base::DictionaryValue> extension_pref( |
(...skipping 28 matching lines...) Expand all Loading... |
402 expected.AppendString("s1"); | 399 expected.AppendString("s1"); |
403 expected.AppendString("s2"); | 400 expected.AppendString("s2"); |
404 expected.AppendString("s3"); | 401 expected.AppendString("s3"); |
405 | 402 |
406 std::unique_ptr<base::ListValue> out(TokenizeToStringList("s1;s2;s3", ";")); | 403 std::unique_ptr<base::ListValue> out(TokenizeToStringList("s1;s2;s3", ";")); |
407 EXPECT_TRUE(base::Value::Equals(&expected, out.get())); | 404 EXPECT_TRUE(base::Value::Equals(&expected, out.get())); |
408 } | 405 } |
409 | 406 |
410 } // namespace proxy_api_helpers | 407 } // namespace proxy_api_helpers |
411 } // namespace extensions | 408 } // namespace extensions |
OLD | NEW |