Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: content/renderer/java/gin_java_bridge_value_converter.cc

Issue 1873783003: Convert //content/renderer from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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>
11 11
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/ptr_util.h"
13 #include "base/values.h" 14 #include "base/values.h"
14 #include "content/common/android/gin_java_bridge_value.h" 15 #include "content/common/android/gin_java_bridge_value.h"
15 #include "content/renderer/java/gin_java_bridge_object.h" 16 #include "content/renderer/java/gin_java_bridge_object.h"
16 #include "gin/array_buffer.h" 17 #include "gin/array_buffer.h"
17 18
18 namespace content { 19 namespace content {
19 20
20 GinJavaBridgeValueConverter::GinJavaBridgeValueConverter() 21 GinJavaBridgeValueConverter::GinJavaBridgeValueConverter()
21 : converter_(V8ValueConverter::create()) { 22 : converter_(V8ValueConverter::create()) {
22 converter_->SetDateAllowed(false); 23 converter_->SetDateAllowed(false);
23 converter_->SetRegExpAllowed(false); 24 converter_->SetRegExpAllowed(false);
24 converter_->SetFunctionAllowed(true); 25 converter_->SetFunctionAllowed(true);
25 converter_->SetStrategy(this); 26 converter_->SetStrategy(this);
26 } 27 }
27 28
28 GinJavaBridgeValueConverter::~GinJavaBridgeValueConverter() { 29 GinJavaBridgeValueConverter::~GinJavaBridgeValueConverter() {
29 } 30 }
30 31
31 v8::Local<v8::Value> GinJavaBridgeValueConverter::ToV8Value( 32 v8::Local<v8::Value> GinJavaBridgeValueConverter::ToV8Value(
32 const base::Value* value, 33 const base::Value* value,
33 v8::Local<v8::Context> context) const { 34 v8::Local<v8::Context> context) const {
34 return converter_->ToV8Value(value, context); 35 return converter_->ToV8Value(value, context);
35 } 36 }
36 37
37 scoped_ptr<base::Value> GinJavaBridgeValueConverter::FromV8Value( 38 std::unique_ptr<base::Value> GinJavaBridgeValueConverter::FromV8Value(
38 v8::Local<v8::Value> value, 39 v8::Local<v8::Value> value,
39 v8::Local<v8::Context> context) const { 40 v8::Local<v8::Context> context) const {
40 return make_scoped_ptr(converter_->FromV8Value(value, context)); 41 return base::WrapUnique(converter_->FromV8Value(value, context));
41 } 42 }
42 43
43 bool GinJavaBridgeValueConverter::FromV8Object( 44 bool GinJavaBridgeValueConverter::FromV8Object(
44 v8::Local<v8::Object> value, 45 v8::Local<v8::Object> value,
45 base::Value** out, 46 base::Value** out,
46 v8::Isolate* isolate, 47 v8::Isolate* isolate,
47 const FromV8ValueCallback& callback) const { 48 const FromV8ValueCallback& callback) const {
48 GinJavaBridgeObject* unwrapped; 49 GinJavaBridgeObject* unwrapped;
49 if (!gin::ConvertFromV8(isolate, value, &unwrapped)) { 50 if (!gin::ConvertFromV8(isolate, value, &unwrapped)) {
50 return false; 51 return false;
51 } 52 }
52 *out = 53 *out =
53 GinJavaBridgeValue::CreateObjectIDValue(unwrapped->object_id()).release(); 54 GinJavaBridgeValue::CreateObjectIDValue(unwrapped->object_id()).release();
54 return true; 55 return true;
55 } 56 }
56 57
57 namespace { 58 namespace {
58 59
59 class TypedArraySerializer { 60 class TypedArraySerializer {
60 public: 61 public:
61 virtual ~TypedArraySerializer() {} 62 virtual ~TypedArraySerializer() {}
62 static scoped_ptr<TypedArraySerializer> Create( 63 static std::unique_ptr<TypedArraySerializer> Create(
63 v8::Local<v8::TypedArray> typed_array); 64 v8::Local<v8::TypedArray> typed_array);
64 virtual void serializeTo(char* data, 65 virtual void serializeTo(char* data,
65 size_t data_length, 66 size_t data_length,
66 base::ListValue* out) = 0; 67 base::ListValue* out) = 0;
67 protected: 68 protected:
68 TypedArraySerializer() {} 69 TypedArraySerializer() {}
69 }; 70 };
70 71
71 template <typename ElementType, typename ListType> 72 template <typename ElementType, typename ListType>
72 class TypedArraySerializerImpl : public TypedArraySerializer { 73 class TypedArraySerializerImpl : public TypedArraySerializer {
73 public: 74 public:
74 static scoped_ptr<TypedArraySerializer> Create( 75 static std::unique_ptr<TypedArraySerializer> Create(
75 v8::Local<v8::TypedArray> typed_array) { 76 v8::Local<v8::TypedArray> typed_array) {
76 return make_scoped_ptr( 77 return base::WrapUnique(
77 new TypedArraySerializerImpl<ElementType, ListType>(typed_array)); 78 new TypedArraySerializerImpl<ElementType, ListType>(typed_array));
78 } 79 }
79 80
80 void serializeTo(char* data, 81 void serializeTo(char* data,
81 size_t data_length, 82 size_t data_length,
82 base::ListValue* out) override { 83 base::ListValue* out) override {
83 DCHECK_EQ(data_length, typed_array_->Length() * sizeof(ElementType)); 84 DCHECK_EQ(data_length, typed_array_->Length() * sizeof(ElementType));
84 for (ElementType *element = reinterpret_cast<ElementType*>(data), 85 for (ElementType *element = reinterpret_cast<ElementType*>(data),
85 *end = element + typed_array_->Length(); 86 *end = element + typed_array_->Length();
86 element != end; 87 element != end;
87 ++element) { 88 ++element) {
88 const ListType list_value = *element; 89 const ListType list_value = *element;
89 out->Append(new base::FundamentalValue(list_value)); 90 out->Append(new base::FundamentalValue(list_value));
90 } 91 }
91 } 92 }
92 93
93 private: 94 private:
94 explicit TypedArraySerializerImpl(v8::Local<v8::TypedArray> typed_array) 95 explicit TypedArraySerializerImpl(v8::Local<v8::TypedArray> typed_array)
95 : typed_array_(typed_array) {} 96 : typed_array_(typed_array) {}
96 97
97 v8::Local<v8::TypedArray> typed_array_; 98 v8::Local<v8::TypedArray> typed_array_;
98 99
99 DISALLOW_COPY_AND_ASSIGN(TypedArraySerializerImpl); 100 DISALLOW_COPY_AND_ASSIGN(TypedArraySerializerImpl);
100 }; 101 };
101 102
102 // static 103 // static
103 scoped_ptr<TypedArraySerializer> TypedArraySerializer::Create( 104 std::unique_ptr<TypedArraySerializer> TypedArraySerializer::Create(
104 v8::Local<v8::TypedArray> typed_array) { 105 v8::Local<v8::TypedArray> typed_array) {
105 if (typed_array->IsInt8Array() || 106 if (typed_array->IsInt8Array() ||
106 typed_array->IsUint8Array() || 107 typed_array->IsUint8Array() ||
107 typed_array->IsUint8ClampedArray()) { 108 typed_array->IsUint8ClampedArray()) {
108 return TypedArraySerializerImpl<char, int>::Create(typed_array); 109 return TypedArraySerializerImpl<char, int>::Create(typed_array);
109 } else if (typed_array->IsInt16Array() || typed_array->IsUint16Array()) { 110 } else if (typed_array->IsInt16Array() || typed_array->IsUint16Array()) {
110 return TypedArraySerializerImpl<int16_t, int>::Create(typed_array); 111 return TypedArraySerializerImpl<int16_t, int>::Create(typed_array);
111 } else if (typed_array->IsInt32Array() || typed_array->IsUint32Array()) { 112 } else if (typed_array->IsInt32Array() || typed_array->IsUint32Array()) {
112 return TypedArraySerializerImpl<int32_t, int>::Create(typed_array); 113 return TypedArraySerializerImpl<int32_t, int>::Create(typed_array);
113 } else if (typed_array->IsFloat32Array()) { 114 } else if (typed_array->IsFloat32Array()) {
114 return TypedArraySerializerImpl<float, double>::Create(typed_array); 115 return TypedArraySerializerImpl<float, double>::Create(typed_array);
115 } else if (typed_array->IsFloat64Array()) { 116 } else if (typed_array->IsFloat64Array()) {
116 return TypedArraySerializerImpl<double, double>::Create(typed_array); 117 return TypedArraySerializerImpl<double, double>::Create(typed_array);
117 } 118 }
118 NOTREACHED(); 119 NOTREACHED();
119 return scoped_ptr<TypedArraySerializer>(); 120 return std::unique_ptr<TypedArraySerializer>();
120 } 121 }
121 122
122 } // namespace 123 } // namespace
123 124
124 bool GinJavaBridgeValueConverter::FromV8ArrayBuffer( 125 bool GinJavaBridgeValueConverter::FromV8ArrayBuffer(
125 v8::Local<v8::Object> value, 126 v8::Local<v8::Object> value,
126 base::Value** out, 127 base::Value** out,
127 v8::Isolate* isolate) const { 128 v8::Isolate* isolate) const {
128 if (!value->IsTypedArray()) { 129 if (!value->IsTypedArray()) {
129 *out = GinJavaBridgeValue::CreateUndefinedValue().release(); 130 *out = GinJavaBridgeValue::CreateUndefinedValue().release();
130 return true; 131 return true;
131 } 132 }
132 133
133 char* data = NULL; 134 char* data = NULL;
134 size_t data_length = 0; 135 size_t data_length = 0;
135 gin::ArrayBufferView view; 136 gin::ArrayBufferView view;
136 if (ConvertFromV8(isolate, value.As<v8::ArrayBufferView>(), &view)) { 137 if (ConvertFromV8(isolate, value.As<v8::ArrayBufferView>(), &view)) {
137 data = reinterpret_cast<char*>(view.bytes()); 138 data = reinterpret_cast<char*>(view.bytes());
138 data_length = view.num_bytes(); 139 data_length = view.num_bytes();
139 } 140 }
140 if (!data) { 141 if (!data) {
141 *out = GinJavaBridgeValue::CreateUndefinedValue().release(); 142 *out = GinJavaBridgeValue::CreateUndefinedValue().release();
142 return true; 143 return true;
143 } 144 }
144 145
145 base::ListValue* result = new base::ListValue(); 146 base::ListValue* result = new base::ListValue();
146 *out = result; 147 *out = result;
147 scoped_ptr<TypedArraySerializer> serializer( 148 std::unique_ptr<TypedArraySerializer> serializer(
148 TypedArraySerializer::Create(value.As<v8::TypedArray>())); 149 TypedArraySerializer::Create(value.As<v8::TypedArray>()));
149 serializer->serializeTo(data, data_length, result); 150 serializer->serializeTo(data, data_length, result);
150 return true; 151 return true;
151 } 152 }
152 153
153 bool GinJavaBridgeValueConverter::FromV8Number(v8::Local<v8::Number> value, 154 bool GinJavaBridgeValueConverter::FromV8Number(v8::Local<v8::Number> value,
154 base::Value** out) const { 155 base::Value** out) const {
155 double double_value = value->Value(); 156 double double_value = value->Value();
156 if (std::isfinite(double_value)) 157 if (std::isfinite(double_value))
157 return false; 158 return false;
158 *out = GinJavaBridgeValue::CreateNonFiniteValue(double_value).release(); 159 *out = GinJavaBridgeValue::CreateNonFiniteValue(double_value).release();
159 return true; 160 return true;
160 } 161 }
161 162
162 bool GinJavaBridgeValueConverter::FromV8Undefined(base::Value** out) const { 163 bool GinJavaBridgeValueConverter::FromV8Undefined(base::Value** out) const {
163 *out = GinJavaBridgeValue::CreateUndefinedValue().release(); 164 *out = GinJavaBridgeValue::CreateUndefinedValue().release();
164 return true; 165 return true;
165 } 166 }
166 167
167 } // namespace content 168 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698