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

Unified Diff: chrome/browser/ui/webui/policy_ui.cc

Issue 17387002: Sending known policy names for extensions to chrome://policy page (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@anita-policies
Patch Set: After rebasing against patch set 9 of issue 16689004 Created 7 years, 6 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
« chrome/browser/resources/policy.js ('K') | « chrome/browser/resources/policy.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/policy_ui.cc
diff --git a/chrome/browser/ui/webui/policy_ui.cc b/chrome/browser/ui/webui/policy_ui.cc
index edbda8db79282d6b95d221cd30b257b336eb6765..7de637504652678320ea5bf780de0775a0647b7c 100644
--- a/chrome/browser/ui/webui/policy_ui.cc
+++ b/chrome/browser/ui/webui/policy_ui.cc
@@ -26,8 +26,10 @@
#include "chrome/browser/policy/cloud/cloud_policy_validator.h"
#include "chrome/browser/policy/cloud/message_util.h"
#include "chrome/browser/policy/configuration_policy_handler_list.h"
+#include "chrome/browser/policy/policy_domain_descriptor.h"
#include "chrome/browser/policy/policy_error_map.h"
#include "chrome/browser/policy/policy_map.h"
+#include "chrome/browser/policy/policy_schema.h"
#include "chrome/browser/policy/policy_service.h"
#include "chrome/browser/policy/policy_types.h"
#include "chrome/browser/policy/profile_policy_connector.h"
@@ -500,17 +502,80 @@ void PolicyUIHandler::RegisterMessages() {
void PolicyUIHandler::OnPolicyUpdated(const policy::PolicyNamespace& ns,
const policy::PolicyMap& previous,
const policy::PolicyMap& current) {
+ SendPolicyNames();
SendPolicyValues();
}
void PolicyUIHandler::SendPolicyNames() const {
base::DictionaryValue names;
+
+ // Add Chrome policy names.
+ base::DictionaryValue* chrome_policy_names = new base::DictionaryValue;
const policy::PolicyDefinitionList* list =
policy::GetChromePolicyDefinitionList();
for (const policy::PolicyDefinitionList::Entry* entry = list->begin;
entry != list->end; ++entry) {
- names.SetBoolean(entry->name, true);
+ chrome_policy_names->SetBoolean(entry->name, true);
}
+ names.Set("chromePolicyNames", chrome_policy_names);
+
+ // Add extension policy names.
+ base::DictionaryValue* extension_policy_names = new base::DictionaryValue;
+
+ // Get extensions.
+ extensions::ExtensionSystem* extension_system =
+ extensions::ExtensionSystem::Get(Profile::FromWebUI(web_ui()));
+ const ExtensionSet* extensions =
+ extension_system->extension_service()->extensions();
+
+ // Add all extension names to the map.
+ for (ExtensionSet::const_iterator it = extensions->begin();
+ it != extensions->end(); ++it) {
+ const extensions::Extension* extension = *it;
+
+ // Skip this extension if it's a component extension.
+ if (extension->location() == extensions::Manifest::COMPONENT)
+ continue;
+
+ base::DictionaryValue* extension_value = new base::DictionaryValue;
+ extension_value->SetString("name", extension->name());
+ extension_policy_names->Set(extension->id(), extension_value);
+ }
+
+ // Get the policy schema map.
+ scoped_refptr<const policy::PolicyDomainDescriptor> policy_domain_descriptor;
+ policy_domain_descriptor = GetPolicyService()->
+ GetPolicyDomainDescriptor(policy::POLICY_DOMAIN_EXTENSIONS);
+ const policy::PolicyDomainDescriptor::SchemaMap& schema_map =
+ policy_domain_descriptor->components();
+
+ // Add policy names for extensions which are in the policy schema map.
+ policy::PolicyDomainDescriptor::SchemaMap::const_iterator it_map;
+ for (it_map = schema_map.begin(); it_map != schema_map.end(); it_map++) {
+ // Skip this extension if it doesn't have a policy schema,
+ // or if it is a component extension.
+ if (it_map->second == NULL ||
+ extensions->GetByID(it_map->first)->location() ==
+ extensions::Manifest::COMPONENT)
+ continue;
+
+ // Get policy names from the extension's policy schema.
+ // Store in a map, not an array, for faster lookup on JS side.
+ base::DictionaryValue* policy_names = new base::DictionaryValue;
+ const policy::PolicySchemaMap* policies = it_map->second->GetProperties();
+ policy::PolicySchemaMap::const_iterator it_policies;
+ for (it_policies = policies->begin(); it_policies != policies->end();
+ it_policies++) {
+ policy_names->SetBoolean(it_policies->first, true);
+ }
+
+ // Add policy names to extension's entry in the dictionary.
+ base::DictionaryValue* extension_value = new base::DictionaryValue;
+ extension_policy_names->GetDictionary(it_map->first, &extension_value);
+ extension_value->Set("policyNames", policy_names);
+ }
Joao da Silva 2013/06/18 13:26:04 Have a single for loop: - get the list of all ext
anitawoodruff 2013/06/18 14:53:38 I've combined it into a single for-loop, but that
+
+ names.Set("extensionPolicyNames", extension_policy_names);
web_ui()->CallJavascriptFunction("policy.Page.setPolicyNames", names);
}
@@ -538,22 +603,17 @@ void PolicyUIHandler::SendPolicyValues() const {
if (extension->location() == extensions::Manifest::COMPONENT)
continue;
- base::DictionaryValue* extension_value = new base::DictionaryValue;
-
- // Add name.
- extension_value->SetString("name", extension->name());
-
- // Add policies.
+ // Add policies values.
+ // Store in a map, not an array, for faster lookup on JS side.
base::DictionaryValue* extension_policies = new base::DictionaryValue;
policy::PolicyNamespace policy_namespace = policy::PolicyNamespace(
policy::POLICY_DOMAIN_EXTENSIONS, extension->id());
policy::PolicyErrorMap empty_error_map;
GetPolicyValues(GetPolicyService()->GetPolicies(policy_namespace),
&empty_error_map, extension_policies);
- extension_value->Set("policies", extension_policies);
// Add entry to the dictionary.
- extension_values->Set(extension->id(), extension_value);
+ extension_values->Set(extension->id(), extension_policies);
}
all_policies.Set("extensionPolicies", extension_values);
« chrome/browser/resources/policy.js ('K') | « chrome/browser/resources/policy.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698