flutter_flutter/framework/embedder.dart
Eric Seidel 8ad5f14611 Currently we use package: to mean "/gen", which is not at all how
Dart actually expects package: to work.  This CL makes package:foo
map to /packages/foo, similar to how Dartium or bin/dart would expect.

This also means overlaying the /gen directory over the actual package
outputs (as consumers of an SDK would expect) as well as adding
an additional /lib indirection for the actual package source as
the Dart pub tool will expect.

This is far from perfect, but it unlocks us actually producing a
sky SDK.

I expect there may be some fallout from this change as I'm sure I
missed some package: uses.  We also don't have a general solution
for all /foo/bar/baz includes which randomly included parts
of mojo's source directory.  Those will need to be updated to use
a package: and deploy_sdk.py taught how to build a package for them.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/990493002
2015-03-13 16:58:53 -07:00

59 lines
2.2 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 "package:mojo/public/dart/application.dart";
import "dart:sky.internals" as internals;
import "dart:mojo.bindings" as bindings;
import "dart: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:mojo/services/service_registry/public/interfaces/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;
}
}