mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
# 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.
|
|
|
|
"""Python implementation of the Application interface."""
|
|
|
|
import application_mojom
|
|
import service_provider_mojom
|
|
import shell_mojom
|
|
from mojo_application.service_provider_impl import ServiceProviderImpl
|
|
|
|
import mojo_system
|
|
|
|
class ApplicationImpl(application_mojom.Application):
|
|
def __init__(self, delegate, app_request_handle):
|
|
self.shell = None
|
|
self.url = None
|
|
self.args = None
|
|
self._delegate = delegate
|
|
self._providers = []
|
|
application_mojom.Application.manager.Bind(self, app_request_handle)
|
|
|
|
def Initialize(self, shell, url, args):
|
|
self.shell = shell
|
|
self.url = url
|
|
self.args = args
|
|
self._delegate.Initialize(shell, self)
|
|
|
|
def AcceptConnection(self, requestor_url, services, exposed_services,
|
|
resolved_url):
|
|
service_provider = ServiceProviderImpl(services)
|
|
if self._delegate.OnAcceptConnection(requestor_url, resolved_url,
|
|
service_provider, exposed_services):
|
|
# We keep a reference to ServiceProviderImpl to ensure neither it nor
|
|
# |services| gets garbage collected.
|
|
services.Bind(service_provider)
|
|
self._providers.append(service_provider)
|
|
|
|
def removeServiceProvider():
|
|
self._providers.remove(service_provider)
|
|
service_provider.manager.AddOnErrorCallback(removeServiceProvider)
|
|
|
|
def ConnectToService(self, application_url, service_class):
|
|
"""
|
|
Helper method to connect to a service. |application_url| is the URL of the
|
|
application to be connected to, and |service_class| is the class of the
|
|
service to be connected to. Returns a proxy to the service.
|
|
"""
|
|
application_proxy, request = (
|
|
service_provider_mojom.ServiceProvider.manager.NewRequest())
|
|
self.shell.ConnectToApplication(application_url, request, None)
|
|
|
|
service_proxy, request = service_class.manager.NewRequest()
|
|
application_proxy.ConnectToService(service_class.manager.name,
|
|
request.PassMessagePipe())
|
|
|
|
return service_proxy
|