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

Side by Side Diff: mojo/public/bindings/js/connector.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, 8 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
« no previous file with comments | « mojo/public/bindings/js/connection.js ('k') | mojo/public/bindings/js/router.js » ('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 define("mojo/public/bindings/js/connector", [ 5 define("mojo/public/bindings/js/connector", [
6 "mojo/public/bindings/js/codec", 6 "mojo/public/bindings/js/codec",
7 "mojo/bindings/js/core", 7 "mojo/bindings/js/core",
8 "mojo/bindings/js/support", 8 "mojo/bindings/js/support",
9 ], function(codec, core, support) { 9 ], function(codec, core, support) {
10 10
11 function Connector(handle) { 11 function Connector(handle) {
12 this.handle_ = handle; 12 this.handle_ = handle;
13 this.dropWrites_ = false;
14 this.error_ = false; 13 this.error_ = false;
15 this.incomingReceiver_ = null; 14 this.incomingReceiver_ = null;
16 this.readWaitCookie_ = null; 15 this.readWaitCookie_ = null;
17
18 this.waitToReadMore_();
19 } 16 }
20 17
21 Connector.prototype.close = function() { 18 Connector.prototype.close = function() {
22 if (this.readWaitCookie_) { 19 if (this.readWaitCookie_) {
23 support.cancelWait(this.readWaitCookie_); 20 support.cancelWait(this.readWaitCookie_);
24 this.readWaitCookie_ = null; 21 this.readWaitCookie_ = null;
25 } 22 }
26 if (this.handle_ != core.kInvalidHandle) { 23 if (this.handle_ != core.kInvalidHandle) {
27 core.close(this.handle_); 24 core.close(this.handle_);
28 this.handle_ = core.kInvalidHandle; 25 this.handle_ = core.kInvalidHandle;
29 } 26 }
30 }; 27 };
31 28
32 Connector.prototype.accept = function(message) { 29 Connector.prototype.accept = function(message) {
33 if (this.error_) 30 if (this.error_)
34 return false; 31 return false;
32 this.write_(message);
33 return !this.error_;
34 };
35 35
36 if (this.dropWrites_) 36 Connector.prototype.setIncomingReceiver = function(receiver) {
37 return true; 37 this.incomingReceiver_ = receiver;
38 if (this.incomingReceiver_)
39 this.waitToReadMore_();
40 };
38 41
42 Connector.prototype.write_ = function(message) {
39 var result = core.writeMessage(this.handle_, 43 var result = core.writeMessage(this.handle_,
40 message.memory, 44 message.memory,
41 message.handles, 45 message.handles,
42 core.WRITE_MESSAGE_FLAG_NONE); 46 core.WRITE_MESSAGE_FLAG_NONE);
43 47 if (result != core.RESULT_OK) {
44 switch (result) { 48 this.error_ = true
45 case core.RESULT_OK: 49 return;
46 // The handles were successfully transferred, so we don't own them
47 // anymore.
48 message.handles = [];
49 break;
50 case core.RESULT_FAILED_PRECONDITION:
51 // There's no point in continuing to write to this pipe since the other
52 // end is gone. Avoid writing any future messages. Hide write failures
53 // from the caller since we'd like them to continue consuming any
54 // backlog of incoming messages before regarding the message pipe as
55 // closed.
56 this.dropWrites_ = true;
57 break;
58 default:
59 // This particular write was rejected, presumably because of bad input.
60 // The pipe is not necessarily in a bad state.
61 return false;
62 } 50 }
63 return true; 51 // The handles were successfully transferred, so we don't own them anymore.
52 message.handles = [];
64 }; 53 };
65 54
66 Connector.prototype.setIncomingReceiver = function(receiver) {
67 this.incomingReceiver_ = receiver;
68 };
69
70 Connector.prototype.encounteredError = function() {
71 return this.error_;
72 }
73
74 Connector.prototype.waitToReadMore_ = function() { 55 Connector.prototype.waitToReadMore_ = function() {
75 this.readWaitCookie_ = support.asyncWait(this.handle_, 56 this.readWaitCookie_ = support.asyncWait(this.handle_,
76 core.WAIT_FLAG_READABLE, 57 core.WAIT_FLAG_READABLE,
77 this.readMore_.bind(this)); 58 this.readMore_.bind(this));
78 }; 59 };
79 60
80 Connector.prototype.readMore_ = function(result) { 61 Connector.prototype.readMore_ = function(result) {
81 for (;;) { 62 for (;;) {
82 var read = core.readMessage(this.handle_, 63 var read = core.readMessage(this.handle_,
83 core.READ_MESSAGE_FLAG_NONE); 64 core.READ_MESSAGE_FLAG_NONE);
84 if (read.result == core.RESULT_SHOULD_WAIT) { 65 if (read.result == core.RESULT_SHOULD_WAIT) {
85 this.waitToReadMore_(); 66 this.waitToReadMore_();
86 return; 67 return;
87 } 68 }
88 if (read.result != core.RESULT_OK) { 69 if (read.result != core.RESULT_OK) {
89 this.error_ = true; 70 this.error_ = true;
90 return; 71 return;
91 } 72 }
92 // TODO(abarth): Should core.readMessage return a Uint8Array? 73 // TODO(abarth): Should core.readMessage return a Uint8Array?
93 var memory = new Uint8Array(read.buffer); 74 var memory = new Uint8Array(read.buffer);
94 var message = new codec.Message(memory, read.handles); 75 var message = new codec.Message(memory, read.handles);
95 if (this.incomingReceiver_) 76 this.incomingReceiver_.accept(message);
96 this.incomingReceiver_.accept(message);
97 } 77 }
98 }; 78 };
99 79
80 function Connection(handle, localFactory, remoteFactory) {
81 this.connector_ = new Connector(handle);
82 this.remote = new remoteFactory(this.connector_);
83 this.local = new localFactory(this.remote);
84 this.connector_.setIncomingReceiver(this.local);
85 }
86
87 Connection.prototype.close = function() {
88 this.connector_.close();
89 this.connector_ = null;
90 this.local = null;
91 this.remote = null;
92 };
93
100 var exports = {}; 94 var exports = {};
101 exports.Connector = Connector; 95 exports.Connection = Connection;
102 return exports; 96 return exports;
103 }); 97 });
OLDNEW
« no previous file with comments | « mojo/public/bindings/js/connection.js ('k') | mojo/public/bindings/js/router.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698