| OLD | NEW |
| 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 part of core; | 5 part of core; |
| 6 | 6 |
| 7 class _MojoMessagePipeNatives { | |
| 8 static List MojoCreateMessagePipe(int flags) native "MojoMessagePipe_Create"; | |
| 9 | |
| 10 static int MojoWriteMessage(int handle, ByteData data, int numBytes, | |
| 11 List<int> handles, int flags) native "MojoMessagePipe_Write"; | |
| 12 | |
| 13 static List MojoReadMessage(int handle, ByteData data, int numBytes, | |
| 14 List<int> handles, int flags) native "MojoMessagePipe_Read"; | |
| 15 } | |
| 16 | |
| 17 class MojoMessagePipeReadResult { | 7 class MojoMessagePipeReadResult { |
| 18 final MojoResult status; | 8 final MojoResult status; |
| 19 final int bytesRead; | 9 final int bytesRead; |
| 20 final int handlesRead; | 10 final int handlesRead; |
| 21 | 11 |
| 22 MojoMessagePipeReadResult(this.status, this.bytesRead, this.handlesRead); | 12 MojoMessagePipeReadResult(this.status, this.bytesRead, this.handlesRead); |
| 23 MojoMessagePipeReadResult.fromList(List<int> resultList) | 13 MojoMessagePipeReadResult.fromList(List<int> resultList) |
| 24 : this(new MojoResult(resultList[0]), resultList[1], resultList[2]); | 14 : this(new MojoResult(resultList[0]), resultList[1], resultList[2]); |
| 25 | 15 |
| 26 String toString() { | 16 String toString() { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 53 if (dataNumBytes > dataLengthInBytes) { | 43 if (dataNumBytes > dataLengthInBytes) { |
| 54 status = MojoResult.INVALID_ARGUMENT; | 44 status = MojoResult.INVALID_ARGUMENT; |
| 55 return status; | 45 return status; |
| 56 } | 46 } |
| 57 | 47 |
| 58 // handles may be null, otherwise convert to ints. | 48 // handles may be null, otherwise convert to ints. |
| 59 List<int> mojoHandles = | 49 List<int> mojoHandles = |
| 60 (handles != null) ? handles.map((h) => h.h).toList() : null; | 50 (handles != null) ? handles.map((h) => h.h).toList() : null; |
| 61 | 51 |
| 62 // Do the call. | 52 // Do the call. |
| 63 int result = _MojoMessagePipeNatives.MojoWriteMessage( | 53 int result = MojoMessagePipeNatives.MojoWriteMessage( |
| 64 handle.h, data, dataNumBytes, mojoHandles, flags); | 54 handle.h, data, dataNumBytes, mojoHandles, flags); |
| 65 | 55 |
| 66 status = new MojoResult(result); | 56 status = new MojoResult(result); |
| 67 return status; | 57 return status; |
| 68 } | 58 } |
| 69 | 59 |
| 70 MojoMessagePipeReadResult read(ByteData data, | 60 MojoMessagePipeReadResult read(ByteData data, |
| 71 [int numBytes = -1, List<MojoHandle> handles = null, int flags = 0]) { | 61 [int numBytes = -1, List<MojoHandle> handles = null, int flags = 0]) { |
| 72 if (handle == null) { | 62 if (handle == null) { |
| 73 status = MojoResult.INVALID_ARGUMENT; | 63 status = MojoResult.INVALID_ARGUMENT; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 88 | 78 |
| 89 // handles may be null, otherwise make an int list for the handles. | 79 // handles may be null, otherwise make an int list for the handles. |
| 90 List<int> mojoHandles; | 80 List<int> mojoHandles; |
| 91 if (handles == null) { | 81 if (handles == null) { |
| 92 mojoHandles = null; | 82 mojoHandles = null; |
| 93 } else { | 83 } else { |
| 94 mojoHandles = new List<int>(handles.length); | 84 mojoHandles = new List<int>(handles.length); |
| 95 } | 85 } |
| 96 | 86 |
| 97 // Do the call. | 87 // Do the call. |
| 98 List result = _MojoMessagePipeNatives.MojoReadMessage( | 88 List result = MojoMessagePipeNatives.MojoReadMessage( |
| 99 handle.h, data, dataNumBytes, mojoHandles, flags); | 89 handle.h, data, dataNumBytes, mojoHandles, flags); |
| 100 | 90 |
| 101 if (result == null) { | 91 if (result == null) { |
| 102 status = MojoResult.INVALID_ARGUMENT; | 92 status = MojoResult.INVALID_ARGUMENT; |
| 103 return null; | 93 return null; |
| 104 } | 94 } |
| 105 | 95 |
| 106 assert((result is List) && (result.length == 3)); | 96 assert((result is List) && (result.length == 3)); |
| 107 var readResult = new MojoMessagePipeReadResult.fromList(result); | 97 var readResult = new MojoMessagePipeReadResult.fromList(result); |
| 108 | 98 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 133 | 123 |
| 134 List<MojoMessagePipeEndpoint> endpoints; | 124 List<MojoMessagePipeEndpoint> endpoints; |
| 135 MojoResult status; | 125 MojoResult status; |
| 136 | 126 |
| 137 MojoMessagePipe._() { | 127 MojoMessagePipe._() { |
| 138 endpoints = null; | 128 endpoints = null; |
| 139 status = MojoResult.OK; | 129 status = MojoResult.OK; |
| 140 } | 130 } |
| 141 | 131 |
| 142 factory MojoMessagePipe([int flags = FLAG_NONE]) { | 132 factory MojoMessagePipe([int flags = FLAG_NONE]) { |
| 143 List result = _MojoMessagePipeNatives.MojoCreateMessagePipe(flags); | 133 List result = MojoMessagePipeNatives.MojoCreateMessagePipe(flags); |
| 144 if (result == null) { | 134 if (result == null) { |
| 145 return null; | 135 return null; |
| 146 } | 136 } |
| 147 assert((result is List) && (result.length == 3)); | 137 assert((result is List) && (result.length == 3)); |
| 148 | 138 |
| 149 MojoHandle end1 = new MojoHandle(result[1]); | 139 MojoHandle end1 = new MojoHandle(result[1]); |
| 150 MojoHandle end2 = new MojoHandle(result[2]); | 140 MojoHandle end2 = new MojoHandle(result[2]); |
| 151 MojoMessagePipe pipe = new MojoMessagePipe._(); | 141 MojoMessagePipe pipe = new MojoMessagePipe._(); |
| 152 pipe.endpoints = new List(2); | 142 pipe.endpoints = new List(2); |
| 153 pipe.endpoints[0] = new MojoMessagePipeEndpoint(end1); | 143 pipe.endpoints[0] = new MojoMessagePipeEndpoint(end1); |
| 154 pipe.endpoints[1] = new MojoMessagePipeEndpoint(end2); | 144 pipe.endpoints[1] = new MojoMessagePipeEndpoint(end2); |
| 155 pipe.status = new MojoResult(result[0]); | 145 pipe.status = new MojoResult(result[0]); |
| 156 return pipe; | 146 return pipe; |
| 157 } | 147 } |
| 158 } | 148 } |
| OLD | NEW |