| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/renderer/v8_value_converter.h" | 5 #include "content/renderer/v8_value_converter.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 } | 112 } |
| 113 } | 113 } |
| 114 | 114 |
| 115 return result; | 115 return result; |
| 116 } | 116 } |
| 117 | 117 |
| 118 Value* V8ValueConverter::FromV8ValueImpl(v8::Handle<v8::Value> val) const { | 118 Value* V8ValueConverter::FromV8ValueImpl(v8::Handle<v8::Value> val) const { |
| 119 CHECK(!val.IsEmpty()); | 119 CHECK(!val.IsEmpty()); |
| 120 | 120 |
| 121 if (val->IsNull()) | 121 if (val->IsNull()) |
| 122 return Value::CreateNullValue(); | 122 return base::NullValue(); |
| 123 | 123 |
| 124 if (val->IsBoolean()) | 124 if (val->IsBoolean()) |
| 125 return Value::CreateBooleanValue(val->ToBoolean()->Value()); | 125 return Value::CreateBooleanValue(val->ToBoolean()->Value()); |
| 126 | 126 |
| 127 if (val->IsInt32()) | 127 if (val->IsInt32()) |
| 128 return Value::CreateIntegerValue(val->ToInt32()->Value()); | 128 return Value::CreateIntegerValue(val->ToInt32()->Value()); |
| 129 | 129 |
| 130 if (val->IsNumber()) | 130 if (val->IsNumber()) |
| 131 return Value::CreateDoubleValue(val->ToNumber()->Value()); | 131 return Value::CreateDoubleValue(val->ToNumber()->Value()); |
| 132 | 132 |
| 133 if (val->IsString()) { | 133 if (val->IsString()) { |
| 134 v8::String::Utf8Value utf8(val->ToString()); | 134 v8::String::Utf8Value utf8(val->ToString()); |
| 135 return Value::CreateStringValue(std::string(*utf8, utf8.length())); | 135 return Value::CreateStringValue(std::string(*utf8, utf8.length())); |
| 136 } | 136 } |
| 137 | 137 |
| 138 if (allow_undefined_ && val->IsUndefined()) | 138 if (allow_undefined_ && val->IsUndefined()) |
| 139 return Value::CreateNullValue(); | 139 return base::NullValue(); |
| 140 | 140 |
| 141 if (allow_date_ && val->IsDate()) { | 141 if (allow_date_ && val->IsDate()) { |
| 142 v8::Date* date = v8::Date::Cast(*val); | 142 v8::Date* date = v8::Date::Cast(*val); |
| 143 return Value::CreateDoubleValue(date->NumberValue() / 1000.0); | 143 return Value::CreateDoubleValue(date->NumberValue() / 1000.0); |
| 144 } | 144 } |
| 145 | 145 |
| 146 if (allow_regexp_ && val->IsRegExp()) { | 146 if (allow_regexp_ && val->IsRegExp()) { |
| 147 return Value::CreateStringValue( | 147 return Value::CreateStringValue( |
| 148 *v8::String::Utf8Value(val->ToString())); | 148 *v8::String::Utf8Value(val->ToString())); |
| 149 } | 149 } |
| 150 | 150 |
| 151 // v8::Value doesn't have a ToArray() method for some reason. | 151 // v8::Value doesn't have a ToArray() method for some reason. |
| 152 if (val->IsArray()) | 152 if (val->IsArray()) |
| 153 return FromV8Array(val.As<v8::Array>()); | 153 return FromV8Array(val.As<v8::Array>()); |
| 154 | 154 |
| 155 if (val->IsObject()) | 155 if (val->IsObject()) |
| 156 return FromV8Object(val->ToObject()); | 156 return FromV8Object(val->ToObject()); |
| 157 | 157 |
| 158 LOG(ERROR) << "Unexpected v8 value type encountered."; | 158 LOG(ERROR) << "Unexpected v8 value type encountered."; |
| 159 return Value::CreateNullValue(); | 159 return base::NullValue(); |
| 160 } | 160 } |
| 161 | 161 |
| 162 ListValue* V8ValueConverter::FromV8Array(v8::Handle<v8::Array> val) const { | 162 ListValue* V8ValueConverter::FromV8Array(v8::Handle<v8::Array> val) const { |
| 163 ListValue* result = new ListValue(); | 163 ListValue* result = new ListValue(); |
| 164 for (uint32 i = 0; i < val->Length(); ++i) { | 164 for (uint32 i = 0; i < val->Length(); ++i) { |
| 165 v8::TryCatch try_catch; | 165 v8::TryCatch try_catch; |
| 166 v8::Handle<v8::Value> child_v8 = val->Get(i); | 166 v8::Handle<v8::Value> child_v8 = val->Get(i); |
| 167 if (try_catch.HasCaught()) { | 167 if (try_catch.HasCaught()) { |
| 168 LOG(ERROR) << "Getter for index " << i << " threw an exception."; | 168 LOG(ERROR) << "Getter for index " << i << " threw an exception."; |
| 169 child_v8 = v8::Null(); | 169 child_v8 = v8::Null(); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 } | 205 } |
| 206 | 206 |
| 207 Value* child = FromV8ValueImpl(child_v8); | 207 Value* child = FromV8ValueImpl(child_v8); |
| 208 CHECK(child); | 208 CHECK(child); |
| 209 | 209 |
| 210 result->SetWithoutPathExpansion(std::string(*name_utf8, name_utf8.length()), | 210 result->SetWithoutPathExpansion(std::string(*name_utf8, name_utf8.length()), |
| 211 child); | 211 child); |
| 212 } | 212 } |
| 213 return result; | 213 return result; |
| 214 } | 214 } |
| OLD | NEW |