LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2014 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 * |
(...skipping 19 matching lines...) Expand all Loading... |
33 : jsEngine(src.jsEngine), | 33 : jsEngine(src.jsEngine), |
34 value(std::move(src.value)) | 34 value(std::move(src.value)) |
35 { | 35 { |
36 } | 36 } |
37 | 37 |
38 AdblockPlus::JsValue::~JsValue() | 38 AdblockPlus::JsValue::~JsValue() |
39 { | 39 { |
40 if (value) | 40 if (value) |
41 { | 41 { |
42 value->Dispose(); | 42 value->Dispose(); |
| 43 value.reset(); |
43 } | 44 } |
44 } | 45 } |
45 | 46 |
46 bool AdblockPlus::JsValue::IsUndefined() const | 47 bool AdblockPlus::JsValue::IsUndefined() const |
47 { | 48 { |
48 const JsContext context(jsEngine); | 49 const JsContext context(jsEngine); |
49 return UnwrapValue()->IsUndefined(); | 50 return UnwrapValue()->IsUndefined(); |
50 } | 51 } |
51 | 52 |
52 bool AdblockPlus::JsValue::IsNull() const | 53 bool AdblockPlus::JsValue::IsNull() const |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 return result; | 144 return result; |
144 } | 145 } |
145 | 146 |
146 | 147 |
147 AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& nam
e) const | 148 AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& nam
e) const |
148 { | 149 { |
149 if (!IsObject()) | 150 if (!IsObject()) |
150 throw new std::runtime_error("Attempting to get property of a non-object"); | 151 throw new std::runtime_error("Attempting to get property of a non-object"); |
151 | 152 |
152 const JsContext context(jsEngine); | 153 const JsContext context(jsEngine); |
153 v8::Local<v8::String> property = Utils::ToV8String(name); | 154 v8::Local<v8::String> property = Utils::ToV8String(jsEngine->isolate, name); |
154 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); | 155 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); |
155 return JsValuePtr(new JsValue(jsEngine, obj->Get(property))); | 156 return JsValuePtr(new JsValue(jsEngine, obj->Get(property))); |
156 } | 157 } |
157 | 158 |
158 void AdblockPlus::JsValue::SetProperty(const std::string& name, v8::Handle<v8::V
alue> val) | 159 void AdblockPlus::JsValue::SetProperty(const std::string& name, v8::Handle<v8::V
alue> val) |
159 { | 160 { |
160 if (!IsObject()) | 161 if (!IsObject()) |
161 throw new std::runtime_error("Attempting to set property on a non-object"); | 162 throw new std::runtime_error("Attempting to set property on a non-object"); |
162 | 163 |
163 v8::Local<v8::String> property = Utils::ToV8String(name); | 164 v8::Local<v8::String> property = Utils::ToV8String(jsEngine->isolate, name); |
164 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); | 165 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); |
165 obj->Set(property, val); | 166 obj->Set(property, val); |
166 } | 167 } |
167 | 168 |
168 v8::Local<v8::Value> AdblockPlus::JsValue::UnwrapValue() const | 169 v8::Local<v8::Value> AdblockPlus::JsValue::UnwrapValue() const |
169 { | 170 { |
170 return v8::Local<v8::Value>::New(jsEngine->isolate, *value); | 171 return v8::Local<v8::Value>::New(jsEngine->isolate, *value); |
171 } | 172 } |
172 | 173 |
173 void AdblockPlus::JsValue::SetProperty(const std::string& name, const std::strin
g& val) | 174 void AdblockPlus::JsValue::SetProperty(const std::string& name, const std::strin
g& val) |
174 { | 175 { |
175 const JsContext context(jsEngine); | 176 const JsContext context(jsEngine); |
176 SetProperty(name, Utils::ToV8String(val)); | 177 SetProperty(name, Utils::ToV8String(jsEngine->isolate, val)); |
177 } | 178 } |
178 | 179 |
179 void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) | 180 void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) |
180 { | 181 { |
181 const JsContext context(jsEngine); | 182 const JsContext context(jsEngine); |
182 SetProperty(name, v8::Number::New(val)); | 183 SetProperty(name, v8::Number::New(jsEngine->isolate, val)); |
183 } | 184 } |
184 | 185 |
185 void AdblockPlus::JsValue::SetProperty(const std::string& name, const JsValuePtr
& val) | 186 void AdblockPlus::JsValue::SetProperty(const std::string& name, const JsValuePtr
& val) |
186 { | 187 { |
187 const JsContext context(jsEngine); | 188 const JsContext context(jsEngine); |
188 SetProperty(name, val->UnwrapValue()); | 189 SetProperty(name, val->UnwrapValue()); |
189 } | 190 } |
190 | 191 |
191 void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) | 192 void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) |
192 { | 193 { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 const v8::TryCatch tryCatch; | 228 const v8::TryCatch tryCatch; |
228 v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(UnwrapValue()); | 229 v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(UnwrapValue()); |
229 v8::Local<v8::Value> result = func->Call(thisObj, argv.size(), | 230 v8::Local<v8::Value> result = func->Call(thisObj, argv.size(), |
230 argv.size() ? &argv.front() : 0); | 231 argv.size() ? &argv.front() : 0); |
231 | 232 |
232 if (tryCatch.HasCaught()) | 233 if (tryCatch.HasCaught()) |
233 throw JsError(tryCatch.Exception(), tryCatch.Message()); | 234 throw JsError(tryCatch.Exception(), tryCatch.Message()); |
234 | 235 |
235 return JsValuePtr(new JsValue(jsEngine, result)); | 236 return JsValuePtr(new JsValue(jsEngine, result)); |
236 } | 237 } |
| 238 |
| 239 AdblockPlus::JsValuePtr AdblockPlus::JsValue::Call(const JsValue& arg) const |
| 240 { |
| 241 const JsContext context(jsEngine); |
| 242 JsValueList params; |
| 243 params.push_back(JsValuePtr(new JsValue(arg.jsEngine, arg.UnwrapValue()))); |
| 244 return Call(params); |
| 245 } |
LEFT | RIGHT |