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

Side by Side Diff: mojo/public/bindings/js/codec.js

Issue 207503004: Mojo: add javascript bindings for request/response (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix style Created 6 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 | 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 define("mojo/public/bindings/js/codec", function() { 5 define("mojo/public/bindings/js/codec", function() {
6 6
7 // Memory ------------------------------------------------------------------- 7 // Memory -------------------------------------------------------------------
8 8
9 function store8(memory, pointer, val) { 9 function store8(memory, pointer, val) {
10 memory[pointer] = val; 10 memory[pointer] = val;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 77
78 Buffer.prototype.createViewOfAllocatedMemory = function() { 78 Buffer.prototype.createViewOfAllocatedMemory = function() {
79 return new Uint8Array(this.memory.buffer, 0, this.next); 79 return new Uint8Array(this.memory.buffer, 0, this.next);
80 }; 80 };
81 81
82 // Constants ---------------------------------------------------------------- 82 // Constants ----------------------------------------------------------------
83 83
84 var kArrayHeaderSize = 8; 84 var kArrayHeaderSize = 8;
85 var kStructHeaderSize = 8; 85 var kStructHeaderSize = 8;
86 var kMessageHeaderSize = 16; 86 var kMessageHeaderSize = 16;
87 var kMessageWithRequestIDHeaderSize = 24;
87 88
88 // Decoder ------------------------------------------------------------------ 89 // Decoder ------------------------------------------------------------------
89 90
90 function Decoder(memory, handles, base) { 91 function Decoder(memory, handles, base) {
91 this.memory = memory; 92 this.memory = memory;
92 this.handles = handles; 93 this.handles = handles;
93 this.base = base; 94 this.base = base;
94 this.next = base; 95 this.next = base;
95 this.viewU32 = new Uint32Array( 96 this.viewU32 = new Uint32Array(
96 this.memory.buffer, 0, 97 this.memory.buffer, 0,
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 281
281 Encoder.prototype.encodeStringPointer = function(val) { 282 Encoder.prototype.encodeStringPointer = function(val) {
282 // TODO(abarth): This won't be right once we support UTF-8. 283 // TODO(abarth): This won't be right once we support UTF-8.
283 var encodedSize = kArrayHeaderSize + val.length; 284 var encodedSize = kArrayHeaderSize + val.length;
284 var encoder = this.createAndEncodeEncoder(encodedSize); 285 var encoder = this.createAndEncodeEncoder(encodedSize);
285 encoder.encodeString(val); 286 encoder.encodeString(val);
286 }; 287 };
287 288
288 // Message ------------------------------------------------------------------ 289 // Message ------------------------------------------------------------------
289 290
291 var kMessageExpectsResponse = 1 << 0;
292 var kMessageIsResponse = 1 << 1;
293
290 function Message(memory, handles) { 294 function Message(memory, handles) {
291 this.memory = memory; 295 this.memory = memory;
292 this.handles = handles; 296 this.handles = handles;
293 } 297 }
294 298
299 Message.prototype.setRequestID = function(requestID) {
300 // TODO(darin): Verify that space was reserved for this field!
301 store64(this.memory, 4 + 4 + 4 + 4, requestID);
302 };
303
304 Message.prototype.getFlags = function() {
305 // Skip over num_bytes, num_fields, and message_name.
306 return load32(this.memory, 4 + 4 + 4);
307 };
308
295 // MessageBuilder ----------------------------------------------------------- 309 // MessageBuilder -----------------------------------------------------------
296 310
297 function MessageBuilder(messageName, payloadSize) { 311 function MessageBuilder(messageName, payloadSize) {
298 // Currently, we don't compute the payload size correctly ahead of time. 312 // Currently, we don't compute the payload size correctly ahead of time.
299 // Instead, we resize the buffer at the end. 313 // Instead, we resize the buffer at the end.
300 var numberOfBytes = kMessageHeaderSize + payloadSize; 314 var numberOfBytes = kMessageHeaderSize + payloadSize;
301 this.buffer = new Buffer(numberOfBytes); 315 this.buffer = new Buffer(numberOfBytes);
302 this.handles = []; 316 this.handles = [];
303 var encoder = this.createEncoder(kMessageHeaderSize); 317 var encoder = this.createEncoder(kMessageHeaderSize);
304 encoder.write32(kMessageHeaderSize); 318 encoder.write32(kMessageHeaderSize);
305 encoder.write32(2); // num_fields. 319 encoder.write32(2); // num_fields.
306 encoder.write32(messageName); 320 encoder.write32(messageName);
307 encoder.write32(0); // flags. 321 encoder.write32(0); // flags.
308 } 322 }
309 323
310 MessageBuilder.prototype.createEncoder = function(size) { 324 MessageBuilder.prototype.createEncoder = function(size) {
311 var pointer = this.buffer.alloc(size); 325 var pointer = this.buffer.alloc(size);
312 return new Encoder(this.buffer, this.handles, pointer); 326 return new Encoder(this.buffer, this.handles, pointer);
313 } 327 };
314 328
315 MessageBuilder.prototype.encodeStruct = function(cls, val) { 329 MessageBuilder.prototype.encodeStruct = function(cls, val) {
316 cls.encode(this.createEncoder(cls.encodedSize), val); 330 cls.encode(this.createEncoder(cls.encodedSize), val);
317 }; 331 };
318 332
319 MessageBuilder.prototype.finish = function() { 333 MessageBuilder.prototype.finish = function() {
320 // TODO(abarth): Rather than resizing the buffer at the end, we could 334 // TODO(abarth): Rather than resizing the buffer at the end, we could
321 // compute the size we need ahead of time, like we do in C++. 335 // compute the size we need ahead of time, like we do in C++.
322 var memory = this.buffer.createViewOfAllocatedMemory(); 336 var memory = this.buffer.createViewOfAllocatedMemory();
323 var message = new Message(memory, this.handles); 337 var message = new Message(memory, this.handles);
324 this.buffer = null; 338 this.buffer = null;
325 this.handles = null; 339 this.handles = null;
326 this.encoder = null; 340 this.encoder = null;
327 return message; 341 return message;
328 }; 342 };
329 343
344 // MessageWithRequestIDBuilder -----------------------------------------------
345
346 function MessageWithRequestIDBuilder(messageName, payloadSize, flags,
347 requestID) {
348 // Currently, we don't compute the payload size correctly ahead of time.
349 // Instead, we resize the buffer at the end.
350 var numberOfBytes = kMessageWithRequestIDHeaderSize + payloadSize;
351 this.buffer = new Buffer(numberOfBytes);
352 this.handles = [];
353 var encoder = this.createEncoder(kMessageWithRequestIDHeaderSize);
354 encoder.write32(kMessageWithRequestIDHeaderSize);
355 encoder.write32(3); // num_fields.
abarth-chromium 2014/03/26 18:26:32 Should we make this a named constant?
356 encoder.write32(messageName);
357 encoder.write32(flags);
358 encoder.write64(requestID);
359 }
360
361 MessageWithRequestIDBuilder.prototype =
362 Object.create(MessageBuilder.prototype);
363 MessageWithRequestIDBuilder.prototype.constructor =
364 MessageWithRequestIDBuilder;
365
330 // MessageReader ------------------------------------------------------------ 366 // MessageReader ------------------------------------------------------------
331 367
332 function MessageReader(message) { 368 function MessageReader(message) {
333 this.decoder = new Decoder(message.memory, message.handles, 0); 369 this.decoder = new Decoder(message.memory, message.handles, 0);
334 var messageHeaderSize = this.decoder.read32(); 370 var messageHeaderSize = this.decoder.read32();
335 this.payloadSize = message.memory.length - messageHeaderSize; 371 this.payloadSize = message.memory.length - messageHeaderSize;
336 var numberOfFields = this.decoder.read32(); 372 var numFields = this.decoder.read32();
337 // TODO: better handling of messages of different size.
338 this.messageName = this.decoder.read32(); 373 this.messageName = this.decoder.read32();
339 var flags = this.decoder.read32(); 374 this.flags = this.decoder.read32();
375 if (numFields >= 3)
376 this.requestID = this.decoder.read64();
377 this.decoder.skip(messageHeaderSize - this.decoder.next);
340 } 378 }
341 379
342 MessageReader.prototype.decodeStruct = function(cls) { 380 MessageReader.prototype.decodeStruct = function(cls) {
343 return cls.decode(this.decoder); 381 return cls.decode(this.decoder);
344 }; 382 };
345 383
346 // Built-in types ----------------------------------------------------------- 384 // Built-in types -----------------------------------------------------------
347 385
348 function Uint8() { 386 function Uint8() {
349 } 387 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 }; 480 };
443 481
444 Handle.encode = function(encoder, val) { 482 Handle.encode = function(encoder, val) {
445 encoder.encodeHandle(val); 483 encoder.encodeHandle(val);
446 }; 484 };
447 485
448 var exports = {}; 486 var exports = {};
449 exports.align = align; 487 exports.align = align;
450 exports.Message = Message; 488 exports.Message = Message;
451 exports.MessageBuilder = MessageBuilder; 489 exports.MessageBuilder = MessageBuilder;
490 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
452 exports.MessageReader = MessageReader; 491 exports.MessageReader = MessageReader;
453 exports.kArrayHeaderSize = kArrayHeaderSize; 492 exports.kArrayHeaderSize = kArrayHeaderSize;
454 exports.kStructHeaderSize = kStructHeaderSize; 493 exports.kStructHeaderSize = kStructHeaderSize;
455 exports.kMessageHeaderSize = kMessageHeaderSize; 494 exports.kMessageHeaderSize = kMessageHeaderSize;
495 exports.kMessageExpectsResponse = kMessageExpectsResponse;
496 exports.kMessageIsResponse = kMessageIsResponse;
456 exports.Uint8 = Uint8; 497 exports.Uint8 = Uint8;
457 exports.Uint16 = Uint16; 498 exports.Uint16 = Uint16;
458 exports.Uint32 = Uint32; 499 exports.Uint32 = Uint32;
459 exports.Uint64 = Uint64; 500 exports.Uint64 = Uint64;
460 exports.PointerTo = PointerTo; 501 exports.PointerTo = PointerTo;
461 exports.ArrayOf = ArrayOf; 502 exports.ArrayOf = ArrayOf;
462 exports.Handle = Handle; 503 exports.Handle = Handle;
463 return exports; 504 return exports;
464 }); 505 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698