#ifndef IOS_WEB_JS_MESSAGING_WEB_FRAMES_MANAGER_IMPL_H_
#define IOS_WEB_JS_MESSAGING_WEB_FRAMES_MANAGER_IMPL_H_
#import <map>
#import "base/memory/raw_ptr.h"
#import "base/memory/weak_ptr.h"
#import "base/observer_list.h"
#import "ios/web/public/js_messaging/web_frames_manager.h"
namespace web {
class WebFrame;
class WebFramesManagerImpl : public WebFramesManager {
public:
explicit WebFramesManagerImpl();
~WebFramesManagerImpl() override;
WebFramesManagerImpl(const WebFramesManagerImpl&) = delete;
WebFramesManagerImpl& operator=(const WebFramesManagerImpl&) = delete;
bool AddFrame(std::unique_ptr<WebFrame> frame);
void RemoveFrameWithId(const std::string& frame_id);
void RemoveAllWebFrames();
void AddObserver(Observer* observer) override;
void RemoveObserver(Observer* observer) override;
std::set<WebFrame*> GetAllWebFrames() override;
WebFrame* GetMainWebFrame() override;
WebFrame* GetFrameWithId(const std::string& frame_id) override;
private:
std::map<std::string, std::unique_ptr<WebFrame>> web_frames_;
raw_ptr<WebFrame> main_web_frame_ = nullptr;
base::ObserverList<Observer, false> observers_;
base::WeakPtrFactory<WebFramesManagerImpl> weak_factory_;
};
}
#endif