#ifndef COMPONENTS_BOOKMARKS_MANAGED_MANAGED_BOOKMARK_SERVICE_H_
#define COMPONENTS_BOOKMARKS_MANAGED_MANAGED_BOOKMARK_SERVICE_H_
#include <memory>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "components/bookmarks/browser/base_bookmark_model_observer.h"
#include "components/bookmarks/browser/bookmark_client.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "components/keyed_service/core/keyed_service.h"
class PrefService;
namespace bookmarks {
class BookmarkModel;
class ManagedBookmarksTracker;
class ManagedBookmarkService : public KeyedService,
public BaseBookmarkModelObserver {
public:
using GetManagementDomainCallback = base::RepeatingCallback<std::string()>;
ManagedBookmarkService(PrefService* prefs,
GetManagementDomainCallback callback);
ManagedBookmarkService(const ManagedBookmarkService&) = delete;
ManagedBookmarkService& operator=(const ManagedBookmarkService&) = delete;
~ManagedBookmarkService() override;
void BookmarkModelCreated(BookmarkModel* bookmark_model);
LoadManagedNodeCallback GetLoadManagedNodeCallback();
bool CanSetPermanentNodeTitle(const BookmarkNode* node);
bool IsNodeManaged(const BookmarkNode* node);
const BookmarkNode* managed_node() const { return managed_node_; }
private:
void Shutdown() override;
void BookmarkModelChanged() override;
void BookmarkModelLoaded(bool ids_reassigned) override;
void BookmarkModelBeingDeleted() override;
void Cleanup();
raw_ptr<PrefService> prefs_;
raw_ptr<BookmarkModel> bookmark_model_;
base::ScopedObservation<BookmarkModel, BaseBookmarkModelObserver>
bookmark_model_observation_{this};
std::unique_ptr<ManagedBookmarksTracker> managed_bookmarks_tracker_;
GetManagementDomainCallback managed_domain_callback_;
raw_ptr<BookmarkPermanentNode> managed_node_;
};
}
#endif