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#ifndef CHROME_BROWSER_POLICY_CLOUD_USER_CLOUD_POLICY_INVALIDATOR_H_
6#define CHROME_BROWSER_POLICY_CLOUD_USER_CLOUD_POLICY_INVALIDATOR_H_
7
8#include "chrome/browser/policy/cloud/cloud_policy_invalidator.h"
9#include "components/keyed_service/core/keyed_service.h"
10#include "content/public/browser/notification_observer.h"
11#include "content/public/browser/notification_registrar.h"
12#include "policy/proto/device_management_backend.pb.h"
13
14class Profile;
15
16namespace policy {
17
18class CloudPolicyManager;
19
20// Provides invalidations to user policy. Implemented as a
21// KeyedService to allow profile-based lifetime management.
22class UserCloudPolicyInvalidator : public CloudPolicyInvalidator,
23                                   public KeyedService,
24                                   public content::NotificationObserver {
25 public:
26  // |profile| is profile associated with the invalidator. It is used to get
27  // a reference to the profile's invalidation service. Both the profile and
28  // invalidation service must remain valid until Shutdown is called.
29  // |policy_manager| is the policy manager for the user policy and must remain
30  // valid until Shutdown is called.
31  UserCloudPolicyInvalidator(
32      Profile* profile,
33      CloudPolicyManager* policy_manager);
34
35  static enterprise_management::DeviceRegisterRequest::Type GetPolicyType();
36
37  // KeyedService:
38  virtual void Shutdown() OVERRIDE;
39
40  // content::NotificationObserver implementation:
41  virtual void Observe(int type,
42                       const content::NotificationSource& source,
43                       const content::NotificationDetails& details) OVERRIDE;
44
45 private:
46  // The profile associated with the invalidator.
47  Profile* profile_;
48
49  // Used to register for notification that profile creation is complete.
50  content::NotificationRegistrar registrar_;
51
52  DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyInvalidator);
53};
54
55}  // namespace policy
56
57#endif  // CHROME_BROWSER_POLICY_CLOUD_USER_CLOUD_POLICY_INVALIDATOR_H_
58