| Index: third_party/mojo/src/mojo/public/go/application/application_impl.go
|
| diff --git a/third_party/mojo/src/mojo/public/go/application/application_impl.go b/third_party/mojo/src/mojo/public/go/application/application_impl.go
|
| deleted file mode 100644
|
| index 5effa7f06232566fe9bdb9019fc473e49198ae2b..0000000000000000000000000000000000000000
|
| --- a/third_party/mojo/src/mojo/public/go/application/application_impl.go
|
| +++ /dev/null
|
| @@ -1,176 +0,0 @@
|
| -// 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.
|
| -
|
| -package application
|
| -
|
| -import (
|
| - "log"
|
| - "sync"
|
| -
|
| - "mojo/public/go/bindings"
|
| - "mojo/public/go/system"
|
| -
|
| - "mojo/public/interfaces/application/application"
|
| - sp "mojo/public/interfaces/application/service_provider"
|
| - "mojo/public/interfaces/application/shell"
|
| -)
|
| -
|
| -// Delegate is an interface that your mojo application should implement.
|
| -// All methods are called from the same goroutine to make sure that order of
|
| -// calls matches the order of messages sent to underlying message pipe.
|
| -type Delegate interface {
|
| - // Initialize is called exactly once before any other method.
|
| - Initialize(ctx Context)
|
| -
|
| - // AcceptConnection is called when another application attempts to open
|
| - // a connection to this application. Close the connection if you no
|
| - // longer need it.
|
| - AcceptConnection(connection *Connection)
|
| -
|
| - // Quit is called to request the application shut itself down
|
| - // gracefully.
|
| - Quit()
|
| -}
|
| -
|
| -// Context is an interface to information about mojo application environment.
|
| -type Context interface {
|
| - // URL returns the URL the application was found at, after all mappings,
|
| - // resolution, and redirects.
|
| - URL() string
|
| -
|
| - // Args returns a list of initial configuration arguments, passed by the
|
| - // Shell.
|
| - Args() []string
|
| -
|
| - // ConnectToApplication requests a new connection to an application. You
|
| - // should pass a list of services you want to provide to the requested
|
| - // application.
|
| - ConnectToApplication(remoteURL string, providedServices ...ServiceFactory) *OutgoingConnection
|
| -
|
| - // Close closes the main run loop for this application.
|
| - Close()
|
| -}
|
| -
|
| -// ApplicationImpl is an utility class for communicating with the Shell, and
|
| -// providing Services to clients.
|
| -type ApplicationImpl struct {
|
| - shell *shell.Shell_Proxy
|
| - args []string
|
| - url string
|
| - // Pointer to the stub that runs this instance of ApplicationImpl.
|
| - runner *bindings.Stub
|
| - quitOnce sync.Once
|
| -
|
| - delegate Delegate
|
| - // Protects connections, that can be modified concurrently because of
|
| - // ConnectToApplication calls.
|
| - mu sync.Mutex
|
| - connections []*Connection
|
| -}
|
| -
|
| -// Run binds your mojo application to provided message pipe handle and runs it
|
| -// until the application is terminated.
|
| -func Run(delegate Delegate, applicationRequest system.MojoHandle) {
|
| - messagePipe := system.GetCore().AcquireNativeHandle(applicationRequest).ToMessagePipeHandle()
|
| - appRequest := application.Application_Request{bindings.NewMessagePipeHandleOwner(messagePipe)}
|
| - impl := &ApplicationImpl{
|
| - delegate: delegate,
|
| - }
|
| - stub := application.NewApplicationStub(appRequest, impl, bindings.GetAsyncWaiter())
|
| - impl.runner = stub
|
| - for {
|
| - if err := stub.ServeRequest(); err != nil {
|
| - connectionError, ok := err.(*bindings.ConnectionError)
|
| - if !ok || !connectionError.Closed() {
|
| - log.Println(err)
|
| - }
|
| - impl.RequestQuit()
|
| - break
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Mojo application implementation.
|
| -func (impl *ApplicationImpl) Initialize(shellPointer shell.Shell_Pointer, args *[]string, url string) error {
|
| - impl.shell = shell.NewShellProxy(shellPointer, bindings.GetAsyncWaiter())
|
| - if args != nil {
|
| - impl.args = *args
|
| - }
|
| - impl.url = url
|
| - impl.delegate.Initialize(impl)
|
| - return nil
|
| -}
|
| -
|
| -// Mojo application implementation.
|
| -func (impl *ApplicationImpl) AcceptConnection(requestorURL string, services *sp.ServiceProvider_Request, exposedServices *sp.ServiceProvider_Pointer, resolvedURL string) error {
|
| - connection := newConnection(requestorURL, services, exposedServices, resolvedURL)
|
| - impl.delegate.AcceptConnection(connection)
|
| - impl.addConnection(connection)
|
| - return nil
|
| -}
|
| -
|
| -// Mojo application implementation.
|
| -func (impl *ApplicationImpl) RequestQuit() error {
|
| - impl.quitOnce.Do(func() {
|
| - impl.delegate.Quit()
|
| - impl.mu.Lock()
|
| - for _, c := range impl.connections {
|
| - c.Close()
|
| - }
|
| - impl.mu.Unlock()
|
| - impl.shell.Close_Proxy()
|
| - impl.runner.Close()
|
| - })
|
| - return nil
|
| -}
|
| -
|
| -// Context implementaion.
|
| -func (impl *ApplicationImpl) URL() string {
|
| - return impl.url
|
| -}
|
| -
|
| -// Context implementaion.
|
| -func (impl *ApplicationImpl) Args() []string {
|
| - return impl.args
|
| -}
|
| -
|
| -// Context implementaion.
|
| -func (impl *ApplicationImpl) ConnectToApplication(remoteURL string, providedServices ...ServiceFactory) *OutgoingConnection {
|
| - servicesRequest, servicesPointer := sp.CreateMessagePipeForServiceProvider()
|
| - exposedServicesRequest, exposedServicesPointer := sp.CreateMessagePipeForServiceProvider()
|
| - if err := impl.shell.ConnectToApplication(remoteURL, &servicesRequest, &exposedServicesPointer); err != nil {
|
| - log.Printf("can't connect to %v: %v", remoteURL, err)
|
| - // In case of error message pipes sent through Shell are closed and
|
| - // the connection will work as if the remote application closed
|
| - // both ServiceProvider's pipes.
|
| - }
|
| - connection := newConnection(impl.url, &exposedServicesRequest, &servicesPointer, remoteURL)
|
| - impl.addConnection(connection)
|
| - return connection.ProvideServices(providedServices...)
|
| -}
|
| -
|
| -func (impl *ApplicationImpl) Close() {
|
| - impl.RequestQuit()
|
| -}
|
| -
|
| -// addConnection appends connections slice by a provided connection, removing
|
| -// connections that have been closed.
|
| -func (impl *ApplicationImpl) addConnection(c *Connection) {
|
| - impl.mu.Lock()
|
| - i := 0
|
| - for i < len(impl.connections) {
|
| - if impl.connections[i].isClosed {
|
| - last := len(impl.connections) - 1
|
| - impl.connections[i] = impl.connections[last]
|
| - impl.connections[last] = nil
|
| - impl.connections = impl.connections[:last]
|
| - } else {
|
| - i++
|
| - }
|
| - }
|
| - if !c.isClosed {
|
| - impl.connections = append(impl.connections, c)
|
| - }
|
| - impl.mu.Unlock()
|
| -}
|
|
|