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

Side by Side Diff: mojo/public/cpp/bindings/lib/array_serialization.h

Issue 473793004: Mojo C++ bindings: better log message for serialization warnings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
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 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
7 7
8 #include <string.h> // For |memcpy()|. 8 #include <string.h> // For |memcpy()|.
9 9
10 #include <vector> 10 #include <vector>
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 Buffer* buf, 96 Buffer* buf,
97 Array_Data<H>* output) { 97 Array_Data<H>* output) {
98 MOJO_COMPILE_ASSERT( 98 MOJO_COMPILE_ASSERT(
99 (IsSame<ElementValidateParams, NoValidateParams>::value), 99 (IsSame<ElementValidateParams, NoValidateParams>::value),
100 Handle_type_should_not_have_array_validate_params); 100 Handle_type_should_not_have_array_validate_params);
101 101
102 for (size_t i = 0; i < input.size(); ++i) { 102 for (size_t i = 0; i < input.size(); ++i) {
103 output->at(i) = input[i].release(); // Transfer ownership of the handle. 103 output->at(i) = input[i].release(); // Transfer ownership of the handle.
104 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 104 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
105 !element_is_nullable && !output->at(i).is_valid(), 105 !element_is_nullable && !output->at(i).is_valid(),
106 VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE); 106 VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE,
107 MakeMessageWithArrayIndex(
108 "invalid handle in array expecting valid handles",
109 input.size(), i));
107 } 110 }
108 } 111 }
109 static void DeserializeElements( 112 static void DeserializeElements(
110 Array_Data<H>* input, Array<ScopedHandleBase<H> >* output) { 113 Array_Data<H>* input, Array<ScopedHandleBase<H> >* output) {
111 Array<ScopedHandleBase<H> > result(input->size()); 114 Array<ScopedHandleBase<H> > result(input->size());
112 for (size_t i = 0; i < input->size(); ++i) 115 for (size_t i = 0; i < input->size(); ++i)
113 result.at(i) = MakeScopedHandle(FetchAndReset(&input->at(i))); 116 result.at(i) = MakeScopedHandle(FetchAndReset(&input->at(i)));
114 output->Swap(&result); 117 output->Swap(&result);
115 } 118 }
116 }; 119 };
(...skipping 10 matching lines...) Expand all
127 static void SerializeElements(Array<S> input, 130 static void SerializeElements(Array<S> input,
128 Buffer* buf, 131 Buffer* buf,
129 Array_Data<typename S::Data_*>* output) { 132 Array_Data<typename S::Data_*>* output) {
130 for (size_t i = 0; i < input.size(); ++i) { 133 for (size_t i = 0; i < input.size(); ++i) {
131 typename S::Data_* element; 134 typename S::Data_* element;
132 SerializeCaller<S, ElementValidateParams>::Run( 135 SerializeCaller<S, ElementValidateParams>::Run(
133 input[i].Pass(), buf, &element); 136 input[i].Pass(), buf, &element);
134 output->at(i) = element; 137 output->at(i) = element;
135 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 138 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
136 !element_is_nullable && !element, 139 !element_is_nullable && !element,
137 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER); 140 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
141 MakeMessageWithArrayIndex(
142 "null in array expecting valid pointers", input.size(), i));
138 } 143 }
139 } 144 }
140 static void DeserializeElements( 145 static void DeserializeElements(
141 Array_Data<typename S::Data_*>* input, Array<S>* output) { 146 Array_Data<typename S::Data_*>* input, Array<S>* output) {
142 Array<S> result(input->size()); 147 Array<S> result(input->size());
143 for (size_t i = 0; i < input->size(); ++i) { 148 for (size_t i = 0; i < input->size(); ++i) {
144 S element; 149 S element;
145 Deserialize_(input->at(i), &element); 150 Deserialize_(input->at(i), &element);
146 result[i] = element.Pass(); 151 result[i] = element.Pass();
147 } 152 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 (IsSame<ElementValidateParams, 191 (IsSame<ElementValidateParams,
187 ArrayValidateParams<0, false, NoValidateParams> >::value), 192 ArrayValidateParams<0, false, NoValidateParams> >::value),
188 String_type_has_unexpected_array_validate_params); 193 String_type_has_unexpected_array_validate_params);
189 194
190 for (size_t i = 0; i < input.size(); ++i) { 195 for (size_t i = 0; i < input.size(); ++i) {
191 String_Data* element; 196 String_Data* element;
192 Serialize_(input[i], buf, &element); 197 Serialize_(input[i], buf, &element);
193 output->at(i) = element; 198 output->at(i) = element;
194 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 199 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
195 !element_is_nullable && !element, 200 !element_is_nullable && !element,
196 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER); 201 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
202 MakeMessageWithArrayIndex(
203 "null in array expecting valid strings", input.size(), i));
197 } 204 }
198 } 205 }
199 static void DeserializeElements( 206 static void DeserializeElements(
200 Array_Data<String_Data*>* input, Array<String>* output) { 207 Array_Data<String_Data*>* input, Array<String>* output) {
201 Array<String> result(input->size()); 208 Array<String> result(input->size());
202 for (size_t i = 0; i < input->size(); ++i) 209 for (size_t i = 0; i < input->size(); ++i)
203 Deserialize_(input->at(i), &result[i]); 210 Deserialize_(input->at(i), &result[i]);
204 output->Swap(&result); 211 output->Swap(&result);
205 } 212 }
206 }; 213 };
207 214
208 } // namespace internal 215 } // namespace internal
209 216
210 template <typename E> 217 template <typename E>
211 inline size_t GetSerializedSize_(const Array<E>& input) { 218 inline size_t GetSerializedSize_(const Array<E>& input) {
212 if (!input) 219 if (!input)
213 return 0; 220 return 0;
214 typedef typename internal::WrapperTraits<E>::DataType F; 221 typedef typename internal::WrapperTraits<E>::DataType F;
215 return internal::ArraySerializer<E, F>::GetSerializedSize(input); 222 return internal::ArraySerializer<E, F>::GetSerializedSize(input);
216 } 223 }
217 224
218 template <typename ValidateParams, typename E, typename F> 225 template <typename ValidateParams, typename E, typename F>
219 inline void SerializeArray_(Array<E> input, internal::Buffer* buf, 226 inline void SerializeArray_(Array<E> input, internal::Buffer* buf,
220 internal::Array_Data<F>** output) { 227 internal::Array_Data<F>** output) {
221 if (input) { 228 if (input) {
222 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( 229 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
223 ValidateParams::expected_num_elements != 0 && 230 ValidateParams::expected_num_elements != 0 &&
224 input.size() != ValidateParams::expected_num_elements, 231 input.size() != ValidateParams::expected_num_elements,
225 internal::VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER); 232 internal::VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER,
233 internal::MakeMessageWithExpectedArraySize(
234 "fixed-size array has wrong number of elements",
235 input.size(), ValidateParams::expected_num_elements));
226 236
227 internal::Array_Data<F>* result = 237 internal::Array_Data<F>* result =
228 internal::Array_Data<F>::New(input.size(), buf); 238 internal::Array_Data<F>::New(input.size(), buf);
229 if (result) { 239 if (result) {
230 internal::ArraySerializer<E, F>::template SerializeElements< 240 internal::ArraySerializer<E, F>::template SerializeElements<
231 ValidateParams::element_is_nullable, 241 ValidateParams::element_is_nullable,
232 typename ValidateParams::ElementValidateParams>( 242 typename ValidateParams::ElementValidateParams>(
233 internal::Forward(input), buf, result); 243 internal::Forward(input), buf, result);
234 } 244 }
235 *output = result; 245 *output = result;
236 } else { 246 } else {
237 *output = NULL; 247 *output = NULL;
238 } 248 }
239 } 249 }
240 250
241 template <typename E, typename F> 251 template <typename E, typename F>
242 inline void Deserialize_(internal::Array_Data<F>* input, Array<E>* output) { 252 inline void Deserialize_(internal::Array_Data<F>* input, Array<E>* output) {
243 if (input) { 253 if (input) {
244 internal::ArraySerializer<E, F>::DeserializeElements(input, output); 254 internal::ArraySerializer<E, F>::DeserializeElements(input, output);
245 } else { 255 } else {
246 output->reset(); 256 output->reset();
247 } 257 }
248 } 258 }
249 259
250 } // namespace mojo 260 } // namespace mojo
251 261
252 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ 262 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/array_internal.cc ('k') | mojo/public/cpp/bindings/lib/validation_errors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698