flutter_flutter/framework/embedder.dart
Hans Muller d679a524b5 Added ServiceRegistry interface
ServiceRegistry enables a chain of Mojo applications to accumulate
services without wrapping and forwarding the incoming ServiceProvider
request.

Sky's DocumentView adds ViewManagerClient to the ServiceRegistry (if any)
that's provided to it via ConnectToApplication(). Sky applications can add
additional services with embedder.serviceRegistry.addServices().

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/958673002
2015-02-27 07:41:56 -08:00

61 lines
2.1 KiB
Dart

// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import "/mojo/public/dart/application.dart";
import "dart:sky.internals" as internals;
import "mojo:bindings" as bindings;
import "mojo:core" as core;
import "package:mojo/public/interfaces/application/service_provider.mojom.dart";
import "package:mojo/public/interfaces/application/shell.mojom.dart";
import "package:services/service_registry/service_registry.mojom.dart";
final _EmbedderImpl embedder = new _EmbedderImpl();
class _EmbedderImpl {
ApplicationConnection _connection;
ServiceRegistry _serviceRegistry;
final ShellProxy shell = new ShellProxy.fromHandle(
new core.MojoHandle(internals.takeShellProxyHandle()));
ApplicationConnection get connection {
if (_connection == null) {
var stubHandle =
new core.MojoHandle(internals.takeServicesProvidedToEmbedder());
var proxyHandle =
new core.MojoHandle(internals.takeServicesProvidedByEmbedder());
_connection = new ApplicationConection(
stubHandle.isValid ? new ServiceProviderStub.fromHandle(stubHandle) : null,
proxyHandle.isValid ? new ServiceProviderProxy.fromHandle(proxyHandle) : null);
}
return _connection;
}
ApplicationConnection connectToApplication(String url) {
var proxy = new ServiceProviderProxy.unbound();
var stub = new ServiceProviderStub.unbound();
shell.ptr.connectToApplication(url, proxy, stub);
return new ApplicationConnection(stub, proxy);
}
void connectToService(String url, bindings.ProxyBase proxy) {
var appSp = new ServiceProviderProxy.unbound();
shell.ptr.connectToApplication(url, appSp, null);
var pipe = new core.MojoMessagePipe();
proxy.impl.bind(pipe.endpoints[0]);
appSp.ptr.connectToService(proxy.name, pipe.endpoints[1]);
appSp.close();
}
ServiceRegistryProxy get serviceRegistry {
if (_serviceRegistry == null) {
_serviceRegistry = new ServiceRegistryProxy.fromHandle(
new core.MojoHandle(internals.takeServiceRegistry()));
}
return _serviceRegistry;
}
}