OLD | NEW |
1 #include <AdblockPlus.h> | 1 #include <AdblockPlus.h> |
2 | 2 |
3 namespace | 3 namespace |
4 { | 4 { |
5 std::string fromV8String(v8::Handle<v8::Value> value) | 5 std::string fromV8String(v8::Handle<v8::Value> value) |
6 { | 6 { |
7 v8::String::Utf8Value stringValue(value); | 7 v8::String::Utf8Value stringValue(value); |
8 if (stringValue.length()) | 8 if (stringValue.length()) |
9 return std::string(*stringValue, stringValue.length()); | 9 return std::string(*stringValue, stringValue.length()); |
10 else | 10 else |
(...skipping 13 matching lines...) Expand all Loading... |
24 { | 24 { |
25 } | 25 } |
26 | 26 |
27 AdblockPlus::JsValue::~JsValue() | 27 AdblockPlus::JsValue::~JsValue() |
28 { | 28 { |
29 value.Dispose(jsEngine.isolate); | 29 value.Dispose(jsEngine.isolate); |
30 } | 30 } |
31 | 31 |
32 bool AdblockPlus::JsValue::IsUndefined() const | 32 bool AdblockPlus::JsValue::IsUndefined() const |
33 { | 33 { |
| 34 const JsEngine::Context context(jsEngine); |
34 return value->IsUndefined(); | 35 return value->IsUndefined(); |
35 } | 36 } |
36 | 37 |
37 bool AdblockPlus::JsValue::IsNull() const | 38 bool AdblockPlus::JsValue::IsNull() const |
38 { | 39 { |
| 40 const JsEngine::Context context(jsEngine); |
39 return value->IsNull(); | 41 return value->IsNull(); |
40 } | 42 } |
41 | 43 |
42 bool AdblockPlus::JsValue::IsString() const | 44 bool AdblockPlus::JsValue::IsString() const |
43 { | 45 { |
| 46 const JsEngine::Context context(jsEngine); |
44 return value->IsString() || value->IsStringObject(); | 47 return value->IsString() || value->IsStringObject(); |
45 } | 48 } |
46 | 49 |
47 bool AdblockPlus::JsValue::IsNumber() const | 50 bool AdblockPlus::JsValue::IsNumber() const |
48 { | 51 { |
| 52 const JsEngine::Context context(jsEngine); |
49 return value->IsNumber() || value->IsNumberObject(); | 53 return value->IsNumber() || value->IsNumberObject(); |
50 } | 54 } |
51 | 55 |
52 bool AdblockPlus::JsValue::IsBool() const | 56 bool AdblockPlus::JsValue::IsBool() const |
53 { | 57 { |
| 58 const JsEngine::Context context(jsEngine); |
54 return value->IsBoolean() || value->IsBooleanObject(); | 59 return value->IsBoolean() || value->IsBooleanObject(); |
55 } | 60 } |
56 | 61 |
57 bool AdblockPlus::JsValue::IsObject() const | 62 bool AdblockPlus::JsValue::IsObject() const |
58 { | 63 { |
| 64 const JsEngine::Context context(jsEngine); |
59 return value->IsObject(); | 65 return value->IsObject(); |
60 } | 66 } |
61 | 67 |
62 bool AdblockPlus::JsValue::IsArray() const | 68 bool AdblockPlus::JsValue::IsArray() const |
63 { | 69 { |
| 70 const JsEngine::Context context(jsEngine); |
64 return value->IsArray(); | 71 return value->IsArray(); |
65 } | 72 } |
66 | 73 |
67 bool AdblockPlus::JsValue::IsFunction() const | 74 bool AdblockPlus::JsValue::IsFunction() const |
68 { | 75 { |
| 76 const JsEngine::Context context(jsEngine); |
69 return value->IsFunction(); | 77 return value->IsFunction(); |
70 } | 78 } |
71 | 79 |
72 std::string AdblockPlus::JsValue::AsString() const | 80 std::string AdblockPlus::JsValue::AsString() const |
73 { | 81 { |
74 const JsEngine::Context context(jsEngine); | 82 const JsEngine::Context context(jsEngine); |
75 return fromV8String(value); | 83 return fromV8String(value); |
76 } | 84 } |
77 | 85 |
78 int64_t AdblockPlus::JsValue::AsInt() const | 86 int64_t AdblockPlus::JsValue::AsInt() const |
(...skipping 18 matching lines...) Expand all Loading... |
97 v8::Persistent<v8::Array> array = v8::Persistent<v8::Array>::Cast(value); | 105 v8::Persistent<v8::Array> array = v8::Persistent<v8::Array>::Cast(value); |
98 uint32_t length = array->Length(); | 106 uint32_t length = array->Length(); |
99 for (uint32_t i = 0; i < length; i++) | 107 for (uint32_t i = 0; i < length; i++) |
100 { | 108 { |
101 v8::Local<v8::Value> item = array->Get(i); | 109 v8::Local<v8::Value> item = array->Get(i); |
102 result.push_back(JsValuePtr(new JsValue(jsEngine, item))); | 110 result.push_back(JsValuePtr(new JsValue(jsEngine, item))); |
103 } | 111 } |
104 return result; | 112 return result; |
105 } | 113 } |
106 | 114 |
| 115 std::vector<std::string> AdblockPlus::JsValue::GetOwnPropertyNames() const |
| 116 { |
| 117 if (!IsObject()) |
| 118 throw new std::runtime_error("Attempting to get propert list for a non-objec
t"); |
| 119 |
| 120 const JsEngine::Context context(jsEngine); |
| 121 const v8::Persistent<v8::Object> object = v8::Persistent<v8::Object>::Cast(val
ue); |
| 122 JsValueList properties = JsValuePtr(new JsValue(jsEngine, object->GetOwnProper
tyNames()))->AsList(); |
| 123 std::vector<std::string> result; |
| 124 for (JsValueList::iterator it = properties.begin(); it != properties.end(); ++
it) |
| 125 result.push_back((*it)->AsString()); |
| 126 return result; |
| 127 } |
| 128 |
| 129 |
107 AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& nam
e) const | 130 AdblockPlus::JsValuePtr AdblockPlus::JsValue::GetProperty(const std::string& nam
e) const |
108 { | 131 { |
109 if (!IsObject()) | 132 if (!IsObject()) |
110 throw new std::runtime_error("Attempting to get property of a non-object"); | 133 throw new std::runtime_error("Attempting to get property of a non-object"); |
111 | 134 |
112 const JsEngine::Context context(jsEngine); | 135 const JsEngine::Context context(jsEngine); |
113 v8::Local<v8::String> property = toV8String(name); | 136 v8::Local<v8::String> property = toV8String(name); |
114 v8::Persistent<v8::Object> obj = v8::Persistent<v8::Object>::Cast(value); | 137 v8::Persistent<v8::Object> obj = v8::Persistent<v8::Object>::Cast(value); |
115 return JsValuePtr(new JsValue(jsEngine, obj->Get(property))); | 138 return JsValuePtr(new JsValue(jsEngine, obj->Get(property))); |
116 } | 139 } |
(...skipping 13 matching lines...) Expand all Loading... |
130 const JsEngine::Context context(jsEngine); | 153 const JsEngine::Context context(jsEngine); |
131 SetProperty(name, toV8String(val)); | 154 SetProperty(name, toV8String(val)); |
132 } | 155 } |
133 | 156 |
134 void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) | 157 void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val) |
135 { | 158 { |
136 const JsEngine::Context context(jsEngine); | 159 const JsEngine::Context context(jsEngine); |
137 SetProperty(name, v8::Integer::New(val)); | 160 SetProperty(name, v8::Integer::New(val)); |
138 } | 161 } |
139 | 162 |
| 163 void AdblockPlus::JsValue::SetProperty(const std::string& name, JsValuePtr val) |
| 164 { |
| 165 const JsEngine::Context context(jsEngine); |
| 166 SetProperty(name, val->value); |
| 167 } |
| 168 |
140 void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) | 169 void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val) |
141 { | 170 { |
142 const JsEngine::Context context(jsEngine); | 171 const JsEngine::Context context(jsEngine); |
143 SetProperty(name, v8::Boolean::New(val)); | 172 SetProperty(name, v8::Boolean::New(val)); |
144 } | 173 } |
145 | 174 |
146 std::string AdblockPlus::JsValue::GetClassName() const | 175 std::string AdblockPlus::JsValue::GetClassName() const |
147 { | 176 { |
148 if (!IsObject()) | 177 if (!IsObject()) |
149 throw new std::runtime_error("Cannot get constructor of a non-object"); | 178 throw new std::runtime_error("Cannot get constructor of a non-object"); |
(...skipping 26 matching lines...) Expand all Loading... |
176 const v8::TryCatch tryCatch; | 205 const v8::TryCatch tryCatch; |
177 v8::Persistent<v8::Function> func = v8::Persistent<v8::Function>::Cast(value); | 206 v8::Persistent<v8::Function> func = v8::Persistent<v8::Function>::Cast(value); |
178 v8::Local<v8::Value> result = func->Call(thisObj, argc, argv); | 207 v8::Local<v8::Value> result = func->Call(thisObj, argc, argv); |
179 delete argv; | 208 delete argv; |
180 | 209 |
181 if (tryCatch.HasCaught()) | 210 if (tryCatch.HasCaught()) |
182 throw AdblockPlus::JsError(tryCatch.Exception(), tryCatch.Message()); | 211 throw AdblockPlus::JsError(tryCatch.Exception(), tryCatch.Message()); |
183 | 212 |
184 return JsValuePtr(new JsValue(jsEngine, result)); | 213 return JsValuePtr(new JsValue(jsEngine, result)); |
185 } | 214 } |
OLD | NEW |