| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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 """Python implementation of the Application interface.""" | 5 """Python implementation of the Application interface.""" |
| 6 | 6 |
| 7 import application_mojom | 7 import application_mojom |
| 8 import service_provider_mojom | 8 import service_provider_mojom |
| 9 import shell_mojom | 9 import shell_mojom |
| 10 from mojo_application.service_provider_impl import ServiceProviderImpl | 10 from mojo_application.service_provider_impl import ServiceProviderImpl |
| 11 | 11 |
| 12 import mojo_system | 12 import mojo_system |
| 13 | 13 |
| 14 class ApplicationImpl(application_mojom.Application): | 14 class ApplicationImpl(application_mojom.Application): |
| 15 def __init__(self, delegate, app_request_handle): | 15 def __init__(self, delegate, app_request_handle): |
| 16 self.shell = None | 16 self.shell = None |
| 17 self.url = None | 17 self.url = None |
| 18 self.args = None | 18 self.args = None |
| 19 self._delegate = delegate | 19 self._delegate = delegate |
| 20 self._providers = [] | 20 self._providers = [] |
| 21 application_mojom.Application.manager.Bind(self, app_request_handle) | 21 application_mojom.Application.manager.Bind(self, app_request_handle) |
| 22 | 22 |
| 23 def Initialize(self, shell, url, args): | 23 def Initialize(self, shell, url, args): |
| 24 self.shell = shell | 24 self.shell = shell |
| 25 self.url = url | 25 self.url = url |
| 26 self.args = args | 26 self.args = args |
| 27 self._delegate.Initialize(shell, self) | 27 self._delegate.Initialize(shell, self) |
| 28 | 28 |
| 29 def AcceptConnection(self, requestor_url, services, exposed_services): | 29 def AcceptConnection(self, requestor_url, services, exposed_services, |
| 30 resolved_url): |
| 30 service_provider = ServiceProviderImpl(services) | 31 service_provider = ServiceProviderImpl(services) |
| 31 if self._delegate.OnAcceptConnection(service_provider, requestor_url, | 32 if self._delegate.OnAcceptConnection(service_provider, requestor_url, |
| 32 exposed_services): | 33 exposed_services, resolved_url): |
| 33 # We keep a reference to ServiceProviderImpl to ensure neither it nor | 34 # We keep a reference to ServiceProviderImpl to ensure neither it nor |
| 34 # |services| gets garbage collected. | 35 # |services| gets garbage collected. |
| 35 services.Bind(service_provider) | 36 services.Bind(service_provider) |
| 36 self._providers.append(service_provider) | 37 self._providers.append(service_provider) |
| 37 | 38 |
| 38 def removeServiceProvider(): | 39 def removeServiceProvider(): |
| 39 self._providers.remove(service_provider) | 40 self._providers.remove(service_provider) |
| 40 service_provider.manager.AddOnErrorCallback(removeServiceProvider) | 41 service_provider.manager.AddOnErrorCallback(removeServiceProvider) |
| 41 | 42 |
| 42 def ConnectToService(self, application_url, service_class): | 43 def ConnectToService(self, application_url, service_class): |
| 43 """ | 44 """ |
| 44 Helper method to connect to a service. |application_url| is the URL of the | 45 Helper method to connect to a service. |application_url| is the URL of the |
| 45 application to be connected to, and |service_class| is the class of the | 46 application to be connected to, and |service_class| is the class of the |
| 46 service to be connected to. Returns a proxy to the service. | 47 service to be connected to. Returns a proxy to the service. |
| 47 """ | 48 """ |
| 48 application_proxy, request = ( | 49 application_proxy, request = ( |
| 49 service_provider_mojom.ServiceProvider.manager.NewRequest()) | 50 service_provider_mojom.ServiceProvider.manager.NewRequest()) |
| 50 self.shell.ConnectToApplication(application_url, request, None) | 51 self.shell.ConnectToApplication(application_url, request, None) |
| 51 | 52 |
| 52 service_proxy, request = service_class.manager.NewRequest() | 53 service_proxy, request = service_class.manager.NewRequest() |
| 53 application_proxy.ConnectToService(service_class.manager.name, | 54 application_proxy.ConnectToService(service_class.manager.name, |
| 54 request.PassMessagePipe()) | 55 request.PassMessagePipe()) |
| 55 | 56 |
| 56 return service_proxy | 57 return service_proxy |
| OLD | NEW |