| Index: third_party/mojo/src/mojo/public/go/bindings/interface.go
|
| diff --git a/third_party/mojo/src/mojo/public/go/bindings/interface.go b/third_party/mojo/src/mojo/public/go/bindings/interface.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..03ab791d844989eb8adbac0844f8d19f9397297f
|
| --- /dev/null
|
| +++ b/third_party/mojo/src/mojo/public/go/bindings/interface.go
|
| @@ -0,0 +1,60 @@
|
| +// 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 bindings
|
| +
|
| +import (
|
| + "mojo/public/go/system"
|
| +)
|
| +
|
| +// messagePipeHandleOwner owns a message pipe handle, it can only pass it
|
| +// invalidating itself or close it.
|
| +type messagePipeHandleOwner struct {
|
| + handle system.MessagePipeHandle
|
| +}
|
| +
|
| +// PassMessagePipe passes ownership of the underlying message pipe handle to
|
| +// the newly created handle object, invalidating the underlying handle object
|
| +// in the process.
|
| +func (o *messagePipeHandleOwner) PassMessagePipe() system.MessagePipeHandle {
|
| + if o.handle == nil {
|
| + return &InvalidHandle{}
|
| + }
|
| + return o.handle.ToUntypedHandle().ToMessagePipeHandle()
|
| +}
|
| +
|
| +// Close closes the underlying handle.
|
| +func (o *messagePipeHandleOwner) Close() {
|
| + if o.handle != nil {
|
| + o.handle.Close()
|
| + }
|
| +}
|
| +
|
| +// InterfaceRequest represents a request from a remote client for an
|
| +// implementation of mojo interface over a specified message pipe. The
|
| +// implementor of the interface should remove the message pipe by calling
|
| +// PassMessagePipe() and attach it to the implementation.
|
| +type InterfaceRequest struct {
|
| + messagePipeHandleOwner
|
| +}
|
| +
|
| +// InterfacePointer owns a message pipe handle with an implementation of mojo
|
| +// interface attached to the other end of the message pipe. The client of the
|
| +// interface should remove the message pipe by calling PassMessagePipe() and
|
| +// attach it to the proxy.
|
| +type InterfacePointer struct {
|
| + messagePipeHandleOwner
|
| +}
|
| +
|
| +// CreateMessagePipeForInterface creates a message pipe with interface request
|
| +// on one end and interface pointer on the other end. The interface request
|
| +// should be attached to appropriate mojo interface implementation and
|
| +// the interface pointer should be attached to mojo interface proxy.
|
| +func CreateMessagePipeForMojoInterface() (InterfaceRequest, InterfacePointer) {
|
| + r, h0, h1 := system.GetCore().CreateMessagePipe(nil)
|
| + if r != system.MOJO_RESULT_OK {
|
| + panic("can't create a message pipe")
|
| + }
|
| + return InterfaceRequest{messagePipeHandleOwner{h0}}, InterfacePointer{messagePipeHandleOwner{h1}}
|
| +}
|
|
|