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

Side by Side Diff: mojo/public/js/new_bindings/validator.js

Issue 2893493002: Mojo JS bindings: update the new bindings with the associated interface feature. (Closed)
Patch Set: . Created 3 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 | « mojo/public/js/new_bindings/router.js ('k') | third_party/WebKit/LayoutTests/TestExpectations » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 (function() { 5 (function() {
6 var internal = mojo.internal; 6 var internal = mojo.internal;
7 7
8 var validationError = { 8 var validationError = {
9 NONE: 'VALIDATION_ERROR_NONE', 9 NONE: 'VALIDATION_ERROR_NONE',
10 MISALIGNED_OBJECT: 'VALIDATION_ERROR_MISALIGNED_OBJECT', 10 MISALIGNED_OBJECT: 'VALIDATION_ERROR_MISALIGNED_OBJECT',
11 ILLEGAL_MEMORY_RANGE: 'VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE', 11 ILLEGAL_MEMORY_RANGE: 'VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE',
12 UNEXPECTED_STRUCT_HEADER: 'VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER', 12 UNEXPECTED_STRUCT_HEADER: 'VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER',
13 UNEXPECTED_ARRAY_HEADER: 'VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER', 13 UNEXPECTED_ARRAY_HEADER: 'VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER',
14 ILLEGAL_HANDLE: 'VALIDATION_ERROR_ILLEGAL_HANDLE', 14 ILLEGAL_HANDLE: 'VALIDATION_ERROR_ILLEGAL_HANDLE',
15 UNEXPECTED_INVALID_HANDLE: 'VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE', 15 UNEXPECTED_INVALID_HANDLE: 'VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE',
16 ILLEGAL_POINTER: 'VALIDATION_ERROR_ILLEGAL_POINTER', 16 ILLEGAL_POINTER: 'VALIDATION_ERROR_ILLEGAL_POINTER',
17 UNEXPECTED_NULL_POINTER: 'VALIDATION_ERROR_UNEXPECTED_NULL_POINTER', 17 UNEXPECTED_NULL_POINTER: 'VALIDATION_ERROR_UNEXPECTED_NULL_POINTER',
18 ILLEGAL_INTERFACE_ID: 'VALIDATION_ERROR_ILLEGAL_INTERFACE_ID',
19 UNEXPECTED_INVALID_INTERFACE_ID:
20 'VALIDATION_ERROR_UNEXPECTED_INVALID_INTERFACE_ID',
18 MESSAGE_HEADER_INVALID_FLAGS: 21 MESSAGE_HEADER_INVALID_FLAGS:
19 'VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS', 22 'VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS',
20 MESSAGE_HEADER_MISSING_REQUEST_ID: 23 MESSAGE_HEADER_MISSING_REQUEST_ID:
21 'VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID', 24 'VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID',
22 DIFFERENT_SIZED_ARRAYS_IN_MAP: 25 DIFFERENT_SIZED_ARRAYS_IN_MAP:
23 'VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP', 26 'VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP',
24 INVALID_UNION_SIZE: 'VALIDATION_ERROR_INVALID_UNION_SIZE', 27 INVALID_UNION_SIZE: 'VALIDATION_ERROR_INVALID_UNION_SIZE',
25 UNEXPECTED_NULL_UNION: 'VALIDATION_ERROR_UNEXPECTED_NULL_UNION', 28 UNEXPECTED_NULL_UNION: 'VALIDATION_ERROR_UNEXPECTED_NULL_UNION',
26 UNKNOWN_ENUM_VALUE: 'VALIDATION_ERROR_UNKNOWN_ENUM_VALUE', 29 UNKNOWN_ENUM_VALUE: 'VALIDATION_ERROR_UNKNOWN_ENUM_VALUE',
27 }; 30 };
28 31
29 var NULL_MOJO_POINTER = "NULL_MOJO_POINTER"; 32 var NULL_MOJO_POINTER = "NULL_MOJO_POINTER";
33 var gValidationErrorObserver = null;
34
35 function reportValidationError(error) {
36 if (gValidationErrorObserver) {
37 gValidationErrorObserver.setLastError(error);
38 }
39 }
40
41 var ValidationErrorObserverForTesting = (function() {
42 function Observer() {
43 this.lastError = validationError.NONE;
44 this.callback = null;
45 }
46
47 Observer.prototype.setLastError = function(error) {
48 this.lastError = error;
49 if (this.callback) {
50 this.callback(error);
51 }
52 };
53
54 Observer.prototype.reset = function(error) {
55 this.lastError = validationError.NONE;
56 this.callback = null;
57 };
58
59 return {
60 getInstance: function() {
61 if (!gValidationErrorObserver) {
62 gValidationErrorObserver = new Observer();
63 }
64 return gValidationErrorObserver;
65 }
66 };
67 })();
68
69 function isTestingMode() {
70 return Boolean(gValidationErrorObserver);
71 }
72
73 function clearTestingMode() {
74 gValidationErrorObserver = null;
75 }
30 76
31 function isEnumClass(cls) { 77 function isEnumClass(cls) {
32 return cls instanceof internal.Enum; 78 return cls instanceof internal.Enum;
33 } 79 }
34 80
35 function isStringClass(cls) { 81 function isStringClass(cls) {
36 return cls === internal.String || cls === internal.NullableString; 82 return cls === internal.String || cls === internal.NullableString;
37 } 83 }
38 84
39 function isHandleClass(cls) { 85 function isHandleClass(cls) {
40 return cls === internal.Handle || cls === internal.NullableHandle; 86 return cls === internal.Handle || cls === internal.NullableHandle;
41 } 87 }
42 88
43 function isInterfaceClass(cls) { 89 function isInterfaceClass(cls) {
44 return cls instanceof internal.Interface; 90 return cls instanceof internal.Interface;
45 } 91 }
46 92
47 function isInterfaceRequestClass(cls) { 93 function isInterfaceRequestClass(cls) {
48 return cls === internal.InterfaceRequest || 94 return cls === internal.InterfaceRequest ||
49 cls === internal.NullableInterfaceRequest; 95 cls === internal.NullableInterfaceRequest;
50 } 96 }
51 97
98 function isAssociatedInterfaceClass(cls) {
99 return cls === internal.AssociatedInterfacePtrInfo ||
100 cls === internal.NullableAssociatedInterfacePtrInfo;
101 }
102
103 function isAssociatedInterfaceRequestClass(cls) {
104 return cls === internal.AssociatedInterfaceRequest ||
105 cls === internal.NullableAssociatedInterfaceRequest;
106 }
107
52 function isNullable(type) { 108 function isNullable(type) {
53 return type === internal.NullableString || 109 return type === internal.NullableString ||
54 type === internal.NullableHandle || 110 type === internal.NullableHandle ||
111 type === internal.NullableAssociatedInterfacePtrInfo ||
112 type === internal.NullableAssociatedInterfaceRequest ||
55 type === internal.NullableInterface || 113 type === internal.NullableInterface ||
56 type === internal.NullableInterfaceRequest || 114 type === internal.NullableInterfaceRequest ||
57 type instanceof internal.NullableArrayOf || 115 type instanceof internal.NullableArrayOf ||
58 type instanceof internal.NullablePointerTo; 116 type instanceof internal.NullablePointerTo;
59 } 117 }
60 118
61 function Validator(message) { 119 function Validator(message) {
62 this.message = message; 120 this.message = message;
63 this.offset = 0; 121 this.offset = 0;
64 this.handleIndex = 0; 122 this.handleIndex = 0;
123 this.associatedEndpointHandleIndex = 0;
124 this.payloadInterfaceIds = null;
125 this.offsetLimit = this.message.buffer.byteLength;
65 } 126 }
66 127
67 Object.defineProperty(Validator.prototype, "offsetLimit", {
68 get: function() { return this.message.buffer.byteLength; }
69 });
70
71 Object.defineProperty(Validator.prototype, "handleIndexLimit", { 128 Object.defineProperty(Validator.prototype, "handleIndexLimit", {
72 get: function() { return this.message.handles.length; } 129 get: function() { return this.message.handles.length; }
73 }); 130 });
74 131
132 Object.defineProperty(Validator.prototype, "associatedHandleIndexLimit", {
133 get: function() {
134 return this.payloadInterfaceIds ? this.payloadInterfaceIds.length : 0;
135 }
136 });
137
75 // True if we can safely allocate a block of bytes from start to 138 // True if we can safely allocate a block of bytes from start to
76 // to start + numBytes. 139 // to start + numBytes.
77 Validator.prototype.isValidRange = function(start, numBytes) { 140 Validator.prototype.isValidRange = function(start, numBytes) {
78 // Only positive JavaScript integers that are less than 2^53 141 // Only positive JavaScript integers that are less than 2^53
79 // (Number.MAX_SAFE_INTEGER) can be represented exactly. 142 // (Number.MAX_SAFE_INTEGER) can be represented exactly.
80 if (start < this.offset || numBytes <= 0 || 143 if (start < this.offset || numBytes <= 0 ||
81 !Number.isSafeInteger(start) || 144 !Number.isSafeInteger(start) ||
82 !Number.isSafeInteger(numBytes)) 145 !Number.isSafeInteger(numBytes))
83 return false; 146 return false;
84 147
(...skipping 17 matching lines...) Expand all
102 return true; 165 return true;
103 166
104 if (index < this.handleIndex || index >= this.handleIndexLimit) 167 if (index < this.handleIndex || index >= this.handleIndexLimit)
105 return false; 168 return false;
106 169
107 // This is safe because handle indices are uint32. 170 // This is safe because handle indices are uint32.
108 this.handleIndex = index + 1; 171 this.handleIndex = index + 1;
109 return true; 172 return true;
110 }; 173 };
111 174
175 Validator.prototype.claimAssociatedEndpointHandle = function(index) {
176 if (index === internal.kEncodedInvalidHandleValue) {
177 return true;
178 }
179
180 if (index < this.associatedEndpointHandleIndex ||
181 index >= this.associatedHandleIndexLimit) {
182 return false;
183 }
184
185 // This is safe because handle indices are uint32.
186 this.associatedEndpointHandleIndex = index + 1;
187 return true;
188 };
189
112 Validator.prototype.validateEnum = function(offset, enumClass) { 190 Validator.prototype.validateEnum = function(offset, enumClass) {
113 // Note: Assumes that enums are always 32 bits! But this matches 191 // Note: Assumes that enums are always 32 bits! But this matches
114 // mojom::generate::pack::PackedField::GetSizeForKind, so it should be okay. 192 // mojom::generate::pack::PackedField::GetSizeForKind, so it should be okay.
115 var value = this.message.buffer.getInt32(offset); 193 var value = this.message.buffer.getInt32(offset);
116 return enumClass.validate(value); 194 return enumClass.validate(value);
117 } 195 }
118 196
119 Validator.prototype.validateHandle = function(offset, nullable) { 197 Validator.prototype.validateHandle = function(offset, nullable) {
120 var index = this.message.buffer.getUint32(offset); 198 var index = this.message.buffer.getUint32(offset);
121 199
122 if (index === internal.kEncodedInvalidHandleValue) 200 if (index === internal.kEncodedInvalidHandleValue)
123 return nullable ? 201 return nullable ?
124 validationError.NONE : validationError.UNEXPECTED_INVALID_HANDLE; 202 validationError.NONE : validationError.UNEXPECTED_INVALID_HANDLE;
125 203
126 if (!this.claimHandle(index)) 204 if (!this.claimHandle(index))
127 return validationError.ILLEGAL_HANDLE; 205 return validationError.ILLEGAL_HANDLE;
128 206
129 return validationError.NONE; 207 return validationError.NONE;
130 }; 208 };
131 209
210 Validator.prototype.validateAssociatedEndpointHandle = function(offset,
211 nullable) {
212 var index = this.message.buffer.getUint32(offset);
213
214 if (index === internal.kEncodedInvalidHandleValue) {
215 return nullable ? validationError.NONE :
216 validationError.UNEXPECTED_INVALID_INTERFACE_ID;
217 }
218
219 if (!this.claimAssociatedEndpointHandle(index)) {
220 return validationError.ILLEGAL_INTERFACE_ID;
221 }
222
223 return validationError.NONE;
224 };
225
132 Validator.prototype.validateInterface = function(offset, nullable) { 226 Validator.prototype.validateInterface = function(offset, nullable) {
133 return this.validateHandle(offset, nullable); 227 return this.validateHandle(offset, nullable);
134 }; 228 };
135 229
136 Validator.prototype.validateInterfaceRequest = function(offset, nullable) { 230 Validator.prototype.validateInterfaceRequest = function(offset, nullable) {
137 return this.validateHandle(offset, nullable); 231 return this.validateHandle(offset, nullable);
138 }; 232 };
139 233
234 Validator.prototype.validateAssociatedInterface = function(offset,
235 nullable) {
236 return this.validateAssociatedEndpointHandle(offset, nullable);
237 };
238
239 Validator.prototype.validateAssociatedInterfaceRequest = function(
240 offset, nullable) {
241 return this.validateAssociatedEndpointHandle(offset, nullable);
242 };
243
140 Validator.prototype.validateStructHeader = function(offset, minNumBytes) { 244 Validator.prototype.validateStructHeader = function(offset, minNumBytes) {
141 if (!internal.isAligned(offset)) 245 if (!internal.isAligned(offset))
142 return validationError.MISALIGNED_OBJECT; 246 return validationError.MISALIGNED_OBJECT;
143 247
144 if (!this.isValidRange(offset, internal.kStructHeaderSize)) 248 if (!this.isValidRange(offset, internal.kStructHeaderSize))
145 return validationError.ILLEGAL_MEMORY_RANGE; 249 return validationError.ILLEGAL_MEMORY_RANGE;
146 250
147 var numBytes = this.message.buffer.getUint32(offset); 251 var numBytes = this.message.buffer.getUint32(offset);
148 252
149 if (numBytes < minNumBytes) 253 if (numBytes < minNumBytes)
(...skipping 24 matching lines...) Expand all
174 278
175 return validationError.NONE; 279 return validationError.NONE;
176 }; 280 };
177 281
178 Validator.prototype.isFieldInStructVersion = function(offset, fieldVersion) { 282 Validator.prototype.isFieldInStructVersion = function(offset, fieldVersion) {
179 var structVersion = this.message.buffer.getUint32(offset + 4); 283 var structVersion = this.message.buffer.getUint32(offset + 4);
180 return fieldVersion <= structVersion; 284 return fieldVersion <= structVersion;
181 }; 285 };
182 286
183 Validator.prototype.validateMessageHeader = function() { 287 Validator.prototype.validateMessageHeader = function() {
184 288 var err = this.validateStructHeader(0, internal.kMessageV0HeaderSize);
185 var err = this.validateStructHeader(0, internal.kMessageHeaderSize); 289 if (err != validationError.NONE) {
186 if (err != validationError.NONE)
187 return err; 290 return err;
291 }
188 292
189 var numBytes = this.message.getHeaderNumBytes(); 293 var numBytes = this.message.getHeaderNumBytes();
190 var version = this.message.getHeaderVersion(); 294 var version = this.message.getHeaderVersion();
191 295
192 var validVersionAndNumBytes = 296 var validVersionAndNumBytes =
193 (version == 0 && numBytes == internal.kMessageHeaderSize) || 297 (version == 0 && numBytes == internal.kMessageV0HeaderSize) ||
194 (version == 1 && 298 (version == 1 && numBytes == internal.kMessageV1HeaderSize) ||
195 numBytes == internal.kMessageWithRequestIDHeaderSize) || 299 (version == 2 && numBytes == internal.kMessageV2HeaderSize) ||
196 (version > 1 && 300 (version > 2 && numBytes >= internal.kMessageV2HeaderSize);
197 numBytes >= internal.kMessageWithRequestIDHeaderSize); 301
198 if (!validVersionAndNumBytes) 302 if (!validVersionAndNumBytes) {
199 return validationError.UNEXPECTED_STRUCT_HEADER; 303 return validationError.UNEXPECTED_STRUCT_HEADER;
304 }
200 305
201 var expectsResponse = this.message.expectsResponse(); 306 var expectsResponse = this.message.expectsResponse();
202 var isResponse = this.message.isResponse(); 307 var isResponse = this.message.isResponse();
203 308
204 if (version == 0 && (expectsResponse || isResponse)) 309 if (version == 0 && (expectsResponse || isResponse)) {
205 return validationError.MESSAGE_HEADER_MISSING_REQUEST_ID; 310 return validationError.MESSAGE_HEADER_MISSING_REQUEST_ID;
311 }
206 312
207 if (isResponse && expectsResponse) 313 if (isResponse && expectsResponse) {
208 return validationError.MESSAGE_HEADER_INVALID_FLAGS; 314 return validationError.MESSAGE_HEADER_INVALID_FLAGS;
315 }
316
317 if (version < 2) {
318 return validationError.NONE;
319 }
320
321 var err = this.validateArrayPointer(
322 internal.kMessagePayloadInterfaceIdsPointerOffset,
323 internal.Uint32.encodedSize, internal.Uint32, true, [0], 0);
324
325 if (err != validationError.NONE) {
326 return err;
327 }
328
329 this.payloadInterfaceIds = this.message.getPayloadInterfaceIds();
330 if (this.payloadInterfaceIds) {
331 for (var interfaceId of this.payloadInterfaceIds) {
332 if (!internal.isValidInterfaceId(interfaceId) ||
333 internal.isMasterInterfaceId(interfaceId)) {
334 return validationError.ILLEGAL_INTERFACE_ID;
335 }
336 }
337 }
338
339 // Set offset to the start of the payload and offsetLimit to the start of
340 // the payload interface Ids so that payload can be validated using the
341 // same messageValidator.
342 this.offset = this.message.getHeaderNumBytes();
343 this.offsetLimit = this.decodePointer(
344 internal.kMessagePayloadInterfaceIdsPointerOffset);
209 345
210 return validationError.NONE; 346 return validationError.NONE;
211 }; 347 };
212 348
213 Validator.prototype.validateMessageIsRequestWithoutResponse = function() { 349 Validator.prototype.validateMessageIsRequestWithoutResponse = function() {
214 if (this.message.isResponse() || this.message.expectsResponse()) { 350 if (this.message.isResponse() || this.message.expectsResponse()) {
215 return validationError.MESSAGE_HEADER_INVALID_FLAGS; 351 return validationError.MESSAGE_HEADER_INVALID_FLAGS;
216 } 352 }
217 return validationError.NONE; 353 return validationError.NONE;
218 }; 354 };
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // struct {array<keyClass> keys; array<valueClass> values}; 452 // struct {array<keyClass> keys; array<valueClass> values};
317 var structOffset = this.decodePointer(offset); 453 var structOffset = this.decodePointer(offset);
318 if (structOffset === null) 454 if (structOffset === null)
319 return validationError.ILLEGAL_POINTER; 455 return validationError.ILLEGAL_POINTER;
320 456
321 if (structOffset === NULL_MOJO_POINTER) 457 if (structOffset === NULL_MOJO_POINTER)
322 return mapIsNullable ? 458 return mapIsNullable ?
323 validationError.NONE : validationError.UNEXPECTED_NULL_POINTER; 459 validationError.NONE : validationError.UNEXPECTED_NULL_POINTER;
324 460
325 var mapEncodedSize = internal.kStructHeaderSize + 461 var mapEncodedSize = internal.kStructHeaderSize +
326 internal.kMapStructPayloadSize; 462 internal.kMapStructPayloadSize;
327 var err = this.validateStructHeader(structOffset, mapEncodedSize); 463 var err = this.validateStructHeader(structOffset, mapEncodedSize);
328 if (err !== validationError.NONE) 464 if (err !== validationError.NONE)
329 return err; 465 return err;
330 466
331 // Validate the keys array. 467 // Validate the keys array.
332 var keysArrayPointerOffset = structOffset + internal.kStructHeaderSize; 468 var keysArrayPointerOffset = structOffset + internal.kStructHeaderSize;
333 err = this.validateArrayPointer( 469 err = this.validateArrayPointer(
334 keysArrayPointerOffset, keyClass.encodedSize, keyClass, false, [0], 0); 470 keysArrayPointerOffset, keyClass.encodedSize, keyClass, false, [0], 0);
335 if (err !== validationError.NONE) 471 if (err !== validationError.NONE)
336 return err; 472 return err;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 var nullable = isNullable(elementType); 537 var nullable = isNullable(elementType);
402 538
403 if (isHandleClass(elementType)) 539 if (isHandleClass(elementType))
404 return this.validateHandleElements(elementsOffset, numElements, nullable); 540 return this.validateHandleElements(elementsOffset, numElements, nullable);
405 if (isInterfaceClass(elementType)) 541 if (isInterfaceClass(elementType))
406 return this.validateInterfaceElements( 542 return this.validateInterfaceElements(
407 elementsOffset, numElements, nullable); 543 elementsOffset, numElements, nullable);
408 if (isInterfaceRequestClass(elementType)) 544 if (isInterfaceRequestClass(elementType))
409 return this.validateInterfaceRequestElements( 545 return this.validateInterfaceRequestElements(
410 elementsOffset, numElements, nullable); 546 elementsOffset, numElements, nullable);
547 if (isAssociatedInterfaceClass(elementType))
548 return this.validateAssociatedInterfaceElements(
549 elementsOffset, numElements, nullable);
550 if (isAssociatedInterfaceRequestClass(elementType))
551 return this.validateAssociatedInterfaceRequestElements(
552 elementsOffset, numElements, nullable);
411 if (isStringClass(elementType)) 553 if (isStringClass(elementType))
412 return this.validateArrayElements( 554 return this.validateArrayElements(
413 elementsOffset, numElements, internal.Uint8, nullable, [0], 0); 555 elementsOffset, numElements, internal.Uint8, nullable, [0], 0);
414 if (elementType instanceof internal.PointerTo) 556 if (elementType instanceof internal.PointerTo)
415 return this.validateStructElements( 557 return this.validateStructElements(
416 elementsOffset, numElements, elementType.cls, nullable); 558 elementsOffset, numElements, elementType.cls, nullable);
417 if (elementType instanceof internal.ArrayOf) 559 if (elementType instanceof internal.ArrayOf)
418 return this.validateArrayElements( 560 return this.validateArrayElements(
419 elementsOffset, numElements, elementType.cls, nullable, 561 elementsOffset, numElements, elementType.cls, nullable,
420 expectedDimensionSizes, currentDimension + 1); 562 expectedDimensionSizes, currentDimension + 1);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 var elementSize = internal.InterfaceRequest.encodedSize; 600 var elementSize = internal.InterfaceRequest.encodedSize;
459 for (var i = 0; i < numElements; i++) { 601 for (var i = 0; i < numElements; i++) {
460 var elementOffset = offset + i * elementSize; 602 var elementOffset = offset + i * elementSize;
461 var err = this.validateInterfaceRequest(elementOffset, nullable); 603 var err = this.validateInterfaceRequest(elementOffset, nullable);
462 if (err != validationError.NONE) 604 if (err != validationError.NONE)
463 return err; 605 return err;
464 } 606 }
465 return validationError.NONE; 607 return validationError.NONE;
466 }; 608 };
467 609
610 Validator.prototype.validateAssociatedInterfaceElements =
611 function(offset, numElements, nullable) {
612 var elementSize = internal.AssociatedInterfacePtrInfo.prototype.encodedSize;
613 for (var i = 0; i < numElements; i++) {
614 var elementOffset = offset + i * elementSize;
615 var err = this.validateAssociatedInterface(elementOffset, nullable);
616 if (err != validationError.NONE) {
617 return err;
618 }
619 }
620 return validationError.NONE;
621 };
622
623 Validator.prototype.validateAssociatedInterfaceRequestElements =
624 function(offset, numElements, nullable) {
625 var elementSize = internal.AssociatedInterfaceRequest.encodedSize;
626 for (var i = 0; i < numElements; i++) {
627 var elementOffset = offset + i * elementSize;
628 var err = this.validateAssociatedInterfaceRequest(elementOffset,
629 nullable);
630 if (err != validationError.NONE) {
631 return err;
632 }
633 }
634 return validationError.NONE;
635 };
636
468 // The elementClass parameter is the element type of the element arrays. 637 // The elementClass parameter is the element type of the element arrays.
469 Validator.prototype.validateArrayElements = 638 Validator.prototype.validateArrayElements =
470 function(offset, numElements, elementClass, nullable, 639 function(offset, numElements, elementClass, nullable,
471 expectedDimensionSizes, currentDimension) { 640 expectedDimensionSizes, currentDimension) {
472 var elementSize = internal.PointerTo.prototype.encodedSize; 641 var elementSize = internal.PointerTo.prototype.encodedSize;
473 for (var i = 0; i < numElements; i++) { 642 for (var i = 0; i < numElements; i++) {
474 var elementOffset = offset + i * elementSize; 643 var elementOffset = offset + i * elementSize;
475 var err = this.validateArrayPointer( 644 var err = this.validateArrayPointer(
476 elementOffset, elementClass.encodedSize, elementClass, nullable, 645 elementOffset, elementClass.encodedSize, elementClass, nullable,
477 expectedDimensionSizes, currentDimension); 646 expectedDimensionSizes, currentDimension);
(...skipping 23 matching lines...) Expand all
501 var elementOffset = offset + i * elementSize; 670 var elementOffset = offset + i * elementSize;
502 var err = this.validateEnum(elementOffset, enumClass); 671 var err = this.validateEnum(elementOffset, enumClass);
503 if (err != validationError.NONE) 672 if (err != validationError.NONE)
504 return err; 673 return err;
505 } 674 }
506 return validationError.NONE; 675 return validationError.NONE;
507 }; 676 };
508 677
509 internal.validationError = validationError; 678 internal.validationError = validationError;
510 internal.Validator = Validator; 679 internal.Validator = Validator;
680 internal.ValidationErrorObserverForTesting =
681 ValidationErrorObserverForTesting;
682 internal.reportValidationError = reportValidationError;
683 internal.isTestingMode = isTestingMode;
684 internal.clearTestingMode = clearTestingMode;
511 })(); 685 })();
OLDNEW
« no previous file with comments | « mojo/public/js/new_bindings/router.js ('k') | third_party/WebKit/LayoutTests/TestExpectations » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698