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 library input_mojom; | 5 library input_mojom; |
6 import 'dart:async'; | 6 import 'dart:async'; |
7 import 'package:mojo/bindings.dart' as bindings; | 7 import 'package:mojo/bindings.dart' as bindings; |
8 import 'package:mojo/core.dart' as core; | 8 import 'package:mojo/core.dart' as core; |
9 import 'package:mojo/mojo/bindings/types/service_describer.mojom.dart' as servic
e_describer; | 9 import 'package:mojo/mojo/bindings/types/service_describer.mojom.dart' as servic
e_describer; |
10 | 10 |
11 | 11 |
12 | 12 |
13 class _InputClientOnBackButtonParams extends bindings.Struct { | 13 class _InputClientOnBackButtonParams extends bindings.Struct { |
14 static const List<bindings.StructDataHeader> kVersions = const [ | 14 static const List<bindings.StructDataHeader> kVersions = const [ |
15 const bindings.StructDataHeader(8, 0) | 15 const bindings.StructDataHeader(8, 0) |
16 ]; | 16 ]; |
17 | 17 |
18 _InputClientOnBackButtonParams() : super(kVersions.last.size); | 18 _InputClientOnBackButtonParams() : super(kVersions.last.size); |
19 | 19 |
| 20 _InputClientOnBackButtonParams.init( |
| 21 ) : super(kVersions.last.size); |
| 22 |
20 static _InputClientOnBackButtonParams deserialize(bindings.Message message) { | 23 static _InputClientOnBackButtonParams deserialize(bindings.Message message) { |
21 var decoder = new bindings.Decoder(message); | 24 var decoder = new bindings.Decoder(message); |
22 var result = decode(decoder); | 25 var result = decode(decoder); |
23 if (decoder.excessHandles != null) { | 26 if (decoder.excessHandles != null) { |
24 decoder.excessHandles.forEach((h) => h.close()); | 27 decoder.excessHandles.forEach((h) => h.close()); |
25 } | 28 } |
26 return result; | 29 return result; |
27 } | 30 } |
28 | 31 |
29 static _InputClientOnBackButtonParams decode(bindings.Decoder decoder0) { | 32 static _InputClientOnBackButtonParams decode(bindings.Decoder decoder0) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 } | 71 } |
69 | 72 |
70 | 73 |
71 class InputClientOnBackButtonResponseParams extends bindings.Struct { | 74 class InputClientOnBackButtonResponseParams extends bindings.Struct { |
72 static const List<bindings.StructDataHeader> kVersions = const [ | 75 static const List<bindings.StructDataHeader> kVersions = const [ |
73 const bindings.StructDataHeader(8, 0) | 76 const bindings.StructDataHeader(8, 0) |
74 ]; | 77 ]; |
75 | 78 |
76 InputClientOnBackButtonResponseParams() : super(kVersions.last.size); | 79 InputClientOnBackButtonResponseParams() : super(kVersions.last.size); |
77 | 80 |
| 81 InputClientOnBackButtonResponseParams.init( |
| 82 ) : super(kVersions.last.size); |
| 83 |
78 static InputClientOnBackButtonResponseParams deserialize(bindings.Message mess
age) { | 84 static InputClientOnBackButtonResponseParams deserialize(bindings.Message mess
age) { |
79 var decoder = new bindings.Decoder(message); | 85 var decoder = new bindings.Decoder(message); |
80 var result = decode(decoder); | 86 var result = decode(decoder); |
81 if (decoder.excessHandles != null) { | 87 if (decoder.excessHandles != null) { |
82 decoder.excessHandles.forEach((h) => h.close()); | 88 decoder.excessHandles.forEach((h) => h.close()); |
83 } | 89 } |
84 return result; | 90 return result; |
85 } | 91 } |
86 | 92 |
87 static InputClientOnBackButtonResponseParams decode(bindings.Decoder decoder0)
{ | 93 static InputClientOnBackButtonResponseParams decode(bindings.Decoder decoder0)
{ |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 | 133 |
128 | 134 |
129 class _InputServiceSetClientParams extends bindings.Struct { | 135 class _InputServiceSetClientParams extends bindings.Struct { |
130 static const List<bindings.StructDataHeader> kVersions = const [ | 136 static const List<bindings.StructDataHeader> kVersions = const [ |
131 const bindings.StructDataHeader(16, 0) | 137 const bindings.StructDataHeader(16, 0) |
132 ]; | 138 ]; |
133 InputClientInterface client = null; | 139 InputClientInterface client = null; |
134 | 140 |
135 _InputServiceSetClientParams() : super(kVersions.last.size); | 141 _InputServiceSetClientParams() : super(kVersions.last.size); |
136 | 142 |
| 143 _InputServiceSetClientParams.init( |
| 144 InputClientInterface this.client |
| 145 ) : super(kVersions.last.size); |
| 146 |
137 static _InputServiceSetClientParams deserialize(bindings.Message message) { | 147 static _InputServiceSetClientParams deserialize(bindings.Message message) { |
138 var decoder = new bindings.Decoder(message); | 148 var decoder = new bindings.Decoder(message); |
139 var result = decode(decoder); | 149 var result = decode(decoder); |
140 if (decoder.excessHandles != null) { | 150 if (decoder.excessHandles != null) { |
141 decoder.excessHandles.forEach((h) => h.close()); | 151 decoder.excessHandles.forEach((h) => h.close()); |
142 } | 152 } |
143 return result; | 153 return result; |
144 } | 154 } |
145 | 155 |
146 static _InputServiceSetClientParams decode(bindings.Decoder decoder0) { | 156 static _InputServiceSetClientParams decode(bindings.Decoder decoder0) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 | 202 |
193 Map toJson() { | 203 Map toJson() { |
194 throw new bindings.MojoCodecError( | 204 throw new bindings.MojoCodecError( |
195 'Object containing handles cannot be encoded to JSON.'); | 205 'Object containing handles cannot be encoded to JSON.'); |
196 } | 206 } |
197 } | 207 } |
198 | 208 |
199 const int _inputClientMethodOnBackButtonName = 0; | 209 const int _inputClientMethodOnBackButtonName = 0; |
200 | 210 |
201 class _InputClientServiceDescription implements service_describer.ServiceDescrip
tion { | 211 class _InputClientServiceDescription implements service_describer.ServiceDescrip
tion { |
202 dynamic getTopLevelInterface([Function responseFactory]) => | 212 void getTopLevelInterface(Function responder) { |
203 responseFactory(null); | 213 responder(null); |
| 214 } |
204 | 215 |
205 dynamic getTypeDefinition(String typeKey, [Function responseFactory]) => | 216 void getTypeDefinition(String typeKey, Function responder) { |
206 responseFactory(null); | 217 responder(null); |
| 218 } |
207 | 219 |
208 dynamic getAllTypeDefinitions([Function responseFactory]) => | 220 void getAllTypeDefinitions(Function responder) { |
209 responseFactory(null); | 221 responder(null); |
| 222 } |
210 } | 223 } |
211 | 224 |
212 abstract class InputClient { | 225 abstract class InputClient { |
213 static const String serviceName = null; | 226 static const String serviceName = null; |
214 | 227 |
215 static service_describer.ServiceDescription _cachedServiceDescription; | 228 static service_describer.ServiceDescription _cachedServiceDescription; |
216 static service_describer.ServiceDescription get serviceDescription { | 229 static service_describer.ServiceDescription get serviceDescription { |
217 if (_cachedServiceDescription == null) { | 230 if (_cachedServiceDescription == null) { |
218 _cachedServiceDescription = new _InputClientServiceDescription(); | 231 _cachedServiceDescription = new _InputClientServiceDescription(); |
219 } | 232 } |
220 return _cachedServiceDescription; | 233 return _cachedServiceDescription; |
221 } | 234 } |
222 | 235 |
223 static InputClientProxy connectToService( | 236 static InputClientProxy connectToService( |
224 bindings.ServiceConnector s, String url, [String serviceName]) { | 237 bindings.ServiceConnector s, String url, [String serviceName]) { |
225 InputClientProxy p = new InputClientProxy.unbound(); | 238 InputClientProxy p = new InputClientProxy.unbound(); |
226 String name = serviceName ?? InputClient.serviceName; | 239 String name = serviceName ?? InputClient.serviceName; |
227 if ((name == null) || name.isEmpty) { | 240 if ((name == null) || name.isEmpty) { |
228 throw new core.MojoApiError( | 241 throw new core.MojoApiError( |
229 "If an interface has no ServiceName, then one must be provided."); | 242 "If an interface has no ServiceName, then one must be provided."); |
230 } | 243 } |
231 s.connectToService(url, p, name); | 244 s.connectToService(url, p, name); |
232 return p; | 245 return p; |
233 } | 246 } |
234 dynamic onBackButton([Function responseFactory = null]); | 247 void onBackButton(void callback()); |
235 } | 248 } |
236 | 249 |
237 abstract class InputClientInterface | 250 abstract class InputClientInterface |
238 implements bindings.MojoInterface<InputClient>, | 251 implements bindings.MojoInterface<InputClient>, |
239 InputClient { | 252 InputClient { |
240 factory InputClientInterface([InputClient impl]) => | 253 factory InputClientInterface([InputClient impl]) => |
241 new InputClientStub.unbound(impl); | 254 new InputClientStub.unbound(impl); |
242 | 255 |
243 factory InputClientInterface.fromEndpoint( | 256 factory InputClientInterface.fromEndpoint( |
244 core.MojoMessagePipeEndpoint endpoint, | 257 core.MojoMessagePipeEndpoint endpoint, |
(...skipping 29 matching lines...) Expand all Loading... |
274 | 287 |
275 void handleResponse(bindings.ServiceMessage message) { | 288 void handleResponse(bindings.ServiceMessage message) { |
276 switch (message.header.type) { | 289 switch (message.header.type) { |
277 case _inputClientMethodOnBackButtonName: | 290 case _inputClientMethodOnBackButtonName: |
278 var r = InputClientOnBackButtonResponseParams.deserialize( | 291 var r = InputClientOnBackButtonResponseParams.deserialize( |
279 message.payload); | 292 message.payload); |
280 if (!message.header.hasRequestId) { | 293 if (!message.header.hasRequestId) { |
281 proxyError("Expected a message with a valid request Id."); | 294 proxyError("Expected a message with a valid request Id."); |
282 return; | 295 return; |
283 } | 296 } |
284 Completer c = completerMap[message.header.requestId]; | 297 Function callback = callbackMap[message.header.requestId]; |
285 if (c == null) { | 298 if (callback == null) { |
286 proxyError( | 299 proxyError( |
287 "Message had unknown request Id: ${message.header.requestId}"); | 300 "Message had unknown request Id: ${message.header.requestId}"); |
288 return; | 301 return; |
289 } | 302 } |
290 completerMap.remove(message.header.requestId); | 303 callbackMap.remove(message.header.requestId); |
291 if (c.isCompleted) { | 304 callback(); |
292 proxyError("Response completer already completed"); | |
293 return; | |
294 } | |
295 c.complete(r); | |
296 break; | 305 break; |
297 default: | 306 default: |
298 proxyError("Unexpected message type: ${message.header.type}"); | 307 proxyError("Unexpected message type: ${message.header.type}"); |
299 close(immediate: true); | 308 close(immediate: true); |
300 break; | 309 break; |
301 } | 310 } |
302 } | 311 } |
303 | 312 |
304 @override | 313 @override |
305 String toString() { | 314 String toString() { |
(...skipping 24 matching lines...) Expand all Loading... |
330 return newMockedProxy; | 339 return newMockedProxy; |
331 } | 340 } |
332 | 341 |
333 static InputClientProxy newFromEndpoint( | 342 static InputClientProxy newFromEndpoint( |
334 core.MojoMessagePipeEndpoint endpoint) { | 343 core.MojoMessagePipeEndpoint endpoint) { |
335 assert(endpoint.setDescription("For InputClientProxy")); | 344 assert(endpoint.setDescription("For InputClientProxy")); |
336 return new InputClientProxy.fromEndpoint(endpoint); | 345 return new InputClientProxy.fromEndpoint(endpoint); |
337 } | 346 } |
338 | 347 |
339 | 348 |
340 dynamic onBackButton([Function responseFactory = null]) { | 349 void onBackButton(void callback()) { |
341 if (impl != null) { | 350 if (impl != null) { |
342 return new Future(() => impl.onBackButton(_InputClientStubControl._inputCl
ientOnBackButtonResponseParamsFactory)); | 351 impl.onBackButton(callback); |
| 352 return; |
343 } | 353 } |
344 var params = new _InputClientOnBackButtonParams(); | 354 var params = new _InputClientOnBackButtonParams(); |
345 return ctrl.sendMessageWithRequestId( | 355 ctrl.sendMessageWithRequestId( |
346 params, | 356 params, |
347 _inputClientMethodOnBackButtonName, | 357 _inputClientMethodOnBackButtonName, |
348 -1, | 358 -1, |
349 bindings.MessageHeader.kMessageExpectsResponse); | 359 bindings.MessageHeader.kMessageExpectsResponse, |
| 360 callback); |
350 } | 361 } |
351 } | 362 } |
352 | 363 |
353 class _InputClientStubControl | 364 class _InputClientStubControl |
354 extends bindings.StubMessageHandler | 365 extends bindings.StubMessageHandler |
355 implements bindings.StubControl<InputClient> { | 366 implements bindings.StubControl<InputClient> { |
356 InputClient _impl; | 367 InputClient _impl; |
357 | 368 |
358 _InputClientStubControl.fromEndpoint( | 369 _InputClientStubControl.fromEndpoint( |
359 core.MojoMessagePipeEndpoint endpoint, [InputClient impl]) | 370 core.MojoMessagePipeEndpoint endpoint, [InputClient impl]) |
360 : super.fromEndpoint(endpoint, autoBegin: impl != null) { | 371 : super.fromEndpoint(endpoint, autoBegin: impl != null) { |
361 _impl = impl; | 372 _impl = impl; |
362 } | 373 } |
363 | 374 |
364 _InputClientStubControl.fromHandle( | 375 _InputClientStubControl.fromHandle( |
365 core.MojoHandle handle, [InputClient impl]) | 376 core.MojoHandle handle, [InputClient impl]) |
366 : super.fromHandle(handle, autoBegin: impl != null) { | 377 : super.fromHandle(handle, autoBegin: impl != null) { |
367 _impl = impl; | 378 _impl = impl; |
368 } | 379 } |
369 | 380 |
370 _InputClientStubControl.unbound([this._impl]) : super.unbound(); | 381 _InputClientStubControl.unbound([this._impl]) : super.unbound(); |
371 | 382 |
372 String get serviceName => InputClient.serviceName; | 383 String get serviceName => InputClient.serviceName; |
373 | 384 |
374 | 385 |
375 static InputClientOnBackButtonResponseParams _inputClientOnBackButtonResponseP
aramsFactory() { | 386 Function _inputClientOnBackButtonResponseParamsResponder( |
376 var result = new InputClientOnBackButtonResponseParams(); | 387 int requestId) { |
377 return result; | 388 return () { |
| 389 var result = new InputClientOnBackButtonResponseParams(); |
| 390 sendResponse(buildResponseWithId( |
| 391 result, |
| 392 _inputClientMethodOnBackButtonName, |
| 393 requestId, |
| 394 bindings.MessageHeader.kMessageIsResponse)); |
| 395 }; |
378 } | 396 } |
379 | 397 |
380 dynamic handleMessage(bindings.ServiceMessage message) { | 398 void handleMessage(bindings.ServiceMessage message) { |
381 if (bindings.ControlMessageHandler.isControlMessage(message)) { | 399 if (bindings.ControlMessageHandler.isControlMessage(message)) { |
382 return bindings.ControlMessageHandler.handleMessage(this, | 400 bindings.ControlMessageHandler.handleMessage( |
383 0, | 401 this, 0, message); |
384 message); | 402 return; |
385 } | 403 } |
386 if (_impl == null) { | 404 if (_impl == null) { |
387 throw new core.MojoApiError("$this has no implementation set"); | 405 throw new core.MojoApiError("$this has no implementation set"); |
388 } | 406 } |
389 switch (message.header.type) { | 407 switch (message.header.type) { |
390 case _inputClientMethodOnBackButtonName: | 408 case _inputClientMethodOnBackButtonName: |
391 var response = _impl.onBackButton(_inputClientOnBackButtonResponseParams
Factory); | 409 _impl.onBackButton(_inputClientOnBackButtonResponseParamsResponder(messa
ge.header.requestId)); |
392 if (response is Future) { | |
393 return response.then((response) { | |
394 if (response != null) { | |
395 return buildResponseWithId( | |
396 response, | |
397 _inputClientMethodOnBackButtonName, | |
398 message.header.requestId, | |
399 bindings.MessageHeader.kMessageIsResponse); | |
400 } | |
401 }); | |
402 } else if (response != null) { | |
403 return buildResponseWithId( | |
404 response, | |
405 _inputClientMethodOnBackButtonName, | |
406 message.header.requestId, | |
407 bindings.MessageHeader.kMessageIsResponse); | |
408 } | |
409 break; | 410 break; |
410 default: | 411 default: |
411 throw new bindings.MojoCodecError("Unexpected message name"); | 412 throw new bindings.MojoCodecError("Unexpected message name"); |
412 break; | 413 break; |
413 } | 414 } |
414 return null; | |
415 } | 415 } |
416 | 416 |
417 InputClient get impl => _impl; | 417 InputClient get impl => _impl; |
418 set impl(InputClient d) { | 418 set impl(InputClient d) { |
419 if (d == null) { | 419 if (d == null) { |
420 throw new core.MojoApiError("$this: Cannot set a null implementation"); | 420 throw new core.MojoApiError("$this: Cannot set a null implementation"); |
421 } | 421 } |
422 if (isBound && (_impl == null)) { | 422 if (isBound && (_impl == null)) { |
423 beginHandlingEvents(); | 423 beginHandlingEvents(); |
424 } | 424 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 core.MojoHandle handle, [InputClient impl]) | 458 core.MojoHandle handle, [InputClient impl]) |
459 : super(new _InputClientStubControl.fromHandle(handle, impl)); | 459 : super(new _InputClientStubControl.fromHandle(handle, impl)); |
460 | 460 |
461 static InputClientStub newFromEndpoint( | 461 static InputClientStub newFromEndpoint( |
462 core.MojoMessagePipeEndpoint endpoint) { | 462 core.MojoMessagePipeEndpoint endpoint) { |
463 assert(endpoint.setDescription("For InputClientStub")); | 463 assert(endpoint.setDescription("For InputClientStub")); |
464 return new InputClientStub.fromEndpoint(endpoint); | 464 return new InputClientStub.fromEndpoint(endpoint); |
465 } | 465 } |
466 | 466 |
467 | 467 |
468 dynamic onBackButton([Function responseFactory = null]) { | 468 void onBackButton(void callback()) { |
469 return impl.onBackButton(responseFactory); | 469 return impl.onBackButton(callback); |
470 } | 470 } |
471 } | 471 } |
472 | 472 |
473 const int _inputServiceMethodSetClientName = 0; | 473 const int _inputServiceMethodSetClientName = 0; |
474 | 474 |
475 class _InputServiceServiceDescription implements service_describer.ServiceDescri
ption { | 475 class _InputServiceServiceDescription implements service_describer.ServiceDescri
ption { |
476 dynamic getTopLevelInterface([Function responseFactory]) => | 476 void getTopLevelInterface(Function responder) { |
477 responseFactory(null); | 477 responder(null); |
| 478 } |
478 | 479 |
479 dynamic getTypeDefinition(String typeKey, [Function responseFactory]) => | 480 void getTypeDefinition(String typeKey, Function responder) { |
480 responseFactory(null); | 481 responder(null); |
| 482 } |
481 | 483 |
482 dynamic getAllTypeDefinitions([Function responseFactory]) => | 484 void getAllTypeDefinitions(Function responder) { |
483 responseFactory(null); | 485 responder(null); |
| 486 } |
484 } | 487 } |
485 | 488 |
486 abstract class InputService { | 489 abstract class InputService { |
487 static const String serviceName = "input::InputService"; | 490 static const String serviceName = "input::InputService"; |
488 | 491 |
489 static service_describer.ServiceDescription _cachedServiceDescription; | 492 static service_describer.ServiceDescription _cachedServiceDescription; |
490 static service_describer.ServiceDescription get serviceDescription { | 493 static service_describer.ServiceDescription get serviceDescription { |
491 if (_cachedServiceDescription == null) { | 494 if (_cachedServiceDescription == null) { |
492 _cachedServiceDescription = new _InputServiceServiceDescription(); | 495 _cachedServiceDescription = new _InputServiceServiceDescription(); |
493 } | 496 } |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
623 : super.fromHandle(handle, autoBegin: impl != null) { | 626 : super.fromHandle(handle, autoBegin: impl != null) { |
624 _impl = impl; | 627 _impl = impl; |
625 } | 628 } |
626 | 629 |
627 _InputServiceStubControl.unbound([this._impl]) : super.unbound(); | 630 _InputServiceStubControl.unbound([this._impl]) : super.unbound(); |
628 | 631 |
629 String get serviceName => InputService.serviceName; | 632 String get serviceName => InputService.serviceName; |
630 | 633 |
631 | 634 |
632 | 635 |
633 dynamic handleMessage(bindings.ServiceMessage message) { | 636 void handleMessage(bindings.ServiceMessage message) { |
634 if (bindings.ControlMessageHandler.isControlMessage(message)) { | 637 if (bindings.ControlMessageHandler.isControlMessage(message)) { |
635 return bindings.ControlMessageHandler.handleMessage(this, | 638 bindings.ControlMessageHandler.handleMessage( |
636 0, | 639 this, 0, message); |
637 message); | 640 return; |
638 } | 641 } |
639 if (_impl == null) { | 642 if (_impl == null) { |
640 throw new core.MojoApiError("$this has no implementation set"); | 643 throw new core.MojoApiError("$this has no implementation set"); |
641 } | 644 } |
642 switch (message.header.type) { | 645 switch (message.header.type) { |
643 case _inputServiceMethodSetClientName: | 646 case _inputServiceMethodSetClientName: |
644 var params = _InputServiceSetClientParams.deserialize( | 647 var params = _InputServiceSetClientParams.deserialize( |
645 message.payload); | 648 message.payload); |
646 _impl.setClient(params.client); | 649 _impl.setClient(params.client); |
647 break; | 650 break; |
648 default: | 651 default: |
649 throw new bindings.MojoCodecError("Unexpected message name"); | 652 throw new bindings.MojoCodecError("Unexpected message name"); |
650 break; | 653 break; |
651 } | 654 } |
652 return null; | |
653 } | 655 } |
654 | 656 |
655 InputService get impl => _impl; | 657 InputService get impl => _impl; |
656 set impl(InputService d) { | 658 set impl(InputService d) { |
657 if (d == null) { | 659 if (d == null) { |
658 throw new core.MojoApiError("$this: Cannot set a null implementation"); | 660 throw new core.MojoApiError("$this: Cannot set a null implementation"); |
659 } | 661 } |
660 if (isBound && (_impl == null)) { | 662 if (isBound && (_impl == null)) { |
661 beginHandlingEvents(); | 663 beginHandlingEvents(); |
662 } | 664 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 } | 705 } |
704 | 706 |
705 | 707 |
706 void setClient(InputClientInterface client) { | 708 void setClient(InputClientInterface client) { |
707 return impl.setClient(client); | 709 return impl.setClient(client); |
708 } | 710 } |
709 } | 711 } |
710 | 712 |
711 | 713 |
712 | 714 |
OLD | NEW |