Index: include/AdblockPlus/JsEngine.h |
diff --git a/include/AdblockPlus/JsEngine.h b/include/AdblockPlus/JsEngine.h |
index f8062b657d5312a2204d540b156d5b268e22b259..ea6616e93082d3c8c33fe053ebbd5befd71544a9 100644 |
--- a/include/AdblockPlus/JsEngine.h |
+++ b/include/AdblockPlus/JsEngine.h |
@@ -30,6 +30,7 @@ |
#include <AdblockPlus/FileSystem.h> |
#include <AdblockPlus/JsValue.h> |
#include <AdblockPlus/WebRequest.h> |
+#include <AdblockPlus/ITimer.h> |
namespace v8 |
{ |
@@ -51,6 +52,11 @@ namespace AdblockPlus |
typedef std::shared_ptr<JsEngine> JsEnginePtr; |
/** |
+ * A factory to construct DefaultTimer. |
+ */ |
+ TimerPtr CreateDefaultTimer(); |
+ |
+ /** |
* Scope based isolate manager. Creates a new isolate instance on |
* constructing and disposes it on destructing. |
*/ |
@@ -103,11 +109,14 @@ namespace AdblockPlus |
/** |
* Creates a new JavaScript engine instance. |
* @param appInfo Information about the app. |
+ * @param timer Implementation of timer. |
* @param isolate v8::Isolate wrapper. This parameter should be considered |
* as a temporary hack for tests, it will go away. Issue #3593. |
* @return New `JsEngine` instance. |
*/ |
- static JsEnginePtr New(const AppInfo& appInfo = AppInfo(), const ScopedV8IsolatePtr& isolate = ScopedV8IsolatePtr(new ScopedV8Isolate())); |
+ static JsEnginePtr New(const AppInfo& appInfo = AppInfo(), |
+ TimerPtr timer = CreateDefaultTimer(), |
+ const ScopedV8IsolatePtr& isolate = ScopedV8IsolatePtr(new ScopedV8Isolate())); |
/** |
* Registers the callback function for an event. |
@@ -195,6 +204,13 @@ namespace AdblockPlus |
*/ |
static JsEnginePtr FromArguments(const v8::Arguments& arguments); |
+ /* |
+ * Private functionality required to implement timers. |
+ * @param arguments `v8::Arguments` is the arguments received in C++ |
+ * callback associated for global setTimeout method. |
+ */ |
+ static void ScheduleTimer(const v8::Arguments& arguments); |
+ |
/** |
* Converts v8 arguments to `JsValue` objects. |
* @param arguments `v8::Arguments` object containing the arguments to |
@@ -271,23 +287,16 @@ namespace AdblockPlus |
return isolate->Get(); |
} |
- // Private functionality required to implement timers. |
- struct TimerTaskInfo |
- { |
- ~TimerTaskInfo(); |
- int delay; |
- std::vector<std::unique_ptr<v8::Persistent<v8::Value>>> arguments; |
- }; |
- typedef std::list<TimerTaskInfo> TimerTaskInfos; |
+ private: |
struct TimerTask |
{ |
- std::weak_ptr<JsEngine> weakJsEngine; |
- TimerTaskInfos::const_iterator taskInfoIterator; |
+ ~TimerTask(); |
+ std::vector<std::unique_ptr<v8::Persistent<v8::Value>>> arguments; |
}; |
- TimerTask CreateTimerTask(const v8::Arguments& arguments); |
- void CallTimerTask(TimerTaskInfos::const_iterator taskInfoIterator); |
- private: |
- explicit JsEngine(const ScopedV8IsolatePtr& isolate); |
+ typedef std::list<TimerTask> TimerTasks; |
+ void CallTimerTask(TimerTasks::const_iterator timerTaskIterator); |
+ |
+ explicit JsEngine(const ScopedV8IsolatePtr& isolate, TimerPtr timer); |
JsValuePtr GetGlobalObject(); |
@@ -303,7 +312,8 @@ namespace AdblockPlus |
std::mutex eventCallbacksMutex; |
std::mutex isConnectionAllowedMutex; |
IsConnectionAllowedCallback isConnectionAllowed; |
- TimerTaskInfos timerTaskInfos; |
+ TimerTasks timerTasks; |
+ TimerPtr timer; |
}; |
} |