| 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 <vector> |   18 #include <vector> | 
|   19 #include <AdblockPlus.h> |   19 #include <AdblockPlus.h> | 
|   20  |   20  | 
|   21 #include "JsContext.h" |   21 #include "JsContext.h" | 
|   22 #include "JsError.h" |   22 #include "JsError.h" | 
|   23 #include "Utils.h" |   23 #include "Utils.h" | 
|   24  |   24  | 
|   25 AdblockPlus::JsValue::JsValue(AdblockPlus::JsEnginePtr jsEngine, |   25 AdblockPlus::JsValue::JsValue(AdblockPlus::JsEnginePtr jsEngine, | 
|   26       v8::Handle<v8::Value> value) |   26       v8::Handle<v8::Value> value) | 
|   27     : jsEngine(jsEngine), |   27     : jsEngine(jsEngine), | 
|   28       value(new v8::Persistent<v8::Value>(jsEngine->isolate, value)) |   28       value(new v8::Persistent<v8::Value>(jsEngine->GetIsolate(), value)) | 
|   29 { |   29 { | 
|   30 } |   30 } | 
|   31  |   31  | 
|   32 AdblockPlus::JsValue::JsValue(AdblockPlus::JsValue&& src) |   32 AdblockPlus::JsValue::JsValue(AdblockPlus::JsValue&& src) | 
|   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() | 
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  139   return result; |  139   return result; | 
|  140 } |  140 } | 
|  141  |  141  | 
|  142  |  142  | 
|  143 AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& nam
     e) const |  143 AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& nam
     e) const | 
|  144 { |  144 { | 
|  145   if (!IsObject()) |  145   if (!IsObject()) | 
|  146     throw new std::runtime_error("Attempting to get property of a non-object"); |  146     throw new std::runtime_error("Attempting to get property of a non-object"); | 
|  147  |  147  | 
|  148   const JsContext context(jsEngine); |  148   const JsContext context(jsEngine); | 
|  149   v8::Local<v8::String> property = Utils::ToV8String(jsEngine->isolate, name); |  149   v8::Local<v8::String> property = Utils::ToV8String(jsEngine->GetIsolate(), nam
     e); | 
|  150   v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); |  150   v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); | 
|  151   return JsValuePtr(new JsValue(jsEngine, obj->Get(property))); |  151   return JsValuePtr(new JsValue(jsEngine, obj->Get(property))); | 
|  152 } |  152 } | 
|  153  |  153  | 
|  154 void AdblockPlus::JsValue::SetProperty(const std::string& name, v8::Handle<v8::V
     alue> val) |  154 void AdblockPlus::JsValue::SetProperty(const std::string& name, v8::Handle<v8::V
     alue> val) | 
|  155 { |  155 { | 
|  156   if (!IsObject()) |  156   if (!IsObject()) | 
|  157     throw new std::runtime_error("Attempting to set property on a non-object"); |  157     throw new std::runtime_error("Attempting to set property on a non-object"); | 
|  158  |  158  | 
|  159   v8::Local<v8::String> property = Utils::ToV8String(jsEngine->isolate, name); |  159   v8::Local<v8::String> property = Utils::ToV8String(jsEngine->GetIsolate(), nam
     e); | 
|  160   v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); |  160   v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(UnwrapValue()); | 
|  161   obj->Set(property, val); |  161   obj->Set(property, val); | 
|  162 } |  162 } | 
|  163  |  163  | 
|  164 v8::Local<v8::Value> AdblockPlus::JsValue::UnwrapValue() const |  164 v8::Local<v8::Value> AdblockPlus::JsValue::UnwrapValue() const | 
|  165 { |  165 { | 
|  166   return v8::Local<v8::Value>::New(jsEngine->isolate, *value); |  166   return v8::Local<v8::Value>::New(jsEngine->GetIsolate(), *value); | 
|  167 } |  167 } | 
|  168  |  168  | 
|  169 void AdblockPlus::JsValue::SetProperty(const std::string& name, const std::strin
     g& val) |  169 void AdblockPlus::JsValue::SetProperty(const std::string& name, const std::strin
     g& val) | 
