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

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

Issue 2112093002: Mojo C++ bindings: Merge EncodePointers/DecodePointers into Serialize/Deserialize, respectively. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@61_array_fix
Patch Set: . Created 4 years, 5 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 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_DATA_INTERNAL_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_DATA_INTERNAL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_DATA_INTERNAL_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_DATA_INTERNAL_H_
7 7
8 #include "mojo/public/cpp/bindings/lib/array_internal.h" 8 #include "mojo/public/cpp/bindings/lib/array_internal.h"
9 #include "mojo/public/cpp/bindings/lib/validate_params.h" 9 #include "mojo/public/cpp/bindings/lib/validate_params.h"
10 #include "mojo/public/cpp/bindings/lib/validation_errors.h" 10 #include "mojo/public/cpp/bindings/lib/validation_errors.h"
(...skipping 23 matching lines...) Expand all
34 return false; 34 return false;
35 35
36 const Map_Data* object = static_cast<const Map_Data*>(data); 36 const Map_Data* object = static_cast<const Map_Data*>(data);
37 if (object->header_.num_bytes != sizeof(Map_Data) || 37 if (object->header_.num_bytes != sizeof(Map_Data) ||
38 object->header_.version != 0) { 38 object->header_.version != 0) {
39 ReportValidationError(validation_context, 39 ReportValidationError(validation_context,
40 VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER); 40 VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER);
41 return false; 41 return false;
42 } 42 }
43 43
44 if (!ValidateEncodedPointer(&object->keys.offset)) { 44 if (!ValidatePointerNonNullable(
45 ReportValidationError(validation_context, 45 object->keys, "null key array in map struct", validation_context) ||
46 VALIDATION_ERROR_ILLEGAL_POINTER); 46 !ValidateContainer(object->keys, validation_context,
47 return false; 47 validate_params->key_validate_params)) {
48 }
49 if (!object->keys.offset) {
50 ReportValidationError(validation_context,
51 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
52 "null key array in map struct");
53 return false;
54 }
55 if (!Array_Data<Key>::Validate(DecodePointerRaw(&object->keys.offset),
56 validation_context,
57 validate_params->key_validate_params)) {
58 return false; 48 return false;
59 } 49 }
60 50
61 if (!ValidateEncodedPointer(&object->values.offset)) { 51 if (!ValidatePointerNonNullable(object->values,
62 ReportValidationError(validation_context, 52 "null value array in map struct",
63 VALIDATION_ERROR_ILLEGAL_POINTER); 53 validation_context) ||
64 return false; 54 !ValidateContainer(object->values, validation_context,
65 } 55 validate_params->element_validate_params)) {
66 if (!object->values.offset) {
67 ReportValidationError(validation_context,
68 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
69 "null value array in map struct");
70 return false;
71 }
72 if (!Array_Data<Value>::Validate(
73 DecodePointerRaw(&object->values.offset),
74 validation_context, validate_params->element_validate_params)) {
75 return false; 56 return false;
76 } 57 }
77 58
78 const ArrayHeader* key_header = 59 if (object->keys.Get()->size() != object->values.Get()->size()) {
79 static_cast<const ArrayHeader*>(DecodePointerRaw(&object->keys.offset));
80 const ArrayHeader* value_header = static_cast<const ArrayHeader*>(
81 DecodePointerRaw(&object->values.offset));
82 if (key_header->num_elements != value_header->num_elements) {
83 ReportValidationError(validation_context, 60 ReportValidationError(validation_context,
84 VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP); 61 VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP);
85 return false; 62 return false;
86 } 63 }
87 64
88 return true; 65 return true;
89 } 66 }
90 67
91 StructHeader header_; 68 StructHeader header_;
92 69
93 Pointer<Array_Data<Key>> keys; 70 Pointer<Array_Data<Key>> keys;
94 Pointer<Array_Data<Value>> values; 71 Pointer<Array_Data<Value>> values;
95 72
96 void EncodePointers() {
97 Encode(&keys);
98 Encode(&values);
99 }
100
101 void DecodePointers() {
102 Decode(&keys);
103 Decode(&values);
104 }
105
106 private: 73 private:
107 Map_Data() { 74 Map_Data() {
108 header_.num_bytes = sizeof(*this); 75 header_.num_bytes = sizeof(*this);
109 header_.version = 0; 76 header_.version = 0;
110 } 77 }
111 ~Map_Data() = delete; 78 ~Map_Data() = delete;
112 }; 79 };
113 static_assert(sizeof(Map_Data<char, char>) == 24, "Bad sizeof(Map_Data)"); 80 static_assert(sizeof(Map_Data<char, char>) == 24, "Bad sizeof(Map_Data)");
114 81
115 } // namespace internal 82 } // namespace internal
116 } // namespace mojo 83 } // namespace mojo
117 84
118 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_DATA_INTERNAL_H_ 85 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_DATA_INTERNAL_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/control_message_proxy.cc ('k') | mojo/public/cpp/bindings/lib/map_serialization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698