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

Side by Side Diff: chrome/browser/policy/configuration_policy_pref_store.cc

Issue 5958014: Policy: Add ProxyMode and deprecate ProxyServerMode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: check final diff Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/policy/configuration_policy_pref_store.h" 5 #include "chrome/browser/policy/configuration_policy_pref_store.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 // finalizes the policy-specified configuration by initializing the 99 // finalizes the policy-specified configuration by initializing the
100 // unspecified map entries. Otherwise wipes all default search related 100 // unspecified map entries. Otherwise wipes all default search related
101 // map entries from |prefs_|. 101 // map entries from |prefs_|.
102 void FinalizeDefaultSearchPolicySettings(); 102 void FinalizeDefaultSearchPolicySettings();
103 103
104 // If the required entries for the proxy settings are specified and valid, 104 // If the required entries for the proxy settings are specified and valid,
105 // finalizes the policy-specified configuration by initializing the 105 // finalizes the policy-specified configuration by initializing the
106 // respective values in |prefs_|. 106 // respective values in |prefs_|.
107 void FinalizeProxyPolicySettings(); 107 void FinalizeProxyPolicySettings();
108 108
109 // Returns true if the policy values stored in proxy_* represent a valid 109 // Returns true if the policy values stored in proxy_* represent a valid proxy
110 // proxy configuration. 110 // configuration, including the case in which there is no configuration at
111 // all.
111 bool CheckProxySettings(); 112 bool CheckProxySettings();
112 113
113 // Assumes CheckProxySettings returns true and applies the values stored 114 // Assumes CheckProxySettings returns true and applies the values stored
114 // in proxy_*. 115 // in proxy_*.
115 void ApplyProxySettings(); 116 void ApplyProxySettings();
116 117
117 bool HasProxyPolicy(ConfigurationPolicyType policy) const; 118 bool HasProxyPolicy(ConfigurationPolicyType policy) const;
118 119
119 // Temporary cache that stores values until FinalizeProxyPolicySettings() 120 // Temporary cache that stores values until FinalizeProxyPolicySettings()
120 // is called. 121 // is called.
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 return false; 357 return false;
357 } 358 }
358 359
359 bool ConfigurationPolicyPrefKeeper::ApplyProxyPolicy( 360 bool ConfigurationPolicyPrefKeeper::ApplyProxyPolicy(
360 ConfigurationPolicyType policy, 361 ConfigurationPolicyType policy,
361 Value* value) { 362 Value* value) {
362 // We only collect the values until we have sufficient information when 363 // We only collect the values until we have sufficient information when
363 // FinalizeProxyPolicySettings() is called to determine whether the presented 364 // FinalizeProxyPolicySettings() is called to determine whether the presented
364 // values were correct and apply them in that case. 365 // values were correct and apply them in that case.
365 if (policy == kPolicyProxyMode || 366 if (policy == kPolicyProxyMode ||
367 policy == kPolicyProxyServerMode ||
366 policy == kPolicyProxyServer || 368 policy == kPolicyProxyServer ||
367 policy == kPolicyProxyPacUrl || 369 policy == kPolicyProxyPacUrl ||
368 policy == kPolicyProxyBypassList) { 370 policy == kPolicyProxyBypassList) {
369 delete proxy_policies_[policy]; 371 delete proxy_policies_[policy];
370 proxy_policies_[policy] = value; 372 proxy_policies_[policy] = value;
371 return true; 373 return true;
372 } 374 }
373 // We are not interested in this policy. 375 // We are not interested in this policy.
374 return false; 376 return false;
375 } 377 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 if (CheckProxySettings()) 487 if (CheckProxySettings())
486 ApplyProxySettings(); 488 ApplyProxySettings();
487 489
488 STLDeleteContainerPairSecondPointers(proxy_policies_.begin(), 490 STLDeleteContainerPairSecondPointers(proxy_policies_.begin(),
489 proxy_policies_.end()); 491 proxy_policies_.end());
490 proxy_policies_.clear(); 492 proxy_policies_.clear();
491 } 493 }
492 494
493 bool ConfigurationPolicyPrefKeeper::CheckProxySettings() { 495 bool ConfigurationPolicyPrefKeeper::CheckProxySettings() {
494 bool mode = HasProxyPolicy(kPolicyProxyMode); 496 bool mode = HasProxyPolicy(kPolicyProxyMode);
497 bool server_mode = HasProxyPolicy(kPolicyProxyServerMode); // deprecated
495 bool server = HasProxyPolicy(kPolicyProxyServer); 498 bool server = HasProxyPolicy(kPolicyProxyServer);
496 bool pac_url = HasProxyPolicy(kPolicyProxyPacUrl); 499 bool pac_url = HasProxyPolicy(kPolicyProxyPacUrl);
497 bool bypass_list = HasProxyPolicy(kPolicyProxyBypassList); 500 bool bypass_list = HasProxyPolicy(kPolicyProxyBypassList);
498 501
499 if ((server || pac_url || bypass_list) && !mode) { 502 if ((server || pac_url || bypass_list) && !(mode || server_mode)) {
500 LOG(WARNING) << "A centrally-administered policy defines proxy setting" 503 LOG(WARNING) << "A centrally-administered policy defines proxy setting"
501 << " details without setting a proxy mode."; 504 << " details without setting a proxy mode.";
502 return false; 505 return false;
503 } 506 }
504 507
505 if (!mode) 508 // If there's a server mode, convert it into a mode.
509 std::string mode_value;
510 if (mode) {
511 if (server_mode)
512 LOG(WARNING) << "Both ProxyMode and ProxyServerMode policies defined, "
513 << "ignoring ProxyMode.";
514 if (!proxy_policies_[kPolicyProxyMode]->GetAsString(&mode_value)) {
515 LOG(WARNING) << "Invalid ProxyMode value.";
516 return false;
517 }
518 } else if (server_mode) {
519 int server_mode_value;
520 if (!proxy_policies_[kPolicyProxyServerMode]->GetAsInteger(
521 &server_mode_value)) {
522 LOG(WARNING) << "Invalid ProxyServerMode value.";
523 return false;
524 }
525
526 switch (server_mode_value) {
527 case kPolicyNoProxyServerMode:
528 mode_value = ProxyPrefs::kDirectProxyModeName;
529 break;
530 case kPolicyAutoDetectProxyServerMode:
531 mode_value = ProxyPrefs::kAutoDetectProxyModeName;
532 break;
533 case kPolicyManuallyConfiguredProxyServerMode:
534 if (server && pac_url) {
535 LOG(WARNING) << "A centrally-administered policy dictates that"
536 << " both fixed proxy servers and a .pac url. should"
537 << " be used for proxy configuration.";
538 return false;
539 }
540 if (!server && !pac_url) {
541 LOG(WARNING) << "A centrally-administered policy dictates that the"
542 << " proxy settings should use either fixed proxy"
543 << " servers or a .pac url, but specifies neither.";
544 return false;
545 }
546 if (pac_url)
547 mode_value = ProxyPrefs::kPacScriptProxyModeName;
548 else
549 mode_value = ProxyPrefs::kFixedServersProxyModeName;
550 break;
551 case kPolicyUseSystemProxyServerMode:
552 mode_value = ProxyPrefs::kSystemProxyModeName;
553 break;
554 default:
555 LOG(WARNING) << "Invalid proxy mode " << server_mode_value;
556 return false;
557 }
558 }
559
560 // If neither ProxyMode nor ProxyServerMode are specified, mode_value will be
561 // empty and the proxy shouldn't be configured at all.
562 if (mode_value.empty())
506 return true; 563 return true;
507 564
508 int mode_value; 565 if (mode_value == ProxyPrefs::kDirectProxyModeName) {
509 if (!proxy_policies_[kPolicyProxyMode]->GetAsInteger(&mode_value)) { 566 if (server || pac_url || bypass_list) {
510 LOG(WARNING) << "Invalid proxy mode value."; 567 LOG(WARNING) << "A centrally-administered policy disables the use of"
568 << " a proxy but also specifies an explicit proxy"
569 << " configuration.";
570 return false;
571 }
572 } else if (mode_value == ProxyPrefs::kAutoDetectProxyModeName) {
573 if (server || bypass_list || pac_url) {
574 LOG(WARNING) << "A centrally-administered policy dictates that a proxy"
575 << " shall be auto configured but specifies fixed proxy"
576 << " servers, a by-pass list or a .pac script URL.";
577 return false;
578 }
579 } else if (mode_value == ProxyPrefs::kPacScriptProxyModeName) {
580 if (server || bypass_list) {
581 LOG(WARNING) << "A centrally-administered policy dictates that a .pac"
582 << " script URL should be used for proxy configuration but"
583 << " also specifies policies required only for fixed"
584 << " proxy servers.";
585 return false;
586 }
587 } else if (mode_value == ProxyPrefs::kFixedServersProxyModeName) {
588 if (pac_url) {
589 LOG(WARNING) << "A centrally-administered policy dictates that"
590 << " fixed proxy servers should be used but also"
591 << " specifies a .pac script URL.";
592 return false;
593 }
594 } else if (mode_value == ProxyPrefs::kSystemProxyModeName) {
595 if (server || pac_url || bypass_list) {
596 LOG(WARNING) << "A centrally-administered policy dictates that the"
597 << " system proxy settings should be used but also "
598 << " specifies an explicit proxy configuration.";
599 return false;
600 }
601 } else {
602 LOG(WARNING) << "Invalid proxy mode " << mode_value;
511 return false; 603 return false;
512 } 604 }
513
514 switch (mode_value) {
515 case kPolicyNoProxyServerMode:
516 if (server || pac_url || bypass_list) {
517 LOG(WARNING) << "A centrally-administered policy disables the use of"
518 << " a proxy but also specifies an explicit proxy"
519 << " configuration.";
520 return false;
521 }
522 break;
523 case kPolicyAutoDetectProxyMode:
524 if (server || bypass_list || pac_url) {
525 LOG(WARNING) << "A centrally-administered policy dictates that a proxy"
526 << " shall be auto configured but specifies fixed proxy"
527 << " servers, a by-pass list or a .pac script URL.";
528 return false;
529 }
530 break;
531 case kPolicyManuallyConfiguredProxyMode:
532 if (server && pac_url) {
533 LOG(WARNING) << "A centrally-administered policy dictates that the"
534 << " system proxy settings should use both a fixed"
535 << " proxy server and a .pac url.";
536 return false;
537 }
538 if (!server && !pac_url) {
539 LOG(WARNING) << "A centrally-administered policy dictates that the"
540 << " system proxy settings should use either a fixed"
541 << " proxy server or a .pac url, but specifies neither.";
542 return false;
543 }
544 break;
545 case kPolicyUseSystemProxyMode:
546 if (server || pac_url || bypass_list) {
547 LOG(WARNING) << "A centrally-administered policy dictates that the"
548 << " system proxy settings should be used but also "
549 << " specifies an explicit proxy configuration.";
550 return false;
551 }
552 break;
553 default:
554 LOG(WARNING) << "Invalid proxy mode " << mode_value;
555 return false;
556 }
557 return true; 605 return true;
558 } 606 }
559 607
560 void ConfigurationPolicyPrefKeeper::ApplyProxySettings() { 608 void ConfigurationPolicyPrefKeeper::ApplyProxySettings() {
561 if (!HasProxyPolicy(kPolicyProxyMode)) 609 ProxyPrefs::ProxyMode mode;
610 if (HasProxyPolicy(kPolicyProxyMode)) {
611 std::string string_mode;
612 CHECK(proxy_policies_[kPolicyProxyMode]->GetAsString(&string_mode));
613 if (!ProxyPrefs::StringToProxyMode(string_mode, &mode)) {
614 LOG(WARNING) << "A centrally-administered policy specifies a value for"
615 << "the ProxyMode policy that isn't recognized.";
616 return;
617 }
618 } else if (HasProxyPolicy(kPolicyProxyServerMode)) {
619 int int_mode = 0;
620 CHECK(proxy_policies_[kPolicyProxyServerMode]->GetAsInteger(&int_mode));
621 switch (int_mode) {
622 case kPolicyNoProxyServerMode:
623 mode = ProxyPrefs::MODE_DIRECT;
624 break;
625 case kPolicyAutoDetectProxyServerMode:
626 mode = ProxyPrefs::MODE_AUTO_DETECT;
627 break;
628 case kPolicyManuallyConfiguredProxyServerMode:
629 mode = ProxyPrefs::MODE_FIXED_SERVERS;
630 if (HasProxyPolicy(kPolicyProxyPacUrl))
631 mode = ProxyPrefs::MODE_PAC_SCRIPT;
632 break;
633 case kPolicyUseSystemProxyServerMode:
634 mode = ProxyPrefs::MODE_SYSTEM;
635 break;
636 default:
637 mode = ProxyPrefs::MODE_DIRECT;
638 NOTREACHED();
639 }
640 } else {
562 return; 641 return;
563
564 int int_mode;
565 CHECK(proxy_policies_[kPolicyProxyMode]->GetAsInteger(&int_mode));
566 ProxyPrefs::ProxyMode mode;
567 switch (int_mode) {
568 case kPolicyNoProxyServerMode:
569 mode = ProxyPrefs::MODE_DIRECT;
570 break;
571 case kPolicyAutoDetectProxyMode:
572 mode = ProxyPrefs::MODE_AUTO_DETECT;
573 break;
574 case kPolicyManuallyConfiguredProxyMode:
575 mode = ProxyPrefs::MODE_FIXED_SERVERS;
576 if (HasProxyPolicy(kPolicyProxyPacUrl))
577 mode = ProxyPrefs::MODE_PAC_SCRIPT;
578 break;
579 case kPolicyUseSystemProxyMode:
580 mode = ProxyPrefs::MODE_SYSTEM;
581 break;
582 default:
583 mode = ProxyPrefs::MODE_DIRECT;
584 NOTREACHED();
585 } 642 }
586 prefs_.SetValue(prefs::kProxyMode, Value::CreateIntegerValue(mode)); 643 prefs_.SetValue(prefs::kProxyMode, Value::CreateIntegerValue(mode));
587 644
588 if (HasProxyPolicy(kPolicyProxyServer)) { 645 if (HasProxyPolicy(kPolicyProxyServer)) {
589 prefs_.SetValue(prefs::kProxyServer, proxy_policies_[kPolicyProxyServer]); 646 prefs_.SetValue(prefs::kProxyServer, proxy_policies_[kPolicyProxyServer]);
590 proxy_policies_[kPolicyProxyServer] = NULL; 647 proxy_policies_[kPolicyProxyServer] = NULL;
591 } else { 648 } else {
592 prefs_.SetValue(prefs::kProxyServer, Value::CreateNullValue()); 649 prefs_.SetValue(prefs::kProxyServer, Value::CreateNullValue());
593 } 650 }
594 if (HasProxyPolicy(kPolicyProxyPacUrl)) { 651 if (HasProxyPolicy(kPolicyProxyPacUrl)) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 { kPolicyDefaultSearchProviderSearchURL, Value::TYPE_STRING, 760 { kPolicyDefaultSearchProviderSearchURL, Value::TYPE_STRING,
704 key::kDefaultSearchProviderSearchURL }, 761 key::kDefaultSearchProviderSearchURL },
705 { kPolicyDefaultSearchProviderSuggestURL, Value::TYPE_STRING, 762 { kPolicyDefaultSearchProviderSuggestURL, Value::TYPE_STRING,
706 key::kDefaultSearchProviderSuggestURL }, 763 key::kDefaultSearchProviderSuggestURL },
707 { kPolicyDefaultSearchProviderInstantURL, Value::TYPE_STRING, 764 { kPolicyDefaultSearchProviderInstantURL, Value::TYPE_STRING,
708 key::kDefaultSearchProviderInstantURL }, 765 key::kDefaultSearchProviderInstantURL },
709 { kPolicyDefaultSearchProviderIconURL, Value::TYPE_STRING, 766 { kPolicyDefaultSearchProviderIconURL, Value::TYPE_STRING,
710 key::kDefaultSearchProviderIconURL }, 767 key::kDefaultSearchProviderIconURL },
711 { kPolicyDefaultSearchProviderEncodings, Value::TYPE_STRING, 768 { kPolicyDefaultSearchProviderEncodings, Value::TYPE_STRING,
712 key::kDefaultSearchProviderEncodings }, 769 key::kDefaultSearchProviderEncodings },
713 { kPolicyProxyMode, Value::TYPE_INTEGER, key::kProxyMode }, 770 { kPolicyProxyMode, Value::TYPE_STRING, key::kProxyMode },
771 { kPolicyProxyServerMode, Value::TYPE_INTEGER, key::kProxyServerMode },
714 { kPolicyProxyServer, Value::TYPE_STRING, key::kProxyServer }, 772 { kPolicyProxyServer, Value::TYPE_STRING, key::kProxyServer },
715 { kPolicyProxyPacUrl, Value::TYPE_STRING, key::kProxyPacUrl }, 773 { kPolicyProxyPacUrl, Value::TYPE_STRING, key::kProxyPacUrl },
716 { kPolicyProxyBypassList, Value::TYPE_STRING, key::kProxyBypassList }, 774 { kPolicyProxyBypassList, Value::TYPE_STRING, key::kProxyBypassList },
717 { kPolicyAlternateErrorPagesEnabled, Value::TYPE_BOOLEAN, 775 { kPolicyAlternateErrorPagesEnabled, Value::TYPE_BOOLEAN,
718 key::kAlternateErrorPagesEnabled }, 776 key::kAlternateErrorPagesEnabled },
719 { kPolicySearchSuggestEnabled, Value::TYPE_BOOLEAN, 777 { kPolicySearchSuggestEnabled, Value::TYPE_BOOLEAN,
720 key::kSearchSuggestEnabled }, 778 key::kSearchSuggestEnabled },
721 { kPolicyDnsPrefetchingEnabled, Value::TYPE_BOOLEAN, 779 { kPolicyDnsPrefetchingEnabled, Value::TYPE_BOOLEAN,
722 key::kDnsPrefetchingEnabled }, 780 key::kDnsPrefetchingEnabled },
723 { kPolicyDisableSpdy, Value::TYPE_BOOLEAN, key::kDisableSpdy }, 781 { kPolicyDisableSpdy, Value::TYPE_BOOLEAN, key::kDisableSpdy },
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 // Update the initialization flag. 870 // Update the initialization flag.
813 if (!initialization_complete_ && 871 if (!initialization_complete_ &&
814 provider_->IsInitializationComplete()) { 872 provider_->IsInitializationComplete()) {
815 initialization_complete_ = true; 873 initialization_complete_ = true;
816 FOR_EACH_OBSERVER(PrefStore::Observer, observers_, 874 FOR_EACH_OBSERVER(PrefStore::Observer, observers_,
817 OnInitializationCompleted()); 875 OnInitializationCompleted());
818 } 876 }
819 } 877 }
820 878
821 } // namespace policy 879 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698