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

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

Issue 2779533002: Revert of Mojo JS bindings: change module loading solution. (Closed)
Patch Set: Created 3 years, 9 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 (function() { 5 define("mojo/public/js/validator", [
6 var internal = mojoBindings.internal; 6 "mojo/public/js/codec",
7 ], function(codec) {
7 8
8 var validationError = { 9 var validationError = {
9 NONE: 'VALIDATION_ERROR_NONE', 10 NONE: 'VALIDATION_ERROR_NONE',
10 MISALIGNED_OBJECT: 'VALIDATION_ERROR_MISALIGNED_OBJECT', 11 MISALIGNED_OBJECT: 'VALIDATION_ERROR_MISALIGNED_OBJECT',
11 ILLEGAL_MEMORY_RANGE: 'VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE', 12 ILLEGAL_MEMORY_RANGE: 'VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE',
12 UNEXPECTED_STRUCT_HEADER: 'VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER', 13 UNEXPECTED_STRUCT_HEADER: 'VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER',
13 UNEXPECTED_ARRAY_HEADER: 'VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER', 14 UNEXPECTED_ARRAY_HEADER: 'VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER',
14 ILLEGAL_HANDLE: 'VALIDATION_ERROR_ILLEGAL_HANDLE', 15 ILLEGAL_HANDLE: 'VALIDATION_ERROR_ILLEGAL_HANDLE',
15 UNEXPECTED_INVALID_HANDLE: 'VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE', 16 UNEXPECTED_INVALID_HANDLE: 'VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE',
16 ILLEGAL_POINTER: 'VALIDATION_ERROR_ILLEGAL_POINTER', 17 ILLEGAL_POINTER: 'VALIDATION_ERROR_ILLEGAL_POINTER',
17 UNEXPECTED_NULL_POINTER: 'VALIDATION_ERROR_UNEXPECTED_NULL_POINTER', 18 UNEXPECTED_NULL_POINTER: 'VALIDATION_ERROR_UNEXPECTED_NULL_POINTER',
18 MESSAGE_HEADER_INVALID_FLAGS: 19 MESSAGE_HEADER_INVALID_FLAGS:
19 'VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS', 20 'VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS',
20 MESSAGE_HEADER_MISSING_REQUEST_ID: 21 MESSAGE_HEADER_MISSING_REQUEST_ID:
21 'VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID', 22 'VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID',
22 DIFFERENT_SIZED_ARRAYS_IN_MAP: 23 DIFFERENT_SIZED_ARRAYS_IN_MAP:
23 'VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP', 24 'VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP',
24 INVALID_UNION_SIZE: 'VALIDATION_ERROR_INVALID_UNION_SIZE', 25 INVALID_UNION_SIZE: 'VALIDATION_ERROR_INVALID_UNION_SIZE',
25 UNEXPECTED_NULL_UNION: 'VALIDATION_ERROR_UNEXPECTED_NULL_UNION', 26 UNEXPECTED_NULL_UNION: 'VALIDATION_ERROR_UNEXPECTED_NULL_UNION',
26 UNKNOWN_ENUM_VALUE: 'VALIDATION_ERROR_UNKNOWN_ENUM_VALUE', 27 UNKNOWN_ENUM_VALUE: 'VALIDATION_ERROR_UNKNOWN_ENUM_VALUE',
27 }; 28 };
28 29
29 var NULL_MOJO_POINTER = "NULL_MOJO_POINTER"; 30 var NULL_MOJO_POINTER = "NULL_MOJO_POINTER";
30 31
31 function isEnumClass(cls) { 32 function isEnumClass(cls) {
32 return cls instanceof internal.Enum; 33 return cls instanceof codec.Enum;
33 } 34 }
34 35
35 function isStringClass(cls) { 36 function isStringClass(cls) {
36 return cls === internal.String || cls === internal.NullableString; 37 return cls === codec.String || cls === codec.NullableString;
37 } 38 }
38 39
39 function isHandleClass(cls) { 40 function isHandleClass(cls) {
40 return cls === internal.Handle || cls === internal.NullableHandle; 41 return cls === codec.Handle || cls === codec.NullableHandle;
41 } 42 }
42 43
43 function isInterfaceClass(cls) { 44 function isInterfaceClass(cls) {
44 return cls instanceof internal.Interface; 45 return cls instanceof codec.Interface;
45 } 46 }
46 47
47 function isInterfaceRequestClass(cls) { 48 function isInterfaceRequestClass(cls) {
48 return cls === internal.InterfaceRequest || 49 return cls === codec.InterfaceRequest ||
49 cls === internal.NullableInterfaceRequest; 50 cls === codec.NullableInterfaceRequest;
50 } 51 }
51 52
52 function isNullable(type) { 53 function isNullable(type) {
53 return type === internal.NullableString || 54 return type === codec.NullableString || type === codec.NullableHandle ||
54 type === internal.NullableHandle || 55 type === codec.NullableInterface ||
55 type === internal.NullableInterface || 56 type === codec.NullableInterfaceRequest ||
56 type === internal.NullableInterfaceRequest || 57 type instanceof codec.NullableArrayOf ||
57 type instanceof internal.NullableArrayOf || 58 type instanceof codec.NullablePointerTo;
58 type instanceof internal.NullablePointerTo;
59 } 59 }
60 60
61 function Validator(message) { 61 function Validator(message) {
62 this.message = message; 62 this.message = message;
63 this.offset = 0; 63 this.offset = 0;
64 this.handleIndex = 0; 64 this.handleIndex = 0;
65 } 65 }
66 66
67 Object.defineProperty(Validator.prototype, "offsetLimit", { 67 Object.defineProperty(Validator.prototype, "offsetLimit", {
68 get: function() { return this.message.buffer.byteLength; } 68 get: function() { return this.message.buffer.byteLength; }
(...skipping 22 matching lines...) Expand all
91 91
92 Validator.prototype.claimRange = function(start, numBytes) { 92 Validator.prototype.claimRange = function(start, numBytes) {
93 if (this.isValidRange(start, numBytes)) { 93 if (this.isValidRange(start, numBytes)) {
94 this.offset = start + numBytes; 94 this.offset = start + numBytes;
95 return true; 95 return true;
96 } 96 }
97 return false; 97 return false;
98 }; 98 };
99 99
100 Validator.prototype.claimHandle = function(index) { 100 Validator.prototype.claimHandle = function(index) {
101 if (index === internal.kEncodedInvalidHandleValue) 101 if (index === codec.kEncodedInvalidHandleValue)
102 return true; 102 return true;
103 103
104 if (index < this.handleIndex || index >= this.handleIndexLimit) 104 if (index < this.handleIndex || index >= this.handleIndexLimit)
105 return false; 105 return false;
106 106
107 // This is safe because handle indices are uint32. 107 // This is safe because handle indices are uint32.
108 this.handleIndex = index + 1; 108 this.handleIndex = index + 1;
109 return true; 109 return true;
110 }; 110 };
111 111
112 Validator.prototype.validateEnum = function(offset, enumClass) { 112 Validator.prototype.validateEnum = function(offset, enumClass) {
113 // Note: Assumes that enums are always 32 bits! But this matches 113 // Note: Assumes that enums are always 32 bits! But this matches
114 // mojom::generate::pack::PackedField::GetSizeForKind, so it should be okay. 114 // mojom::generate::pack::PackedField::GetSizeForKind, so it should be okay.
115 var value = this.message.buffer.getInt32(offset); 115 var value = this.message.buffer.getInt32(offset);
116 return enumClass.validate(value); 116 return enumClass.validate(value);
117 } 117 }
118 118
119 Validator.prototype.validateHandle = function(offset, nullable) { 119 Validator.prototype.validateHandle = function(offset, nullable) {
120 var index = this.message.buffer.getUint32(offset); 120 var index = this.message.buffer.getUint32(offset);
121 121
122 if (index === internal.kEncodedInvalidHandleValue) 122 if (index === codec.kEncodedInvalidHandleValue)
123 return nullable ? 123 return nullable ?
124 validationError.NONE : validationError.UNEXPECTED_INVALID_HANDLE; 124 validationError.NONE : validationError.UNEXPECTED_INVALID_HANDLE;
125 125
126 if (!this.claimHandle(index)) 126 if (!this.claimHandle(index))
127 return validationError.ILLEGAL_HANDLE; 127 return validationError.ILLEGAL_HANDLE;
128 128
129 return validationError.NONE; 129 return validationError.NONE;
130 }; 130 };
131 131
132 Validator.prototype.validateInterface = function(offset, nullable) { 132 Validator.prototype.validateInterface = function(offset, nullable) {
133 return this.validateHandle(offset, nullable); 133 return this.validateHandle(offset, nullable);
134 }; 134 };
135 135
136 Validator.prototype.validateInterfaceRequest = function(offset, nullable) { 136 Validator.prototype.validateInterfaceRequest = function(offset, nullable) {
137 return this.validateHandle(offset, nullable); 137 return this.validateHandle(offset, nullable);
138 }; 138 };
139 139
140 Validator.prototype.validateStructHeader = function(offset, minNumBytes) { 140 Validator.prototype.validateStructHeader = function(offset, minNumBytes) {
141 if (!internal.isAligned(offset)) 141 if (!codec.isAligned(offset))
142 return validationError.MISALIGNED_OBJECT; 142 return validationError.MISALIGNED_OBJECT;
143 143
144 if (!this.isValidRange(offset, internal.kStructHeaderSize)) 144 if (!this.isValidRange(offset, codec.kStructHeaderSize))
145 return validationError.ILLEGAL_MEMORY_RANGE; 145 return validationError.ILLEGAL_MEMORY_RANGE;
146 146
147 var numBytes = this.message.buffer.getUint32(offset); 147 var numBytes = this.message.buffer.getUint32(offset);
148 148
149 if (numBytes < minNumBytes) 149 if (numBytes < minNumBytes)
150 return validationError.UNEXPECTED_STRUCT_HEADER; 150 return validationError.UNEXPECTED_STRUCT_HEADER;
151 151
152 if (!this.claimRange(offset, numBytes)) 152 if (!this.claimRange(offset, numBytes))
153 return validationError.ILLEGAL_MEMORY_RANGE; 153 return validationError.ILLEGAL_MEMORY_RANGE;
154 154
(...skipping 20 matching lines...) Expand all
175 return validationError.NONE; 175 return validationError.NONE;
176 }; 176 };
177 177
178 Validator.prototype.isFieldInStructVersion = function(offset, fieldVersion) { 178 Validator.prototype.isFieldInStructVersion = function(offset, fieldVersion) {
179 var structVersion = this.message.buffer.getUint32(offset + 4); 179 var structVersion = this.message.buffer.getUint32(offset + 4);
180 return fieldVersion <= structVersion; 180 return fieldVersion <= structVersion;
181 }; 181 };
182 182
183 Validator.prototype.validateMessageHeader = function() { 183 Validator.prototype.validateMessageHeader = function() {
184 184
185 var err = this.validateStructHeader(0, internal.kMessageHeaderSize); 185 var err = this.validateStructHeader(0, codec.kMessageHeaderSize);
186 if (err != validationError.NONE) 186 if (err != validationError.NONE)
187 return err; 187 return err;
188 188
189 var numBytes = this.message.getHeaderNumBytes(); 189 var numBytes = this.message.getHeaderNumBytes();
190 var version = this.message.getHeaderVersion(); 190 var version = this.message.getHeaderVersion();
191 191
192 var validVersionAndNumBytes = 192 var validVersionAndNumBytes =
193 (version == 0 && numBytes == internal.kMessageHeaderSize) || 193 (version == 0 && numBytes == codec.kMessageHeaderSize) ||
194 (version == 1 && 194 (version == 1 &&
195 numBytes == internal.kMessageWithRequestIDHeaderSize) || 195 numBytes == codec.kMessageWithRequestIDHeaderSize) ||
196 (version > 1 && 196 (version > 1 &&
197 numBytes >= internal.kMessageWithRequestIDHeaderSize); 197 numBytes >= codec.kMessageWithRequestIDHeaderSize);
198 if (!validVersionAndNumBytes) 198 if (!validVersionAndNumBytes)
199 return validationError.UNEXPECTED_STRUCT_HEADER; 199 return validationError.UNEXPECTED_STRUCT_HEADER;
200 200
201 var expectsResponse = this.message.expectsResponse(); 201 var expectsResponse = this.message.expectsResponse();
202 var isResponse = this.message.isResponse(); 202 var isResponse = this.message.isResponse();
203 203
204 if (version == 0 && (expectsResponse || isResponse)) 204 if (version == 0 && (expectsResponse || isResponse))
205 return validationError.MESSAGE_HEADER_MISSING_REQUEST_ID; 205 return validationError.MESSAGE_HEADER_MISSING_REQUEST_ID;
206 206
207 if (isResponse && expectsResponse) 207 if (isResponse && expectsResponse)
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 // Validate the implicit map struct: 315 // Validate the implicit map struct:
316 // struct {array<keyClass> keys; array<valueClass> values}; 316 // struct {array<keyClass> keys; array<valueClass> values};
317 var structOffset = this.decodePointer(offset); 317 var structOffset = this.decodePointer(offset);
318 if (structOffset === null) 318 if (structOffset === null)
319 return validationError.ILLEGAL_POINTER; 319 return validationError.ILLEGAL_POINTER;
320 320
321 if (structOffset === NULL_MOJO_POINTER) 321 if (structOffset === NULL_MOJO_POINTER)
322 return mapIsNullable ? 322 return mapIsNullable ?
323 validationError.NONE : validationError.UNEXPECTED_NULL_POINTER; 323 validationError.NONE : validationError.UNEXPECTED_NULL_POINTER;
324 324
325 var mapEncodedSize = internal.kStructHeaderSize + 325 var mapEncodedSize = codec.kStructHeaderSize + codec.kMapStructPayloadSize;
326 internal.kMapStructPayloadSize;
327 var err = this.validateStructHeader(structOffset, mapEncodedSize); 326 var err = this.validateStructHeader(structOffset, mapEncodedSize);
328 if (err !== validationError.NONE) 327 if (err !== validationError.NONE)
329 return err; 328 return err;
330 329
331 // Validate the keys array. 330 // Validate the keys array.
332 var keysArrayPointerOffset = structOffset + internal.kStructHeaderSize; 331 var keysArrayPointerOffset = structOffset + codec.kStructHeaderSize;
333 err = this.validateArrayPointer( 332 err = this.validateArrayPointer(
334 keysArrayPointerOffset, keyClass.encodedSize, keyClass, false, [0], 0); 333 keysArrayPointerOffset, keyClass.encodedSize, keyClass, false, [0], 0);
335 if (err !== validationError.NONE) 334 if (err !== validationError.NONE)
336 return err; 335 return err;
337 336
338 // Validate the values array. 337 // Validate the values array.
339 var valuesArrayPointerOffset = keysArrayPointerOffset + 8; 338 var valuesArrayPointerOffset = keysArrayPointerOffset + 8;
340 var valuesArrayDimensions = [0]; // Validate the actual length below. 339 var valuesArrayDimensions = [0]; // Validate the actual length below.
341 if (valueClass instanceof internal.ArrayOf) 340 if (valueClass instanceof codec.ArrayOf)
342 valuesArrayDimensions = 341 valuesArrayDimensions =
343 valuesArrayDimensions.concat(valueClass.dimensions()); 342 valuesArrayDimensions.concat(valueClass.dimensions());
344 var err = this.validateArrayPointer(valuesArrayPointerOffset, 343 var err = this.validateArrayPointer(valuesArrayPointerOffset,
345 valueClass.encodedSize, 344 valueClass.encodedSize,
346 valueClass, 345 valueClass,
347 valueIsNullable, 346 valueIsNullable,
348 valuesArrayDimensions, 347 valuesArrayDimensions,
349 0); 348 0);
350 if (err !== validationError.NONE) 349 if (err !== validationError.NONE)
351 return err; 350 return err;
352 351
353 // Validate the lengths of the keys and values arrays. 352 // Validate the lengths of the keys and values arrays.
354 var keysArrayLength = this.arrayLength(keysArrayPointerOffset); 353 var keysArrayLength = this.arrayLength(keysArrayPointerOffset);
355 var valuesArrayLength = this.arrayLength(valuesArrayPointerOffset); 354 var valuesArrayLength = this.arrayLength(valuesArrayPointerOffset);
356 if (keysArrayLength != valuesArrayLength) 355 if (keysArrayLength != valuesArrayLength)
357 return validationError.DIFFERENT_SIZED_ARRAYS_IN_MAP; 356 return validationError.DIFFERENT_SIZED_ARRAYS_IN_MAP;
358 357
359 return validationError.NONE; 358 return validationError.NONE;
360 }; 359 };
361 360
362 Validator.prototype.validateStringPointer = function(offset, nullable) { 361 Validator.prototype.validateStringPointer = function(offset, nullable) {
363 return this.validateArrayPointer( 362 return this.validateArrayPointer(
364 offset, internal.Uint8.encodedSize, internal.Uint8, nullable, [0], 0); 363 offset, codec.Uint8.encodedSize, codec.Uint8, nullable, [0], 0);
365 }; 364 };
366 365
367 // Similar to Array_Data<T>::Validate() 366 // Similar to Array_Data<T>::Validate()
368 // mojo/public/cpp/bindings/lib/array_internal.h 367 // mojo/public/cpp/bindings/lib/array_internal.h
369 368
370 Validator.prototype.validateArray = 369 Validator.prototype.validateArray =
371 function (offset, elementSize, elementType, expectedDimensionSizes, 370 function (offset, elementSize, elementType, expectedDimensionSizes,
372 currentDimension) { 371 currentDimension) {
373 if (!internal.isAligned(offset)) 372 if (!codec.isAligned(offset))
374 return validationError.MISALIGNED_OBJECT; 373 return validationError.MISALIGNED_OBJECT;
375 374
376 if (!this.isValidRange(offset, internal.kArrayHeaderSize)) 375 if (!this.isValidRange(offset, codec.kArrayHeaderSize))
377 return validationError.ILLEGAL_MEMORY_RANGE; 376 return validationError.ILLEGAL_MEMORY_RANGE;
378 377
379 var numBytes = this.message.buffer.getUint32(offset); 378 var numBytes = this.message.buffer.getUint32(offset);
380 var numElements = this.message.buffer.getUint32(offset + 4); 379 var numElements = this.message.buffer.getUint32(offset + 4);
381 380
382 // Note: this computation is "safe" because elementSize <= 8 and 381 // Note: this computation is "safe" because elementSize <= 8 and
383 // numElements is a uint32. 382 // numElements is a uint32.
384 var elementsTotalSize = (elementType === internal.PackedBool) ? 383 var elementsTotalSize = (elementType === codec.PackedBool) ?
385 Math.ceil(numElements / 8) : (elementSize * numElements); 384 Math.ceil(numElements / 8) : (elementSize * numElements);
386 385
387 if (numBytes < internal.kArrayHeaderSize + elementsTotalSize) 386 if (numBytes < codec.kArrayHeaderSize + elementsTotalSize)
388 return validationError.UNEXPECTED_ARRAY_HEADER; 387 return validationError.UNEXPECTED_ARRAY_HEADER;
389 388
390 if (expectedDimensionSizes[currentDimension] != 0 && 389 if (expectedDimensionSizes[currentDimension] != 0 &&
391 numElements != expectedDimensionSizes[currentDimension]) { 390 numElements != expectedDimensionSizes[currentDimension]) {
392 return validationError.UNEXPECTED_ARRAY_HEADER; 391 return validationError.UNEXPECTED_ARRAY_HEADER;
393 } 392 }
394 393
395 if (!this.claimRange(offset, numBytes)) 394 if (!this.claimRange(offset, numBytes))
396 return validationError.ILLEGAL_MEMORY_RANGE; 395 return validationError.ILLEGAL_MEMORY_RANGE;
397 396
398 // Validate the array's elements if they are pointers or handles. 397 // Validate the array's elements if they are pointers or handles.
399 398
400 var elementsOffset = offset + internal.kArrayHeaderSize; 399 var elementsOffset = offset + codec.kArrayHeaderSize;
401 var nullable = isNullable(elementType); 400 var nullable = isNullable(elementType);
402 401
403 if (isHandleClass(elementType)) 402 if (isHandleClass(elementType))
404 return this.validateHandleElements(elementsOffset, numElements, nullable); 403 return this.validateHandleElements(elementsOffset, numElements, nullable);
405 if (isInterfaceClass(elementType)) 404 if (isInterfaceClass(elementType))
406 return this.validateInterfaceElements( 405 return this.validateInterfaceElements(
407 elementsOffset, numElements, nullable); 406 elementsOffset, numElements, nullable);
408 if (isInterfaceRequestClass(elementType)) 407 if (isInterfaceRequestClass(elementType))
409 return this.validateInterfaceRequestElements( 408 return this.validateInterfaceRequestElements(
410 elementsOffset, numElements, nullable); 409 elementsOffset, numElements, nullable);
411 if (isStringClass(elementType)) 410 if (isStringClass(elementType))
412 return this.validateArrayElements( 411 return this.validateArrayElements(
413 elementsOffset, numElements, internal.Uint8, nullable, [0], 0); 412 elementsOffset, numElements, codec.Uint8, nullable, [0], 0);
414 if (elementType instanceof internal.PointerTo) 413 if (elementType instanceof codec.PointerTo)
415 return this.validateStructElements( 414 return this.validateStructElements(
416 elementsOffset, numElements, elementType.cls, nullable); 415 elementsOffset, numElements, elementType.cls, nullable);
417 if (elementType instanceof internal.ArrayOf) 416 if (elementType instanceof codec.ArrayOf)
418 return this.validateArrayElements( 417 return this.validateArrayElements(
419 elementsOffset, numElements, elementType.cls, nullable, 418 elementsOffset, numElements, elementType.cls, nullable,
420 expectedDimensionSizes, currentDimension + 1); 419 expectedDimensionSizes, currentDimension + 1);
421 if (isEnumClass(elementType)) 420 if (isEnumClass(elementType))
422 return this.validateEnumElements(elementsOffset, numElements, 421 return this.validateEnumElements(elementsOffset, numElements,
423 elementType.cls); 422 elementType.cls);
424 423
425 return validationError.NONE; 424 return validationError.NONE;
426 }; 425 };
427 426
428 // Note: the |offset + i * elementSize| computation in the validateFooElements 427 // Note: the |offset + i * elementSize| computation in the validateFooElements
429 // methods below is "safe" because elementSize <= 8, offset and 428 // methods below is "safe" because elementSize <= 8, offset and
430 // numElements are uint32, and 0 <= i < numElements. 429 // numElements are uint32, and 0 <= i < numElements.
431 430
432 Validator.prototype.validateHandleElements = 431 Validator.prototype.validateHandleElements =
433 function(offset, numElements, nullable) { 432 function(offset, numElements, nullable) {
434 var elementSize = internal.Handle.encodedSize; 433 var elementSize = codec.Handle.encodedSize;
435 for (var i = 0; i < numElements; i++) { 434 for (var i = 0; i < numElements; i++) {
436 var elementOffset = offset + i * elementSize; 435 var elementOffset = offset + i * elementSize;
437 var err = this.validateHandle(elementOffset, nullable); 436 var err = this.validateHandle(elementOffset, nullable);
438 if (err != validationError.NONE) 437 if (err != validationError.NONE)
439 return err; 438 return err;
440 } 439 }
441 return validationError.NONE; 440 return validationError.NONE;
442 }; 441 };
443 442
444 Validator.prototype.validateInterfaceElements = 443 Validator.prototype.validateInterfaceElements =
445 function(offset, numElements, nullable) { 444 function(offset, numElements, nullable) {
446 var elementSize = internal.Interface.prototype.encodedSize; 445 var elementSize = codec.Interface.prototype.encodedSize;
447 for (var i = 0; i < numElements; i++) { 446 for (var i = 0; i < numElements; i++) {
448 var elementOffset = offset + i * elementSize; 447 var elementOffset = offset + i * elementSize;
449 var err = this.validateInterface(elementOffset, nullable); 448 var err = this.validateInterface(elementOffset, nullable);
450 if (err != validationError.NONE) 449 if (err != validationError.NONE)
451 return err; 450 return err;
452 } 451 }
453 return validationError.NONE; 452 return validationError.NONE;
454 }; 453 };
455 454
456 Validator.prototype.validateInterfaceRequestElements = 455 Validator.prototype.validateInterfaceRequestElements =
457 function(offset, numElements, nullable) { 456 function(offset, numElements, nullable) {
458 var elementSize = internal.InterfaceRequest.encodedSize; 457 var elementSize = codec.InterfaceRequest.encodedSize;
459 for (var i = 0; i < numElements; i++) { 458 for (var i = 0; i < numElements; i++) {
460 var elementOffset = offset + i * elementSize; 459 var elementOffset = offset + i * elementSize;
461 var err = this.validateInterfaceRequest(elementOffset, nullable); 460 var err = this.validateInterfaceRequest(elementOffset, nullable);
462 if (err != validationError.NONE) 461 if (err != validationError.NONE)
463 return err; 462 return err;
464 } 463 }
465 return validationError.NONE; 464 return validationError.NONE;
466 }; 465 };
467 466
468 // The elementClass parameter is the element type of the element arrays. 467 // The elementClass parameter is the element type of the element arrays.
469 Validator.prototype.validateArrayElements = 468 Validator.prototype.validateArrayElements =
470 function(offset, numElements, elementClass, nullable, 469 function(offset, numElements, elementClass, nullable,
471 expectedDimensionSizes, currentDimension) { 470 expectedDimensionSizes, currentDimension) {
472 var elementSize = internal.PointerTo.prototype.encodedSize; 471 var elementSize = codec.PointerTo.prototype.encodedSize;
473 for (var i = 0; i < numElements; i++) { 472 for (var i = 0; i < numElements; i++) {
474 var elementOffset = offset + i * elementSize; 473 var elementOffset = offset + i * elementSize;
475 var err = this.validateArrayPointer( 474 var err = this.validateArrayPointer(
476 elementOffset, elementClass.encodedSize, elementClass, nullable, 475 elementOffset, elementClass.encodedSize, elementClass, nullable,
477 expectedDimensionSizes, currentDimension); 476 expectedDimensionSizes, currentDimension);
478 if (err != validationError.NONE) 477 if (err != validationError.NONE)
479 return err; 478 return err;
480 } 479 }
481 return validationError.NONE; 480 return validationError.NONE;
482 }; 481 };
483 482
484 Validator.prototype.validateStructElements = 483 Validator.prototype.validateStructElements =
485 function(offset, numElements, structClass, nullable) { 484 function(offset, numElements, structClass, nullable) {
486 var elementSize = internal.PointerTo.prototype.encodedSize; 485 var elementSize = codec.PointerTo.prototype.encodedSize;
487 for (var i = 0; i < numElements; i++) { 486 for (var i = 0; i < numElements; i++) {
488 var elementOffset = offset + i * elementSize; 487 var elementOffset = offset + i * elementSize;
489 var err = 488 var err =
490 this.validateStructPointer(elementOffset, structClass, nullable); 489 this.validateStructPointer(elementOffset, structClass, nullable);
491 if (err != validationError.NONE) 490 if (err != validationError.NONE)
492 return err; 491 return err;
493 } 492 }
494 return validationError.NONE; 493 return validationError.NONE;
495 }; 494 };
496 495
497 Validator.prototype.validateEnumElements = 496 Validator.prototype.validateEnumElements =
498 function(offset, numElements, enumClass) { 497 function(offset, numElements, enumClass) {
499 var elementSize = internal.Enum.prototype.encodedSize; 498 var elementSize = codec.Enum.prototype.encodedSize;
500 for (var i = 0; i < numElements; i++) { 499 for (var i = 0; i < numElements; i++) {
501 var elementOffset = offset + i * elementSize; 500 var elementOffset = offset + i * elementSize;
502 var err = this.validateEnum(elementOffset, enumClass); 501 var err = this.validateEnum(elementOffset, enumClass);
503 if (err != validationError.NONE) 502 if (err != validationError.NONE)
504 return err; 503 return err;
505 } 504 }
506 return validationError.NONE; 505 return validationError.NONE;
507 }; 506 };
508 507
509 internal.validationError = validationError; 508 var exports = {};
510 internal.Validator = Validator; 509 exports.validationError = validationError;
511 })(); 510 exports.Validator = Validator;
511 return exports;
512 });
OLDNEW
« no previous file with comments | « mojo/public/js/new_bindings/unicode.js ('k') | mojo/public/tools/bindings/generators/js_templates/module.amd.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698