| Index: src/JsValue.cpp |
| =================================================================== |
| --- a/src/JsValue.cpp |
| +++ b/src/JsValue.cpp |
| @@ -26,51 +26,59 @@ AdblockPlus::JsValue::JsValue(AdblockPlu |
| AdblockPlus::JsValue::~JsValue() |
| { |
| value.Dispose(jsEngine.isolate); |
| } |
| bool AdblockPlus::JsValue::IsUndefined() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsUndefined(); |
| } |
| bool AdblockPlus::JsValue::IsNull() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsNull(); |
| } |
| bool AdblockPlus::JsValue::IsString() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsString() || value->IsStringObject(); |
| } |
| bool AdblockPlus::JsValue::IsNumber() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsNumber() || value->IsNumberObject(); |
| } |
| bool AdblockPlus::JsValue::IsBool() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsBoolean() || value->IsBooleanObject(); |
| } |
| bool AdblockPlus::JsValue::IsObject() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsObject(); |
| } |
| bool AdblockPlus::JsValue::IsArray() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsArray(); |
| } |
| bool AdblockPlus::JsValue::IsFunction() const |
| { |
| + const JsEngine::Context context(jsEngine); |
| return value->IsFunction(); |
| } |
| std::string AdblockPlus::JsValue::AsString() const |
| { |
| const JsEngine::Context context(jsEngine); |
| return fromV8String(value); |
| } |
| @@ -99,16 +107,31 @@ AdblockPlus::JsValueList AdblockPlus::Js |
| for (uint32_t i = 0; i < length; i++) |
| { |
| v8::Local<v8::Value> item = array->Get(i); |
| result.push_back(JsValuePtr(new JsValue(jsEngine, item))); |
| } |
| return result; |
| } |
| +std::vector<std::string> AdblockPlus::JsValue::GetOwnPropertyNames() const |
| +{ |
| + if (!IsObject()) |
| + throw new std::runtime_error("Attempting to get propert list for a non-object"); |
| + |
| + const JsEngine::Context context(jsEngine); |
| + const v8::Persistent<v8::Object> object = v8::Persistent<v8::Object>::Cast(value); |
| + JsValueList properties = JsValuePtr(new JsValue(jsEngine, object->GetOwnPropertyNames()))->AsList(); |
| + std::vector<std::string> result; |
| + for (JsValueList::iterator it = properties.begin(); it != properties.end(); ++it) |
| + result.push_back((*it)->AsString()); |
| + return result; |
| +} |
| + |
| + |
| AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& name) const |
| { |
| if (!IsObject()) |
| throw new std::runtime_error("Attempting to get property of a non-object"); |
| const JsEngine::Context context(jsEngine); |
| v8::Local<v8::String> property = toV8String(name); |
| v8::Persistent<v8::Object> obj = v8::Persistent<v8::Object>::Cast(value); |
| @@ -132,16 +155,22 @@ void AdblockPlus::JsValue::SetProperty(c |
| } |
| void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) |
| { |
| const JsEngine::Context context(jsEngine); |
| SetProperty(name, v8::Integer::New(val)); |
| } |
| +void AdblockPlus::JsValue::SetProperty(const std::string& name, JsValuePtr val) |
| +{ |
| + const JsEngine::Context context(jsEngine); |
| + SetProperty(name, val->value); |
| +} |
| + |
| void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) |
| { |
| const JsEngine::Context context(jsEngine); |
| SetProperty(name, v8::Boolean::New(val)); |
| } |
| std::string AdblockPlus::JsValue::GetClassName() const |
| { |