| OLD | NEW |
| (Empty) |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 """Python implementation of the Application interface.""" | |
| 6 | |
| 7 import logging | |
| 8 | |
| 9 import application_mojom | |
| 10 import service_provider_mojom | |
| 11 import shell_mojom | |
| 12 from mojo_application.service_provider_impl import ServiceProviderImpl | |
| 13 | |
| 14 import mojo_system | |
| 15 | |
| 16 class ApplicationImpl(application_mojom.Application): | |
| 17 def __init__(self, delegate, app_request_handle): | |
| 18 self.shell = None | |
| 19 self.url = None | |
| 20 self.args = None | |
| 21 self._delegate = delegate | |
| 22 self._providers = [] | |
| 23 application_mojom.Application.manager.Bind(self, app_request_handle) | |
| 24 | |
| 25 def Initialize(self, shell, url, args): | |
| 26 self.shell = shell | |
| 27 self.url = url | |
| 28 self.args = args | |
| 29 self._delegate.Initialize(shell, self) | |
| 30 | |
| 31 def AcceptConnection(self, requestor_url, resolved_url, services): | |
| 32 service_provider = ServiceProviderImpl(services) | |
| 33 if self._delegate.OnAcceptConnection(requestor_url, resolved_url, | |
| 34 service_provider): | |
| 35 # We keep a reference to ServiceProviderImpl to ensure neither it nor | |
| 36 # |services| gets garbage collected. | |
| 37 services.Bind(service_provider) | |
| 38 self._providers.append(service_provider) | |
| 39 | |
| 40 def removeServiceProvider(): | |
| 41 self._providers.remove(service_provider) | |
| 42 service_provider.manager.AddOnErrorCallback(removeServiceProvider) | |
| 43 | |
| 44 def ConnectToService(self, application_url, service_class): | |
| 45 """ | |
| 46 Helper method to connect to a service. |application_url| is the URL of the | |
| 47 application to be connected to, and |service_class| is the class of the | |
| 48 service to be connected to. Returns a proxy to the service. | |
| 49 """ | |
| 50 if not service_class.manager.service_name: | |
| 51 logging.error("No ServiceName specified for %s." % service_class.__name__) | |
| 52 return | |
| 53 application_proxy, request = ( | |
| 54 service_provider_mojom.ServiceProvider.manager.NewRequest()) | |
| 55 self.shell.ConnectToApplication(application_url, request, None) | |
| 56 | |
| 57 service_proxy, request = service_class.manager.NewRequest() | |
| 58 application_proxy.ConnectToService(service_class.manager.service_name, | |
| 59 request.PassMessagePipe()) | |
| 60 | |
| 61 return service_proxy | |
| OLD | NEW |