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

Unified Diff: chrome/browser/policy/cloud/component_cloud_policy_service.cc

Issue 15061007: Added a PolicyDomainDescriptor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/cloud/component_cloud_policy_service.cc
diff --git a/chrome/browser/policy/cloud/component_cloud_policy_service.cc b/chrome/browser/policy/cloud/component_cloud_policy_service.cc
index c27215159428a1e9b096c0aeaac7cd7e27b28a74..c66f37a3859ae4c0de7b58209d57bfc99a73f8a5 100644
--- a/chrome/browser/policy/cloud/component_cloud_policy_service.cc
+++ b/chrome/browser/policy/cloud/component_cloud_policy_service.cc
@@ -15,6 +15,7 @@
#include "chrome/browser/policy/cloud/component_cloud_policy_store.h"
#include "chrome/browser/policy/cloud/component_cloud_policy_updater.h"
#include "chrome/browser/policy/cloud/resource_cache.h"
+#include "chrome/browser/policy/policy_domain_descriptor.h"
#include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h"
#include "content/public/browser/browser_thread.h"
#include "net/url_request/url_request_context_getter.h"
@@ -23,6 +24,19 @@ namespace em = enterprise_management;
namespace policy {
+namespace {
+
+void GetComponentIds(scoped_refptr<const PolicyDomainDescriptor>& descriptor,
+ std::set<std::string>* set) {
+ const PolicyDomainDescriptor::SchemaMap& map = descriptor->components();
+ for (PolicyDomainDescriptor::SchemaMap::const_iterator it = map.begin();
+ it != map.end(); ++it) {
+ set->insert(it->first);
+ }
+}
+
+} // namespace
+
const char ComponentCloudPolicyService::kComponentNamespaceCache[] =
"component-namespace-cache";
@@ -63,11 +77,15 @@ class ComponentCloudPolicyService::Backend
// ComponentCloudPolicyStore::Delegate implementation:
virtual void OnComponentCloudPolicyStoreUpdated() OVERRIDE;
- // Passes the current list of components in |domain|, so that the disk cache
+ // Passes the current descriptor of a domain, so that the disk cache
// can purge components that aren't being tracked anymore.
- void SetCurrentComponents(PolicyDomain domain, const StringSet* components);
+ void RegisterPolicyDomain(
+ scoped_refptr<const PolicyDomainDescriptor> descriptor);
private:
+ typedef std::map<PolicyDomain, scoped_refptr<const PolicyDomainDescriptor> >
+ DomainMap;
+
scoped_ptr<ComponentMap> ReadCachedComponents();
base::WeakPtr<ComponentCloudPolicyService> service_;
@@ -75,6 +93,7 @@ class ComponentCloudPolicyService::Backend
scoped_ptr<ResourceCache> cache_;
scoped_ptr<ComponentCloudPolicyStore> store_;
scoped_ptr<ComponentCloudPolicyUpdater> updater_;
+ DomainMap domain_map_;
DISALLOW_COPY_AND_ASSIGN(Backend);
};
@@ -95,7 +114,7 @@ void ComponentCloudPolicyService::Backend::Init() {
}
void ComponentCloudPolicyService::Backend::FinalizeInit() {
- // Read the components that were cached in the last SetCurrentComponents()
+ // Read the components that were cached in the last RegisterPolicyDomain()
// calls for each domain.
scoped_ptr<ComponentMap> components = ReadCachedComponents();
@@ -138,6 +157,11 @@ void ComponentCloudPolicyService::Backend::
OnComponentCloudPolicyStoreUpdated() {
scoped_ptr<PolicyBundle> bundle(new PolicyBundle);
bundle->CopyFrom(store_->policy());
+ for (DomainMap::iterator it = domain_map_.begin();
+ it != domain_map_.end(); ++it) {
+ it->second->FilterBundle(bundle.get());
+ }
+
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&ComponentCloudPolicyService::OnPolicyUpdated,
@@ -145,25 +169,27 @@ void ComponentCloudPolicyService::Backend::
base::Passed(&bundle)));
}
-void ComponentCloudPolicyService::Backend::SetCurrentComponents(
- PolicyDomain domain,
- const StringSet* components) {
+void ComponentCloudPolicyService::Backend::RegisterPolicyDomain(
+ scoped_refptr<const PolicyDomainDescriptor> descriptor) {
// Store the current list of components in the cache.
+ StringSet ids;
std::string policy_type;
- if (ComponentCloudPolicyStore::GetPolicyType(domain, &policy_type)) {
+ if (ComponentCloudPolicyStore::GetPolicyType(descriptor->domain(),
+ &policy_type)) {
+ GetComponentIds(descriptor, &ids);
Pickle pickle;
- for (StringSet::const_iterator it = components->begin();
- it != components->end(); ++it) {
+ for (StringSet::const_iterator it = ids.begin(); it != ids.end(); ++it)
pickle.WriteString(*it);
- }
std::string data(reinterpret_cast<const char*>(pickle.data()),
pickle.size());
cache_->Store(kComponentNamespaceCache, policy_type, data);
}
+ domain_map_[descriptor->domain()] = descriptor;
+
// Purge any components that have been removed.
if (store_)
- store_->Purge(domain, *components);
+ store_->Purge(descriptor->domain(), ids);
}
scoped_ptr<ComponentCloudPolicyService::ComponentMap>
@@ -262,25 +288,27 @@ void ComponentCloudPolicyService::Disconnect() {
}
void ComponentCloudPolicyService::RegisterPolicyDomain(
- PolicyDomain domain,
- const std::set<std::string>& current_ids) {
+ scoped_refptr<const PolicyDomainDescriptor> descriptor) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DCHECK(SupportsDomain(domain));
+ DCHECK(SupportsDomain(descriptor->domain()));
- // Send the new set to the backend, to purge the cache.
- backend_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&Backend::SetCurrentComponents,
- base::Unretained(backend_),
- domain,
- base::Owned(new StringSet(current_ids))));
+ // Send the new descriptor to the backend, to purge the cache.
+ backend_task_runner_->PostTask(FROM_HERE,
+ base::Bind(&Backend::RegisterPolicyDomain,
+ base::Unretained(backend_),
+ descriptor));
// Register the current list of components for |domain| at the |client_|.
- StringSet& registered_ids = registered_components_[domain];
+ StringSet current_ids;
+ GetComponentIds(descriptor, &current_ids);
+ StringSet& registered_ids = registered_components_[descriptor->domain()];
if (client_ && is_initialized()) {
- if (UpdateClientNamespaces(domain, registered_ids, current_ids))
+ if (UpdateClientNamespaces(
+ descriptor->domain(), registered_ids, current_ids)) {
delegate_->OnComponentCloudPolicyRefreshNeeded();
+ }
}
+
registered_ids = current_ids;
}

Powered by Google App Engine
This is Rietveld 408576698