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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/webui/policy_ui.h" 5 #include "chrome/browser/ui/webui/policy_ui.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/strings/string16.h" 14 #include "base/strings/string16.h"
15 #include "base/time.h" 15 #include "base/time.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/extensions/extension_service.h" 18 #include "chrome/browser/extensions/extension_service.h"
19 #include "chrome/browser/extensions/extension_system.h" 19 #include "chrome/browser/extensions/extension_system.h"
20 #include "chrome/browser/policy/browser_policy_connector.h" 20 #include "chrome/browser/policy/browser_policy_connector.h"
21 #include "chrome/browser/policy/cloud/cloud_policy_client.h" 21 #include "chrome/browser/policy/cloud/cloud_policy_client.h"
22 #include "chrome/browser/policy/cloud/cloud_policy_constants.h" 22 #include "chrome/browser/policy/cloud/cloud_policy_constants.h"
23 #include "chrome/browser/policy/cloud/cloud_policy_core.h" 23 #include "chrome/browser/policy/cloud/cloud_policy_core.h"
24 #include "chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.h" 24 #include "chrome/browser/policy/cloud/cloud_policy_refresh_scheduler.h"
25 #include "chrome/browser/policy/cloud/cloud_policy_store.h" 25 #include "chrome/browser/policy/cloud/cloud_policy_store.h"
26 #include "chrome/browser/policy/cloud/cloud_policy_validator.h" 26 #include "chrome/browser/policy/cloud/cloud_policy_validator.h"
27 #include "chrome/browser/policy/cloud/message_util.h" 27 #include "chrome/browser/policy/cloud/message_util.h"
28 #include "chrome/browser/policy/configuration_policy_handler_list.h" 28 #include "chrome/browser/policy/configuration_policy_handler_list.h"
29 #include "chrome/browser/policy/policy_domain_descriptor.h"
29 #include "chrome/browser/policy/policy_error_map.h" 30 #include "chrome/browser/policy/policy_error_map.h"
30 #include "chrome/browser/policy/policy_map.h" 31 #include "chrome/browser/policy/policy_map.h"
32 #include "chrome/browser/policy/policy_schema.h"
31 #include "chrome/browser/policy/policy_service.h" 33 #include "chrome/browser/policy/policy_service.h"
32 #include "chrome/browser/policy/policy_types.h" 34 #include "chrome/browser/policy/policy_types.h"
33 #include "chrome/browser/policy/profile_policy_connector.h" 35 #include "chrome/browser/policy/profile_policy_connector.h"
34 #include "chrome/browser/policy/profile_policy_connector_factory.h" 36 #include "chrome/browser/policy/profile_policy_connector_factory.h"
35 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" 37 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h"
36 #include "chrome/browser/profiles/profile.h" 38 #include "chrome/browser/profiles/profile.h"
37 #include "chrome/common/extensions/extension.h" 39 #include "chrome/common/extensions/extension.h"
38 #include "chrome/common/extensions/extension_set.h" 40 #include "chrome/common/extensions/extension_set.h"
39 #include "chrome/common/extensions/manifest.h" 41 #include "chrome/common/extensions/manifest.h"
40 #include "chrome/common/time_format.h" 42 #include "chrome/common/time_format.h"
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 base::Bind(&PolicyUIHandler::HandleInitialized, base::Unretained(this))); 495 base::Bind(&PolicyUIHandler::HandleInitialized, base::Unretained(this)));
494 web_ui()->RegisterMessageCallback( 496 web_ui()->RegisterMessageCallback(
495 "reloadPolicies", 497 "reloadPolicies",
496 base::Bind(&PolicyUIHandler::HandleReloadPolicies, 498 base::Bind(&PolicyUIHandler::HandleReloadPolicies,
497 base::Unretained(this))); 499 base::Unretained(this)));
498 } 500 }
499 501
500 void PolicyUIHandler::OnPolicyUpdated(const policy::PolicyNamespace& ns, 502 void PolicyUIHandler::OnPolicyUpdated(const policy::PolicyNamespace& ns,
501 const policy::PolicyMap& previous, 503 const policy::PolicyMap& previous,
502 const policy::PolicyMap& current) { 504 const policy::PolicyMap& current) {
505 SendPolicyNames();
503 SendPolicyValues(); 506 SendPolicyValues();
504 } 507 }
505 508
506 void PolicyUIHandler::SendPolicyNames() const { 509 void PolicyUIHandler::SendPolicyNames() const {
507 base::DictionaryValue names; 510 base::DictionaryValue names;
511
512 // Add Chrome policy names.
513 base::DictionaryValue* chrome_policy_names = new base::DictionaryValue;
508 const policy::PolicyDefinitionList* list = 514 const policy::PolicyDefinitionList* list =
509 policy::GetChromePolicyDefinitionList(); 515 policy::GetChromePolicyDefinitionList();
510 for (const policy::PolicyDefinitionList::Entry* entry = list->begin; 516 for (const policy::PolicyDefinitionList::Entry* entry = list->begin;
511 entry != list->end; ++entry) { 517 entry != list->end; ++entry) {
512 names.SetBoolean(entry->name, true); 518 chrome_policy_names->SetBoolean(entry->name, true);
513 } 519 }
520 names.Set("chromePolicyNames", chrome_policy_names);
521
522 // Add extension policy names.
523 base::DictionaryValue* extension_policy_names = new base::DictionaryValue;
524
525 // Get extensions.
526 extensions::ExtensionSystem* extension_system =
527 extensions::ExtensionSystem::Get(Profile::FromWebUI(web_ui()));
528 const ExtensionSet* extensions =
529 extension_system->extension_service()->extensions();
530
531 // Add all extension names to the map.
532 for (ExtensionSet::const_iterator it = extensions->begin();
533 it != extensions->end(); ++it) {
534 const extensions::Extension* extension = *it;
535
536 // Skip this extension if it's a component extension.
537 if (extension->location() == extensions::Manifest::COMPONENT)
538 continue;
539
540 base::DictionaryValue* extension_value = new base::DictionaryValue;
541 extension_value->SetString("name", extension->name());
542 extension_policy_names->Set(extension->id(), extension_value);
543 }
544
545 // Get the policy schema map.
546 scoped_refptr<const policy::PolicyDomainDescriptor> policy_domain_descriptor;
547 policy_domain_descriptor = GetPolicyService()->
548 GetPolicyDomainDescriptor(policy::POLICY_DOMAIN_EXTENSIONS);
549 const policy::PolicyDomainDescriptor::SchemaMap& schema_map =
550 policy_domain_descriptor->components();
551
552 // Add policy names for extensions which are in the policy schema map.
553 policy::PolicyDomainDescriptor::SchemaMap::const_iterator it_map;
554 for (it_map = schema_map.begin(); it_map != schema_map.end(); it_map++) {
555 // Skip this extension if it doesn't have a policy schema,
556 // or if it is a component extension.
557 if (it_map->second == NULL ||
558 extensions->GetByID(it_map->first)->location() ==
559 extensions::Manifest::COMPONENT)
560 continue;
561
562 // Get policy names from the extension's policy schema.
563 // Store in a map, not an array, for faster lookup on JS side.
564 base::DictionaryValue* policy_names = new base::DictionaryValue;
565 const policy::PolicySchemaMap* policies = it_map->second->GetProperties();
566 policy::PolicySchemaMap::const_iterator it_policies;
567 for (it_policies = policies->begin(); it_policies != policies->end();
568 it_policies++) {
569 policy_names->SetBoolean(it_policies->first, true);
570 }
571
572 // Add policy names to extension's entry in the dictionary.
573 base::DictionaryValue* extension_value = new base::DictionaryValue;
574 extension_policy_names->GetDictionary(it_map->first, &extension_value);
575 extension_value->Set("policyNames", policy_names);
576 }
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
577
578 names.Set("extensionPolicyNames", extension_policy_names);
514 web_ui()->CallJavascriptFunction("policy.Page.setPolicyNames", names); 579 web_ui()->CallJavascriptFunction("policy.Page.setPolicyNames", names);
515 } 580 }
516 581
517 void PolicyUIHandler::SendPolicyValues() const { 582 void PolicyUIHandler::SendPolicyValues() const {
518 base::DictionaryValue all_policies; 583 base::DictionaryValue all_policies;
519 584
520 // Add chrome policies. 585 // Add chrome policies.
521 base::DictionaryValue* chrome_policies = new base::DictionaryValue; 586 base::DictionaryValue* chrome_policies = new base::DictionaryValue;
522 GetChromePolicyValues(chrome_policies); 587 GetChromePolicyValues(chrome_policies);
523 all_policies.Set("chromePolicies", chrome_policies); 588 all_policies.Set("chromePolicies", chrome_policies);
524 589
525 // Get extensions. 590 // Get extensions.
526 extensions::ExtensionSystem* extension_system = 591 extensions::ExtensionSystem* extension_system =
527 extensions::ExtensionSystem::Get(Profile::FromWebUI(web_ui())); 592 extensions::ExtensionSystem::Get(Profile::FromWebUI(web_ui()));
528 const ExtensionSet* extensions = 593 const ExtensionSet* extensions =
529 extension_system->extension_service()->extensions(); 594 extension_system->extension_service()->extensions();
530 595
531 // Add policies for each extension. 596 // Add policies for each extension.
532 base::DictionaryValue* extension_values = new base::DictionaryValue; 597 base::DictionaryValue* extension_values = new base::DictionaryValue;
533 for (ExtensionSet::const_iterator it = extensions->begin(); 598 for (ExtensionSet::const_iterator it = extensions->begin();
534 it != extensions->end(); ++it) { 599 it != extensions->end(); ++it) {
535 const extensions::Extension* extension = *it; 600 const extensions::Extension* extension = *it;
536 601
537 // Skip this extension if it's a component extension. 602 // Skip this extension if it's a component extension.
538 if (extension->location() == extensions::Manifest::COMPONENT) 603 if (extension->location() == extensions::Manifest::COMPONENT)
539 continue; 604 continue;
540 605
541 base::DictionaryValue* extension_value = new base::DictionaryValue; 606 // Add policies values.
542 607 // Store in a map, not an array, for faster lookup on JS side.
543 // Add name.
544 extension_value->SetString("name", extension->name());
545
546 // Add policies.
547 base::DictionaryValue* extension_policies = new base::DictionaryValue; 608 base::DictionaryValue* extension_policies = new base::DictionaryValue;
548 policy::PolicyNamespace policy_namespace = policy::PolicyNamespace( 609 policy::PolicyNamespace policy_namespace = policy::PolicyNamespace(
549 policy::POLICY_DOMAIN_EXTENSIONS, extension->id()); 610 policy::POLICY_DOMAIN_EXTENSIONS, extension->id());
550 policy::PolicyErrorMap empty_error_map; 611 policy::PolicyErrorMap empty_error_map;
551 GetPolicyValues(GetPolicyService()->GetPolicies(policy_namespace), 612 GetPolicyValues(GetPolicyService()->GetPolicies(policy_namespace),
552 &empty_error_map, extension_policies); 613 &empty_error_map, extension_policies);
553 extension_value->Set("policies", extension_policies);
554 614
555 // Add entry to the dictionary. 615 // Add entry to the dictionary.
556 extension_values->Set(extension->id(), extension_value); 616 extension_values->Set(extension->id(), extension_policies);
557 } 617 }
558 all_policies.Set("extensionPolicies", extension_values); 618 all_policies.Set("extensionPolicies", extension_values);
559 619
560 web_ui()->CallJavascriptFunction("policy.Page.setPolicyValues", all_policies); 620 web_ui()->CallJavascriptFunction("policy.Page.setPolicyValues", all_policies);
561 } 621 }
562 622
563 void PolicyUIHandler::GetPolicyValues(const policy::PolicyMap& map, 623 void PolicyUIHandler::GetPolicyValues(const policy::PolicyMap& map,
564 policy::PolicyErrorMap* errors, 624 policy::PolicyErrorMap* errors,
565 base::DictionaryValue* values) const { 625 base::DictionaryValue* values) const {
566 for (policy::PolicyMap::const_iterator entry = map.begin(); 626 for (policy::PolicyMap::const_iterator entry = map.begin();
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 } 707 }
648 708
649 PolicyUI::PolicyUI(content::WebUI* web_ui) : WebUIController(web_ui) { 709 PolicyUI::PolicyUI(content::WebUI* web_ui) : WebUIController(web_ui) {
650 web_ui->AddMessageHandler(new PolicyUIHandler); 710 web_ui->AddMessageHandler(new PolicyUIHandler);
651 content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), 711 content::WebUIDataSource::Add(Profile::FromWebUI(web_ui),
652 CreatePolicyUIHTMLSource()); 712 CreatePolicyUIHTMLSource());
653 } 713 }
654 714
655 PolicyUI::~PolicyUI() { 715 PolicyUI::~PolicyUI() {
656 } 716 }
OLDNEW
« 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