1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/policy/cloud/user_cloud_policy_invalidator.h" 6 7#include "base/bind.h" 8#include "base/memory/scoped_ptr.h" 9#include "base/message_loop/message_loop_proxy.h" 10#include "base/time/default_clock.h" 11#include "chrome/browser/chrome_notification_types.h" 12#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" 13#include "components/invalidation/profile_invalidation_provider.h" 14#include "components/policy/core/common/cloud/cloud_policy_manager.h" 15#include "content/public/browser/notification_source.h" 16 17namespace policy { 18 19UserCloudPolicyInvalidator::UserCloudPolicyInvalidator( 20 Profile* profile, 21 CloudPolicyManager* policy_manager) 22 : CloudPolicyInvalidator(GetPolicyType(), 23 policy_manager->core(), 24 base::MessageLoopProxy::current(), 25 scoped_ptr<base::Clock>(new base::DefaultClock()), 26 0 /* highest_handled_invalidation_version */), 27 profile_(profile) { 28 DCHECK(profile); 29 30 // Register for notification that profile creation is complete. The 31 // invalidator must not be initialized before then because the invalidation 32 // service cannot be started because it depends on components initialized 33 // after this object is instantiated. 34 // TODO(stepco): Delayed initialization can be removed once the request 35 // context can be accessed during profile-keyed service creation. Tracked by 36 // bug 286209. 37 registrar_.Add(this, 38 chrome::NOTIFICATION_PROFILE_ADDED, 39 content::Source<Profile>(profile)); 40} 41 42// static 43enterprise_management::DeviceRegisterRequest::Type 44UserCloudPolicyInvalidator::GetPolicyType() { 45#if defined(OS_CHROMEOS) 46 return enterprise_management::DeviceRegisterRequest::USER; 47#elif defined(OS_ANDROID) 48 return enterprise_management::DeviceRegisterRequest::ANDROID_BROWSER; 49#elif defined(OS_IOS) 50 return enterprise_management::DeviceRegisterRequest::IOS_BROWSER; 51#else 52 return enterprise_management::DeviceRegisterRequest::BROWSER; 53#endif 54} 55 56void UserCloudPolicyInvalidator::Shutdown() { 57 CloudPolicyInvalidator::Shutdown(); 58} 59 60void UserCloudPolicyInvalidator::Observe( 61 int type, 62 const content::NotificationSource& source, 63 const content::NotificationDetails& details) { 64 // Initialize now that profile creation is complete and the invalidation 65 // service can safely be initialized. 66 DCHECK(type == chrome::NOTIFICATION_PROFILE_ADDED); 67 invalidation::ProfileInvalidationProvider* invalidation_provider = 68 invalidation::ProfileInvalidationProviderFactory::GetForProfile(profile_); 69 if (invalidation_provider) 70 Initialize(invalidation_provider->GetInvalidationService()); 71} 72 73} // namespace policy 74