18 #ifndef ADBLOCK_PLUS_JS_ENGINE_H
19 #define ADBLOCK_PLUS_JS_ENGINE_H
28 #include <AdblockPlus/AppInfo.h>
29 #include <AdblockPlus/LogSystem.h>
30 #include <AdblockPlus/IFileSystem.h>
31 #include <AdblockPlus/JsValue.h>
32 #include <AdblockPlus/IWebRequest.h>
33 #include <AdblockPlus/ITimer.h>
34 #include <AdblockPlus/Scheduler.h>
67 virtual v8::Isolate*
Get() = 0;
73 class JsEngine :
public std::enable_shared_from_this<JsEngine>
76 friend class JsContext;
78 struct JsWeakValuesList
81 std::vector<v8::Global<v8::Value>> values;
83 typedef std::list<JsWeakValuesList> JsWeakValuesLists;
93 typedef std::map<std::string, EventCallback>
EventMap;
101 JsWeakValuesLists::const_iterator iterator;
114 static JsEnginePtr
New(
const AppInfo& appInfo,
Platform& platform, std::unique_ptr<IV8IsolateProvider> isolate =
nullptr);
121 void SetEventCallback(
const std::string& eventName,
const EventCallback& callback);
144 const std::string& filename =
"");
166 return NewValue(static_cast<int64_t>(val));
171 return NewValue(static_cast<int64_t>(val));
189 JsValue
NewCallback(
const v8::FunctionCallback& callback);
263 return isolate->Get();
280 void CallTimerTask(
const JsWeakValuesID& timerParamsID);
282 explicit JsEngine(
Platform& platform, std::unique_ptr<IV8IsolateProvider> isolate);
289 std::unique_ptr<IV8IsolateProvider> isolate;
291 std::unique_ptr<v8::Global<v8::Context>> context;
292 EventMap eventCallbacks;
293 std::mutex eventCallbacksMutex;
294 JsWeakValuesLists jsWeakValuesLists;
295 std::mutex jsWeakValuesListsMutex;
void RemoveEventCallback(const std::string &eventName)
Removes the callback function for an event.
std::function< void(JsValueList &¶ms)> EventCallback
Event callback function.
Definition: JsEngine.h:88
Platform & GetPlatform()
Private functionality.
Definition: JsEngine.h:275
Information about the app using libadblockplus.
Definition: AppInfo.h:28
JavaScript engine used by FilterEngine, wraps v8.
Definition: JsEngine.h:73
v8::Isolate * GetIsolate()
Returns a pointer to associated v8::Isolate.
Definition: JsEngine.h:261
JsValue NewValue(int val)
Creates a new JavaScript value.
Definition: JsEngine.h:164
void SetGlobalProperty(const std::string &name, const AdblockPlus::JsValue &value)
Sets a global property that can be accessed by all the scripts.
std::vector< AdblockPlus::JsValue > JsValueList
List of JavaScript values.
Definition: JsValue.h:48
Wrapper for JavaScript values.
Definition: JsValue.h:54
JsValueList TakeJsValues(const JsWeakValuesID &id)
Extracts and removes from JsEngine earlier stored JsValues.
JsValue NewValue(const std::string &val)
Creates a new JavaScript value.
JsValue NewCallback(const v8::FunctionCallback &callback)
Creates a JavaScript function that invokes a C++ callback.
static JsEnginePtr New(const AppInfo &appInfo, Platform &platform, std::unique_ptr< IV8IsolateProvider > isolate=nullptr)
Creates a new JavaScript engine instance.
JsValue NewValue(const char *val)
Creates a new JavaScript value.
Definition: JsEngine.h:160
Definition: JsEngine.h:41
JsValue NewObject()
Creates a new JavaScript object.
Main namespace of libadblockplus.
Definition: ActiveObject.h:23
Definition: JsEngine.h:36
void TriggerEvent(const std::string &eventName, JsValueList &¶ms)
Triggers an event.
JsValue Evaluate(const std::string &source, const std::string &filename="")
Evaluates a JavaScript expression.
void Gc()
Initiates a garbage collection.
JsValueList ConvertArguments(const v8::FunctionCallbackInfo< v8::Value > &arguments)
Converts v8 arguments to JsValue objects.
Provides with isolate.
Definition: JsEngine.h:59
static JsEnginePtr FromArguments(const v8::FunctionCallbackInfo< v8::Value > &arguments)
Returns a JsEngine instance contained in a v8::FunctionCallbackInfo object.
std::map< std::string, EventCallback > EventMap
Maps events to callback functions.
Definition: JsEngine.h:93
JsWeakValuesID StoreJsValues(const JsValueList &values)
Stores JsValues in a way they don't keep a strong reference to JsEngine and which are destroyed when ...
An opaque structure representing ID of stored JsValueList.
Definition: JsEngine.h:98
JsValueList GetJsValues(const JsWeakValuesID &id)
Extracts earlier stored JsValues from JsEgnine but does not remove them, one still must call TakeJsVa...
void NotifyLowMemory()
Notifies JS engine about critically low memory what should cause a garbage collection.
virtual v8::Isolate * Get()=0
Returns v8::Isolate.
void SetEventCallback(const std::string &eventName, const EventCallback &callback)
Registers the callback function for an event.
std::shared_ptr< JsEngine > JsEnginePtr
Shared smart pointer to a JsEngine instance.
Definition: JsEngine.h:48