Home | History | Annotate | Download | only in browser
      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_BROWSER_MANAGED_BOOKMARKS_TRACKER_H_
      6 #define COMPONENTS_POLICY_CORE_BROWSER_MANAGED_BOOKMARKS_TRACKER_H_
      7 
      8 #include "base/callback_forward.h"
      9 #include "base/macros.h"
     10 #include "base/prefs/pref_change_registrar.h"
     11 #include "base/strings/string16.h"
     12 #include "components/policy/policy_export.h"
     13 
     14 class BookmarkModel;
     15 class BookmarkNode;
     16 class BookmarkPermanentNode;
     17 class GURL;
     18 class PrefService;
     19 
     20 namespace base {
     21 class ListValue;
     22 }
     23 
     24 namespace policy {
     25 
     26 // Tracks the Managed Bookmarks policy value and makes the managed_node() in
     27 // the BookmarkModel follow the policy-defined bookmark tree.
     28 class POLICY_EXPORT ManagedBookmarksTracker {
     29  public:
     30   typedef base::Callback<std::string()> GetManagementDomainCallback;
     31 
     32   // Shared constants used in the policy configuration.
     33   static const char kName[];
     34   static const char kUrl[];
     35   static const char kChildren[];
     36 
     37   ManagedBookmarksTracker(BookmarkModel* model,
     38                           PrefService* prefs,
     39                           const GetManagementDomainCallback& callback);
     40   ~ManagedBookmarksTracker();
     41 
     42   // Returns the initial list of managed bookmarks, which can be passed to
     43   // LoadInitial() to do the initial load.
     44   scoped_ptr<base::ListValue> GetInitialManagedBookmarks();
     45 
     46   // Loads the initial managed bookmarks in |list| into |folder|. New nodes
     47   // will be assigned IDs starting at |next_node_id|.
     48   // Returns the next node ID to use.
     49   static int64 LoadInitial(BookmarkNode* folder,
     50                            const base::ListValue* list,
     51                            int64 next_node_id);
     52 
     53   // Starts tracking the policy for updates to the managed bookmarks. Should
     54   // be called after loading the initial bookmarks.
     55   void Init(BookmarkPermanentNode* managed_node);
     56 
     57  private:
     58   void ReloadManagedBookmarks();
     59   void UpdateBookmarks(const BookmarkNode* folder, const base::ListValue* list);
     60   static bool LoadBookmark(const base::ListValue* list,
     61                            size_t index,
     62                            base::string16* title,
     63                            GURL* url,
     64                            const base::ListValue** children);
     65 
     66   BookmarkModel* model_;
     67   BookmarkPermanentNode* managed_node_;
     68   PrefService* prefs_;
     69   PrefChangeRegistrar registrar_;
     70   GetManagementDomainCallback get_management_domain_callback_;
     71 
     72   DISALLOW_COPY_AND_ASSIGN(ManagedBookmarksTracker);
     73 };
     74 
     75 }  // namespace policy
     76 
     77 #endif  // COMPONENTS_POLICY_CORE_BROWSER_MANAGED_BOOKMARKS_TRACKER_H_
     78