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

Side by Side Diff: mojo/public/dart/src/message_pipe.dart

Issue 728553002: Update mojo sdk to rev afb4440fd5a10cba980878c326180b7ad7960480 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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/dart/src/handle.dart ('k') | mojo/public/dart/src/mojo_dart_core.cc » ('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 part of core;
6
7
8 class _MojoMessagePipeNatives {
9 static List MojoCreateMessagePipe(int flags)
10 native "MojoMessagePipe_Create";
11
12 static int MojoWriteMessage(
13 int handle, ByteData data, int num_bytes, List<int> handles, int flags)
14 native "MojoMessagePipe_Write";
15
16 static List MojoReadMessage(
17 int handle, ByteData data, int num_bytes, List<int> handles, int flags)
18 native "MojoMessagePipe_Read";
19 }
20
21
22 class MojoMessagePipeReadResult {
23 final MojoResult status;
24 final int bytesRead;
25 final int handlesRead;
26
27 MojoMessagePipeReadResult(this.status, this.bytesRead, this.handlesRead);
28 MojoMessagePipeReadResult.fromList(List<int> resultList)
29 : this(new MojoResult(resultList[0]), resultList[1], resultList[2]);
30 }
31
32
33 class MojoMessagePipeEndpoint {
34 static const int WRITE_FLAG_NONE = 0;
35 static const int READ_FLAG_NONE = 0;
36 static const int READ_FLAG_MAY_DISCARD = 0;
37
38 RawMojoHandle handle;
39 MojoResult status;
40
41 MojoMessagePipeEndpoint(this.handle);
42
43 MojoResult write(ByteData data,
44 [int num_bytes = -1,
45 List<RawMojoHandle> handles = null,
46 int flags = 0]) {
47 if (handle == null) {
48 status = MojoResult.INVALID_ARGUMENT;
49 return status;
50 }
51
52 // If num_bytes has the default value, use the full length of the data.
53 int data_num_bytes = (num_bytes == -1) ? data.lengthInBytes : num_bytes;
54 if (data_num_bytes > data.lengthInBytes) {
55 status = MojoResult.INVALID_ARGUMENT;
56 return status;
57 }
58
59 // handles may be null, otherwise convert to ints.
60 List<int> mojo_handles =
61 (handles != null) ? handles.map((h) => h.h).toList() : null;
62
63 // Do the call.
64 int result = _MojoMessagePipeNatives.MojoWriteMessage(
65 handle.h, data, data_num_bytes, mojo_handles, flags);
66
67 status = new MojoResult(result);
68 return status;
69 }
70
71
72 MojoMessagePipeReadResult read(ByteData data,
73 [int num_bytes = -1,
74 List<RawMojoHandle> handles = null,
75 int flags = 0]) {
76 if (handle == null) {
77 status = MojoResult.INVALID_ARGUMENT;
78 return null;
79 }
80
81 // If num_bytes has the default value, use the full length of the data.
82 int data_num_bytes;
83 if (data == null) {
84 data_num_bytes = 0;
85 } else {
86 data_num_bytes = (num_bytes == -1) ? data.lengthInBytes : num_bytes;
87 }
88 if (data_num_bytes > data.lengthInBytes) {
89 status = MojoResult.INVALID_ARGUMENT;
90 return status;
91 }
92
93 // handles may be null, otherwise make an int list for the handles.
94 List<int> mojo_handles;
95 if (handles == null) {
96 mojo_handles = null;
97 } else {
98 mojo_handles = new List<int>(handles.length);
99 }
100
101 // Do the call.
102 List result = _MojoMessagePipeNatives.MojoReadMessage(
103 handle.h, data, data_num_bytes, mojo_handles, flags);
104
105 if (result == null) {
106 status = MojoResult.INVALID_ARGUMENT;
107 return null;
108 }
109
110 assert((result is List) && (result.length == 3));
111 var readResult = new MojoMessagePipeReadResult.fromList(result);
112
113 // Copy out the handles that were read.
114 if (handles != null) {
115 for (var i = 0; i < readResult.handlesRead; i++) {
116 handles[i].h = mojo_handles[i];
117 }
118 }
119
120 status = readResult.status;
121 return readResult;
122 }
123
124 MojoMessagePipeReadResult query() => read(null);
125 }
126
127
128 class MojoMessagePipe {
129 static const int FLAG_NONE = 0;
130
131 List<MojoMessagePipeEndpoint> endpoints;
132 MojoResult status;
133
134 MojoMessagePipe._() {
135 endpoints = null;
136 status = MojoResult.OK;
137 }
138
139 factory MojoMessagePipe([int flags = FLAG_NONE]) {
140 List result = _MojoMessagePipeNatives.MojoCreateMessagePipe(flags);
141 if (result == null) {
142 return null;
143 }
144 assert((result is List) && (result.length == 3));
145
146 RawMojoHandle end1 = new RawMojoHandle(result[1]);
147 RawMojoHandle end2 = new RawMojoHandle(result[2]);
148 MojoMessagePipe pipe = new MojoMessagePipe._();
149 pipe.endpoints = new List(2);
150 pipe.endpoints[0] = new MojoMessagePipeEndpoint(end1);
151 pipe.endpoints[1] = new MojoMessagePipeEndpoint(end2);
152 pipe.status = new MojoResult(result[0]);
153 return pipe;
154 }
155 }
OLDNEW
« no previous file with comments | « mojo/public/dart/src/handle.dart ('k') | mojo/public/dart/src/mojo_dart_core.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698