OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 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 |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 #include <AdblockPlus.h> | 18 #include <AdblockPlus.h> |
| 19 #include "FileSystemJsObject.h" |
19 #include "GlobalJsObject.h" | 20 #include "GlobalJsObject.h" |
20 #include "JsContext.h" | 21 #include "JsContext.h" |
21 #include "JsEngineInternal.h" | 22 #include "JsEngineInternal.h" |
22 #include "JsEngineTransition.h" | 23 #include "JsEngineTransition.h" |
23 #include "JsError.h" | 24 #include "JsError.h" |
24 #include "Scheduler.h" | 25 #include "Scheduler.h" |
25 #include "Utils.h" | 26 #include "Utils.h" |
26 #include "WebRequestJsObject.h" | 27 #include "WebRequestJsObject.h" |
27 | 28 |
28 const AdblockPlus::ImmediateSingleUseThreadType AdblockPlus::ImmediateSingleUseT
hread = {}; | 29 const AdblockPlus::ImmediateSingleUseThreadType AdblockPlus::ImmediateSingleUseT
hread = {}; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 JsEngineInternal::JsEngineInternal(const AdblockPlus::ScopedV8IsolatePtr& isolat
e) | 105 JsEngineInternal::JsEngineInternal(const AdblockPlus::ScopedV8IsolatePtr& isolat
e) |
105 : AdblockPlus::JsEngine(isolate), | 106 : AdblockPlus::JsEngine(isolate), |
106 context(isolate->Get(),v8::Context::New(isolate->Get())) | 107 context(isolate->Get(),v8::Context::New(isolate->Get())) |
107 { | 108 { |
108 /* | 109 /* |
109 * Enter v8 scope for our context so that we can initialize its global object. | 110 * Enter v8 scope for our context so that we can initialize its global object. |
110 */ | 111 */ |
111 const v8::Context::Scope contextScope(GetContextAsLocal()); | 112 const v8::Context::Scope contextScope(GetContextAsLocal()); |
112 auto globalObject = GetGlobalObject(); | 113 auto globalObject = GetGlobalObject(); |
113 // Timeout | 114 // Timeout |
114 auto propertyName = AdblockPlus::Utils::ToV8String(GetIsolate(), "setTimeout")
; | 115 globalObject->Set(ToV8String("setTimeout"), MakeCallback(::CallbackForSetTimeo
ut)); |
115 globalObject->Set(propertyName, MakeCallback(::CallbackForSetTimeout)); | |
116 // Web request | 116 // Web request |
117 auto auxiliaryObject = v8::Object::New(); | 117 auto auxiliaryObject = v8::Object::New(); |
118 propertyName = AdblockPlus::Utils::ToV8String(GetIsolate(), "GET"); | 118 auxiliaryObject->Set(ToV8String("GET"), MakeCallback(::GETCallback)); |
119 auxiliaryObject->Set(propertyName, MakeCallback(::GETCallback)); | 119 globalObject->Set(ToV8String("_webRequest"), auxiliaryObject); |
120 propertyName = AdblockPlus::Utils::ToV8String(GetIsolate(), "_webRequest"); | 120 // File system I/O |
121 globalObject->Set(propertyName, auxiliaryObject); | 121 auxiliaryObject = v8::Object::New(); |
| 122 auxiliaryObject->Set(ToV8String("read"), MakeCallback(::ReadCallback)); |
| 123 auxiliaryObject->Set(ToV8String("write"), MakeCallback(::WriteCallback)); |
| 124 auxiliaryObject->Set(ToV8String("move"), MakeCallback(::MoveCallback)); |
| 125 auxiliaryObject->Set(ToV8String("remove"), MakeCallback(::RemoveCallback)); |
| 126 auxiliaryObject->Set(ToV8String("stat"), MakeCallback(::StatCallback)); |
| 127 auxiliaryObject->Set(ToV8String("resolve"), MakeCallback(::ResolveCallback)); |
| 128 globalObject->Set(ToV8String("_fileSystem"), auxiliaryObject); |
| 129 |
122 // TODO: Move the rest of the global object initializations here | 130 // TODO: Move the rest of the global object initializations here |
123 } | 131 } |
124 | 132 |
125 /** | 133 /** |
126 * \par Design Notes | 134 * \par Design Notes |
127 * It is technically necessary to construct JsEngine instances *only* within a f
actory. | 135 * It is technically necessary to construct JsEngine instances *only* within a f
actory. |
128 * Initialization requires that certain transient v8 scopes be set up | 136 * Initialization requires that certain transient v8 scopes be set up |
129 * before initialization and torn down afterwards. | 137 * before initialization and torn down afterwards. |
130 * C++ has no syntax to use anything like a sentry object in the constructor its
elf. | 138 * C++ has no syntax to use anything like a sentry object in the constructor its
elf. |
131 * Thus we need to establish v8 scope within every C++ scope that constructs an
object. | 139 * Thus we need to establish v8 scope within every C++ scope that constructs an
object. |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 v8::Local<v8::Function> JsEngineInternal::MakeCallback(v8::InvocationCallback ca
llback) | 306 v8::Local<v8::Function> JsEngineInternal::MakeCallback(v8::InvocationCallback ca
llback) |
299 { | 307 { |
300 return v8::FunctionTemplate::New(callback, v8::External::New(this))->GetFuncti
on(); | 308 return v8::FunctionTemplate::New(callback, v8::External::New(this))->GetFuncti
on(); |
301 } | 309 } |
302 | 310 |
303 JsEngineInternal* JsEngineInternal::ExtractEngine(const v8::Arguments& arguments
) | 311 JsEngineInternal* JsEngineInternal::ExtractEngine(const v8::Arguments& arguments
) |
304 { | 312 { |
305 return static_cast<JsEngineInternal*>(v8::Local<v8::External>::Cast(arguments.
Data())->Value()); | 313 return static_cast<JsEngineInternal*>(v8::Local<v8::External>::Cast(arguments.
Data())->Value()); |
306 } | 314 } |
307 | 315 |
| 316 v8::Local<v8::String> JsEngineInternal::ToV8String(const std::string& s) |
| 317 { |
| 318 return AdblockPlus::Utils::ToV8String(GetIsolate(), s); |
| 319 } |
| 320 |
308 AdblockPlus::JsValueList AdblockPlus::JsEngine::ConvertArguments(const v8::Argum
ents& arguments) | 321 AdblockPlus::JsValueList AdblockPlus::JsEngine::ConvertArguments(const v8::Argum
ents& arguments) |
309 { | 322 { |
310 const JsContext context(shared_from_this()); | 323 const JsContext context(shared_from_this()); |
311 JsValueList list; | 324 JsValueList list; |
312 for (int i = 0; i < arguments.Length(); i++) | 325 for (int i = 0; i < arguments.Length(); i++) |
313 list.push_back(JsValuePtr(new JsValue(shared_from_this(), arguments[i]))); | 326 list.push_back(JsValuePtr(new JsValue(shared_from_this(), arguments[i]))); |
314 return list; | 327 return list; |
315 } | 328 } |
316 | 329 |
317 AdblockPlus::FileSystemPtr AdblockPlus::JsEngine::GetFileSystem() | 330 AdblockPlus::FileSystemPtr AdblockPlus::JsEngine::GetFileSystem() |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 | 397 |
385 JsEngineInternal* ToInternal(AdblockPlus::JsEnginePtr p) | 398 JsEngineInternal* ToInternal(AdblockPlus::JsEnginePtr p) |
386 { | 399 { |
387 return static_cast<JsEngineInternal*>(p.get()); | 400 return static_cast<JsEngineInternal*>(p.get()); |
388 } | 401 } |
389 | 402 |
390 JsEngineInternal* ToInternal(AdblockPlus::JsEngine* p) | 403 JsEngineInternal* ToInternal(AdblockPlus::JsEngine* p) |
391 { | 404 { |
392 return static_cast<JsEngineInternal*>(p); | 405 return static_cast<JsEngineInternal*>(p); |
393 } | 406 } |
OLD | NEW |