blob: 3c083e0618eb0120562d03e14065151f7caec231 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_SHARE_EXTENSION_MODEL_BOOKMARK_ADDER_H_
#define IOS_CHROME_BROWSER_SHARE_EXTENSION_MODEL_BOOKMARK_ADDER_H_
#import "base/functional/callback.h"
#import "base/scoped_observation.h"
#import "components/bookmarks/browser/base_bookmark_model_observer.h"
#import "ios/chrome/browser/shared/model/profile/profile_manager_ios.h"
#import "ios/chrome/browser/shared/model/profile/profile_manager_observer_ios.h"
#import "ios/chrome/browser/shared/model/profile/scoped_profile_keep_alive_ios.h"
#import "url/gurl.h"
namespace bookmarks {
class BookmarkModel;
}
class ProfileManagerIOS;
class ScopedProfileKeepAliveIOS;
// A class to load a given profile and bookmark a URL for that given profile. It
// acts as an observer for both the profile (loaded/destroyed etc) and
// bookmarks.
class BookmarkAdder : public ProfileManagerObserverIOS,
public bookmarks::BaseBookmarkModelObserver {
public:
BookmarkAdder(const GURL& url_to_add, std::string title_to_add);
BookmarkAdder(const BookmarkAdder&) = delete;
BookmarkAdder& operator=(const BookmarkAdder&) = delete;
~BookmarkAdder() override;
// ProfileManagerObserverIOS:
void OnProfileManagerWillBeDestroyed(ProfileManagerIOS* manager) override;
void OnProfileManagerDestroyed(ProfileManagerIOS* manager) override;
void OnProfileCreated(ProfileManagerIOS* manager,
ProfileIOS* profile) override;
void OnProfileLoaded(ProfileManagerIOS* manager,
ProfileIOS* profile) override;
void OnProfileUnloaded(ProfileManagerIOS* manager,
ProfileIOS* profile) override;
void OnProfileMarkedForPermanentDeletion(ProfileManagerIOS* manager,
ProfileIOS* profile) override;
// BookmarkModelObserver
void BookmarkModelLoaded(bool ids_reassigned) override;
void BookmarkModelChanged() override;
void OnProfileLoaded(ScopedProfileKeepAliveIOS keep_alive,
base::OnceClosure completion);
private:
const std::string title_to_add_;
const GURL url_to_add_;
base::OnceClosure completion_;
ScopedProfileKeepAliveIOS keep_alive_;
base::ScopedObservation<ProfileManagerIOS, ProfileManagerObserverIOS>
profile_manager_observation_{this};
base::ScopedObservation<bookmarks::BookmarkModel,
bookmarks::BookmarkModelObserver>
bookmark_model_observation_{this};
void AddUrlToModel(bookmarks::BookmarkModel* model);
};
#endif // IOS_CHROME_BROWSER_SHARE_EXTENSION_MODEL_BOOKMARK_ADDER_H_