| Index: include/AdblockPlus/JsEngine.h |
| diff --git a/include/AdblockPlus/JsEngine.h b/include/AdblockPlus/JsEngine.h |
| index 34f7d80eacce44466299c444e16d064c6d05aa79..f8062b657d5312a2204d540b156d5b268e22b259 100644 |
| --- a/include/AdblockPlus/JsEngine.h |
| +++ b/include/AdblockPlus/JsEngine.h |
| @@ -1,6 +1,6 @@ |
| /* |
| * This file is part of Adblock Plus <https://adblockplus.org/>, |
| - * Copyright (C) 2006-2016 Eyeo GmbH |
| + * Copyright (C) 2006-2017 eyeo GmbH |
| * |
| * Adblock Plus is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 3 as |
| @@ -20,9 +20,11 @@ |
| #include <functional> |
| #include <map> |
| +#include <list> |
| #include <stdexcept> |
| #include <stdint.h> |
| #include <string> |
| +#include <mutex> |
| #include <AdblockPlus/AppInfo.h> |
| #include <AdblockPlus/LogSystem.h> |
| #include <AdblockPlus/FileSystem.h> |
| @@ -88,6 +90,12 @@ namespace AdblockPlus |
| typedef std::function<void(JsValueList& params)> EventCallback; |
| /** |
| + * Callback function returning false when current connection is not allowed |
| + * e.g. because it is a metered connection. |
| + */ |
| + typedef std::function<bool()> IsConnectionAllowedCallback; |
| + |
| + /** |
| * Maps events to callback functions. |
| */ |
| typedef std::map<std::string, EventCallback> EventMap; |
| @@ -222,6 +230,19 @@ namespace AdblockPlus |
| void SetWebRequest(WebRequestPtr val); |
| /** |
| + * Registers the callback function to check whether current connection is |
| + * allowed for network requests. |
| + * @param callback callback function. |
| + */ |
| + void SetIsConnectionAllowedCallback(const IsConnectionAllowedCallback& callback); |
| + |
| + /** |
| + * Checks whether current connection is allowed. If |
| + * IsConnectionAllowedCallback is not set then then it returns true. |
| + */ |
| + bool IsConnectionAllowed(); |
| + |
| + /** |
| * @see `SetLogSystem()`. |
| */ |
| LogSystemPtr GetLogSystem(); |
| @@ -250,6 +271,21 @@ 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; |
| + struct TimerTask |
| + { |
| + std::weak_ptr<JsEngine> weakJsEngine; |
| + TimerTaskInfos::const_iterator taskInfoIterator; |
| + }; |
| + TimerTask CreateTimerTask(const v8::Arguments& arguments); |
| + void CallTimerTask(TimerTaskInfos::const_iterator taskInfoIterator); |
| private: |
| explicit JsEngine(const ScopedV8IsolatePtr& isolate); |
| @@ -264,6 +300,10 @@ namespace AdblockPlus |
| LogSystemPtr logSystem; |
| std::unique_ptr<v8::Persistent<v8::Context>> context; |
| EventMap eventCallbacks; |
| + std::mutex eventCallbacksMutex; |
| + std::mutex isConnectionAllowedMutex; |
| + IsConnectionAllowedCallback isConnectionAllowed; |
| + TimerTaskInfos timerTaskInfos; |
| }; |
| } |