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

Side by Side Diff: chrome/browser/extensions/api/proxy/proxy_api_helpers.cc

Issue 2888073002: Remove raw DictionaryValue::Set in //chrome (Closed)
Patch Set: Fix Tests Created 3 years, 7 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
OLDNEW
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 // Implementation of helper functions for the Chrome Extensions Proxy Settings 5 // Implementation of helper functions for the Chrome Extensions Proxy Settings
6 // API. 6 // API.
7 // 7 //
8 // Throughout this code, we report errors to the user by setting an |error| 8 // Throughout this code, we report errors to the user by setting an |error|
9 // parameter, if and only if these errors can be cause by invalid input 9 // parameter, if and only if these errors can be cause by invalid input
10 // from the extension and we cannot expect that the extensions API has 10 // from the extension and we cannot expect that the extensions API has
11 // caught this error before. In all other cases we are dealing with internal 11 // caught this error before. In all other cases we are dealing with internal
12 // errors and log to LOG(ERROR). 12 // errors and log to LOG(ERROR).
13 13
14 #include "chrome/browser/extensions/api/proxy/proxy_api_helpers.h" 14 #include "chrome/browser/extensions/api/proxy/proxy_api_helpers.h"
15 15
16 #include <stddef.h> 16 #include <stddef.h>
17 17
18 #include <utility>
19
18 #include "base/base64.h" 20 #include "base/base64.h"
21 #include "base/memory/ptr_util.h"
19 #include "base/strings/string_tokenizer.h" 22 #include "base/strings/string_tokenizer.h"
20 #include "base/strings/string_util.h" 23 #include "base/strings/string_util.h"
21 #include "base/strings/utf_string_conversions.h" 24 #include "base/strings/utf_string_conversions.h"
22 #include "base/values.h" 25 #include "base/values.h"
23 #include "chrome/browser/extensions/api/proxy/proxy_api_constants.h" 26 #include "chrome/browser/extensions/api/proxy/proxy_api_constants.h"
24 #include "components/proxy_config/proxy_config_dictionary.h" 27 #include "components/proxy_config/proxy_config_dictionary.h"
25 #include "extensions/common/error_utils.h" 28 #include "extensions/common/error_utils.h"
26 #include "net/base/data_url.h" 29 #include "net/base/data_url.h"
27 #include "net/proxy/proxy_config.h" 30 #include "net/proxy/proxy_config.h"
28 31
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 } 355 }
353 case ProxyPrefs::MODE_SYSTEM: 356 case ProxyPrefs::MODE_SYSTEM:
354 result_proxy_config = ProxyConfigDictionary::CreateSystem(); 357 result_proxy_config = ProxyConfigDictionary::CreateSystem();
355 break; 358 break;
356 case ProxyPrefs::kModeCount: 359 case ProxyPrefs::kModeCount:
357 NOTREACHED(); 360 NOTREACHED();
358 } 361 }
359 return result_proxy_config; 362 return result_proxy_config;
360 } 363 }
361 364
362 base::DictionaryValue* CreateProxyRulesDict( 365 std::unique_ptr<base::DictionaryValue> CreateProxyRulesDict(
363 const ProxyConfigDictionary& proxy_config) { 366 const ProxyConfigDictionary& proxy_config) {
364 ProxyPrefs::ProxyMode mode; 367 ProxyPrefs::ProxyMode mode;
365 CHECK(proxy_config.GetMode(&mode) && mode == ProxyPrefs::MODE_FIXED_SERVERS); 368 CHECK(proxy_config.GetMode(&mode) && mode == ProxyPrefs::MODE_FIXED_SERVERS);
366 369
367 std::unique_ptr<base::DictionaryValue> extension_proxy_rules( 370 auto extension_proxy_rules = base::MakeUnique<base::DictionaryValue>();
368 new base::DictionaryValue);
369 371
370 std::string proxy_servers; 372 std::string proxy_servers;
371 if (!proxy_config.GetProxyServer(&proxy_servers)) { 373 if (!proxy_config.GetProxyServer(&proxy_servers)) {
372 LOG(ERROR) << "Missing proxy servers in configuration."; 374 LOG(ERROR) << "Missing proxy servers in configuration.";
373 return NULL; 375 return NULL;
374 } 376 }
375 377
376 net::ProxyConfig::ProxyRules rules; 378 net::ProxyConfig::ProxyRules rules;
377 rules.ParseFromString(proxy_servers); 379 rules.ParseFromString(proxy_servers);
378 380
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 // representing this scheme in the code above. 416 // representing this scheme in the code above.
415 static_assert(keys::SCHEME_MAX == 4, 417 static_assert(keys::SCHEME_MAX == 4,
416 "rules need to be updated along with schemes"); 418 "rules need to be updated along with schemes");
417 419
418 if (proxy_config.HasBypassList()) { 420 if (proxy_config.HasBypassList()) {
419 std::string bypass_list_string; 421 std::string bypass_list_string;
420 if (!proxy_config.GetBypassList(&bypass_list_string)) { 422 if (!proxy_config.GetBypassList(&bypass_list_string)) {
421 LOG(ERROR) << "Invalid bypassList in configuration."; 423 LOG(ERROR) << "Invalid bypassList in configuration.";
422 return NULL; 424 return NULL;
423 } 425 }
424 base::ListValue* bypass_list = 426 std::unique_ptr<base::ListValue> bypass_list =
425 TokenizeToStringList(bypass_list_string, ",;"); 427 TokenizeToStringList(bypass_list_string, ",;");
426 extension_proxy_rules->Set(keys::kProxyConfigBypassList, bypass_list); 428 extension_proxy_rules->Set(keys::kProxyConfigBypassList,
429 std::move(bypass_list));
427 } 430 }
428 431
429 return extension_proxy_rules.release(); 432 return extension_proxy_rules;
430 } 433 }
431 434
432 base::DictionaryValue* CreateProxyServerDict(const net::ProxyServer& proxy) { 435 std::unique_ptr<base::DictionaryValue> CreateProxyServerDict(
433 std::unique_ptr<base::DictionaryValue> out(new base::DictionaryValue); 436 const net::ProxyServer& proxy) {
437 auto out = base::MakeUnique<base::DictionaryValue>();
434 switch (proxy.scheme()) { 438 switch (proxy.scheme()) {
435 case net::ProxyServer::SCHEME_HTTP: 439 case net::ProxyServer::SCHEME_HTTP:
436 out->SetString(keys::kProxyConfigRuleScheme, "http"); 440 out->SetString(keys::kProxyConfigRuleScheme, "http");
437 break; 441 break;
438 case net::ProxyServer::SCHEME_HTTPS: 442 case net::ProxyServer::SCHEME_HTTPS:
439 out->SetString(keys::kProxyConfigRuleScheme, "https"); 443 out->SetString(keys::kProxyConfigRuleScheme, "https");
440 break; 444 break;
441 case net::ProxyServer::SCHEME_QUIC: 445 case net::ProxyServer::SCHEME_QUIC:
442 out->SetString(keys::kProxyConfigRuleScheme, "quic"); 446 out->SetString(keys::kProxyConfigRuleScheme, "quic");
443 break; 447 break;
444 case net::ProxyServer::SCHEME_SOCKS4: 448 case net::ProxyServer::SCHEME_SOCKS4:
445 out->SetString(keys::kProxyConfigRuleScheme, "socks4"); 449 out->SetString(keys::kProxyConfigRuleScheme, "socks4");
446 break; 450 break;
447 case net::ProxyServer::SCHEME_SOCKS5: 451 case net::ProxyServer::SCHEME_SOCKS5:
448 out->SetString(keys::kProxyConfigRuleScheme, "socks5"); 452 out->SetString(keys::kProxyConfigRuleScheme, "socks5");
449 break; 453 break;
450 case net::ProxyServer::SCHEME_DIRECT: 454 case net::ProxyServer::SCHEME_DIRECT:
451 case net::ProxyServer::SCHEME_INVALID: 455 case net::ProxyServer::SCHEME_INVALID:
452 NOTREACHED(); 456 NOTREACHED();
453 return NULL; 457 return NULL;
454 } 458 }
455 out->SetString(keys::kProxyConfigRuleHost, proxy.host_port_pair().host()); 459 out->SetString(keys::kProxyConfigRuleHost, proxy.host_port_pair().host());
456 out->SetInteger(keys::kProxyConfigRulePort, proxy.host_port_pair().port()); 460 out->SetInteger(keys::kProxyConfigRulePort, proxy.host_port_pair().port());
457 return out.release(); 461 return out;
458 } 462 }
459 463
460 base::DictionaryValue* CreatePacScriptDict( 464 std::unique_ptr<base::DictionaryValue> CreatePacScriptDict(
461 const ProxyConfigDictionary& proxy_config) { 465 const ProxyConfigDictionary& proxy_config) {
462 ProxyPrefs::ProxyMode mode; 466 ProxyPrefs::ProxyMode mode;
463 CHECK(proxy_config.GetMode(&mode) && mode == ProxyPrefs::MODE_PAC_SCRIPT); 467 CHECK(proxy_config.GetMode(&mode) && mode == ProxyPrefs::MODE_PAC_SCRIPT);
464 468
465 std::unique_ptr<base::DictionaryValue> pac_script_dict( 469 auto pac_script_dict = base::MakeUnique<base::DictionaryValue>();
466 new base::DictionaryValue);
467 std::string pac_url; 470 std::string pac_url;
468 if (!proxy_config.GetPacUrl(&pac_url)) { 471 if (!proxy_config.GetPacUrl(&pac_url)) {
469 LOG(ERROR) << "Invalid proxy configuration. Missing PAC URL."; 472 LOG(ERROR) << "Invalid proxy configuration. Missing PAC URL.";
470 return NULL; 473 return NULL;
471 } 474 }
472 bool pac_mandatory = false; 475 bool pac_mandatory = false;
473 if (!proxy_config.GetPacMandatory(&pac_mandatory)) { 476 if (!proxy_config.GetPacMandatory(&pac_mandatory)) {
474 LOG(ERROR) << "Invalid proxy configuration. Missing PAC mandatory field."; 477 LOG(ERROR) << "Invalid proxy configuration. Missing PAC mandatory field.";
475 return NULL; 478 return NULL;
476 } 479 }
477 480
478 if (base::StartsWith(pac_url, "data", base::CompareCase::SENSITIVE)) { 481 if (base::StartsWith(pac_url, "data", base::CompareCase::SENSITIVE)) {
479 std::string pac_data; 482 std::string pac_data;
480 if (!CreatePACScriptFromDataURL(pac_url, &pac_data)) { 483 if (!CreatePACScriptFromDataURL(pac_url, &pac_data)) {
481 LOG(ERROR) << "Cannot decode base64-encoded PAC data URL: " << pac_url; 484 LOG(ERROR) << "Cannot decode base64-encoded PAC data URL: " << pac_url;
482 return NULL; 485 return NULL;
483 } 486 }
484 pac_script_dict->SetString(keys::kProxyConfigPacScriptData, pac_data); 487 pac_script_dict->SetString(keys::kProxyConfigPacScriptData, pac_data);
485 } else { 488 } else {
486 pac_script_dict->SetString(keys::kProxyConfigPacScriptUrl, pac_url); 489 pac_script_dict->SetString(keys::kProxyConfigPacScriptUrl, pac_url);
487 } 490 }
488 pac_script_dict->SetBoolean(keys::kProxyConfigPacScriptMandatory, 491 pac_script_dict->SetBoolean(keys::kProxyConfigPacScriptMandatory,
489 pac_mandatory); 492 pac_mandatory);
490 return pac_script_dict.release(); 493 return pac_script_dict;
491 } 494 }
492 495
493 base::ListValue* TokenizeToStringList(const std::string& in, 496 std::unique_ptr<base::ListValue> TokenizeToStringList(
494 const std::string& delims) { 497 const std::string& in,
495 base::ListValue* out = new base::ListValue; 498 const std::string& delims) {
499 auto out = base::MakeUnique<base::ListValue>();
496 base::StringTokenizer entries(in, delims); 500 base::StringTokenizer entries(in, delims);
497 while (entries.GetNext()) 501 while (entries.GetNext())
498 out->AppendString(entries.token()); 502 out->AppendString(entries.token());
499 return out; 503 return out;
500 } 504 }
501 505
502 } // namespace proxy_api_helpers 506 } // namespace proxy_api_helpers
503 } // namespace extensions 507 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698