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

Unified Diff: chrome/browser/policy/cloud_policy_provider_impl.cc

Issue 9911029: Refactored the CloudPolicyProvider so that it becomes initialized once and stays initialized. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebased Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/cloud_policy_provider_impl.cc
diff --git a/chrome/browser/policy/cloud_policy_provider_impl.cc b/chrome/browser/policy/cloud_policy_provider_impl.cc
deleted file mode 100644
index 3e229a3fd2f5a89326b38fce689cf2f103372c60..0000000000000000000000000000000000000000
--- a/chrome/browser/policy/cloud_policy_provider_impl.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/policy/cloud_policy_provider_impl.h"
-
-#include <algorithm>
-
-#include "chrome/browser/policy/browser_policy_connector.h"
-#include "chrome/browser/policy/configuration_policy_pref_store.h"
-
-namespace policy {
-
-CloudPolicyProviderImpl::CloudPolicyProviderImpl(
- BrowserPolicyConnector* browser_policy_connector,
- const PolicyDefinitionList* policy_list,
- PolicyLevel level)
- : CloudPolicyProvider(policy_list),
- browser_policy_connector_(browser_policy_connector),
- level_(level),
- initialization_complete_(true) {}
-
-CloudPolicyProviderImpl::~CloudPolicyProviderImpl() {
- for (ListType::iterator i = caches_.begin(); i != caches_.end(); ++i)
- (*i)->RemoveObserver(this);
-}
-
-bool CloudPolicyProviderImpl::ProvideInternal(PolicyMap* result) {
- result->CopyFrom(combined_);
- return true;
-}
-
-bool CloudPolicyProviderImpl::IsInitializationComplete() const {
- return initialization_complete_;
-}
-
-void CloudPolicyProviderImpl::RefreshPolicies() {
- pending_update_caches_ = caches_;
- if (pending_update_caches_.empty())
- NotifyPolicyUpdated();
- else
- browser_policy_connector_->FetchCloudPolicy();
-}
-
-void CloudPolicyProviderImpl::OnCacheUpdate(CloudPolicyCacheBase* cache) {
- RemoveCache(cache, &pending_update_caches_);
- RecombineCachesAndTriggerUpdate();
-}
-
-void CloudPolicyProviderImpl::OnCacheGoingAway(CloudPolicyCacheBase* cache) {
- cache->RemoveObserver(this);
- RemoveCache(cache, &caches_);
- RemoveCache(cache, &pending_update_caches_);
- RecombineCachesAndTriggerUpdate();
-}
-
-void CloudPolicyProviderImpl::AppendCache(CloudPolicyCacheBase* cache) {
- initialization_complete_ &= cache->IsReady();
- cache->AddObserver(this);
- caches_.push_back(cache);
- RecombineCachesAndTriggerUpdate();
-}
-
-void CloudPolicyProviderImpl::PrependCache(CloudPolicyCacheBase* cache) {
- initialization_complete_ &= cache->IsReady();
- cache->AddObserver(this);
- caches_.insert(caches_.begin(), cache);
- RecombineCachesAndTriggerUpdate();
-}
-
-void CloudPolicyProviderImpl::RecombineCachesAndTriggerUpdate() {
- // Re-check whether all caches are ready.
- if (!initialization_complete_) {
- bool all_caches_ready = true;
- for (ListType::const_iterator i = caches_.begin();
- i != caches_.end(); ++i) {
- if (!(*i)->IsReady()) {
- all_caches_ready = false;
- break;
- }
- }
- if (all_caches_ready)
- initialization_complete_ = true;
- }
-
- // Reconstruct the merged policy map.
- PolicyMap newly_combined;
- PolicyMap cache_policies;
- for (ListType::iterator i = caches_.begin(); i != caches_.end(); ++i) {
- if (!(*i)->IsReady())
- continue;
- cache_policies.CopyFrom(*(*i)->policy());
- FixDeprecatedPolicies(&cache_policies);
- newly_combined.MergeFrom(cache_policies);
- }
-
- newly_combined.FilterLevel(level_);
- combined_.Swap(&newly_combined);
-
- // Trigger a notification.
- if (pending_update_caches_.empty())
- NotifyPolicyUpdated();
-}
-
-// static
-void CloudPolicyProviderImpl::RemoveCache(CloudPolicyCacheBase* cache,
- ListType* caches) {
- ListType::iterator it = std::find(caches->begin(), caches->end(), cache);
- if (it != caches->end())
- caches->erase(it);
-}
-
-} // namespace policy
« no previous file with comments | « chrome/browser/policy/cloud_policy_provider_impl.h ('k') | chrome/browser/policy/cloud_policy_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698