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

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

Issue 223233002: Mojo: Move mojo/public/bindings/js to mojo/public/js/bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase & restore ordering 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/constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 define("mojo/public/bindings/js/connector", [
6 "mojo/public/bindings/js/codec",
7 "mojo/bindings/js/core",
8 "mojo/bindings/js/support",
9 ], function(codec, core, support) {
10
11 function Connector(handle) {
12 this.handle_ = handle;
13 this.dropWrites_ = false;
14 this.error_ = false;
15 this.incomingReceiver_ = null;
16 this.readWaitCookie_ = null;
17
18 this.waitToReadMore_();
19 }
20
21 Connector.prototype.close = function() {
22 if (this.readWaitCookie_) {
23 support.cancelWait(this.readWaitCookie_);
24 this.readWaitCookie_ = null;
25 }
26 if (this.handle_ != core.kInvalidHandle) {
27 core.close(this.handle_);
28 this.handle_ = core.kInvalidHandle;
29 }
30 };
31
32 Connector.prototype.accept = function(message) {
33 if (this.error_)
34 return false;
35
36 if (this.dropWrites_)
37 return true;
38
39 var result = core.writeMessage(this.handle_,
40 message.memory,
41 message.handles,
42 core.WRITE_MESSAGE_FLAG_NONE);
43
44 switch (result) {
45 case core.RESULT_OK:
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 }
63 return true;
64 };
65
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() {
75 this.readWaitCookie_ = support.asyncWait(this.handle_,
76 core.WAIT_FLAG_READABLE,
77 this.readMore_.bind(this));
78 };
79
80 Connector.prototype.readMore_ = function(result) {
81 for (;;) {
82 var read = core.readMessage(this.handle_,
83 core.READ_MESSAGE_FLAG_NONE);
84 if (read.result == core.RESULT_SHOULD_WAIT) {
85 this.waitToReadMore_();
86 return;
87 }
88 if (read.result != core.RESULT_OK) {
89 this.error_ = true;
90 return;
91 }
92 // TODO(abarth): Should core.readMessage return a Uint8Array?
93 var memory = new Uint8Array(read.buffer);
94 var message = new codec.Message(memory, read.handles);
95 if (this.incomingReceiver_)
96 this.incomingReceiver_.accept(message);
97 }
98 };
99
100 var exports = {};
101 exports.Connector = Connector;
102 return exports;
103 });
OLDNEW
« no previous file with comments | « mojo/public/bindings/js/connection.js ('k') | mojo/public/bindings/js/constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698