#ifndef EXTENSIONS_BROWSER_EMBEDDER_USER_SCRIPT_LOADER_H_
#define EXTENSIONS_BROWSER_EMBEDDER_USER_SCRIPT_LOADER_H_
#include <stddef.h>
#include <memory>
#include <vector>
#include "base/functional/callback.h"
#include "extensions/browser/url_fetcher.h"
#include "extensions/browser/user_script_loader.h"
#include "extensions/common/mojom/host_id.mojom.h"
namespace content {
class BrowserContext;
}
class EmbedderUserScriptLoader : public extensions::UserScriptLoader {
public:
EmbedderUserScriptLoader(content::BrowserContext* browser_context,
const extensions::mojom::HostID& host_id);
EmbedderUserScriptLoader(const EmbedderUserScriptLoader&) = delete;
EmbedderUserScriptLoader& operator=(const EmbedderUserScriptLoader&) = delete;
~EmbedderUserScriptLoader() override;
private:
struct UserScriptRenderInfo;
using UserScriptRenderInfoMap = std::map<std::string, UserScriptRenderInfo>;
void AddScripts(extensions::UserScriptList scripts,
int render_process_id,
int render_frame_id,
ScriptsLoadedCallback callback) override;
void LoadScripts(extensions::UserScriptList user_scripts,
const std::set<std::string>& added_script_ids,
LoadScriptsCallback callback) override;
void OnSingleEmbedderURLFetchComplete(
extensions::UserScript::Content* script_file,
bool success,
std::unique_ptr<std::string> data);
void OnEmbedderURLFetchComplete();
void CreateEmbedderURLFetchers(
const extensions::UserScript::ContentList& contents,
int render_process_id,
int render_frame_id);
UserScriptRenderInfoMap script_render_info_map_;
size_t complete_fetchers_;
extensions::UserScriptList user_scripts_cache_;
LoadScriptsCallback scripts_loaded_callback_;
std::vector<std::unique_ptr<extensions::URLFetcher>> fetchers_;
base::WeakPtrFactory<EmbedderUserScriptLoader> weak_ptr_factory_{this};
};
#endif