chromium/ios/chrome/browser/share_extension/model/share_extension_service.h

// Copyright 2016 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_SHARE_EXTENSION_SERVICE_H_
#define IOS_CHROME_BROWSER_SHARE_EXTENSION_MODEL_SHARE_EXTENSION_SERVICE_H_

#import "base/memory/raw_ptr.h"
#include "components/bookmarks/browser/base_bookmark_model_observer.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/reading_list/core/reading_list_model_observer.h"

namespace bookmarks {
class BookmarkModel;
}

class ReadingListModel;
@class ShareExtensionItemReceiver;

// AuthenticationService is the Chrome interface to the iOS shared
// authentication library.
class ShareExtensionService : public KeyedService,
                              public bookmarks::BaseBookmarkModelObserver,
                              public ReadingListModelObserver {
 public:
  ShareExtensionService(bookmarks::BookmarkModel* bookmark_model,
                        ReadingListModel* reading_list_model);

  ShareExtensionService(const ShareExtensionService&) = delete;
  ShareExtensionService& operator=(const ShareExtensionService&) = delete;

  ~ShareExtensionService() override;

  void Initialize();

  // KeyedService implementation.
  void Shutdown() override;

  // ReadingListModelObserver implementation.
  void ReadingListModelLoaded(const ReadingListModel* model) override;

  // BookmarkModelObserver implementation.
  void BookmarkModelLoaded(bool ids_reassigned) override;
  void BookmarkModelChanged() override;

 private:
  // Invoked when any of the observed model has finished loading. Will
  // initialize the ShareExtensionItemReceiver if they are all loaded.
  void AnyModelLoaded();

  raw_ptr<ReadingListModel> reading_list_model_;
  bool reading_list_model_loaded_;
  raw_ptr<bookmarks::BookmarkModel> bookmark_model_;
  bool bookmark_model_loaded_;
  __strong ShareExtensionItemReceiver* receiver_;
};

#endif  // IOS_CHROME_BROWSER_SHARE_EXTENSION_MODEL_SHARE_EXTENSION_SERVICE_H_