#ifndef EXTENSIONS_RENDERER_SCRIPT_INJECTOR_H_
#define EXTENSIONS_RENDERER_SCRIPT_INJECTOR_H_
#include <memory>
#include <vector>
#include "extensions/common/constants.h"
#include "extensions/common/mojom/code_injection.mojom.h"
#include "extensions/common/mojom/css_origin.mojom-shared.h"
#include "extensions/common/mojom/execution_world.mojom-shared.h"
#include "extensions/common/mojom/injection_type.mojom-shared.h"
#include "extensions/common/mojom/run_location.mojom-shared.h"
#include "extensions/common/permissions/permissions_data.h"
#include "extensions/common/user_script.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_script_source.h"
class InjectionHost;
namespace blink {
class WebLocalFrame;
}
namespace extensions {
class ScriptInjector {
public:
enum InjectFailureReason {
EXTENSION_REMOVED,
NOT_ALLOWED,
WONT_INJECT
};
struct CSSSource {
blink::WebString code;
blink::WebStyleSheetKey key;
};
virtual ~ScriptInjector() {}
virtual mojom::InjectionType script_type() const = 0;
virtual blink::mojom::UserActivationOption IsUserGesture() const = 0;
virtual mojom::ExecutionWorld GetExecutionWorld() const = 0;
virtual mojom::CSSOrigin GetCssOrigin() const = 0;
virtual mojom::CSSInjection::Operation GetCSSInjectionOperation() const = 0;
virtual blink::mojom::WantResultOption ExpectsResults() const = 0;
virtual blink::mojom::PromiseResultOption ShouldWaitForPromise() const = 0;
virtual bool ShouldInjectJs(
mojom::RunLocation run_location,
const std::set<std::string>& executing_scripts) const = 0;
virtual bool ShouldInjectOrRemoveCss(
mojom::RunLocation run_location,
const std::set<std::string>& injected_stylesheets) const = 0;
virtual PermissionsData::PageAccess CanExecuteOnFrame(
const InjectionHost* injection_host,
blink::WebLocalFrame* web_frame,
int tab_id) = 0;
virtual std::vector<blink::WebScriptSource> GetJsSources(
mojom::RunLocation run_location,
std::set<std::string>* executing_scripts,
size_t* num_injected_js_scripts) const = 0;
virtual std::vector<CSSSource> GetCssSources(
mojom::RunLocation run_location,
std::set<std::string>* injected_stylesheets,
size_t* num_injected_stylesheets) const = 0;
virtual void OnInjectionComplete(absl::optional<base::Value> execution_result,
mojom::RunLocation run_location) = 0;
virtual void OnWillNotInject(InjectFailureReason reason) = 0;
};
}
#endif