Commit 7a1a53c1 authored by tnagel's avatar tnagel Committed by Commit bot

Integrate Chromad user policy into chrome://policy page

BUG=655971

Review-Url: https://codereview.chromium.org/2608573002
Cr-Commit-Position: refs/heads/master@{#441317}
parent 9b818f0b
......@@ -59,6 +59,7 @@
#include "chrome/browser/chromeos/policy/device_active_directory_policy_manager.h"
#include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h"
#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
#include "chrome/browser/chromeos/policy/user_active_directory_policy_manager.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
#include "chrome/browser/chromeos/policy/user_policy_manager_factory_chromeos.h"
#include "chrome/browser/chromeos/settings/install_attributes.h"
......@@ -250,16 +251,16 @@ class CloudPolicyCoreStatusProvider
};
// A cloud policy status provider for user policy.
class UserPolicyStatusProvider : public CloudPolicyCoreStatusProvider {
class UserCloudPolicyStatusProvider : public CloudPolicyCoreStatusProvider {
public:
explicit UserPolicyStatusProvider(policy::CloudPolicyCore* core);
~UserPolicyStatusProvider() override;
explicit UserCloudPolicyStatusProvider(policy::CloudPolicyCore* core);
~UserCloudPolicyStatusProvider() override;
// CloudPolicyCoreStatusProvider implementation.
void GetStatus(base::DictionaryValue* dict) override;
private:
DISALLOW_COPY_AND_ASSIGN(UserPolicyStatusProvider);
DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyStatusProvider);
};
#if defined(OS_CHROMEOS)
......@@ -308,14 +309,13 @@ class DeviceLocalAccountPolicyStatusProvider
DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyStatusProvider);
};
// Provides status for DeviceActiveDirectoryPolicyManager.
class DeviceActiveDirectoryPolicyStatusProvider
// Provides status for any kind of Active Directory policy (device or user).
class ActiveDirectoryPolicyStatusProvider
: public PolicyStatusProvider,
public policy::CloudPolicyStore::Observer {
public:
explicit DeviceActiveDirectoryPolicyStatusProvider(
policy::DeviceActiveDirectoryPolicyManager* manager);
~DeviceActiveDirectoryPolicyStatusProvider() override;
explicit ActiveDirectoryPolicyStatusProvider(policy::CloudPolicyStore* store);
~ActiveDirectoryPolicyStatusProvider() override;
// PolicyStatusProvider implementation.
void GetStatus(base::DictionaryValue* dict) override;
......@@ -327,7 +327,7 @@ class DeviceActiveDirectoryPolicyStatusProvider
private:
policy::CloudPolicyStore* store_;
DISALLOW_COPY_AND_ASSIGN(DeviceActiveDirectoryPolicyStatusProvider);
DISALLOW_COPY_AND_ASSIGN(ActiveDirectoryPolicyStatusProvider);
};
#endif
......@@ -369,14 +369,13 @@ void CloudPolicyCoreStatusProvider::OnStoreError(
NotifyStatusChange();
}
UserPolicyStatusProvider::UserPolicyStatusProvider(
policy::CloudPolicyCore* core) : CloudPolicyCoreStatusProvider(core) {
}
UserCloudPolicyStatusProvider::UserCloudPolicyStatusProvider(
policy::CloudPolicyCore* core)
: CloudPolicyCoreStatusProvider(core) {}
UserPolicyStatusProvider::~UserPolicyStatusProvider() {
}
UserCloudPolicyStatusProvider::~UserCloudPolicyStatusProvider() {}
void UserPolicyStatusProvider::GetStatus(base::DictionaryValue* dict) {
void UserCloudPolicyStatusProvider::GetStatus(base::DictionaryValue* dict) {
if (!core_->store()->is_managed())
return;
GetStatusFromCore(core_, dict);
......@@ -440,33 +439,31 @@ void DeviceLocalAccountPolicyStatusProvider::OnDeviceLocalAccountsChanged() {
NotifyStatusChange();
}
DeviceActiveDirectoryPolicyStatusProvider::
DeviceActiveDirectoryPolicyStatusProvider(
policy::DeviceActiveDirectoryPolicyManager* manager)
: store_(manager->store()) {
ActiveDirectoryPolicyStatusProvider::ActiveDirectoryPolicyStatusProvider(
policy::CloudPolicyStore* store)
: store_(store) {
store_->AddObserver(this);
}
DeviceActiveDirectoryPolicyStatusProvider::
~DeviceActiveDirectoryPolicyStatusProvider() {
ActiveDirectoryPolicyStatusProvider::~ActiveDirectoryPolicyStatusProvider() {
store_->RemoveObserver(this);
}
// TODO(tnagel): Provide more details and/or remove unused fields from UI. See
// https://crbug.com/664747.
void DeviceActiveDirectoryPolicyStatusProvider::GetStatus(
void ActiveDirectoryPolicyStatusProvider::GetStatus(
base::DictionaryValue* dict) {
base::string16 status =
policy::FormatStoreStatus(store_->status(), store_->validation_status());
dict->SetString("status", status);
}
void DeviceActiveDirectoryPolicyStatusProvider::OnStoreLoaded(
void ActiveDirectoryPolicyStatusProvider::OnStoreLoaded(
policy::CloudPolicyStore* store) {
NotifyStatusChange();
}
void DeviceActiveDirectoryPolicyStatusProvider::OnStoreError(
void ActiveDirectoryPolicyStatusProvider::OnStoreError(
policy::CloudPolicyStore* store) {
NotifyStatusChange();
}
......@@ -528,8 +525,8 @@ void PolicyUIHandler::RegisterMessages() {
if (connector->IsEnterpriseManaged()) {
if (connector->GetDeviceActiveDirectoryPolicyManager()) {
device_status_provider_ =
base::MakeUnique<DeviceActiveDirectoryPolicyStatusProvider>(
connector->GetDeviceActiveDirectoryPolicyManager());
base::MakeUnique<ActiveDirectoryPolicyStatusProvider>(
connector->GetDeviceActiveDirectoryPolicyManager()->store());
} else {
device_status_provider_ =
base::MakeUnique<DevicePolicyStatusProvider>(connector);
......@@ -538,31 +535,36 @@ void PolicyUIHandler::RegisterMessages() {
const user_manager::UserManager* user_manager =
user_manager::UserManager::Get();
if (user_manager->IsLoggedInAsPublicAccount()) {
policy::DeviceLocalAccountPolicyService* local_account_service =
connector->GetDeviceLocalAccountPolicyService();
if (local_account_service) {
user_status_provider_ =
base::MakeUnique<DeviceLocalAccountPolicyStatusProvider>(
user_manager->GetActiveUser()->GetAccountId().GetUserEmail(),
local_account_service);
}
} else {
policy::UserCloudPolicyManagerChromeOS* user_cloud_policy_manager =
policy::UserPolicyManagerFactoryChromeOS::
GetCloudPolicyManagerForProfile(Profile::FromWebUI(web_ui()));
if (user_cloud_policy_manager) {
user_status_provider_ =
base::MakeUnique<UserPolicyStatusProvider>(
user_cloud_policy_manager->core());
}
Profile* profile = Profile::FromWebUI(web_ui());
policy::DeviceLocalAccountPolicyService* local_account_service =
user_manager->IsLoggedInAsPublicAccount()
? connector->GetDeviceLocalAccountPolicyService()
: nullptr;
policy::UserCloudPolicyManagerChromeOS* user_cloud_policy =
policy::UserPolicyManagerFactoryChromeOS::GetCloudPolicyManagerForProfile(
profile);
policy::UserActiveDirectoryPolicyManager* active_directory_policy =
policy::UserPolicyManagerFactoryChromeOS::
GetActiveDirectoryPolicyManagerForProfile(profile);
if (local_account_service) {
user_status_provider_ =
base::MakeUnique<DeviceLocalAccountPolicyStatusProvider>(
user_manager->GetActiveUser()->GetAccountId().GetUserEmail(),
local_account_service);
} else if (user_cloud_policy) {
user_status_provider_ = base::MakeUnique<UserCloudPolicyStatusProvider>(
user_cloud_policy->core());
} else if (active_directory_policy) {
user_status_provider_ =
base::MakeUnique<ActiveDirectoryPolicyStatusProvider>(
active_directory_policy->store());
}
#else
policy::UserCloudPolicyManager* user_cloud_policy_manager =
policy::UserCloudPolicyManagerFactory::GetForBrowserContext(
web_ui()->GetWebContents()->GetBrowserContext());
if (user_cloud_policy_manager) {
user_status_provider_ = base::MakeUnique<UserPolicyStatusProvider>(
user_status_provider_ = base::MakeUnique<UserCloudPolicyStatusProvider>(
user_cloud_policy_manager->core());
}
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment