Add Managed by field to chrome://policy

Add a "Managed by" field to the "Device policies" and "User policies"
boxes in chrome://policy. Populate the "Device policies" one with
BrowserPolicyConnectorChromeOS::GetEnterpriseDomainManager and the "User
policies" one with ManagementUIHandler::GetAccountManager.

Bug: b:172679657, b:172683878
Test: Manual
Change-Id: I14d0da72cd3230b2d38229e47258b51991b1ff9e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2673424
Commit-Queue: Jana Grill <[email protected]>
Reviewed-by: Mike Dougherty <[email protected]>
Reviewed-by: Denis Kuznetsov [CET] <[email protected]>
Reviewed-by: Brian Malcolm <[email protected]>
Reviewed-by: Pavol Marko <[email protected]>
Cr-Commit-Position: refs/heads/master@{#851668}
diff --git a/chrome/browser/ui/webui/policy/policy_ui.cc b/chrome/browser/ui/webui/policy/policy_ui.cc
index 0ba5b819..16336b60 100644
--- a/chrome/browser/ui/webui/policy/policy_ui.cc
+++ b/chrome/browser/ui/webui/policy/policy_ui.cc
@@ -52,6 +52,7 @@
     {"labelStatus", IDS_POLICY_LABEL_STATUS},
     {"labelTimeSinceLastRefresh", IDS_POLICY_LABEL_TIME_SINCE_LAST_REFRESH},
     {"labelUsername", IDS_POLICY_LABEL_USERNAME},
+    {"labelManagedBy", IDS_POLICY_LABEL_MANAGED_BY},
     {"labelVersion", IDS_POLICY_LABEL_VERSION},
     {"noPoliciesSet", IDS_POLICY_NO_POLICIES_SET},
     {"offHoursActive", IDS_POLICY_OFFHOURS_ACTIVE},
diff --git a/chrome/browser/ui/webui/policy/policy_ui_handler.cc b/chrome/browser/ui/webui/policy/policy_ui_handler.cc
index 6f6b1219..df1a0d2 100644
--- a/chrome/browser/ui/webui/policy/policy_ui_handler.cc
+++ b/chrome/browser/ui/webui/policy/policy_ui_handler.cc
@@ -36,6 +36,7 @@
 #include "chrome/browser/policy/schema_registry_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/chrome_select_file_policy.h"
+#include "chrome/browser/ui/webui/management/management_ui_handler.h"
 #include "chrome/browser/ui/webui/version/version_ui.h"
 #include "chrome/browser/ui/webui/webui_util.h"
 #include "chrome/common/channel_info.h"
@@ -241,6 +242,15 @@
                      off_hours_controller->is_off_hours_mode());
   }
 }
+
+void GetUserManager(base::DictionaryValue* dict, Profile* profile) {
+  DCHECK(profile);
+
+  std::string account_manager = ManagementUIHandler::GetAccountManager(profile);
+  if (!account_manager.empty()) {
+    dict->SetString("enterpriseDomainManager", account_manager);
+  }
+}
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 void ExtractDomainFromUsername(base::DictionaryValue* dict) {
@@ -365,6 +375,7 @@
 
  private:
   std::string enterprise_enrollment_domain_;
+  std::string enterprise_domain_manager_;
 
   DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyStatusProviderChromeOS);
 };
@@ -428,7 +439,8 @@
  public:
   DeviceActiveDirectoryPolicyStatusProvider(
       policy::ActiveDirectoryPolicyManager* policy_manager,
-      const std::string& enterprise_realm);
+      const std::string& enterprise_realm,
+      const std::string& enterprise_domain_manager);
 
   ~DeviceActiveDirectoryPolicyStatusProvider() override = default;
 
@@ -437,6 +449,7 @@
 
  private:
   std::string enterprise_realm_;
+  std::string enterprise_domain_manager_;
 
   DISALLOW_COPY_AND_ASSIGN(DeviceActiveDirectoryPolicyStatusProvider);
 };
@@ -529,6 +542,7 @@
     return;
   UserCloudPolicyStatusProvider::GetStatus(dict);
   GetUserAffiliationStatus(dict, profile_);
+  GetUserManager(dict, profile_);
 }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
@@ -611,6 +625,7 @@
     : CloudPolicyCoreStatusProvider(
           connector->GetDeviceCloudPolicyManager()->core()) {
   enterprise_enrollment_domain_ = connector->GetEnterpriseEnrollmentDomain();
+  enterprise_domain_manager_ = connector->GetEnterpriseDomainManager();
 }
 
 DeviceCloudPolicyStatusProviderChromeOS::
@@ -620,6 +635,7 @@
     base::DictionaryValue* dict) {
   GetStatusFromCore(core_, dict);
   dict->SetString("enterpriseEnrollmentDomain", enterprise_enrollment_domain_);
+  dict->SetString("enterpriseDomainManager", enterprise_domain_manager_);
   GetOffHoursStatus(dict);
 }
 
@@ -703,6 +719,7 @@
   dict->SetString("timeSinceLastRefresh",
                   GetTimeSinceLastRefreshString(last_refresh_time));
   GetUserAffiliationStatus(dict, profile_);
+  GetUserManager(dict, profile_);
 }
 
 void UserActiveDirectoryPolicyStatusProvider::OnStoreLoaded(
@@ -718,14 +735,17 @@
 DeviceActiveDirectoryPolicyStatusProvider::
     DeviceActiveDirectoryPolicyStatusProvider(
         policy::ActiveDirectoryPolicyManager* policy_manager,
-        const std::string& enterprise_realm)
+        const std::string& enterprise_realm,
+        const std::string& enterprise_domain_manager)
     : UserActiveDirectoryPolicyStatusProvider(policy_manager, nullptr),
-      enterprise_realm_(enterprise_realm) {}
+      enterprise_realm_(enterprise_realm),
+      enterprise_domain_manager_(enterprise_domain_manager) {}
 
 void DeviceActiveDirectoryPolicyStatusProvider::GetStatus(
     base::DictionaryValue* dict) {
   UserActiveDirectoryPolicyStatusProvider::GetStatus(dict);
   dict->SetString("enterpriseEnrollmentDomain", enterprise_realm_);
+  dict->SetString("enterpriseDomainManager", enterprise_domain_manager_);
 }
 
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
@@ -848,7 +868,7 @@
       device_status_provider_ =
           std::make_unique<DeviceActiveDirectoryPolicyStatusProvider>(
               connector->GetDeviceActiveDirectoryPolicyManager(),
-              connector->GetRealm());
+              connector->GetRealm(), connector->GetEnterpriseDomainManager());
     } else {
       device_status_provider_ =
           std::make_unique<DeviceCloudPolicyStatusProviderChromeOS>(connector);