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

Side by Side Diff: mojo/public/js/new_bindings/connector.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
« no previous file with comments | « mojo/public/js/new_bindings/codec.js ('k') | mojo/public/js/new_bindings/interface_types.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/js/connector", [ 5 (function() {
6 "mojo/public/js/buffer", 6 var internal = mojoBindings.internal;
7 "mojo/public/js/codec",
8 "mojo/public/js/core",
9 "mojo/public/js/support",
10 ], function(buffer, codec, core, support) {
11 7
12 function Connector(handle) { 8 function Connector(handle) {
13 if (!core.isHandle(handle)) 9 if (!(handle instanceof MojoHandle))
14 throw new Error("Connector: not a handle " + handle); 10 throw new Error("Connector: not a handle " + handle);
15 this.handle_ = handle; 11 this.handle_ = handle;
16 this.dropWrites_ = false; 12 this.dropWrites_ = false;
17 this.error_ = false; 13 this.error_ = false;
18 this.incomingReceiver_ = null; 14 this.incomingReceiver_ = null;
19 this.readWatcher_ = null; 15 this.readWatcher_ = null;
20 this.errorHandler_ = null; 16 this.errorHandler_ = null;
21 17
22 if (handle) { 18 if (handle) {
23 this.readWatcher_ = support.watch(handle, 19 this.readWatcher_ = handle.watch({readable: true},
24 core.HANDLE_SIGNAL_READABLE, 20 this.readMore_.bind(this));
25 this.readMore_.bind(this));
26 } 21 }
27 } 22 }
28 23
29 Connector.prototype.close = function() { 24 Connector.prototype.close = function() {
30 if (this.readWatcher_) { 25 if (this.readWatcher_) {
31 support.cancelWatch(this.readWatcher_); 26 this.readWatcher_.cancel();
32 this.readWatcher_ = null; 27 this.readWatcher_ = null;
33 } 28 }
34 if (this.handle_ != null) { 29 if (this.handle_ != null) {
35 core.close(this.handle_); 30 this.handle_.close();
36 this.handle_ = null; 31 this.handle_ = null;
37 } 32 }
38 }; 33 };
39 34
40 Connector.prototype.accept = function(message) { 35 Connector.prototype.accept = function(message) {
41 if (this.error_) 36 if (this.error_)
42 return false; 37 return false;
43 38
44 if (this.dropWrites_) 39 if (this.dropWrites_)
45 return true; 40 return true;
46 41
47 var result = core.writeMessage(this.handle_, 42 var result = this.handle_.writeMessage(
48 new Uint8Array(message.buffer.arrayBuffer), 43 new Uint8Array(message.buffer.arrayBuffer), message.handles);
49 message.handles,
50 core.WRITE_MESSAGE_FLAG_NONE);
51 switch (result) { 44 switch (result) {
52 case core.RESULT_OK: 45 case Mojo.RESULT_OK:
53 // The handles were successfully transferred, so we don't own them 46 // The handles were successfully transferred, so we don't own them
54 // anymore. 47 // anymore.
55 message.handles = []; 48 message.handles = [];
56 break; 49 break;
57 case core.RESULT_FAILED_PRECONDITION: 50 case Mojo.RESULT_FAILED_PRECONDITION:
58 // There's no point in continuing to write to this pipe since the other 51 // There's no point in continuing to write to this pipe since the other
59 // end is gone. Avoid writing any future messages. Hide write failures 52 // end is gone. Avoid writing any future messages. Hide write failures
60 // from the caller since we'd like them to continue consuming any 53 // from the caller since we'd like them to continue consuming any
61 // backlog of incoming messages before regarding the message pipe as 54 // backlog of incoming messages before regarding the message pipe as
62 // closed. 55 // closed.
63 this.dropWrites_ = true; 56 this.dropWrites_ = true;
64 break; 57 break;
65 default: 58 default:
66 // This particular write was rejected, presumably because of bad input. 59 // This particular write was rejected, presumably because of bad input.
67 // The pipe is not necessarily in a bad state. 60 // The pipe is not necessarily in a bad state.
68 return false; 61 return false;
69 } 62 }
70 return true; 63 return true;
71 }; 64 };
72 65
73 Connector.prototype.setIncomingReceiver = function(receiver) { 66 Connector.prototype.setIncomingReceiver = function(receiver) {
74 this.incomingReceiver_ = receiver; 67 this.incomingReceiver_ = receiver;
75 }; 68 };
76 69
77 Connector.prototype.setErrorHandler = function(handler) { 70 Connector.prototype.setErrorHandler = function(handler) {
78 this.errorHandler_ = handler; 71 this.errorHandler_ = handler;
79 }; 72 };
80 73
81 Connector.prototype.encounteredError = function() { 74 Connector.prototype.encounteredError = function() {
82 return this.error_; 75 return this.error_;
83 }; 76 };
84 77
85 Connector.prototype.waitForNextMessageForTesting = function() { 78 Connector.prototype.waitForNextMessageForTesting = function() {
86 var wait = core.wait(this.handle_, core.HANDLE_SIGNAL_READABLE); 79 // TODO(yzshen): Change the tests that use this method.
87 this.readMore_(wait.result); 80 throw new Error("Not supported!");
88 }; 81 };
89 82
90 Connector.prototype.readMore_ = function(result) { 83 Connector.prototype.readMore_ = function(result) {
91 for (;;) { 84 for (;;) {
92 var read = core.readMessage(this.handle_, 85 var read = this.handle_.readMessage();
93 core.READ_MESSAGE_FLAG_NONE);
94 if (this.handle_ == null) // The connector has been closed. 86 if (this.handle_ == null) // The connector has been closed.
95 return; 87 return;
96 if (read.result == core.RESULT_SHOULD_WAIT) 88 if (read.result == Mojo.RESULT_SHOULD_WAIT)
97 return; 89 return;
98 if (read.result != core.RESULT_OK) { 90 if (read.result != Mojo.RESULT_OK) {
99 this.error_ = true; 91 this.error_ = true;
100 if (this.errorHandler_) 92 if (this.errorHandler_)
101 this.errorHandler_.onError(read.result); 93 this.errorHandler_.onError(read.result);
102 return; 94 return;
103 } 95 }
104 var messageBuffer = new buffer.Buffer(read.buffer); 96 var messageBuffer = new internal.Buffer(read.buffer);
105 var message = new codec.Message(messageBuffer, read.handles); 97 var message = new internal.Message(messageBuffer, read.handles);
106 if (this.incomingReceiver_) 98 if (this.incomingReceiver_)
107 this.incomingReceiver_.accept(message); 99 this.incomingReceiver_.accept(message);
108 } 100 }
109 }; 101 };
110 102
111 var exports = {}; 103 internal.Connector = Connector;
112 exports.Connector = Connector; 104 })();
113 return exports;
114 });
OLDNEW
« no previous file with comments | « mojo/public/js/new_bindings/codec.js ('k') | mojo/public/js/new_bindings/interface_types.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698