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

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

Issue 215883004: Revert of Mojo: add javascript bindings for request/response (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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;
88 87
89 // Decoder ------------------------------------------------------------------ 88 // Decoder ------------------------------------------------------------------
90 89
91 function Decoder(memory, handles, base) { 90 function Decoder(memory, handles, base) {
92 this.memory = memory; 91 this.memory = memory;
93 this.handles = handles; 92 this.handles = handles;
94 this.base = base; 93 this.base = base;
95 this.next = base; 94 this.next = base;
96 this.viewU32 = new Uint32Array( 95 this.viewU32 = new Uint32Array(
97 this.memory.buffer, 0, 96 this.memory.buffer, 0,
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 280
282 Encoder.prototype.encodeStringPointer = function(val) { 281 Encoder.prototype.encodeStringPointer = function(val) {
283 // TODO(abarth): This won't be right once we support UTF-8. 282 // TODO(abarth): This won't be right once we support UTF-8.
284 var encodedSize = kArrayHeaderSize + val.length; 283 var encodedSize = kArrayHeaderSize + val.length;
285 var encoder = this.createAndEncodeEncoder(encodedSize); 284 var encoder = this.createAndEncodeEncoder(encodedSize);
286 encoder.encodeString(val); 285 encoder.encodeString(val);
287 }; 286 };
288 287
289 // Message ------------------------------------------------------------------ 288 // Message ------------------------------------------------------------------
290 289
291 var kMessageExpectsResponse = 1 << 0;
292 var kMessageIsResponse = 1 << 1;
293
294 function Message(memory, handles) { 290 function Message(memory, handles) {
295 this.memory = memory; 291 this.memory = memory;
296 this.handles = handles; 292 this.handles = handles;
297 } 293 }
298 294
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
309 // MessageBuilder ----------------------------------------------------------- 295 // MessageBuilder -----------------------------------------------------------
310 296
311 function MessageBuilder(messageName, payloadSize) { 297 function MessageBuilder(messageName, payloadSize) {
312 // Currently, we don't compute the payload size correctly ahead of time. 298 // Currently, we don't compute the payload size correctly ahead of time.
313 // Instead, we resize the buffer at the end. 299 // Instead, we resize the buffer at the end.
314 var numberOfBytes = kMessageHeaderSize + payloadSize; 300 var numberOfBytes = kMessageHeaderSize + payloadSize;
315 this.buffer = new Buffer(numberOfBytes); 301 this.buffer = new Buffer(numberOfBytes);
316 this.handles = []; 302 this.handles = [];
317 var encoder = this.createEncoder(kMessageHeaderSize); 303 var encoder = this.createEncoder(kMessageHeaderSize);
318 encoder.write32(kMessageHeaderSize); 304 encoder.write32(kMessageHeaderSize);
319 encoder.write32(2); // num_fields. 305 encoder.write32(2); // num_fields.
320 encoder.write32(messageName); 306 encoder.write32(messageName);
321 encoder.write32(0); // flags. 307 encoder.write32(0); // flags.
322 } 308 }
323 309
324 MessageBuilder.prototype.createEncoder = function(size) { 310 MessageBuilder.prototype.createEncoder = function(size) {
325 var pointer = this.buffer.alloc(size); 311 var pointer = this.buffer.alloc(size);
326 return new Encoder(this.buffer, this.handles, pointer); 312 return new Encoder(this.buffer, this.handles, pointer);
327 }; 313 }
328 314
329 MessageBuilder.prototype.encodeStruct = function(cls, val) { 315 MessageBuilder.prototype.encodeStruct = function(cls, val) {
330 cls.encode(this.createEncoder(cls.encodedSize), val); 316 cls.encode(this.createEncoder(cls.encodedSize), val);
331 }; 317 };
332 318
333 MessageBuilder.prototype.finish = function() { 319 MessageBuilder.prototype.finish = function() {
334 // TODO(abarth): Rather than resizing the buffer at the end, we could 320 // TODO(abarth): Rather than resizing the buffer at the end, we could
335 // compute the size we need ahead of time, like we do in C++. 321 // compute the size we need ahead of time, like we do in C++.
336 var memory = this.buffer.createViewOfAllocatedMemory(); 322 var memory = this.buffer.createViewOfAllocatedMemory();
337 var message = new Message(memory, this.handles); 323 var message = new Message(memory, this.handles);
338 this.buffer = null; 324 this.buffer = null;
339 this.handles = null; 325 this.handles = null;
340 this.encoder = null; 326 this.encoder = null;
341 return message; 327 return message;
342 }; 328 };
343 329
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.
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
366 // MessageReader ------------------------------------------------------------ 330 // MessageReader ------------------------------------------------------------
367 331
368 function MessageReader(message) { 332 function MessageReader(message) {
369 this.decoder = new Decoder(message.memory, message.handles, 0); 333 this.decoder = new Decoder(message.memory, message.handles, 0);
370 var messageHeaderSize = this.decoder.read32(); 334 var messageHeaderSize = this.decoder.read32();
371 this.payloadSize = message.memory.length - messageHeaderSize; 335 this.payloadSize = message.memory.length - messageHeaderSize;
372 var numFields = this.decoder.read32(); 336 var numberOfFields = this.decoder.read32();
337 // TODO: better handling of messages of different size.
373 this.messageName = this.decoder.read32(); 338 this.messageName = this.decoder.read32();
374 this.flags = this.decoder.read32(); 339 var flags = this.decoder.read32();
375 if (numFields >= 3)
376 this.requestID = this.decoder.read64();
377 this.decoder.skip(messageHeaderSize - this.decoder.next);
378 } 340 }
379 341
380 MessageReader.prototype.decodeStruct = function(cls) { 342 MessageReader.prototype.decodeStruct = function(cls) {
381 return cls.decode(this.decoder); 343 return cls.decode(this.decoder);
382 }; 344 };
383 345
384 // Built-in types ----------------------------------------------------------- 346 // Built-in types -----------------------------------------------------------
385 347
386 function Uint8() { 348 function Uint8() {
387 } 349 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 }; 442 };
481 443
482 Handle.encode = function(encoder, val) { 444 Handle.encode = function(encoder, val) {
483 encoder.encodeHandle(val); 445 encoder.encodeHandle(val);
484 }; 446 };
485 447
486 var exports = {}; 448 var exports = {};
487 exports.align = align; 449 exports.align = align;
488 exports.Message = Message; 450 exports.Message = Message;
489 exports.MessageBuilder = MessageBuilder; 451 exports.MessageBuilder = MessageBuilder;
490 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
491 exports.MessageReader = MessageReader; 452 exports.MessageReader = MessageReader;
492 exports.kArrayHeaderSize = kArrayHeaderSize; 453 exports.kArrayHeaderSize = kArrayHeaderSize;
493 exports.kStructHeaderSize = kStructHeaderSize; 454 exports.kStructHeaderSize = kStructHeaderSize;
494 exports.kMessageHeaderSize = kMessageHeaderSize; 455 exports.kMessageHeaderSize = kMessageHeaderSize;
495 exports.kMessageExpectsResponse = kMessageExpectsResponse;
496 exports.kMessageIsResponse = kMessageIsResponse;
497 exports.Uint8 = Uint8; 456 exports.Uint8 = Uint8;
498 exports.Uint16 = Uint16; 457 exports.Uint16 = Uint16;
499 exports.Uint32 = Uint32; 458 exports.Uint32 = Uint32;
500 exports.Uint64 = Uint64; 459 exports.Uint64 = Uint64;
501 exports.PointerTo = PointerTo; 460 exports.PointerTo = PointerTo;
502 exports.ArrayOf = ArrayOf; 461 exports.ArrayOf = ArrayOf;
503 exports.Handle = Handle; 462 exports.Handle = Handle;
504 return exports; 463 return exports;
505 }); 464 });
OLDNEW
« no previous file with comments | « mojo/public/bindings/generators/js_templates/interface_definition.tmpl ('k') | mojo/public/bindings/js/connection.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698