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

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

Issue 2759563004: 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 define("mojo/public/js/validator", [ 5 (function() {
6 "mojo/public/js/codec", 6 var internal = mojoBindings.internal;
7 ], function(codec) {
8 7
9 var validationError = { 8 var validationError = {
10 NONE: 'VALIDATION_ERROR_NONE', 9 NONE: 'VALIDATION_ERROR_NONE',
11 MISALIGNED_OBJECT: 'VALIDATION_ERROR_MISALIGNED_OBJECT', 10 MISALIGNED_OBJECT: 'VALIDATION_ERROR_MISALIGNED_OBJECT',
12 ILLEGAL_MEMORY_RANGE: 'VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE', 11 ILLEGAL_MEMORY_RANGE: 'VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE',
13 UNEXPECTED_STRUCT_HEADER: 'VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER', 12 UNEXPECTED_STRUCT_HEADER: 'VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER',
14 UNEXPECTED_ARRAY_HEADER: 'VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER', 13 UNEXPECTED_ARRAY_HEADER: 'VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER',
15 ILLEGAL_HANDLE: 'VALIDATION_ERROR_ILLEGAL_HANDLE', 14 ILLEGAL_HANDLE: 'VALIDATION_ERROR_ILLEGAL_HANDLE',
16 UNEXPECTED_INVALID_HANDLE: 'VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE', 15 UNEXPECTED_INVALID_HANDLE: 'VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE',
17 ILLEGAL_POINTER: 'VALIDATION_ERROR_ILLEGAL_POINTER', 16 ILLEGAL_POINTER: 'VALIDATION_ERROR_ILLEGAL_POINTER',
18 UNEXPECTED_NULL_POINTER: 'VALIDATION_ERROR_UNEXPECTED_NULL_POINTER', 17 UNEXPECTED_NULL_POINTER: 'VALIDATION_ERROR_UNEXPECTED_NULL_POINTER',
19 MESSAGE_HEADER_INVALID_FLAGS: 18 MESSAGE_HEADER_INVALID_FLAGS:
20 'VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS', 19 'VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS',
21 MESSAGE_HEADER_MISSING_REQUEST_ID: 20 MESSAGE_HEADER_MISSING_REQUEST_ID:
22 'VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID', 21 'VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID',
23 DIFFERENT_SIZED_ARRAYS_IN_MAP: 22 DIFFERENT_SIZED_ARRAYS_IN_MAP:
24 'VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP', 23 'VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP',
25 INVALID_UNION_SIZE: 'VALIDATION_ERROR_INVALID_UNION_SIZE', 24 INVALID_UNION_SIZE: 'VALIDATION_ERROR_INVALID_UNION_SIZE',
26 UNEXPECTED_NULL_UNION: 'VALIDATION_ERROR_UNEXPECTED_NULL_UNION', 25 UNEXPECTED_NULL_UNION: 'VALIDATION_ERROR_UNEXPECTED_NULL_UNION',
27 UNKNOWN_ENUM_VALUE: 'VALIDATION_ERROR_UNKNOWN_ENUM_VALUE', 26 UNKNOWN_ENUM_VALUE: 'VALIDATION_ERROR_UNKNOWN_ENUM_VALUE',
28 }; 27 };
29 28
30 var NULL_MOJO_POINTER = "NULL_MOJO_POINTER"; 29 var NULL_MOJO_POINTER = "NULL_MOJO_POINTER";
31 30
32 function isEnumClass(cls) { 31 function isEnumClass(cls) {
33 return cls instanceof codec.Enum; 32 return cls instanceof internal.Enum;
34 } 33 }
35 34
36 function isStringClass(cls) { 35 function isStringClass(cls) {
37 return cls === codec.String || cls === codec.NullableString; 36 return cls === internal.String || cls === internal.NullableString;
38 } 37 }
39 38
40 function isHandleClass(cls) { 39 function isHandleClass(cls) {
41 return cls === codec.Handle || cls === codec.NullableHandle; 40 return cls === internal.Handle || cls === internal.NullableHandle;
42 } 41 }
43 42
44 function isInterfaceClass(cls) { 43 function isInterfaceClass(cls) {
45 return cls instanceof codec.Interface; 44 return cls instanceof internal.Interface;
46 } 45 }
47 46
48 function isInterfaceRequestClass(cls) { 47 function isInterfaceRequestClass(cls) {
49 return cls === codec.InterfaceRequest || 48 return cls === internal.InterfaceRequest ||
50 cls === codec.NullableInterfaceRequest; 49 cls === internal.NullableInterfaceRequest;
51 } 50 }
52 51
53 function isNullable(type) { 52 function isNullable(type) {
54 return type === codec.NullableString || type === codec.NullableHandle || 53 return type === internal.NullableString ||
55 type === codec.NullableInterface || 54 type === internal.NullableHandle ||
56 type === codec.NullableInterfaceRequest || 55 type === internal.NullableInterface ||
57 type instanceof codec.NullableArrayOf || 56 type === internal.NullableInterfaceRequest ||
58 type instanceof codec.NullablePointerTo; 57 type instanceof internal.NullableArrayOf ||
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 === codec.kEncodedInvalidHandleValue) 101 if (index === internal.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 === codec.kEncodedInvalidHandleValue) 122 if (index === internal.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 (!codec.isAligned(offset)) 141 if (!internal.isAligned(offset))
142 return validationError.MISALIGNED_OBJECT; 142 return validationError.MISALIGNED_OBJECT;
143 143
144 if (!this.isValidRange(offset, codec.kStructHeaderSize)) 144 if (!this.isValidRange(offset, internal.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, codec.kMessageHeaderSize); 185 var err = this.validateStructHeader(0, internal.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 == codec.kMessageHeaderSize) || 193 (version == 0 && numBytes == internal.kMessageHeaderSize) ||
194 (version == 1 && 194 (version == 1 &&
195 numBytes == codec.kMessageWithRequestIDHeaderSize) || 195 numBytes == internal.kMessageWithRequestIDHeaderSize) ||
196 (version > 1 && 196 (version > 1 &&
197 numBytes >= codec.kMessageWithRequestIDHeaderSize); 197 numBytes >= internal.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 = codec.kStructHeaderSize + codec.kMapStructPayloadSize; 325 var mapEncodedSize = internal.kStructHeaderSize +
326 internal.kMapStructPayloadSize;
326 var err = this.validateStructHeader(structOffset, mapEncodedSize); 327 var err = this.validateStructHeader(structOffset, mapEncodedSize);
327 if (err !== validationError.NONE) 328 if (err !== validationError.NONE)
328 return err; 329 return err;
329 330
330 // Validate the keys array. 331 // Validate the keys array.
331 var keysArrayPointerOffset = structOffset + codec.kStructHeaderSize; 332 var keysArrayPointerOffset = structOffset + internal.kStructHeaderSize;
332 err = this.validateArrayPointer( 333 err = this.validateArrayPointer(
333 keysArrayPointerOffset, keyClass.encodedSize, keyClass, false, [0], 0); 334 keysArrayPointerOffset, keyClass.encodedSize, keyClass, false, [0], 0);
334 if (err !== validationError.NONE) 335 if (err !== validationError.NONE)
335 return err; 336 return err;
336 337
337 // Validate the values array. 338 // Validate the values array.
338 var valuesArrayPointerOffset = keysArrayPointerOffset + 8; 339 var valuesArrayPointerOffset = keysArrayPointerOffset + 8;
339 var valuesArrayDimensions = [0]; // Validate the actual length below. 340 var valuesArrayDimensions = [0]; // Validate the actual length below.
340 if (valueClass instanceof codec.ArrayOf) 341 if (valueClass instanceof internal.ArrayOf)
341 valuesArrayDimensions = 342 valuesArrayDimensions =
342 valuesArrayDimensions.concat(valueClass.dimensions()); 343 valuesArrayDimensions.concat(valueClass.dimensions());
343 var err = this.validateArrayPointer(valuesArrayPointerOffset, 344 var err = this.validateArrayPointer(valuesArrayPointerOffset,
344 valueClass.encodedSize, 345 valueClass.encodedSize,
345 valueClass, 346 valueClass,
346 valueIsNullable, 347 valueIsNullable,
347 valuesArrayDimensions, 348 valuesArrayDimensions,
348 0); 349 0);
349 if (err !== validationError.NONE) 350 if (err !== validationError.NONE)
350 return err; 351 return err;
351 352
352 // Validate the lengths of the keys and values arrays. 353 // Validate the lengths of the keys and values arrays.
353 var keysArrayLength = this.arrayLength(keysArrayPointerOffset); 354 var keysArrayLength = this.arrayLength(keysArrayPointerOffset);
354 var valuesArrayLength = this.arrayLength(valuesArrayPointerOffset); 355 var valuesArrayLength = this.arrayLength(valuesArrayPointerOffset);
355 if (keysArrayLength != valuesArrayLength) 356 if (keysArrayLength != valuesArrayLength)
356 return validationError.DIFFERENT_SIZED_ARRAYS_IN_MAP; 357 return validationError.DIFFERENT_SIZED_ARRAYS_IN_MAP;
357 358
358 return validationError.NONE; 359 return validationError.NONE;
359 }; 360 };
360 361
361 Validator.prototype.validateStringPointer = function(offset, nullable) { 362 Validator.prototype.validateStringPointer = function(offset, nullable) {
362 return this.validateArrayPointer( 363 return this.validateArrayPointer(
363 offset, codec.Uint8.encodedSize, codec.Uint8, nullable, [0], 0); 364 offset, internal.Uint8.encodedSize, internal.Uint8, nullable, [0], 0);
364 }; 365 };
365 366
366 // Similar to Array_Data<T>::Validate() 367 // Similar to Array_Data<T>::Validate()
367 // mojo/public/cpp/bindings/lib/array_internal.h 368 // mojo/public/cpp/bindings/lib/array_internal.h
368 369
369 Validator.prototype.validateArray = 370 Validator.prototype.validateArray =
370 function (offset, elementSize, elementType, expectedDimensionSizes, 371 function (offset, elementSize, elementType, expectedDimensionSizes,
371 currentDimension) { 372 currentDimension) {
372 if (!codec.isAligned(offset)) 373 if (!internal.isAligned(offset))
373 return validationError.MISALIGNED_OBJECT; 374 return validationError.MISALIGNED_OBJECT;
374 375
375 if (!this.isValidRange(offset, codec.kArrayHeaderSize)) 376 if (!this.isValidRange(offset, internal.kArrayHeaderSize))
376 return validationError.ILLEGAL_MEMORY_RANGE; 377 return validationError.ILLEGAL_MEMORY_RANGE;
377 378
378 var numBytes = this.message.buffer.getUint32(offset); 379 var numBytes = this.message.buffer.getUint32(offset);
379 var numElements = this.message.buffer.getUint32(offset + 4); 380 var numElements = this.message.buffer.getUint32(offset + 4);
380 381
381 // Note: this computation is "safe" because elementSize <= 8 and 382 // Note: this computation is "safe" because elementSize <= 8 and
382 // numElements is a uint32. 383 // numElements is a uint32.
383 var elementsTotalSize = (elementType === codec.PackedBool) ? 384 var elementsTotalSize = (elementType === internal.PackedBool) ?
384 Math.ceil(numElements / 8) : (elementSize * numElements); 385 Math.ceil(numElements / 8) : (elementSize * numElements);
385 386
386 if (numBytes < codec.kArrayHeaderSize + elementsTotalSize) 387 if (numBytes < internal.kArrayHeaderSize + elementsTotalSize)
387 return validationError.UNEXPECTED_ARRAY_HEADER; 388 return validationError.UNEXPECTED_ARRAY_HEADER;
388 389
389 if (expectedDimensionSizes[currentDimension] != 0 && 390 if (expectedDimensionSizes[currentDimension] != 0 &&
390 numElements != expectedDimensionSizes[currentDimension]) { 391 numElements != expectedDimensionSizes[currentDimension]) {
391 return validationError.UNEXPECTED_ARRAY_HEADER; 392 return validationError.UNEXPECTED_ARRAY_HEADER;
392 } 393 }
393 394
394 if (!this.claimRange(offset, numBytes)) 395 if (!this.claimRange(offset, numBytes))
395 return validationError.ILLEGAL_MEMORY_RANGE; 396 return validationError.ILLEGAL_MEMORY_RANGE;
396 397
397 // Validate the array's elements if they are pointers or handles. 398 // Validate the array's elements if they are pointers or handles.
398 399
399 var elementsOffset = offset + codec.kArrayHeaderSize; 400 var elementsOffset = offset + internal.kArrayHeaderSize;
400 var nullable = isNullable(elementType); 401 var nullable = isNullable(elementType);
401 402
402 if (isHandleClass(elementType)) 403 if (isHandleClass(elementType))
403 return this.validateHandleElements(elementsOffset, numElements, nullable); 404 return this.validateHandleElements(elementsOffset, numElements, nullable);
404 if (isInterfaceClass(elementType)) 405 if (isInterfaceClass(elementType))
405 return this.validateInterfaceElements( 406 return this.validateInterfaceElements(
406 elementsOffset, numElements, nullable); 407 elementsOffset, numElements, nullable);
407 if (isInterfaceRequestClass(elementType)) 408 if (isInterfaceRequestClass(elementType))
408 return this.validateInterfaceRequestElements( 409 return this.validateInterfaceRequestElements(
409 elementsOffset, numElements, nullable); 410 elementsOffset, numElements, nullable);
410 if (isStringClass(elementType)) 411 if (isStringClass(elementType))
411 return this.validateArrayElements( 412 return this.validateArrayElements(
412 elementsOffset, numElements, codec.Uint8, nullable, [0], 0); 413 elementsOffset, numElements, internal.Uint8, nullable, [0], 0);
413 if (elementType instanceof codec.PointerTo) 414 if (elementType instanceof internal.PointerTo)
414 return this.validateStructElements( 415 return this.validateStructElements(
415 elementsOffset, numElements, elementType.cls, nullable); 416 elementsOffset, numElements, elementType.cls, nullable);
416 if (elementType instanceof codec.ArrayOf) 417 if (elementType instanceof internal.ArrayOf)
417 return this.validateArrayElements( 418 return this.validateArrayElements(
418 elementsOffset, numElements, elementType.cls, nullable, 419 elementsOffset, numElements, elementType.cls, nullable,
419 expectedDimensionSizes, currentDimension + 1); 420 expectedDimensionSizes, currentDimension + 1);
420 if (isEnumClass(elementType)) 421 if (isEnumClass(elementType))
421 return this.validateEnumElements(elementsOffset, numElements, 422 return this.validateEnumElements(elementsOffset, numElements,
422 elementType.cls); 423 elementType.cls);
423 424
424 return validationError.NONE; 425 return validationError.NONE;
425 }; 426 };
426 427
427 // Note: the |offset + i * elementSize| computation in the validateFooElements 428 // Note: the |offset + i * elementSize| computation in the validateFooElements
428 // methods below is "safe" because elementSize <= 8, offset and 429 // methods below is "safe" because elementSize <= 8, offset and
429 // numElements are uint32, and 0 <= i < numElements. 430 // numElements are uint32, and 0 <= i < numElements.
430 431
431 Validator.prototype.validateHandleElements = 432 Validator.prototype.validateHandleElements =
432 function(offset, numElements, nullable) { 433 function(offset, numElements, nullable) {
433 var elementSize = codec.Handle.encodedSize; 434 var elementSize = internal.Handle.encodedSize;
434 for (var i = 0; i < numElements; i++) { 435 for (var i = 0; i < numElements; i++) {
435 var elementOffset = offset + i * elementSize; 436 var elementOffset = offset + i * elementSize;
436 var err = this.validateHandle(elementOffset, nullable); 437 var err = this.validateHandle(elementOffset, nullable);
437 if (err != validationError.NONE) 438 if (err != validationError.NONE)
438 return err; 439 return err;
439 } 440 }
440 return validationError.NONE; 441 return validationError.NONE;
441 }; 442 };
442 443
443 Validator.prototype.validateInterfaceElements = 444 Validator.prototype.validateInterfaceElements =
444 function(offset, numElements, nullable) { 445 function(offset, numElements, nullable) {
445 var elementSize = codec.Interface.prototype.encodedSize; 446 var elementSize = internal.Interface.prototype.encodedSize;
446 for (var i = 0; i < numElements; i++) { 447 for (var i = 0; i < numElements; i++) {
447 var elementOffset = offset + i * elementSize; 448 var elementOffset = offset + i * elementSize;
448 var err = this.validateInterface(elementOffset, nullable); 449 var err = this.validateInterface(elementOffset, nullable);
449 if (err != validationError.NONE) 450 if (err != validationError.NONE)
450 return err; 451 return err;
451 } 452 }
452 return validationError.NONE; 453 return validationError.NONE;
453 }; 454 };
454 455
455 Validator.prototype.validateInterfaceRequestElements = 456 Validator.prototype.validateInterfaceRequestElements =
456 function(offset, numElements, nullable) { 457 function(offset, numElements, nullable) {
457 var elementSize = codec.InterfaceRequest.encodedSize; 458 var elementSize = internal.InterfaceRequest.encodedSize;
458 for (var i = 0; i < numElements; i++) { 459 for (var i = 0; i < numElements; i++) {
459 var elementOffset = offset + i * elementSize; 460 var elementOffset = offset + i * elementSize;
460 var err = this.validateInterfaceRequest(elementOffset, nullable); 461 var err = this.validateInterfaceRequest(elementOffset, nullable);
461 if (err != validationError.NONE) 462 if (err != validationError.NONE)
462 return err; 463 return err;
463 } 464 }
464 return validationError.NONE; 465 return validationError.NONE;
465 }; 466 };
466 467
467 // The elementClass parameter is the element type of the element arrays. 468 // The elementClass parameter is the element type of the element arrays.
468 Validator.prototype.validateArrayElements = 469 Validator.prototype.validateArrayElements =
469 function(offset, numElements, elementClass, nullable, 470 function(offset, numElements, elementClass, nullable,
470 expectedDimensionSizes, currentDimension) { 471 expectedDimensionSizes, currentDimension) {
471 var elementSize = codec.PointerTo.prototype.encodedSize; 472 var elementSize = internal.PointerTo.prototype.encodedSize;
472 for (var i = 0; i < numElements; i++) { 473 for (var i = 0; i < numElements; i++) {
473 var elementOffset = offset + i * elementSize; 474 var elementOffset = offset + i * elementSize;
474 var err = this.validateArrayPointer( 475 var err = this.validateArrayPointer(
475 elementOffset, elementClass.encodedSize, elementClass, nullable, 476 elementOffset, elementClass.encodedSize, elementClass, nullable,
476 expectedDimensionSizes, currentDimension); 477 expectedDimensionSizes, currentDimension);
477 if (err != validationError.NONE) 478 if (err != validationError.NONE)
478 return err; 479 return err;
479 } 480 }
480 return validationError.NONE; 481 return validationError.NONE;
481 }; 482 };
482 483
483 Validator.prototype.validateStructElements = 484 Validator.prototype.validateStructElements =
484 function(offset, numElements, structClass, nullable) { 485 function(offset, numElements, structClass, nullable) {
485 var elementSize = codec.PointerTo.prototype.encodedSize; 486 var elementSize = internal.PointerTo.prototype.encodedSize;
486 for (var i = 0; i < numElements; i++) { 487 for (var i = 0; i < numElements; i++) {
487 var elementOffset = offset + i * elementSize; 488 var elementOffset = offset + i * elementSize;
488 var err = 489 var err =
489 this.validateStructPointer(elementOffset, structClass, nullable); 490 this.validateStructPointer(elementOffset, structClass, nullable);
490 if (err != validationError.NONE) 491 if (err != validationError.NONE)
491 return err; 492 return err;
492 } 493 }
493 return validationError.NONE; 494 return validationError.NONE;
494 }; 495 };
495 496
496 Validator.prototype.validateEnumElements = 497 Validator.prototype.validateEnumElements =
497 function(offset, numElements, enumClass) { 498 function(offset, numElements, enumClass) {
498 var elementSize = codec.Enum.prototype.encodedSize; 499 var elementSize = internal.Enum.prototype.encodedSize;
499 for (var i = 0; i < numElements; i++) { 500 for (var i = 0; i < numElements; i++) {
500 var elementOffset = offset + i * elementSize; 501 var elementOffset = offset + i * elementSize;
501 var err = this.validateEnum(elementOffset, enumClass); 502 var err = this.validateEnum(elementOffset, enumClass);
502 if (err != validationError.NONE) 503 if (err != validationError.NONE)
503 return err; 504 return err;
504 } 505 }
505 return validationError.NONE; 506 return validationError.NONE;
506 }; 507 };
507 508
508 var exports = {}; 509 internal.validationError = validationError;
509 exports.validationError = validationError; 510 internal.Validator = Validator;
510 exports.Validator = Validator; 511 })();
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