|  170 { |  170 { | 
|  171   const JsContext context(jsEngine); |  171   const JsContext context(jsEngine); | 
|  172   SetProperty(name, Utils::ToV8String(jsEngine->isolate, val)); |  172   SetProperty(name, Utils::ToV8String(jsEngine->GetIsolate(), val)); | 
|  173 } |  173 } | 
|  174  |  174  | 
|  175 void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) |  175 void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) | 
|  176 { |  176 { | 
|  177   const JsContext context(jsEngine); |  177   const JsContext context(jsEngine); | 
|  178   SetProperty(name, v8::Number::New(jsEngine->isolate, val)); |  178   SetProperty(name, v8::Number::New(jsEngine->GetIsolate(), val)); | 
|  179 } |  179 } | 
|  180  |  180  | 
|  181 void AdblockPlus::JsValue::SetProperty(const std::string& name, const JsValuePtr
     & val) |  181 void AdblockPlus::JsValue::SetProperty(const std::string& name, const JsValuePtr
     & val) | 
|  182 { |  182 { | 
|  183   const JsContext context(jsEngine); |  183   const JsContext context(jsEngine); | 
|  184   SetProperty(name, val->UnwrapValue()); |  184   SetProperty(name, val->UnwrapValue()); | 
|  185 } |  185 } | 
|  186  |  186  | 
|  187 void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) |  187 void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) | 
|  188 { |  188 { | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  202  |  202  | 
|  203 AdblockPlus::JsValuePtr AdblockPlus::JsValue::Call(const JsValueList& params, Js
     ValuePtr thisPtr) const |  203 AdblockPlus::JsValuePtr AdblockPlus::JsValue::Call(const JsValueList& params, Js
     ValuePtr thisPtr) const | 
|  204 { |  204 { | 
|  205   if (!IsFunction()) |  205   if (!IsFunction()) | 
|  206     throw new std::runtime_error("Attempting to call a non-function"); |  206     throw new std::runtime_error("Attempting to call a non-function"); | 
|  207  |  207  | 
|  208   const JsContext context(jsEngine); |  208   const JsContext context(jsEngine); | 
|  209   if (!thisPtr) |  209   if (!thisPtr) | 
|  210   { |  210   { | 
|  211     v8::Local<v8::Context> localContext = v8::Local<v8::Context>::New( |  211     v8::Local<v8::Context> localContext = v8::Local<v8::Context>::New( | 
|  212       jsEngine->isolate, *jsEngine->context); |  212       jsEngine->GetIsolate(), *jsEngine->context); | 
|  213     thisPtr = JsValuePtr(new JsValue(jsEngine, localContext->Global())); |  213     thisPtr = JsValuePtr(new JsValue(jsEngine, localContext->Global())); | 
|  214   } |  214   } | 
|  215   if (!thisPtr->IsObject()) |  215   if (!thisPtr->IsObject()) | 
|  216     throw new std::runtime_error("`this` pointer has to be an object"); |  216     throw new std::runtime_error("`this` pointer has to be an object"); | 
|  217   v8::Local<v8::Object> thisObj = v8::Local<v8::Object>::Cast(thisPtr->UnwrapVal
     ue()); |  217   v8::Local<v8::Object> thisObj = v8::Local<v8::Object>::Cast(thisPtr->UnwrapVal
     ue()); | 
|  218  |  218  | 
|  219   std::vector<v8::Handle<v8::Value>> argv; |  219   std::vector<v8::Handle<v8::Value>> argv; | 
|  220   for (JsValueList::const_iterator it = params.begin(); it != params.end(); ++it
     ) |  220   for (JsValueList::const_iterator it = params.begin(); it != params.end(); ++it
     ) | 
|  221     argv.push_back((*it)->UnwrapValue()); |  221     argv.push_back((*it)->UnwrapValue()); | 
|  222  |  222  | 
|  223   const v8::TryCatch tryCatch; |  223   const v8::TryCatch tryCatch; | 
|  224   v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(UnwrapValue()); |  224   v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(UnwrapValue()); | 
|  225   v8::Local<v8::Value> result = func->Call(thisObj, argv.size(), |  225   v8::Local<v8::Value> result = func->Call(thisObj, argv.size(), | 
|  226       argv.size() ? &argv.front() : 0); |  226       argv.size() ? &argv.front() : 0); | 
|  227  |  227  | 
|  228   if (tryCatch.HasCaught()) |  228   if (tryCatch.HasCaught()) | 
|  229     throw JsError(tryCatch.Exception(), tryCatch.Message()); |  229     throw JsError(tryCatch.Exception(), tryCatch.Message()); | 
|  230  |  230  | 
|  231   return JsValuePtr(new JsValue(jsEngine, result)); |  231   return JsValuePtr(new JsValue(jsEngine, result)); | 
|  232 } |  232 } | 
| OLD | NEW |