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

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

Issue 2006093002: Dart: Futures -> Callbacks. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Cleanup Created 4 years, 7 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_unions.mojom.dart
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
index c641e32239a9c8730196593e434169418dbd70b1..2e573373cd36e7d5e023f59131d61d5f53978e20 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
@@ -80,6 +80,14 @@ class StructOfUnions extends bindings.Struct {
StructOfUnions() : super(kVersions.last.size);
+ StructOfUnions.init(
+ ObjectUnion this.u,
+ List<ObjectUnion> this.aOu,
+ List<HandleUnion> this.aHu,
+ Map<int, ObjectUnion> this.mOu,
+ Map<int, HandleUnion> this.mHu
+ ) : super(kVersions.last.size);
+
static StructOfUnions deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -325,6 +333,12 @@ class WrapperStruct extends bindings.Struct {
WrapperStruct() : super(kVersions.last.size);
+ WrapperStruct.init(
+ ObjectUnion this.objectUnion,
+ PodUnion this.podUnion,
+ HandleUnion this.handleUnion
+ ) : super(kVersions.last.size);
+
static WrapperStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -420,6 +434,10 @@ class DummyStruct extends bindings.Struct {
DummyStruct() : super(kVersions.last.size);
+ DummyStruct.init(
+ int this.fInt8
+ ) : super(kVersions.last.size);
+
static DummyStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -498,6 +516,16 @@ class SmallStruct extends bindings.Struct {
SmallStruct() : super(kVersions.last.size);
+ SmallStruct.init(
+ DummyStruct this.dummyStruct,
+ PodUnion this.podUnion,
+ List<PodUnion> this.podUnionArray,
+ List<PodUnion> this.nullablePodUnionArray,
+ List<DummyStruct> this.sArray,
+ Map<String, PodUnion> this.podUnionMap,
+ Map<String, PodUnion> this.nullablePodUnionMap
+ ) : super(kVersions.last.size);
+
static SmallStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -815,6 +843,10 @@ class SmallStructNonNullableUnion extends bindings.Struct {
SmallStructNonNullableUnion() : super(kVersions.last.size);
+ SmallStructNonNullableUnion.init(
+ PodUnion this.podUnion
+ ) : super(kVersions.last.size);
+
static SmallStructNonNullableUnion deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -891,6 +923,10 @@ class StructNullObjectUnion extends bindings.Struct {
StructNullObjectUnion() : super(kVersions.last.size);
+ StructNullObjectUnion.init(
+ ObjectOnlyUnion this.objUnion
+ ) : super(kVersions.last.size);
+
static StructNullObjectUnion deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -964,6 +1000,11 @@ class SmallObjStruct extends bindings.Struct {
SmallObjStruct() : super(kVersions.last.size);
+ SmallObjStruct.init(
+ ObjectUnion this.objUnion,
+ int this.fInt8
+ ) : super(kVersions.last.size);
+
static SmallObjStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1054,6 +1095,11 @@ class TryNonNullStruct extends bindings.Struct {
TryNonNullStruct() : super(kVersions.last.size);
+ TryNonNullStruct.init(
+ DummyStruct this.nullable,
+ DummyStruct this.nonNullable
+ ) : super(kVersions.last.size);
+
static TryNonNullStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1141,6 +1187,10 @@ class IncludingStruct extends bindings.Struct {
IncludingStruct() : super(kVersions.last.size);
+ IncludingStruct.init(
+ test_included_unions_mojom.IncludedUnion this.a
+ ) : super(kVersions.last.size);
+
static IncludingStruct deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1217,6 +1267,10 @@ class _SmallCacheSetIntValueParams extends bindings.Struct {
_SmallCacheSetIntValueParams() : super(kVersions.last.size);
+ _SmallCacheSetIntValueParams.init(
+ int this.intValue
+ ) : super(kVersions.last.size);
+
static _SmallCacheSetIntValueParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1288,6 +1342,9 @@ class _SmallCacheGetIntValueParams extends bindings.Struct {
_SmallCacheGetIntValueParams() : super(kVersions.last.size);
+ _SmallCacheGetIntValueParams.init(
+ ) : super(kVersions.last.size);
+
static _SmallCacheGetIntValueParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1347,6 +1404,10 @@ class SmallCacheGetIntValueResponseParams extends bindings.Struct {
SmallCacheGetIntValueResponseParams() : super(kVersions.last.size);
+ SmallCacheGetIntValueResponseParams.init(
+ int this.intValue
+ ) : super(kVersions.last.size);
+
static SmallCacheGetIntValueResponseParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1419,6 +1480,10 @@ class _UnionInterfaceEchoParams extends bindings.Struct {
_UnionInterfaceEchoParams() : super(kVersions.last.size);
+ _UnionInterfaceEchoParams.init(
+ PodUnion this.inVal
+ ) : super(kVersions.last.size);
+
static _UnionInterfaceEchoParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -1495,6 +1560,10 @@ class UnionInterfaceEchoResponseParams extends bindings.Struct {
UnionInterfaceEchoResponseParams() : super(kVersions.last.size);
+ UnionInterfaceEchoResponseParams.init(
+ PodUnion this.outVal
+ ) : super(kVersions.last.size);
+
static UnionInterfaceEchoResponseParams deserialize(bindings.Message message) {
var decoder = new bindings.Decoder(message);
var result = decode(decoder);
@@ -2955,14 +3024,17 @@ const int _smallCacheMethodSetIntValueName = 0;
const int _smallCacheMethodGetIntValueName = 1;
class _SmallCacheServiceDescription 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 SmallCache {
@@ -2988,7 +3060,7 @@ abstract class SmallCache {
return p;
}
void setIntValue(int intValue);
- dynamic getIntValue([Function responseFactory = null]);
+ void getIntValue(void callback(int intValue));
}
abstract class SmallCacheInterface
@@ -3038,18 +3110,14 @@ class _SmallCacheProxyControl
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.intValue );
break;
default:
proxyError("Unexpected message type: ${message.header.type}");
@@ -3108,16 +3176,18 @@ class SmallCacheProxy
ctrl.sendMessage(params,
_smallCacheMethodSetIntValueName);
}
- dynamic getIntValue([Function responseFactory = null]) {
+ void getIntValue(void callback(int intValue)) {
if (impl != null) {
- return new Future(() => impl.getIntValue(_SmallCacheStubControl._smallCacheGetIntValueResponseParamsFactory));
+ impl.getIntValue(callback);
+ return;
}
var params = new _SmallCacheGetIntValueParams();
- return ctrl.sendMessageWithRequestId(
+ ctrl.sendMessageWithRequestId(
params,
_smallCacheMethodGetIntValueName,
-1,
- bindings.MessageHeader.kMessageExpectsResponse);
+ bindings.MessageHeader.kMessageExpectsResponse,
+ callback);
}
}
@@ -3143,17 +3213,24 @@ class _SmallCacheStubControl
String get serviceName => SmallCache.serviceName;
- static SmallCacheGetIntValueResponseParams _smallCacheGetIntValueResponseParamsFactory(int intValue) {
- var result = new SmallCacheGetIntValueResponseParams();
- result.intValue = intValue;
- return result;
+ Function _smallCacheGetIntValueResponseParamsResponder(
+ int requestId) {
+ return (int intValue) {
+ var result = new SmallCacheGetIntValueResponseParams();
+ result.intValue = intValue;
+ sendResponse(buildResponseWithId(
+ result,
+ _smallCacheMethodGetIntValueName,
+ 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");
@@ -3165,30 +3242,12 @@ class _SmallCacheStubControl
_impl.setIntValue(params.intValue);
break;
case _smallCacheMethodGetIntValueName:
- var response = _impl.getIntValue(_smallCacheGetIntValueResponseParamsFactory);
- if (response is Future) {
- return response.then((response) {
- if (response != null) {
- return buildResponseWithId(
- response,
- _smallCacheMethodGetIntValueName,
- message.header.requestId,
- bindings.MessageHeader.kMessageIsResponse);
- }
- });
- } else if (response != null) {
- return buildResponseWithId(
- response,
- _smallCacheMethodGetIntValueName,
- message.header.requestId,
- bindings.MessageHeader.kMessageIsResponse);
- }
+ _impl.getIntValue(_smallCacheGetIntValueResponseParamsResponder(message.header.requestId));
break;
default:
throw new bindings.MojoCodecError("Unexpected message name");
break;
}
- return null;
}
SmallCache get impl => _impl;
@@ -3245,22 +3304,25 @@ class SmallCacheStub
void setIntValue(int intValue) {
return impl.setIntValue(intValue);
}
- dynamic getIntValue([Function responseFactory = null]) {
- return impl.getIntValue(responseFactory);
+ void getIntValue(void callback(int intValue)) {
+ return impl.getIntValue(callback);
}
}
const int _unionInterfaceMethodEchoName = 0;
class _UnionInterfaceServiceDescription 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 UnionInterface {
@@ -3285,7 +3347,7 @@ abstract class UnionInterface {
s.connectToService(url, p, name);
return p;
}
- dynamic echo(PodUnion inVal,[Function responseFactory = null]);
+ void echo(PodUnion inVal,void callback(PodUnion outVal));
}
abstract class UnionInterfaceInterface
@@ -3335,18 +3397,14 @@ class _UnionInterfaceProxyControl
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.outVal );
break;
default:
proxyError("Unexpected message type: ${message.header.type}");
@@ -3391,17 +3449,19 @@ class UnionInterfaceProxy
}
- dynamic echo(PodUnion inVal,[Function responseFactory = null]) {
+ void echo(PodUnion inVal,void callback(PodUnion outVal)) {
if (impl != null) {
- return new Future(() => impl.echo(inVal,_UnionInterfaceStubControl._unionInterfaceEchoResponseParamsFactory));
+ impl.echo(inVal,callback);
+ return;
}
var params = new _UnionInterfaceEchoParams();
params.inVal = inVal;
- return ctrl.sendMessageWithRequestId(
+ ctrl.sendMessageWithRequestId(
params,
_unionInterfaceMethodEchoName,
-1,
- bindings.MessageHeader.kMessageExpectsResponse);
+ bindings.MessageHeader.kMessageExpectsResponse,
+ callback);
}
}
@@ -3427,17 +3487,24 @@ class _UnionInterfaceStubControl
String get serviceName => UnionInterface.serviceName;
- static UnionInterfaceEchoResponseParams _unionInterfaceEchoResponseParamsFactory(PodUnion outVal) {
- var result = new UnionInterfaceEchoResponseParams();
- result.outVal = outVal;
- return result;
+ Function _unionInterfaceEchoResponseParamsResponder(
+ int requestId) {
+ return (PodUnion outVal) {
+ var result = new UnionInterfaceEchoResponseParams();
+ result.outVal = outVal;
+ sendResponse(buildResponseWithId(
+ result,
+ _unionInterfaceMethodEchoName,
+ 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");
@@ -3446,30 +3513,12 @@ class _UnionInterfaceStubControl
case _unionInterfaceMethodEchoName:
var params = _UnionInterfaceEchoParams.deserialize(
message.payload);
- var response = _impl.echo(params.inVal,_unionInterfaceEchoResponseParamsFactory);
- if (response is Future) {
- return response.then((response) {
- if (response != null) {
- return buildResponseWithId(
- response,
- _unionInterfaceMethodEchoName,
- message.header.requestId,
- bindings.MessageHeader.kMessageIsResponse);
- }
- });
- } else if (response != null) {
- return buildResponseWithId(
- response,
- _unionInterfaceMethodEchoName,
- message.header.requestId,
- bindings.MessageHeader.kMessageIsResponse);
- }
+ _impl.echo(params.inVal, _unionInterfaceEchoResponseParamsResponder(message.header.requestId));
break;
default:
throw new bindings.MojoCodecError("Unexpected message name");
break;
}
- return null;
}
UnionInterface get impl => _impl;
@@ -3523,8 +3572,8 @@ class UnionInterfaceStub
}
- dynamic echo(PodUnion inVal,[Function responseFactory = null]) {
- return impl.echo(inVal,responseFactory);
+ void echo(PodUnion inVal,void callback(PodUnion outVal)) {
+ return impl.echo(inVal,callback);
}
}
@@ -3541,7 +3590,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