| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/child/v8_value_converter_impl.h" | 5 #include "content/child/v8_value_converter_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <cmath> | 10 #include <cmath> |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 return v8::Null(isolate); | 223 return v8::Null(isolate); |
| 224 } | 224 } |
| 225 } | 225 } |
| 226 | 226 |
| 227 v8::Local<v8::Value> V8ValueConverterImpl::ToV8Array( | 227 v8::Local<v8::Value> V8ValueConverterImpl::ToV8Array( |
| 228 v8::Isolate* isolate, | 228 v8::Isolate* isolate, |
| 229 v8::Local<v8::Object> creation_context, | 229 v8::Local<v8::Object> creation_context, |
| 230 const base::ListValue* val) const { | 230 const base::ListValue* val) const { |
| 231 v8::Local<v8::Array> result(v8::Array::New(isolate, val->GetSize())); | 231 v8::Local<v8::Array> result(v8::Array::New(isolate, val->GetSize())); |
| 232 | 232 |
| 233 // TODO(robwu): Callers should pass in the context. |
| 234 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 235 |
| 233 for (size_t i = 0; i < val->GetSize(); ++i) { | 236 for (size_t i = 0; i < val->GetSize(); ++i) { |
| 234 const base::Value* child = NULL; | 237 const base::Value* child = NULL; |
| 235 CHECK(val->Get(i, &child)); | 238 CHECK(val->Get(i, &child)); |
| 236 | 239 |
| 237 v8::Local<v8::Value> child_v8 = | 240 v8::Local<v8::Value> child_v8 = |
| 238 ToV8ValueImpl(isolate, creation_context, child); | 241 ToV8ValueImpl(isolate, creation_context, child); |
| 239 CHECK(!child_v8.IsEmpty()); | 242 CHECK(!child_v8.IsEmpty()); |
| 240 | 243 |
| 241 v8::TryCatch try_catch(isolate); | 244 v8::Maybe<bool> maybe = |
| 242 result->Set(static_cast<uint32_t>(i), child_v8); | 245 result->CreateDataProperty(context, static_cast<uint32_t>(i), child_v8); |
| 243 if (try_catch.HasCaught()) | 246 if (!maybe.IsJust() || !maybe.FromJust()) |
| 244 LOG(ERROR) << "Setter for index " << i << " threw an exception."; | 247 LOG(ERROR) << "Failed to set value at index " << i; |
| 245 } | 248 } |
| 246 | 249 |
| 247 return result; | 250 return result; |
| 248 } | 251 } |
| 249 | 252 |
| 250 v8::Local<v8::Value> V8ValueConverterImpl::ToV8Object( | 253 v8::Local<v8::Value> V8ValueConverterImpl::ToV8Object( |
| 251 v8::Isolate* isolate, | 254 v8::Isolate* isolate, |
| 252 v8::Local<v8::Object> creation_context, | 255 v8::Local<v8::Object> creation_context, |
| 253 const base::DictionaryValue* val) const { | 256 const base::DictionaryValue* val) const { |
| 254 v8::Local<v8::Object> result(v8::Object::New(isolate)); | 257 v8::Local<v8::Object> result(v8::Object::New(isolate)); |
| 255 | 258 |
| 259 // TODO(robwu): Callers should pass in the context. |
| 260 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 261 |
| 256 for (base::DictionaryValue::Iterator iter(*val); | 262 for (base::DictionaryValue::Iterator iter(*val); |
| 257 !iter.IsAtEnd(); iter.Advance()) { | 263 !iter.IsAtEnd(); iter.Advance()) { |
| 258 const std::string& key = iter.key(); | 264 const std::string& key = iter.key(); |
| 259 v8::Local<v8::Value> child_v8 = | 265 v8::Local<v8::Value> child_v8 = |
| 260 ToV8ValueImpl(isolate, creation_context, &iter.value()); | 266 ToV8ValueImpl(isolate, creation_context, &iter.value()); |
| 261 CHECK(!child_v8.IsEmpty()); | 267 CHECK(!child_v8.IsEmpty()); |
| 262 | 268 |
| 263 v8::TryCatch try_catch(isolate); | 269 v8::Maybe<bool> maybe = result->CreateDataProperty( |
| 264 result->Set( | 270 context, |
| 265 v8::String::NewFromUtf8( | 271 v8::String::NewFromUtf8(isolate, key.c_str(), v8::String::kNormalString, |
| 266 isolate, key.c_str(), v8::String::kNormalString, key.length()), | 272 key.length()), |
| 267 child_v8); | 273 child_v8); |
| 268 if (try_catch.HasCaught()) { | 274 if (!maybe.IsJust() || !maybe.FromJust()) |
| 269 LOG(ERROR) << "Setter for property " << key.c_str() << " threw an " | 275 LOG(ERROR) << "Failed to set property with key " << key; |
| 270 << "exception."; | |
| 271 } | |
| 272 } | 276 } |
| 273 | 277 |
| 274 return result; | 278 return result; |
| 275 } | 279 } |
| 276 | 280 |
| 277 v8::Local<v8::Value> V8ValueConverterImpl::ToArrayBuffer( | 281 v8::Local<v8::Value> V8ValueConverterImpl::ToArrayBuffer( |
| 278 v8::Isolate* isolate, | 282 v8::Isolate* isolate, |
| 279 v8::Local<v8::Object> creation_context, | 283 v8::Local<v8::Object> creation_context, |
| 280 const base::BinaryValue* value) const { | 284 const base::BinaryValue* value) const { |
| 281 blink::WebArrayBuffer buffer = | 285 blink::WebArrayBuffer buffer = |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 continue; | 556 continue; |
| 553 | 557 |
| 554 result->SetWithoutPathExpansion(std::string(*name_utf8, name_utf8.length()), | 558 result->SetWithoutPathExpansion(std::string(*name_utf8, name_utf8.length()), |
| 555 child.release()); | 559 child.release()); |
| 556 } | 560 } |
| 557 | 561 |
| 558 return result.release(); | 562 return result.release(); |
| 559 } | 563 } |
| 560 | 564 |
| 561 } // namespace content | 565 } // namespace content |
| OLD | NEW |