#ifndef EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
#define EXTENSIONS_BROWSER_API_EXECUTE_CODE_FUNCTION_H_
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "extensions/browser/extension_function.h"
#include "extensions/browser/script_executor.h"
#include "extensions/common/api/extension_types.h"
#include "extensions/common/mojom/host_id.mojom.h"
namespace extensions {
class ExecuteCodeFunction : public ExtensionFunction {
public:
ExecuteCodeFunction();
ExecuteCodeFunction(const ExecuteCodeFunction&) = delete;
ExecuteCodeFunction& operator=(const ExecuteCodeFunction&) = delete;
protected:
~ExecuteCodeFunction() override;
ResponseAction Run() override;
enum InitResult {
VALIDATION_FAILURE,
FAILURE,
SUCCESS
};
virtual InitResult Init() = 0;
virtual bool ShouldInsertCSS() const = 0;
virtual bool ShouldRemoveCSS() const = 0;
virtual bool CanExecuteScriptOnPage(std::string* error) = 0;
virtual ScriptExecutor* GetScriptExecutor(std::string* error) = 0;
virtual bool IsWebView() const = 0;
virtual int GetRootFrameId() const = 0;
virtual const GURL& GetWebViewSrc() const = 0;
virtual bool LoadFile(const std::string& file, std::string* error);
void DidLoadAndLocalizeFile(const std::string& file,
std::vector<std::unique_ptr<std::string>> data,
std::optional<std::string> load_error);
const mojom::HostID& host_id() const { return host_id_; }
void set_host_id(const mojom::HostID& host_id) { host_id_ = host_id; }
InitResult set_init_result(InitResult init_result) {
init_result_ = init_result;
return init_result_.value();
}
InitResult set_init_result_error(const std::string& error) {
init_error_ = error;
return set_init_result(FAILURE);
}
std::optional<api::extension_types::InjectDetails> details_;
std::optional<InitResult> init_result_;
std::optional<std::string> init_error_;
private:
void OnExecuteCodeFinished(std::vector<ScriptExecutor::FrameResult> results);
bool Execute(const std::string& code_string, std::string* error);
GURL script_url_;
mojom::HostID host_id_;
int root_frame_id_ = -1;
};
}
#endif