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

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

Issue 6312121: Add initial device policy infrastructure. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix race condition and tests. Created 9 years, 10 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>
11 11
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/stl_util-inl.h" 15 #include "base/stl_util-inl.h"
16 #include "base/string16.h" 16 #include "base/string16.h"
17 #include "base/string_util.h" 17 #include "base/string_util.h"
18 #include "base/utf_string_conversions.h" 18 #include "base/utf_string_conversions.h"
19 #include "base/values.h" 19 #include "base/values.h"
20 #include "chrome/browser/browser_process.h" 20 #include "chrome/browser/browser_process.h"
21 #include "chrome/browser/policy/browser_policy_context.h"
21 #include "chrome/browser/policy/configuration_policy_provider.h" 22 #include "chrome/browser/policy/configuration_policy_provider.h"
22 #include "chrome/browser/policy/configuration_policy_provider_keeper.h"
23 #include "chrome/browser/policy/device_management_policy_provider.h"
24 #include "chrome/browser/policy/profile_policy_context.h" 23 #include "chrome/browser/policy/profile_policy_context.h"
25 #include "chrome/browser/prefs/pref_value_map.h" 24 #include "chrome/browser/prefs/pref_value_map.h"
26 #include "chrome/browser/prefs/proxy_prefs.h" 25 #include "chrome/browser/prefs/proxy_prefs.h"
27 #include "chrome/browser/profiles/profile.h" 26 #include "chrome/browser/profiles/profile.h"
28 #include "chrome/browser/search_engines/search_terms_data.h" 27 #include "chrome/browser/search_engines/search_terms_data.h"
29 #include "chrome/browser/search_engines/template_url.h" 28 #include "chrome/browser/search_engines/template_url.h"
30 #include "chrome/common/notification_service.h" 29 #include "chrome/common/notification_service.h"
31 #include "chrome/common/pref_names.h" 30 #include "chrome/common/pref_names.h"
32 #include "policy/policy_constants.h" 31 #include "policy/policy_constants.h"
33 32
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 prefs::kEnableAuthNegotiatePort }, 218 prefs::kEnableAuthNegotiatePort },
220 { Value::TYPE_STRING, kPolicyAuthServerWhitelist, 219 { Value::TYPE_STRING, kPolicyAuthServerWhitelist,
221 prefs::kAuthServerWhitelist }, 220 prefs::kAuthServerWhitelist },
222 { Value::TYPE_STRING, kPolicyAuthNegotiateDelegateWhitelist, 221 { Value::TYPE_STRING, kPolicyAuthNegotiateDelegateWhitelist,
223 prefs::kAuthNegotiateDelegateWhitelist }, 222 prefs::kAuthNegotiateDelegateWhitelist },
224 { Value::TYPE_STRING, kPolicyGSSAPILibraryName, 223 { Value::TYPE_STRING, kPolicyGSSAPILibraryName,
225 prefs::kGSSAPILibraryName }, 224 prefs::kGSSAPILibraryName },
226 { Value::TYPE_BOOLEAN, kPolicyDisable3DAPIs, 225 { Value::TYPE_BOOLEAN, kPolicyDisable3DAPIs,
227 prefs::kDisable3DAPIs }, 226 prefs::kDisable3DAPIs },
228 { Value::TYPE_INTEGER, kPolicyPolicyRefreshRate, 227 { Value::TYPE_INTEGER, kPolicyPolicyRefreshRate,
229 prefs::kPolicyRefreshRate }, 228 prefs::kPolicyUserPolicyRefreshRate },
230 { Value::TYPE_BOOLEAN, kPolicyInstantEnabled, prefs::kInstantEnabled }, 229 { Value::TYPE_BOOLEAN, kPolicyInstantEnabled, prefs::kInstantEnabled },
231 { Value::TYPE_BOOLEAN, kPolicyDefaultBrowserSettingEnabled, 230 { Value::TYPE_BOOLEAN, kPolicyDefaultBrowserSettingEnabled,
232 prefs::kDefaultBrowserSettingEnabled }, 231 prefs::kDefaultBrowserSettingEnabled },
233 { Value::TYPE_BOOLEAN, kPolicyCloudPrintProxyEnabled, 232 { Value::TYPE_BOOLEAN, kPolicyCloudPrintProxyEnabled,
234 prefs::kCloudPrintProxyEnabled }, 233 prefs::kCloudPrintProxyEnabled },
235 234
236 #if defined(OS_CHROMEOS) 235 #if defined(OS_CHROMEOS)
237 { Value::TYPE_BOOLEAN, kPolicyChromeOsLockOnIdleSuspend, 236 { Value::TYPE_BOOLEAN, kPolicyChromeOsLockOnIdleSuspend,
238 prefs::kEnableScreenLock }, 237 prefs::kEnableScreenLock },
239 #endif 238 #endif
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 ConfigurationPolicyType policy) const { 675 ConfigurationPolicyType policy) const {
677 std::map<ConfigurationPolicyType, Value*>::const_iterator iter; 676 std::map<ConfigurationPolicyType, Value*>::const_iterator iter;
678 iter = proxy_policies_.find(policy); 677 iter = proxy_policies_.find(policy);
679 return iter != proxy_policies_.end() && 678 return iter != proxy_policies_.end() &&
680 iter->second && !iter->second->IsType(Value::TYPE_NULL); 679 iter->second && !iter->second->IsType(Value::TYPE_NULL);
681 } 680 }
682 681
683 ConfigurationPolicyPrefStore::ConfigurationPolicyPrefStore( 682 ConfigurationPolicyPrefStore::ConfigurationPolicyPrefStore(
684 ConfigurationPolicyProvider* provider) 683 ConfigurationPolicyProvider* provider)
685 : provider_(provider), 684 : provider_(provider),
686 initialization_complete_(provider->IsInitializationComplete()) { 685 initialization_complete_(false) {
687 // Read initial policy. 686 if (provider_) {
688 policy_keeper_.reset(new ConfigurationPolicyPrefKeeper(provider)); 687 // Read initial policy.
689 688 policy_keeper_.reset(new ConfigurationPolicyPrefKeeper(provider));
690 registrar_.Init(provider_, this); 689 registrar_.Init(provider_, this);
690 initialization_complete_ = provider->IsInitializationComplete();
691 } else {
692 initialization_complete_ = true;
693 }
691 } 694 }
692 695
693 ConfigurationPolicyPrefStore::~ConfigurationPolicyPrefStore() { 696 ConfigurationPolicyPrefStore::~ConfigurationPolicyPrefStore() {
694 } 697 }
695 698
696 void ConfigurationPolicyPrefStore::AddObserver(PrefStore::Observer* observer) { 699 void ConfigurationPolicyPrefStore::AddObserver(PrefStore::Observer* observer) {
697 observers_.AddObserver(observer); 700 observers_.AddObserver(observer);
698 } 701 }
699 702
700 void ConfigurationPolicyPrefStore::RemoveObserver( 703 void ConfigurationPolicyPrefStore::RemoveObserver(
701 PrefStore::Observer* observer) { 704 PrefStore::Observer* observer) {
702 observers_.RemoveObserver(observer); 705 observers_.RemoveObserver(observer);
703 } 706 }
704 707
705 bool ConfigurationPolicyPrefStore::IsInitializationComplete() const { 708 bool ConfigurationPolicyPrefStore::IsInitializationComplete() const {
706 return initialization_complete_; 709 return initialization_complete_;
707 } 710 }
708 711
709 PrefStore::ReadResult 712 PrefStore::ReadResult
710 ConfigurationPolicyPrefStore::GetValue(const std::string& key, 713 ConfigurationPolicyPrefStore::GetValue(const std::string& key,
711 Value** value) const { 714 Value** value) const {
712 return policy_keeper_->GetValue(key, value); 715 if (policy_keeper_.get())
716 return policy_keeper_->GetValue(key, value);
717
718 return PrefStore::READ_NO_VALUE;
713 } 719 }
714 720
715 void ConfigurationPolicyPrefStore::OnUpdatePolicy() { 721 void ConfigurationPolicyPrefStore::OnUpdatePolicy() {
716 Refresh(); 722 Refresh();
717 } 723 }
718 724
719 void ConfigurationPolicyPrefStore::OnProviderGoingAway() { 725 void ConfigurationPolicyPrefStore::OnProviderGoingAway() {
720 provider_ = NULL; 726 provider_ = NULL;
721 } 727 }
722 728
723 // static 729 // static
724 ConfigurationPolicyPrefStore* 730 ConfigurationPolicyPrefStore*
725 ConfigurationPolicyPrefStore::CreateManagedPlatformPolicyPrefStore() { 731 ConfigurationPolicyPrefStore::CreateManagedPlatformPolicyPrefStore() {
726 ConfigurationPolicyProviderKeeper* keeper = 732 BrowserPolicyContext* context = g_browser_process->browser_policy_context();
727 g_browser_process->configuration_policy_provider_keeper(); 733 return new ConfigurationPolicyPrefStore(
728 return new ConfigurationPolicyPrefStore(keeper->managed_platform_provider()); 734 context->GetManagedPlatformProvider());
729 } 735 }
730 736
731 // static 737 // static
732 ConfigurationPolicyPrefStore* 738 ConfigurationPolicyPrefStore*
733 ConfigurationPolicyPrefStore::CreateDeviceManagementPolicyPrefStore( 739 ConfigurationPolicyPrefStore::CreateManagedCloudPolicyPrefStore(
734 Profile* profile) { 740 Profile* profile) {
735 ConfigurationPolicyProviderKeeper* keeper =
736 g_browser_process->configuration_policy_provider_keeper();
737 ConfigurationPolicyProvider* provider = NULL; 741 ConfigurationPolicyProvider* provider = NULL;
738 if (profile) 742 if (profile)
739 provider = profile->GetPolicyContext()->GetDeviceManagementPolicyProvider(); 743 provider = profile->GetPolicyContext()->GetManagedPolicyProvider();
740 if (!provider) 744 if (!provider) {
741 provider = keeper->device_management_provider(); 745 BrowserPolicyContext* context = g_browser_process->browser_policy_context();
746 provider = context->GetManagedCloudProvider();
747 }
742 return new ConfigurationPolicyPrefStore(provider); 748 return new ConfigurationPolicyPrefStore(provider);
743 } 749 }
744 750
745 // static 751 // static
746 ConfigurationPolicyPrefStore* 752 ConfigurationPolicyPrefStore*
747 ConfigurationPolicyPrefStore::CreateRecommendedPolicyPrefStore() { 753 ConfigurationPolicyPrefStore::CreateRecommendedPlatformPolicyPrefStore() {
748 ConfigurationPolicyProviderKeeper* keeper = 754 BrowserPolicyContext* context = g_browser_process->browser_policy_context();
749 g_browser_process->configuration_policy_provider_keeper(); 755 return new ConfigurationPolicyPrefStore(
750 return new ConfigurationPolicyPrefStore(keeper->recommended_provider()); 756 context->GetRecommendedPlatformProvider());
757 }
758
759 // static
760 ConfigurationPolicyPrefStore*
761 ConfigurationPolicyPrefStore::CreateRecommendedCloudPolicyPrefStore(
762 Profile* profile) {
763 ConfigurationPolicyProvider* provider = NULL;
764 if (profile)
765 provider = profile->GetPolicyContext()->GetRecommendedPolicyProvider();
766 if (!provider) {
767 BrowserPolicyContext* context = g_browser_process->browser_policy_context();
768 provider = context->GetRecommendedCloudProvider();
769 }
770 return new ConfigurationPolicyPrefStore(provider);
751 } 771 }
752 772
753 /* static */ 773 /* static */
754 const ConfigurationPolicyProvider::PolicyDefinitionList* 774 const ConfigurationPolicyProvider::PolicyDefinitionList*
755 ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList() { 775 ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList() {
756 static ConfigurationPolicyProvider::PolicyDefinitionList::Entry entries[] = { 776 static ConfigurationPolicyProvider::PolicyDefinitionList::Entry entries[] = {
757 { kPolicyHomepageLocation, Value::TYPE_STRING, key::kHomepageLocation }, 777 { kPolicyHomepageLocation, Value::TYPE_STRING, key::kHomepageLocation },
758 { kPolicyHomepageIsNewTabPage, Value::TYPE_BOOLEAN, 778 { kPolicyHomepageIsNewTabPage, Value::TYPE_BOOLEAN,
759 key::kHomepageIsNewTabPage }, 779 key::kHomepageIsNewTabPage },
760 { kPolicyRestoreOnStartup, Value::TYPE_INTEGER, key::kRestoreOnStartup }, 780 { kPolicyRestoreOnStartup, Value::TYPE_INTEGER, key::kRestoreOnStartup },
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 // Update the initialization flag. 907 // Update the initialization flag.
888 if (!initialization_complete_ && 908 if (!initialization_complete_ &&
889 provider_->IsInitializationComplete()) { 909 provider_->IsInitializationComplete()) {
890 initialization_complete_ = true; 910 initialization_complete_ = true;
891 FOR_EACH_OBSERVER(PrefStore::Observer, observers_, 911 FOR_EACH_OBSERVER(PrefStore::Observer, observers_,
892 OnInitializationCompleted()); 912 OnInitializationCompleted());
893 } 913 }
894 } 914 }
895 915
896 } // namespace policy 916 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698