Chromium Code Reviews| 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 a735c7f8cfaf707a99ab2b5ce4ee6c1817d5efb4..9e2c50a50d2c2c277ca868f392e0438319221e37 100644 |
| --- a/chrome/browser/ui/webui/policy_ui.cc |
| +++ b/chrome/browser/ui/webui/policy_ui.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/ui/webui/policy_ui.h" |
| #include <stddef.h> |
| +#include <string.h> |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| @@ -34,6 +35,7 @@ |
| #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h" |
| #include "components/policy/core/common/cloud/cloud_policy_store.h" |
| #include "components/policy/core/common/cloud/cloud_policy_validator.h" |
| +#include "components/policy/core/common/policy_details.h" |
| #include "components/policy/core/common/policy_map.h" |
| #include "components/policy/core/common/policy_namespace.h" |
| #include "components/policy/core/common/policy_service.h" |
| @@ -49,8 +51,11 @@ |
| #include "google_apis/gaia/gaia_auth_util.h" |
| #include "grit/browser_resources.h" |
| #include "grit/components_strings.h" |
| +#include "grit/policy_resources.h" |
| +#include "grit/policy_resources_map.h" |
| #include "policy/policy_constants.h" |
| #include "policy/proto/device_management_backend.pb.h" |
| +#include "policy/risk_tag.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/base/l10n/time_format.h" |
| @@ -79,30 +84,62 @@ namespace em = enterprise_management; |
| namespace { |
| -struct PolicySourceMap { |
| +struct PolicyStringMap { |
| const char* key; |
| int string_id; |
| }; |
| // Strings that map from PolicySource enum to i18n string keys and their IDs. |
| -const PolicySourceMap kPolicySources[policy::POLICY_SOURCE_COUNT] = { |
| +const PolicyStringMap kPolicySources[policy::POLICY_SOURCE_COUNT] = { |
| {"sourceEnterpriseDefault", IDS_POLICY_SOURCE_ENTERPRISE_DEFAULT}, |
| {"sourceCloud", IDS_POLICY_SOURCE_CLOUD}, |
| {"sourceEnterpriseOverride", IDS_POLICY_SOURCE_ENTERPRISE_OVERRIDE}, |
| {"sourcePlatform", IDS_POLICY_SOURCE_PLATFORM} |
| }; |
| -void AddLocalizedPoilcySourceStrings(content::WebUIDataSource* source) { |
| - DCHECK_EQ(static_cast<size_t>(policy::POLICY_SOURCE_COUNT), |
| - arraysize(kPolicySources)); |
| - for (size_t i = 0; i < arraysize(kPolicySources); ++i) { |
| - source->AddLocalizedString(kPolicySources[i].key, |
| - kPolicySources[i].string_id); |
| - } |
| +// Strings that map from policy::RiskTag enum to i18n string keys and their IDs. |
| +const PolicyStringMap kPolicyRiskTags[policy::RISK_TAG_COUNT] = { |
| + {"fullAdminAccess", IDS_POLICY_RISK_TAG_FULL_ADMIN_ACCESS}, |
| + {"systemSecurity", IDS_POLICY_RISK_TAG_SYSTEM_SECURITY}, |
| + {"websiteSharing", IDS_POLICY_RISK_TAG_WEBSITE_SHARING}, |
| + {"adminSharing", IDS_POLICY_RISK_TAG_ADMIN_SHARING}, |
| + {"filtering", IDS_POLICY_RISK_TAG_FILTERING}, |
| + {"localDataAccess", IDS_POLICY_RISK_TAG_LOCAL_DATA_ACCESS}, |
| + {"googleSharing", IDS_POLICY_RISK_TAG_GOOGLE_SHARING} |
| +}; |
| + |
| +void AddLocalizedPoilcyStrings(content::WebUIDataSource* source, |
|
stevenjb
2015/10/07 17:09:33
Poilcy -> Policy
fhorschig
2015/10/08 09:35:46
Done.
|
| + const PolicyStringMap* map, |
|
stevenjb
2015/10/07 17:09:33
nit: maps or map_list
fhorschig
2015/10/08 09:35:46
It's a single map. And this map is basically just
stevenjb
2015/10/08 17:12:39
I see, I was confused by the struct name which mak
|
| + size_t count) { |
| + for (size_t i = 0; i < count; ++i) |
| + source->AddLocalizedString(map[i].key, map[i].string_id); |
| } |
| void AddCommonLocalizedStringsToSource(content::WebUIDataSource* source) { |
| + AddLocalizedPoilcyStrings(source, kPolicySources, |
| + static_cast<size_t>(policy::POLICY_SOURCE_COUNT)); |
| source->AddLocalizedString("title", IDS_POLICY_TITLE); |
| + source->AddLocalizedString("headerScope", IDS_POLICY_HEADER_SCOPE); |
| + source->AddLocalizedString("headerLevel", IDS_POLICY_HEADER_LEVEL); |
| + source->AddLocalizedString("headerName", IDS_POLICY_HEADER_NAME); |
| + source->AddLocalizedString("headerValue", IDS_POLICY_HEADER_VALUE); |
| + source->AddLocalizedString("headerStatus", IDS_POLICY_HEADER_STATUS); |
| + source->AddLocalizedString("headerSource", IDS_POLICY_HEADER_SOURCE); |
| + source->AddLocalizedString("scopeUser", IDS_POLICY_SCOPE_USER); |
| + source->AddLocalizedString("scopeDevice", IDS_POLICY_SCOPE_DEVICE); |
| + source->AddLocalizedString("levelRecommended", IDS_POLICY_LEVEL_RECOMMENDED); |
| + source->AddLocalizedString("levelMandatory", IDS_POLICY_LEVEL_MANDATORY); |
| + source->AddLocalizedString("ok", IDS_POLICY_OK); |
| + source->AddLocalizedString("unset", IDS_POLICY_UNSET); |
| + source->AddLocalizedString("unknown", IDS_POLICY_UNKNOWN); |
| + source->AddLocalizedString("notSpecified", IDS_POLICY_NOT_SPECIFIED); |
| + source->SetJsonPath("strings.js"); |
| +} |
| + |
| +content::WebUIDataSource* CreatePolicyUIHtmlSource() { |
| + content::WebUIDataSource* source = |
| + content::WebUIDataSource::Create(chrome::kChromeUIPolicyHost); |
| + AddCommonLocalizedStringsToSource(source); |
| source->AddLocalizedString("filterPlaceholder", |
| IDS_POLICY_FILTER_PLACEHOLDER); |
| source->AddLocalizedString("reloadPolicies", IDS_POLICY_RELOAD_POLICIES); |
| @@ -123,49 +160,29 @@ void AddCommonLocalizedStringsToSource(content::WebUIDataSource* source) { |
| source->AddLocalizedString("labelStatus", IDS_POLICY_LABEL_STATUS); |
| source->AddLocalizedString("showUnset", IDS_POLICY_SHOW_UNSET); |
| source->AddLocalizedString("noPoliciesSet", IDS_POLICY_NO_POLICIES_SET); |
| - source->AddLocalizedString("headerScope", IDS_POLICY_HEADER_SCOPE); |
| - source->AddLocalizedString("headerLevel", IDS_POLICY_HEADER_LEVEL); |
| - source->AddLocalizedString("headerName", IDS_POLICY_HEADER_NAME); |
| - source->AddLocalizedString("headerValue", IDS_POLICY_HEADER_VALUE); |
| - source->AddLocalizedString("headerStatus", IDS_POLICY_HEADER_STATUS); |
| - source->AddLocalizedString("headerSource", IDS_POLICY_HEADER_SOURCE); |
| source->AddLocalizedString("showExpandedValue", |
| IDS_POLICY_SHOW_EXPANDED_VALUE); |
| source->AddLocalizedString("hideExpandedValue", |
| IDS_POLICY_HIDE_EXPANDED_VALUE); |
| - source->AddLocalizedString("scopeUser", IDS_POLICY_SCOPE_USER); |
| - source->AddLocalizedString("scopeDevice", IDS_POLICY_SCOPE_DEVICE); |
| - source->AddLocalizedString("levelRecommended", IDS_POLICY_LEVEL_RECOMMENDED); |
| - source->AddLocalizedString("levelMandatory", IDS_POLICY_LEVEL_MANDATORY); |
| - source->AddLocalizedString("ok", IDS_POLICY_OK); |
| - source->AddLocalizedString("unset", IDS_POLICY_UNSET); |
| - source->AddLocalizedString("unknown", IDS_POLICY_UNKNOWN); |
| - source->AddLocalizedString("notSpecified", IDS_POLICY_NOT_SPECIFIED); |
| - AddLocalizedPoilcySourceStrings(source); |
| - |
| - source->SetJsonPath("strings.js"); |
| + // Add required resources. |
| + source->AddResourcePath("policy.css", IDR_POLICY_CSS); |
| + source->AddResourcePath("policy.js", IDR_POLICY_JS); |
| + source->AddResourcePath("uber_utils.js", IDR_UBER_UTILS_JS); |
| + source->SetDefaultResource(IDR_POLICY_HTML); |
| + return source; |
| } |
| content::WebUIDataSource* CreatePolicyMaterialDesignUIHtmlSource() { |
| content::WebUIDataSource* source = |
| content::WebUIDataSource::Create(chrome::kChromeUIMdPolicyHost); |
| AddCommonLocalizedStringsToSource(source); |
| + AddLocalizedPoilcyStrings(source, kPolicyRiskTags, |
| + static_cast<size_t>(policy::RISK_TAG_COUNT)); |
| + for (size_t i = 0; i < kPolicyResourcesSize; ++i) { |
| + source->AddResourcePath(kPolicyResources[i].name, |
| + kPolicyResources[i].value); |
| + } |
| source->SetDefaultResource(IDR_MD_POLICY_HTML); |
| - |
| - return source; |
| -} |
| - |
| - |
| -content::WebUIDataSource* CreatePolicyUIHtmlSource() { |
| - content::WebUIDataSource* source = |
| - content::WebUIDataSource::Create(chrome::kChromeUIPolicyHost); |
| - AddCommonLocalizedStringsToSource(source); |
| - // Add required resources. |
| - source->AddResourcePath("policy.css", IDR_POLICY_CSS); |
| - source->AddResourcePath("policy.js", IDR_POLICY_JS); |
| - source->AddResourcePath("uber_utils.js", IDR_UBER_UTILS_JS); |
| - source->SetDefaultResource(IDR_POLICY_HTML); |
| - |
| return source; |
| } |
| @@ -419,10 +436,14 @@ class PolicyUIHandler : public content::WebUIMessageHandler, |
| // policy::SchemaRegistry::Observer implementation. |
| void OnSchemaRegistryUpdated(bool has_new_schemas) override; |
| - private: |
| + protected: |
| + virtual void AddPolicyName(base::DictionaryValue* names, |
| + const std::string& name) const; |
| + |
| // Send a dictionary containing the names of all known policies to the UI. |
| - void SendPolicyNames() const; |
| + virtual void SendPolicyNames() const; |
| + private: |
| // Send information about the current policy values to the UI. For each policy |
| // whose value has been set, a dictionary containing the value and additional |
| // metadata is sent. |
| @@ -461,6 +482,22 @@ class PolicyUIHandler : public content::WebUIMessageHandler, |
| DISALLOW_COPY_AND_ASSIGN(PolicyUIHandler); |
| }; |
| +// The JavaScript message handler for the chrome://md-policy page. |
| +class PolicyMaterialDesignUIHandler : public PolicyUIHandler { |
| + public: |
| + PolicyMaterialDesignUIHandler(); |
| + ~PolicyMaterialDesignUIHandler() override; |
| + |
| + protected: |
| + // PolicyUIHandler: |
| + void AddPolicyName(base::DictionaryValue* names, |
| + const std::string& name) const override; |
|
stevenjb
2015/10/07 17:09:33
Mutable arguments should be declared last, e.g. Ad
fhorschig
2015/10/08 09:35:46
Done.
|
| + void SendPolicyNames() const override; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(PolicyMaterialDesignUIHandler); |
| +}; |
| + |
| CloudPolicyStatusProvider::CloudPolicyStatusProvider() { |
| } |
| @@ -689,6 +726,11 @@ void PolicyUIHandler::OnPolicyUpdated(const policy::PolicyNamespace& ns, |
| SendPolicyValues(); |
| } |
| +void PolicyUIHandler::AddPolicyName(base::DictionaryValue* names, |
| + const std::string& name) const { |
| + names->SetBoolean(name, true); |
| +} |
| + |
| void PolicyUIHandler::SendPolicyNames() const { |
| base::DictionaryValue names; |
| @@ -704,7 +746,7 @@ void PolicyUIHandler::SendPolicyNames() const { |
| const policy::Schema* chrome_schema = schema_map->GetSchema(chrome_ns); |
| for (policy::Schema::Iterator it = chrome_schema->GetPropertiesIterator(); |
| !it.IsAtEnd(); it.Advance()) { |
| - chrome_policy_names->SetBoolean(it.key(), true); |
| + AddPolicyName(chrome_policy_names, it.key()); |
| } |
| names.Set("chromePolicyNames", chrome_policy_names); |
| @@ -874,6 +916,31 @@ policy::PolicyService* PolicyUIHandler::GetPolicyService() const { |
| web_ui()->GetWebContents()->GetBrowserContext())->policy_service(); |
| } |
| +PolicyMaterialDesignUIHandler::PolicyMaterialDesignUIHandler() { |
| +} |
| + |
| +PolicyMaterialDesignUIHandler::~PolicyMaterialDesignUIHandler() { |
| +} |
| + |
| +void PolicyMaterialDesignUIHandler::AddPolicyName( |
| + base::DictionaryValue* names, const std::string& name) const { |
| + scoped_ptr<base::ListValue> list = make_scoped_ptr(new base::ListValue()); |
|
stevenjb
2015/10/07 17:09:33
scoped_ptr<base::ListValue> list(new base::ListVal
fhorschig
2015/10/08 09:35:46
Done.
|
| + const policy::RiskTag* tags = policy::GetChromePolicyDetails(name)->risk_tags; |
| + for (size_t i = 0; i < policy::kMaxRiskTagCount; ++i) |
| + if (tags[i] != policy::RISK_TAG_NONE) |
| + list->AppendString(kPolicyRiskTags[tags[i]].key); |
|
stevenjb
2015/10/07 17:09:33
{}
fhorschig
2015/10/08 09:35:46
Done.
|
| + names->Set(name, list.Pass()); |
| +} |
| + |
| +void PolicyMaterialDesignUIHandler::SendPolicyNames() const { |
| + base::ListValue tags; |
| + for (size_t tag = 0; tag < policy::RISK_TAG_COUNT; ++tag) |
| + tags.AppendString(kPolicyRiskTags[tag].key); |
| + |
| + web_ui()->CallJavascriptFunction("policy.Page.setPolicyGroups", tags); |
| + PolicyUIHandler::SendPolicyNames(); |
| +} |
| + |
| PolicyUI::PolicyUI(content::WebUI* web_ui) : WebUIController(web_ui) { |
| web_ui->AddMessageHandler(new PolicyUIHandler); |
| content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), |
| @@ -885,7 +952,7 @@ PolicyUI::~PolicyUI() { |
| PolicyMaterialDesignUI::PolicyMaterialDesignUI(content::WebUI* web_ui) : |
| WebUIController(web_ui) { |
| - web_ui->AddMessageHandler(new PolicyUIHandler); |
| + web_ui->AddMessageHandler(new PolicyMaterialDesignUIHandler); |
| content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), |
| CreatePolicyMaterialDesignUIHtmlSource()); |
| } |