1 // Copyright (c) 2012 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.
5 #include "components/policy/core/common/policy_service.h"
7 #include "base/values.h"
11 PolicyChangeRegistrar::PolicyChangeRegistrar(PolicyService
* policy_service
,
12 const PolicyNamespace
& ns
)
13 : policy_service_(policy_service
),
16 PolicyChangeRegistrar::~PolicyChangeRegistrar() {
17 if (!callback_map_
.empty())
18 policy_service_
->RemoveObserver(ns_
.domain
, this);
21 void PolicyChangeRegistrar::Observe(const std::string
& policy_name
,
22 const UpdateCallback
& callback
) {
23 if (callback_map_
.empty())
24 policy_service_
->AddObserver(ns_
.domain
, this);
25 callback_map_
[policy_name
] = callback
;
28 void PolicyChangeRegistrar::OnPolicyUpdated(const PolicyNamespace
& ns
,
29 const PolicyMap
& previous
,
30 const PolicyMap
& current
) {
33 for (CallbackMap::iterator it
= callback_map_
.begin();
34 it
!= callback_map_
.end(); ++it
) {
35 const base::Value
* prev
= previous
.GetValue(it
->first
);
36 const base::Value
* cur
= current
.GetValue(it
->first
);
37 if (!base::Value::Equals(prev
, cur
))
38 it
->second
.Run(prev
, cur
);