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

Unified Diff: mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart

Issue 2006093002: Dart: Futures -> Callbacks. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Merge Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
index 7285205a34f9d90758a6c61feff522395828bc69..e84775b5bf1f22ae91a64407d43f61e3c65c6a59 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
@@ -27,6 +27,14 @@ class StructOfStructs extends bindings.Struct {
StructOfStructs() : super(kVersions.last.size);
+ StructOfStructs.init(
+ NamedRegion this.nr,
+ List<NamedRegion> this.aNr,
+ List<RectPair> this.aRp,
+ Map<int, NoDefaultFieldValues> this.mNdfv,
+ Map<int, HandleStruct> this.mHs
+ ) : super(kVersions.last.size);
+
static StructOfStructs deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -256,6 +264,11 @@ class NamedRegion extends bindings.Struct {
NamedRegion() : super(kVersions.last.size);
+ NamedRegion.init(
+ String this.name,
+ List<rect_mojom.Rect> this.rects
+ ) : super(kVersions.last.size);
+
static NamedRegion deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -360,6 +373,11 @@ class RectPair extends bindings.Struct {
RectPair() : super(kVersions.last.size);
+ RectPair.init(
+ rect_mojom.Rect this.first,
+ rect_mojom.Rect this.second
+ ) : super(kVersions.last.size);
+
static RectPair deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -446,6 +464,9 @@ class EmptyStruct extends bindings.Struct {
EmptyStruct() : super(kVersions.last.size);
+ EmptyStruct.init(
+ ) : super(kVersions.last.size);
+
static EmptyStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -506,6 +527,11 @@ class HandleStruct extends bindings.Struct {
HandleStruct() : super(kVersions.last.size);
+ HandleStruct.init(
+ core.MojoMessagePipeEndpoint this.h,
+ List<core.MojoMessagePipeEndpoint> this.arrayH
+ ) : super(kVersions.last.size);
+
static HandleStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -590,6 +616,11 @@ class NullableHandleStruct extends bindings.Struct {
NullableHandleStruct() : super(kVersions.last.size);
+ NullableHandleStruct.init(
+ core.MojoMessagePipeEndpoint this.h,
+ int this.data
+ ) : super(kVersions.last.size);
+
static NullableHandleStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -701,6 +732,38 @@ class NoDefaultFieldValues extends bindings.Struct {
NoDefaultFieldValues() : super(kVersions.last.size);
+ NoDefaultFieldValues.init(
+ bool this.f0,
+ int this.f1,
+ int this.f2,
+ int this.f3,
+ int this.f4,
+ int this.f5,
+ int this.f6,
+ int this.f7,
+ int this.f8,
+ double this.f9,
+ core.MojoMessagePipeEndpoint this.f13,
+ double this.f10,
+ String this.f11,
+ String this.f12,
+ core.MojoDataPipeConsumer this.f14,
+ core.MojoDataPipeProducer this.f15,
+ core.MojoMessagePipeEndpoint this.f16,
+ core.MojoDataPipeConsumer this.f17,
+ core.MojoDataPipeProducer this.f18,
+ core.MojoHandle this.f19,
+ core.MojoHandle this.f20,
+ core.MojoSharedBuffer this.f21,
+ core.MojoSharedBuffer this.f22,
+ List<String> this.f23,
+ List<String> this.f24,
+ List<String> this.f25,
+ List<String> this.f26,
+ EmptyStruct this.f27,
+ EmptyStruct this.f28
+ ) : super(kVersions.last.size);
+
static NoDefaultFieldValues deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1191,6 +1254,26 @@ class DefaultFieldValues extends bindings.Struct {
DefaultFieldValues() : super(kVersions.last.size);
+ DefaultFieldValues.init(
+ bool this.f0,
+ int this.f1,
+ int this.f2,
+ int this.f3,
+ int this.f4,
+ int this.f5,
+ int this.f6,
+ int this.f7,
+ int this.f8,
+ double this.f9,
+ double this.f10,
+ double this.f11,
+ double this.f12,
+ String this.f13,
+ String this.f14,
+ rect_mojom.Rect this.f15,
+ rect_mojom.Rect this.f16
+ ) : super(kVersions.last.size);
+
static DefaultFieldValues deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1554,6 +1637,16 @@ class ScopedConstants extends bindings.Struct {
ScopedConstants() : super(kVersions.last.size);
+ ScopedConstants.init(
+ ScopedConstantsEType this.f0,
+ ScopedConstantsEType this.f1,
+ ScopedConstantsEType this.f2,
+ ScopedConstantsEType this.f3,
+ ScopedConstantsEType this.f4,
+ int this.f5,
+ int this.f6
+ ) : super(kVersions.last.size);
+
static ScopedConstants deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1735,6 +1828,21 @@ class MapKeyTypes extends bindings.Struct {
MapKeyTypes() : super(kVersions.last.size);
+ MapKeyTypes.init(
+ Map<bool, bool> this.f0,
+ Map<int, int> this.f1,
+ Map<int, int> this.f2,
+ Map<int, int> this.f3,
+ Map<int, int> this.f4,
+ Map<int, int> this.f5,
+ Map<int, int> this.f6,
+ Map<int, int> this.f7,
+ Map<int, int> this.f8,
+ Map<double, double> this.f9,
+ Map<double, double> this.f10,
+ Map<String, String> this.f11
+ ) : super(kVersions.last.size);
+
static MapKeyTypes deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -2265,6 +2373,21 @@ class MapValueTypes extends bindings.Struct {
MapValueTypes() : super(kVersions.last.size);
+ MapValueTypes.init(
+ Map<String, List<String>> this.f0,
+ Map<String, List<String>> this.f1,
+ Map<String, List<String>> this.f2,
+ Map<String, List<String>> this.f3,
+ Map<String, List<List<String>>> this.f4,
+ Map<String, List<List<String>>> this.f5,
+ Map<String, rect_mojom.Rect> this.f6,
+ Map<String, Map<String, String>> this.f7,
+ Map<String, List<Map<String, String>>> this.f8,
+ Map<String, core.MojoHandle> this.f9,
+ Map<String, List<core.MojoHandle>> this.f10,
+ Map<String, Map<String, core.MojoHandle>> this.f11
+ ) : super(kVersions.last.size);
+
static MapValueTypes deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -3350,6 +3473,15 @@ class ArrayValueTypes extends bindings.Struct {
ArrayValueTypes() : super(kVersions.last.size);
+ ArrayValueTypes.init(
+ List<int> this.f0,
+ List<int> this.f1,
+ List<int> this.f2,
+ List<int> this.f3,
+ List<double> this.f4,
+ List<double> this.f5
+ ) : super(kVersions.last.size);
+
static ArrayValueTypes deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -3506,6 +3638,19 @@ class FloatNumberValues extends bindings.Struct {
FloatNumberValues() : super(kVersions.last.size);
+ FloatNumberValues.init(
+ double this.f0,
+ double this.f1,
+ double this.f2,
+ double this.f3,
+ double this.f4,
+ double this.f5,
+ double this.f6,
+ double this.f7,
+ double this.f8,
+ double this.f9
+ ) : super(kVersions.last.size);
+
static FloatNumberValues deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -3734,6 +3879,29 @@ class IntegerNumberValues extends bindings.Struct {
IntegerNumberValues() : super(kVersions.last.size);
+ IntegerNumberValues.init(
+ int this.f0,
+ int this.f1,
+ int this.f2,
+ int this.f3,
+ int this.f4,
+ int this.f5,
+ int this.f6,
+ int this.f7,
+ int this.f8,
+ int this.f9,
+ int this.f10,
+ int this.f11,
+ int this.f12,
+ int this.f13,
+ int this.f14,
+ int this.f15,
+ int this.f16,
+ int this.f17,
+ int this.f18,
+ int this.f19
+ ) : super(kVersions.last.size);
+
static IntegerNumberValues deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4076,6 +4244,21 @@ class UnsignedNumberValues extends bindings.Struct {
UnsignedNumberValues() : super(kVersions.last.size);
+ UnsignedNumberValues.init(
+ int this.f0,
+ int this.f1,
+ int this.f2,
+ int this.f3,
+ int this.f4,
+ int this.f5,
+ int this.f6,
+ int this.f7,
+ int this.f8,
+ int this.f9,
+ int this.f10,
+ int this.f11
+ ) : super(kVersions.last.size);
+
static UnsignedNumberValues deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4297,6 +4480,16 @@ class BitArrayValues extends bindings.Struct {
BitArrayValues() : super(kVersions.last.size);
+ BitArrayValues.init(
+ List<bool> this.f0,
+ List<bool> this.f1,
+ List<bool> this.f2,
+ List<bool> this.f3,
+ List<List<bool>> this.f4,
+ List<List<bool>> this.f5,
+ List<List<bool>> this.f6
+ ) : super(kVersions.last.size);
+
static BitArrayValues deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4503,6 +4696,16 @@ class MultiVersionStruct extends bindings.Struct {
MultiVersionStruct() : super(kVersions.last.size);
+ MultiVersionStruct.init(
+ int this.fInt32,
+ core.MojoMessagePipeEndpoint this.fMessagePipe,
+ rect_mojom.Rect this.fRect,
+ String this.fString,
+ List<int> this.fArray,
+ bool this.fBool,
+ int this.fInt16
+ ) : super(kVersions.last.size);
+
static MultiVersionStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4647,6 +4850,10 @@ class MultiVersionStructV0 extends bindings.Struct {
MultiVersionStructV0() : super(kVersions.last.size);
+ MultiVersionStructV0.init(
+ int this.fInt32
+ ) : super(kVersions.last.size);
+
static MultiVersionStructV0 deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4721,6 +4928,11 @@ class MultiVersionStructV1 extends bindings.Struct {
MultiVersionStructV1() : super(kVersions.last.size);
+ MultiVersionStructV1.init(
+ int this.fInt32,
+ rect_mojom.Rect this.fRect
+ ) : super(kVersions.last.size);
+
static MultiVersionStructV1 deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4811,6 +5023,12 @@ class MultiVersionStructV3 extends bindings.Struct {
MultiVersionStructV3() : super(kVersions.last.size);
+ MultiVersionStructV3.init(
+ int this.fInt32,
+ rect_mojom.Rect this.fRect,
+ String this.fString
+ ) : super(kVersions.last.size);
+
static MultiVersionStructV3 deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -4916,6 +5134,13 @@ class MultiVersionStructV5 extends bindings.Struct {
MultiVersionStructV5() : super(kVersions.last.size);
+ MultiVersionStructV5.init(
+ int this.fInt32,
+ rect_mojom.Rect this.fRect,
+ String this.fString,
+ List<int> this.fArray
+ ) : super(kVersions.last.size);
+
static MultiVersionStructV5 deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5037,6 +5262,15 @@ class MultiVersionStructV7 extends bindings.Struct {
MultiVersionStructV7() : super(kVersions.last.size);
+ MultiVersionStructV7.init(
+ int this.fInt32,
+ core.MojoMessagePipeEndpoint this.fMessagePipe,
+ rect_mojom.Rect this.fRect,
+ String this.fString,
+ List<int> this.fArray,
+ bool this.fBool
+ ) : super(kVersions.last.size);
+
static MultiVersionStructV7 deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5169,6 +5403,10 @@ class ContainsInterface extends bindings.Struct {
ContainsInterface() : super(kVersions.last.size);
+ ContainsInterface.init(
+ SomeInterfaceInterface this.someInterface
+ ) : super(kVersions.last.size);
+
static ContainsInterface deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5240,6 +5478,10 @@ class ContainsOther extends bindings.Struct {
ContainsOther() : super(kVersions.last.size);
+ ContainsOther.init(
+ int this.other
+ ) : super(kVersions.last.size);
+
static ContainsOther deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5313,6 +5555,11 @@ class ContainsInterfaceRequest extends bindings.Struct {
ContainsInterfaceRequest() : super(kVersions.last.size);
+ ContainsInterfaceRequest.init(
+ SomeInterfaceInterfaceRequest this.req,
+ SomeInterfaceInterfaceRequest this.nullableReq
+ ) : super(kVersions.last.size);
+
static ContainsInterfaceRequest deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5457,6 +5704,12 @@ class DartKeywordStruct extends bindings.Struct {
DartKeywordStruct() : super(kVersions.last.size);
+ DartKeywordStruct.init(
+ DartKeywordStructKeywords this.await_,
+ DartKeywordStructKeywords this.is_,
+ DartKeywordStructKeywords this.rethrow_
+ ) : super(kVersions.last.size);
+
static DartKeywordStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5567,6 +5820,10 @@ class _SomeInterfaceSomeMethodParams extends bindings.Struct {
_SomeInterfaceSomeMethodParams() : super(kVersions.last.size);
+ _SomeInterfaceSomeMethodParams.init(
+ RectPair this.pair
+ ) : super(kVersions.last.size);
+
static _SomeInterfaceSomeMethodParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5640,6 +5897,10 @@ class SomeInterfaceSomeMethodResponseParams extends bindings.Struct {
SomeInterfaceSomeMethodResponseParams() : super(kVersions.last.size);
+ SomeInterfaceSomeMethodResponseParams.init(
+ RectPair this.otherPair
+ ) : super(kVersions.last.size);
+
static SomeInterfaceSomeMethodResponseParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -5991,14 +6252,17 @@ class UnionOfStructs extends bindings.Union {
const int _someInterfaceMethodSomeMethodName = 0;
class _SomeInterfaceServiceDescription implements service_describer.ServiceDescription {
- dynamic getTopLevelInterface([Function responseFactory]) =>
- responseFactory(null);
+ void getTopLevelInterface(Function responder) {
+ responder(null);
+ }
- dynamic getTypeDefinition(String typeKey, [Function responseFactory]) =>
- responseFactory(null);
+ void getTypeDefinition(String typeKey, Function responder) {
+ responder(null);
+ }
- dynamic getAllTypeDefinitions([Function responseFactory]) =>
- responseFactory(null);
+ void getAllTypeDefinitions(Function responder) {
+ responder(null);
+ }
}
abstract class SomeInterface {
@@ -6023,7 +6287,7 @@ abstract class SomeInterface {
s.connectToService(url, p, name);
return p;
}
- dynamic someMethod(RectPair pair,[Function responseFactory = null]);
+ void someMethod(RectPair pair,void callback(RectPair otherPair));
}
abstract class SomeInterfaceInterface
@@ -6073,18 +6337,14 @@ class _SomeInterfaceProxyControl
proxyError("Expected a message with a valid request Id.");
return;
}
- Completer c = completerMap[message.header.requestId];
- if (c == null) {
+ Function callback = callbackMap[message.header.requestId];
+ if (callback == null) {
proxyError(
"Message had unknown request Id: ${message.header.requestId}");
return;
}
- completerMap.remove(message.header.requestId);
- if (c.isCompleted) {
- proxyError("Response completer already completed");
- return;
- }
- c.complete(r);
+ callbackMap.remove(message.header.requestId);
+ callback(r.otherPair );
break;
default:
proxyError("Unexpected message type: ${message.header.type}");
@@ -6129,17 +6389,19 @@ class SomeInterfaceProxy
}
- dynamic someMethod(RectPair pair,[Function responseFactory = null]) {
+ void someMethod(RectPair pair,void callback(RectPair otherPair)) {
if (impl != null) {
- return new Future(() => impl.someMethod(pair,_SomeInterfaceStubControl._someInterfaceSomeMethodResponseParamsFactory));
+ impl.someMethod(pair,callback);
+ return;
}
var params = new _SomeInterfaceSomeMethodParams();
params.pair = pair;
- return ctrl.sendMessageWithRequestId(
+ ctrl.sendMessageWithRequestId(
params,
_someInterfaceMethodSomeMethodName,
-1,
- bindings.MessageHeader.kMessageExpectsResponse);
+ bindings.MessageHeader.kMessageExpectsResponse,
+ callback);
}
}
@@ -6165,17 +6427,24 @@ class _SomeInterfaceStubControl
String get serviceName => SomeInterface.serviceName;
- static SomeInterfaceSomeMethodResponseParams _someInterfaceSomeMethodResponseParamsFactory(RectPair otherPair) {
- var result = new SomeInterfaceSomeMethodResponseParams();
- result.otherPair = otherPair;
- return result;
+ Function _someInterfaceSomeMethodResponseParamsResponder(
+ int requestId) {
+ return (RectPair otherPair) {
+ var result = new SomeInterfaceSomeMethodResponseParams();
+ result.otherPair = otherPair;
+ sendResponse(buildResponseWithId(
+ result,
+ _someInterfaceMethodSomeMethodName,
+ requestId,
+ bindings.MessageHeader.kMessageIsResponse));
+ };
}
- dynamic handleMessage(bindings.ServiceMessage message) {
+ void handleMessage(bindings.ServiceMessage message) {
if (bindings.ControlMessageHandler.isControlMessage(message)) {
- return bindings.ControlMessageHandler.handleMessage(this,
- 0,
- message);
+ bindings.ControlMessageHandler.handleMessage(
+ this, 0, message);
+ return;
}
if (_impl == null) {
throw new core.MojoApiError("$this has no implementation set");
@@ -6184,30 +6453,12 @@ class _SomeInterfaceStubControl
case _someInterfaceMethodSomeMethodName:
var params = _SomeInterfaceSomeMethodParams.deserialize(
message.payload);
- var response = _impl.someMethod(params.pair,_someInterfaceSomeMethodResponseParamsFactory);
- if (response is Future) {
- return response.then((response) {
- if (response != null) {
- return buildResponseWithId(
- response,
- _someInterfaceMethodSomeMethodName,
- message.header.requestId,
- bindings.MessageHeader.kMessageIsResponse);
- }
- });
- } else if (response != null) {
- return buildResponseWithId(
- response,
- _someInterfaceMethodSomeMethodName,
- message.header.requestId,
- bindings.MessageHeader.kMessageIsResponse);
- }
+ _impl.someMethod(params.pair, _someInterfaceSomeMethodResponseParamsResponder(message.header.requestId));
break;
default:
throw new bindings.MojoCodecError("Unexpected message name");
break;
}
- return null;
}
SomeInterface get impl => _impl;
@@ -6261,8 +6512,8 @@ class SomeInterfaceStub
}
- dynamic someMethod(RectPair pair,[Function responseFactory = null]) {
- return impl.someMethod(pair,responseFactory);
+ void someMethod(RectPair pair,void callback(RectPair otherPair)) {
+ return impl.someMethod(pair,callback);
}
}
@@ -6279,7 +6530,7 @@ mojom_types.RuntimeTypeInfo _initRuntimeTypeInfo() {
// serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
// a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
// file. The string contains the base64 encoding of the gzip-compressed bytes.
- var serializedRuntimeTypeInfo = "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";
+ var serializedRuntimeTypeInfo = "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";
// Deserialize RuntimeTypeInfo
var bytes = BASE64.decode(serializedRuntimeTypeInfo);

Powered by Google App Engine
This is Rietveld 408576698