1// Copyright 2014 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 COMPONENTS_POLICY_CORE_COMMON_POLICY_LOADER_IOS_H_
6#define COMPONENTS_POLICY_CORE_COMMON_POLICY_LOADER_IOS_H_
7
8#include "base/basictypes.h"
9#include "base/mac/scoped_nsobject.h"
10#include "base/memory/weak_ptr.h"
11#include "base/time/time.h"
12#include "components/policy/core/common/async_policy_loader.h"
13#include "components/policy/policy_export.h"
14
15namespace policy {
16
17// A policy loader that loads policy from the managed app configuration
18// introduced in iOS 7.
19class POLICY_EXPORT PolicyLoaderIOS : public AsyncPolicyLoader {
20 public:
21  explicit PolicyLoaderIOS(
22      scoped_refptr<base::SequencedTaskRunner> task_runner);
23  virtual ~PolicyLoaderIOS();
24
25  // AsyncPolicyLoader implementation.
26  virtual void InitOnBackgroundThread() OVERRIDE;
27  virtual scoped_ptr<PolicyBundle> Load() OVERRIDE;
28  virtual base::Time LastModificationTime() OVERRIDE;
29
30 private:
31  void UserDefaultsChanged();
32
33  // Loads the Chrome policies in |dictionary| into the given |bundle|.
34  static void LoadNSDictionaryToPolicyBundle(NSDictionary* dictionary,
35                                             PolicyBundle* bundle);
36
37  // Used to manage the registration for NSNotificationCenter notifications.
38  base::scoped_nsobject<id> notification_observer_;
39
40  // Timestamp of the last notification.
41  // Used to coalesce repeated notifications into a single Load() call.
42  base::Time last_notification_time_;
43
44  // Used to Bind() a WeakPtr to |this| for the callback passed to the
45  // |notification_observer_|.
46  base::WeakPtrFactory<PolicyLoaderIOS> weak_factory_;
47
48  DISALLOW_COPY_AND_ASSIGN(PolicyLoaderIOS);
49};
50
51}  // namespace policy
52
53#endif  // COMPONENTS_POLICY_CORE_COMMON_POLICY_LOADER_IOS_H_
54