| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/java/gin_java_bridge_value_converter.h" | 5 #include "content/renderer/java/gin_java_bridge_value_converter.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 20 matching lines...) Expand all Loading... |
| 31 | 31 |
| 32 v8::Local<v8::Value> GinJavaBridgeValueConverter::ToV8Value( | 32 v8::Local<v8::Value> GinJavaBridgeValueConverter::ToV8Value( |
| 33 const base::Value* value, | 33 const base::Value* value, |
| 34 v8::Local<v8::Context> context) const { | 34 v8::Local<v8::Context> context) const { |
| 35 return converter_->ToV8Value(value, context); | 35 return converter_->ToV8Value(value, context); |
| 36 } | 36 } |
| 37 | 37 |
| 38 std::unique_ptr<base::Value> GinJavaBridgeValueConverter::FromV8Value( | 38 std::unique_ptr<base::Value> GinJavaBridgeValueConverter::FromV8Value( |
| 39 v8::Local<v8::Value> value, | 39 v8::Local<v8::Value> value, |
| 40 v8::Local<v8::Context> context) const { | 40 v8::Local<v8::Context> context) const { |
| 41 return base::WrapUnique(converter_->FromV8Value(value, context)); | 41 return converter_->FromV8Value(value, context); |
| 42 } | 42 } |
| 43 | 43 |
| 44 bool GinJavaBridgeValueConverter::FromV8Object( | 44 bool GinJavaBridgeValueConverter::FromV8Object( |
| 45 v8::Local<v8::Object> value, | 45 v8::Local<v8::Object> value, |
| 46 base::Value** out, | 46 std::unique_ptr<base::Value>* out, |
| 47 v8::Isolate* isolate, | 47 v8::Isolate* isolate, |
| 48 const FromV8ValueCallback& callback) const { | 48 const FromV8ValueCallback& callback) const { |
| 49 GinJavaBridgeObject* unwrapped; | 49 GinJavaBridgeObject* unwrapped; |
| 50 if (!gin::ConvertFromV8(isolate, value, &unwrapped)) { | 50 if (!gin::ConvertFromV8(isolate, value, &unwrapped)) { |
| 51 return false; | 51 return false; |
| 52 } | 52 } |
| 53 *out = | 53 *out = GinJavaBridgeValue::CreateObjectIDValue(unwrapped->object_id()); |
| 54 GinJavaBridgeValue::CreateObjectIDValue(unwrapped->object_id()).release(); | |
| 55 return true; | 54 return true; |
| 56 } | 55 } |
| 57 | 56 |
| 58 namespace { | 57 namespace { |
| 59 | 58 |
| 60 class TypedArraySerializer { | 59 class TypedArraySerializer { |
| 61 public: | 60 public: |
| 62 virtual ~TypedArraySerializer() {} | 61 virtual ~TypedArraySerializer() {} |
| 63 static std::unique_ptr<TypedArraySerializer> Create( | 62 static std::unique_ptr<TypedArraySerializer> Create( |
| 64 v8::Local<v8::TypedArray> typed_array); | 63 v8::Local<v8::TypedArray> typed_array); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 return TypedArraySerializerImpl<double, double>::Create(typed_array); | 116 return TypedArraySerializerImpl<double, double>::Create(typed_array); |
| 118 } | 117 } |
| 119 NOTREACHED(); | 118 NOTREACHED(); |
| 120 return std::unique_ptr<TypedArraySerializer>(); | 119 return std::unique_ptr<TypedArraySerializer>(); |
| 121 } | 120 } |
| 122 | 121 |
| 123 } // namespace | 122 } // namespace |
| 124 | 123 |
| 125 bool GinJavaBridgeValueConverter::FromV8ArrayBuffer( | 124 bool GinJavaBridgeValueConverter::FromV8ArrayBuffer( |
| 126 v8::Local<v8::Object> value, | 125 v8::Local<v8::Object> value, |
| 127 base::Value** out, | 126 std::unique_ptr<base::Value>* out, |
| 128 v8::Isolate* isolate) const { | 127 v8::Isolate* isolate) const { |
| 129 if (!value->IsTypedArray()) { | 128 if (!value->IsTypedArray()) { |
| 130 *out = GinJavaBridgeValue::CreateUndefinedValue().release(); | 129 *out = GinJavaBridgeValue::CreateUndefinedValue(); |
| 131 return true; | 130 return true; |
| 132 } | 131 } |
| 133 | 132 |
| 134 char* data = NULL; | 133 char* data = NULL; |
| 135 size_t data_length = 0; | 134 size_t data_length = 0; |
| 136 gin::ArrayBufferView view; | 135 gin::ArrayBufferView view; |
| 137 if (ConvertFromV8(isolate, value.As<v8::ArrayBufferView>(), &view)) { | 136 if (ConvertFromV8(isolate, value.As<v8::ArrayBufferView>(), &view)) { |
| 138 data = reinterpret_cast<char*>(view.bytes()); | 137 data = reinterpret_cast<char*>(view.bytes()); |
| 139 data_length = view.num_bytes(); | 138 data_length = view.num_bytes(); |
| 140 } | 139 } |
| 141 if (!data) { | 140 if (!data) { |
| 142 *out = GinJavaBridgeValue::CreateUndefinedValue().release(); | 141 *out = GinJavaBridgeValue::CreateUndefinedValue(); |
| 143 return true; | 142 return true; |
| 144 } | 143 } |
| 145 | 144 |
| 146 base::ListValue* result = new base::ListValue(); | 145 std::unique_ptr<base::ListValue> result(new base::ListValue); |
| 147 *out = result; | |
| 148 std::unique_ptr<TypedArraySerializer> serializer( | 146 std::unique_ptr<TypedArraySerializer> serializer( |
| 149 TypedArraySerializer::Create(value.As<v8::TypedArray>())); | 147 TypedArraySerializer::Create(value.As<v8::TypedArray>())); |
| 150 serializer->serializeTo(data, data_length, result); | 148 serializer->serializeTo(data, data_length, result.get()); |
| 149 *out = std::move(result); |
| 151 return true; | 150 return true; |
| 152 } | 151 } |
| 153 | 152 |
| 154 bool GinJavaBridgeValueConverter::FromV8Number(v8::Local<v8::Number> value, | 153 bool GinJavaBridgeValueConverter::FromV8Number( |
| 155 base::Value** out) const { | 154 v8::Local<v8::Number> value, |
| 155 std::unique_ptr<base::Value>* out) const { |
| 156 double double_value = value->Value(); | 156 double double_value = value->Value(); |
| 157 if (std::isfinite(double_value)) | 157 if (std::isfinite(double_value)) |
| 158 return false; | 158 return false; |
| 159 *out = GinJavaBridgeValue::CreateNonFiniteValue(double_value).release(); | 159 *out = GinJavaBridgeValue::CreateNonFiniteValue(double_value); |
| 160 return true; | 160 return true; |
| 161 } | 161 } |
| 162 | 162 |
| 163 bool GinJavaBridgeValueConverter::FromV8Undefined(base::Value** out) const { | 163 bool GinJavaBridgeValueConverter::FromV8Undefined( |
| 164 *out = GinJavaBridgeValue::CreateUndefinedValue().release(); | 164 std::unique_ptr<base::Value>* out) const { |
| 165 *out = GinJavaBridgeValue::CreateUndefinedValue(); |
| 165 return true; | 166 return true; |
| 166 } | 167 } |
| 167 | 168 |
| 168 } // namespace content | 169 } // namespace content |
| OLD | NEW |