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

Side by Side Diff: gin/converter.h

Issue 1106393002: gin: Use V8 Maybe APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@maybe-gin-converter
Patch Set: Created 5 years, 7 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
« no previous file with comments | « no previous file | gin/dictionary.h » ('j') | gin/try_catch.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef GIN_CONVERTER_H_ 5 #ifndef GIN_CONVERTER_H_
6 #define GIN_CONVERTER_H_ 6 #define GIN_CONVERTER_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/strings/string_piece.h" 11 #include "base/strings/string_piece.h"
12 #include "gin/gin_export.h" 12 #include "gin/gin_export.h"
13 #include "v8/include/v8.h" 13 #include "v8/include/v8.h"
14 14
15 namespace gin { 15 namespace gin {
16 16
17 template<typename KeyType>
18 bool SetProperty(v8::Isolate* isolate,
19 v8::Local<v8::Object> object,
20 KeyType key,
21 v8::Local<v8::Value> value) {
22 auto maybe = object->Set(isolate->GetCurrentContext(), key, value);
23 return !maybe.IsNothing() && maybe.FromJust();
24 }
25
17 template<typename T, typename Enable = void> 26 template<typename T, typename Enable = void>
18 struct Converter {}; 27 struct Converter {};
19 28
20 template<> 29 template<>
21 struct GIN_EXPORT Converter<bool> { 30 struct GIN_EXPORT Converter<bool> {
22 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate, 31 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
23 bool val); 32 bool val);
24 static bool FromV8(v8::Isolate* isolate, 33 static bool FromV8(v8::Isolate* isolate,
25 v8::Handle<v8::Value> val, 34 v8::Handle<v8::Value> val,
26 bool* out); 35 bool* out);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 struct GIN_EXPORT Converter<v8::Handle<v8::Value> > { 147 struct GIN_EXPORT Converter<v8::Handle<v8::Value> > {
139 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate, 148 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
140 v8::Handle<v8::Value> val); 149 v8::Handle<v8::Value> val);
141 static bool FromV8(v8::Isolate* isolate, 150 static bool FromV8(v8::Isolate* isolate,
142 v8::Handle<v8::Value> val, 151 v8::Handle<v8::Value> val,
143 v8::Handle<v8::Value>* out); 152 v8::Handle<v8::Value>* out);
144 }; 153 };
145 154
146 template<typename T> 155 template<typename T>
147 struct Converter<std::vector<T> > { 156 struct Converter<std::vector<T> > {
157 // If this function fails to set an element due to an exception, this returns
158 // an empty handle.
148 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate, 159 static v8::Handle<v8::Value> ToV8(v8::Isolate* isolate,
149 const std::vector<T>& val) { 160 const std::vector<T>& val) {
150 v8::Handle<v8::Array> result( 161 v8::Handle<v8::Array> result(
151 v8::Array::New(isolate, static_cast<int>(val.size()))); 162 v8::Array::New(isolate, static_cast<int>(val.size())));
152 for (size_t i = 0; i < val.size(); ++i) { 163 for (size_t i = 0; i < val.size(); ++i) {
153 result->Set(static_cast<int>(i), Converter<T>::ToV8(isolate, val[i])); 164 if (!SetProperty(isolate, result, static_cast<int>(i),
165 Converter<T>::ToV8(isolate, val[i])))
166 return v8::Handle<v8::Value>();
jochen (gone - plz use gerrit) 2015/04/28 11:14:20 we shouldn't return empty handles but MaybeLocal<>
bashi 2015/05/01 03:50:35 Changing return type requires 3-way CLs. 1. Add Ma
154 } 167 }
155 return result; 168 return result;
156 } 169 }
157 170
158 static bool FromV8(v8::Isolate* isolate, 171 static bool FromV8(v8::Isolate* isolate,
159 v8::Handle<v8::Value> val, 172 v8::Handle<v8::Value> val,
160 std::vector<T>* out) { 173 std::vector<T>* out) {
161 if (!val->IsArray()) 174 if (!val->IsArray())
162 return false; 175 return false;
163 176
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 bool ConvertFromV8(v8::Isolate* isolate, v8::Handle<v8::Value> input, 213 bool ConvertFromV8(v8::Isolate* isolate, v8::Handle<v8::Value> input,
201 T* result) { 214 T* result) {
202 return Converter<T>::FromV8(isolate, input, result); 215 return Converter<T>::FromV8(isolate, input, result);
203 } 216 }
204 217
205 GIN_EXPORT std::string V8ToString(v8::Handle<v8::Value> value); 218 GIN_EXPORT std::string V8ToString(v8::Handle<v8::Value> value);
206 219
207 } // namespace gin 220 } // namespace gin
208 221
209 #endif // GIN_CONVERTER_H_ 222 #endif // GIN_CONVERTER_H_
OLDNEW
« no previous file with comments | « no previous file | gin/dictionary.h » ('j') | gin/try_catch.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698