Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: include/AdblockPlus/JsEngine.h

Issue 4949583905947648: Issue 1280 - Update v8, the second part (Closed)
Patch Set: Created Oct. 27, 2014, 10:01 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/AdblockPlus/FilterEngine.h ('k') | include/AdblockPlus/JsValue.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 12 matching lines...) Expand all
23 #include <stdint.h> 23 #include <stdint.h>
24 #include <string> 24 #include <string>
25 #include <AdblockPlus/AppInfo.h> 25 #include <AdblockPlus/AppInfo.h>
26 #include <AdblockPlus/tr1_functional.h> 26 #include <AdblockPlus/tr1_functional.h>
27 #include <AdblockPlus/LogSystem.h> 27 #include <AdblockPlus/LogSystem.h>
28 #include <AdblockPlus/FileSystem.h> 28 #include <AdblockPlus/FileSystem.h>
29 #include <AdblockPlus/JsValue.h> 29 #include <AdblockPlus/JsValue.h>
30 #include <AdblockPlus/WebRequest.h> 30 #include <AdblockPlus/WebRequest.h>
31 31
32 #include "tr1_memory.h" 32 #include "tr1_memory.h"
33 #include "V8ValueHolder.h"
34 33
35 namespace v8 34 namespace v8
36 { 35 {
37 class Arguments; 36 class Arguments;
38 class Isolate; 37 class Isolate;
39 class Value; 38 class Value;
40 class Context; 39 class Context;
41 template<class T> class Handle; 40 template<class T> class Handle;
42 typedef Handle<Value>(*InvocationCallback)(const Arguments &args); 41 typedef Handle<Value>(*InvocationCallback)(const Arguments &args);
42 typedef void(*FunctionCallback)(const FunctionCallbackInfo<Value>& info);
43 } 43 }
44 44
45 namespace AdblockPlus 45 namespace AdblockPlus
46 { 46 {
47 class JsEngine; 47 class JsEngine;
48 48
49 /** 49 /**
50 * Shared smart pointer to a `JsEngine` instance. 50 * Shared smart pointer to a `JsEngine` instance.
51 */ 51 */
52 typedef std::tr1::shared_ptr<JsEngine> JsEnginePtr; 52 typedef std::shared_ptr<JsEngine> JsEnginePtr;
53
54 // These classes are inherited by JsEngine to avoid any mistake in the order o f object destroying and
55 // disposing. The isolate should be disposed after the everything else. v8::Is olate::Scope
56 // requires a scope, there is no API to "close" it.
57 class IsolateManagerJsEngine
58 {
59 protected:
60 IsolateManagerJsEngine()
61 : isolate{v8::Isolate::New()}
62 {
63 }
64 ~IsolateManagerJsEngine()
65 {
66 isolate->Dispose();
67 }
68 v8::Isolate* isolate;
69 };
70
71 class IsolateScopeJsEngine : protected IsolateManagerJsEngine
72 {
73 protected:
74 IsolateScopeJsEngine()
75 : isolateScope{isolate}
76 {
77 }
78 ~IsolateScopeJsEngine()
79 {
80 }
81 v8::Isolate::Scope isolateScope;
82 };
83
84 class ContextScopeJsEngine : protected IsolateScopeJsEngine
85 {
86 protected:
87 ~ContextScopeJsEngine()
88 {
89 }
90 v8::UniquePersistent<v8::Context> context;
91 };
53 92
54 /** 93 /**
55 * JavaScript engine used by `FilterEngine`, wraps v8. 94 * JavaScript engine used by `FilterEngine`, wraps v8.
56 */ 95 */
57 class JsEngine : public std::tr1::enable_shared_from_this<JsEngine> 96 class JsEngine : public std::enable_shared_from_this<JsEngine>, protected Cont extScopeJsEngine
58 { 97 {
59 friend class JsValue; 98 friend class JsValue;
60 friend class JsContext; 99 friend class JsContext;
100 struct PrivateCtrArg{};
101 public:
102 JsEngine(PrivateCtrArg);
103 ~JsEngine();
61 104
62 public:
63 /** 105 /**
64 * Event callback function. 106 * Event callback function.
65 */ 107 */
66 typedef std::tr1::function<void(JsValueList& params)> EventCallback; 108 typedef std::function<void(JsValueList& params)> EventCallback;
67 109
68 /** 110 /**
69 * Maps events to callback functions. 111 * Maps events to callback functions.
70 */ 112 */
71 typedef std::map<std::string, EventCallback> EventMap; 113 typedef std::map<std::string, EventCallback> EventMap;
72 114
73 /** 115 /**
74 * Creates a new JavaScript engine instance. 116 * Creates a new JavaScript engine instance.
75 * @param appInfo Information about the app. 117 * @param appInfo Information about the app.
76 * @return New `JsEngine` instance. 118 * @return New `JsEngine` instance.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 */ 186 */
145 JsValuePtr NewObject(); 187 JsValuePtr NewObject();
146 188
147 /** 189 /**
148 * Creates a JavaScript function that invokes a C++ callback. 190 * Creates a JavaScript function that invokes a C++ callback.
149 * @param callback C++ callback to invoke. The callback receives a 191 * @param callback C++ callback to invoke. The callback receives a
150 * `v8::Arguments` object and can use `FromArguments()` to retrieve 192 * `v8::Arguments` object and can use `FromArguments()` to retrieve
151 * the current `JsEngine`. 193 * the current `JsEngine`.
152 * @return New `JsValue` instance. 194 * @return New `JsValue` instance.
153 */ 195 */
154 JsValuePtr NewCallback(v8::InvocationCallback callback); 196 JsValuePtr NewCallback(v8::FunctionCallback callback);
155 197
156 /** 198 /**
157 * Returns a `JsEngine` instance contained in a `v8::Arguments` object. 199 * Returns a `JsEngine` instance contained in a `v8::Arguments` object.
158 * Use this in callbacks created via `NewCallback()` to retrieve the current 200 * Use this in callbacks created via `NewCallback()` to retrieve the current
159 * `JsEngine`. 201 * `JsEngine`.
160 * @param arguments `v8::Arguments` object containing the `JsEngine` 202 * @param arguments `v8::Arguments` object containing the `JsEngine`
161 * instance. 203 * instance.
162 * @return `JsEngine` instance from `v8::Arguments`. 204 * @return `JsEngine` instance from `v8::Arguments`.
163 */ 205 */
164 static JsEnginePtr FromArguments(const v8::Arguments& arguments); 206 static JsEnginePtr FromArguments(const v8::FunctionCallbackInfo<v8::Value>& arguments);
165 207
166 /** 208 /**
167 * Converts v8 arguments to `JsValue` objects. 209 * Converts v8 arguments to `JsValue` objects.
168 * @param arguments `v8::Arguments` object containing the arguments to 210 * @param arguments `v8::Arguments` object containing the arguments to
169 * convert. 211 * convert.
170 * @return List of arguments converted to `JsValue` objects. 212 * @return List of arguments converted to `JsValue` objects.
171 */ 213 */
172 JsValueList ConvertArguments(const v8::Arguments& arguments); 214 JsValueList ConvertArguments(const v8::FunctionCallbackInfo<v8::Value>& argu ments);
173 215
174 /** 216 /**
175 * @see `SetFileSystem()`. 217 * @see `SetFileSystem()`.
176 */ 218 */
177 FileSystemPtr GetFileSystem(); 219 FileSystemPtr GetFileSystem();
178 220
179 /** 221 /**
180 * Sets the `FileSystem` implementation used for all file I/O. 222 * Sets the `FileSystem` implementation used for all file I/O.
181 * Setting this is optional, the engine will use a `DefaultFileSystem` 223 * Setting this is optional, the engine will use a `DefaultFileSystem`
182 * instance by default, which might be sufficient. 224 * instance by default, which might be sufficient.
(...skipping 22 matching lines...) Expand all
205 /** 247 /**
206 * Sets the `LogSystem` implementation used for logging (e.g. to handle 248 * Sets the `LogSystem` implementation used for logging (e.g. to handle
207 * `console.log()` calls from JavaScript). 249 * `console.log()` calls from JavaScript).
208 * Setting this is optional, the engine will use a `DefaultLogSystem` 250 * Setting this is optional, the engine will use a `DefaultLogSystem`
209 * instance by default, which might be sufficient. 251 * instance by default, which might be sufficient.
210 * @param The `LogSystem` instance to use. 252 * @param The `LogSystem` instance to use.
211 */ 253 */
212 void SetLogSystem(LogSystemPtr val); 254 void SetLogSystem(LogSystemPtr val);
213 255
214 private: 256 private:
215 JsEngine();
216
217 FileSystemPtr fileSystem; 257 FileSystemPtr fileSystem;
218 WebRequestPtr webRequest; 258 WebRequestPtr webRequest;
219 LogSystemPtr logSystem; 259 LogSystemPtr logSystem;
220 v8::Isolate* isolate;
221 V8ValueHolder<v8::Context> context;
222 EventMap eventCallbacks; 260 EventMap eventCallbacks;
223 }; 261 };
224 } 262 }
225 263
226 #endif 264 #endif
OLDNEW
« no previous file with comments | « include/AdblockPlus/FilterEngine.h ('k') | include/AdblockPlus/JsValue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld