| Index: chrome/browser/chromeos/policy/device_cloud_policy_invalidator.cc
|
| diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.cc b/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.cc
|
| index 229908d1235b941c640b6fbd9ad1854124b2bb80..4fca55aba5e6887bded699259b374ea420b325ae 100644
|
| --- a/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.cc
|
| +++ b/chrome/browser/chromeos/policy/device_cloud_policy_invalidator.cc
|
| @@ -17,6 +17,7 @@
|
| #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
|
| #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
|
| #include "chrome/browser/chromeos/policy/ticl_device_settings_provider.h"
|
| +#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| #include "chrome/browser/chromeos/settings/device_identity_provider.h"
|
| #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h"
|
| #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
|
| @@ -31,6 +32,8 @@
|
| #include "components/invalidation/profile_invalidation_provider.h"
|
| #include "components/invalidation/ticl_invalidation_service.h"
|
| #include "components/invalidation/ticl_settings_provider.h"
|
| +#include "components/policy/core/common/cloud/cloud_policy_constants.h"
|
| +#include "components/user_manager/user.h"
|
| #include "content/public/browser/notification_details.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "google_apis/gaia/identity_provider.h"
|
| @@ -141,15 +144,23 @@ void DeviceCloudPolicyInvalidator::Observe(
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) {
|
| DCHECK_EQ(chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, type);
|
| + Profile* profile = content::Details<Profile>(details).ptr();
|
| invalidation::ProfileInvalidationProvider* invalidation_provider =
|
| - invalidation::ProfileInvalidationProviderFactory::GetForProfile(
|
| - content::Details<Profile>(details).ptr());
|
| + invalidation::ProfileInvalidationProviderFactory::GetForProfile(profile);
|
| if (!invalidation_provider) {
|
| // If the Profile does not support invalidation (e.g. guest, incognito),
|
| // ignore it.
|
| return;
|
| }
|
| -
|
| + user_manager::User* user =
|
| + chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
|
| + if (!user ||
|
| + g_browser_process->platform_part()->browser_policy_connector_chromeos()->
|
| + GetUserAffiliation(user->email()) != USER_AFFILIATION_MANAGED) {
|
| + // If the Profile belongs to a user who is not affiliated with the domain
|
| + // the device is enrolled into, ignore it.
|
| + return;
|
| + }
|
| // Create a state observer for the user's invalidation service.
|
| profile_invalidation_service_observers_.push_back(
|
| new InvalidationServiceObserver(
|
| @@ -209,9 +220,9 @@ void DeviceCloudPolicyInvalidator::TryToCreateInvalidator() {
|
| profile_invalidation_service_observers_.begin();
|
| it != profile_invalidation_service_observers_.end(); ++it) {
|
| if ((*it)->IsServiceConnected()) {
|
| - // If a connected invalidation service belonging to a logged-in user is
|
| - // found, create a |CloudPolicyInvalidator| backed by that service and
|
| - // destroy the device-global service, if any.
|
| + // If a connected invalidation service belonging to an affiliated
|
| + // logged-in user is found, create a |CloudPolicyInvalidator| backed by
|
| + // that service and destroy the device-global service, if any.
|
| DestroyDeviceInvalidationService();
|
| CreateInvalidator((*it)->GetInvalidationService());
|
| return;
|
|
|