1// Copyright (c) 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_UI_WEBUI_NTP_ANDROID_MANAGED_BOOKMARKS_SHIM_H_
6#define CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_MANAGED_BOOKMARKS_SHIM_H_
7
8#include "base/basictypes.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/observer_list.h"
11#include "base/prefs/pref_change_registrar.h"
12
13class BookmarkNode;
14class PrefService;
15
16// A shim that lives on top of a BookmarkModel that allows the injection of
17// policy managed bookmarks without submitting changes to the user configured
18// bookmark model.
19// Policy managed bookmarks live on a subfolder of the Mobile bookmarks called
20// "Managed bookmarks" that isn't editable by the user.
21class ManagedBookmarksShim {
22 public:
23  class Observer {
24   public:
25    virtual ~Observer() {}
26    virtual void OnManagedBookmarksChanged() = 0;
27  };
28
29  // Will read managed bookmarks from the given PrefService. The preference
30  // that contains the bookmarks is managed by policy, and is updated when the
31  // policy changes.
32  explicit ManagedBookmarksShim(PrefService* prefs);
33  ~ManagedBookmarksShim();
34
35  void AddObserver(Observer* observer);
36  void RemoveObserver(Observer* observer);
37
38  // Returns true if there exists at least one managed bookmark.
39  bool HasManagedBookmarks() const;
40  bool IsManagedBookmark(const BookmarkNode* node) const;
41  const BookmarkNode* GetManagedBookmarksRoot() const;
42  const BookmarkNode* GetNodeByID(int64 id) const;
43  const BookmarkNode* GetParentOf(const BookmarkNode* node) const;
44
45 private:
46  void Reload();
47
48  PrefService* prefs_;
49  PrefChangeRegistrar registrar_;
50  scoped_ptr<BookmarkNode> root_;
51  ObserverList<Observer> observers_;
52
53  DISALLOW_COPY_AND_ASSIGN(ManagedBookmarksShim);
54};
55
56#endif  // CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_MANAGED_BOOKMARKS_SHIM_H_
57