aboutsummaryrefslogtreecommitdiff
path: root/mojo/edk/system/dispatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/edk/system/dispatcher.h')
-rw-r--r--mojo/edk/system/dispatcher.h245
1 files changed, 0 insertions, 245 deletions
diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h
deleted file mode 100644
index db1f1f1..0000000
--- a/mojo/edk/system/dispatcher.h
+++ /dev/null
@@ -1,245 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef MOJO_EDK_SYSTEM_DISPATCHER_H_
-#define MOJO_EDK_SYSTEM_DISPATCHER_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <ostream>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/synchronization/lock.h"
-#include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/platform_shared_buffer.h"
-#include "mojo/edk/system/handle_signals_state.h"
-#include "mojo/edk/system/ports/name.h"
-#include "mojo/edk/system/system_impl_export.h"
-#include "mojo/edk/system/watch.h"
-#include "mojo/public/c/system/buffer.h"
-#include "mojo/public/c/system/data_pipe.h"
-#include "mojo/public/c/system/message_pipe.h"
-#include "mojo/public/c/system/types.h"
-
-namespace mojo {
-namespace edk {
-
-class Dispatcher;
-class MessageForTransit;
-
-using DispatcherVector = std::vector<scoped_refptr<Dispatcher>>;
-
-// A |Dispatcher| implements Mojo EDK calls that are associated with a
-// particular MojoHandle.
-class MOJO_SYSTEM_IMPL_EXPORT Dispatcher
- : public base::RefCountedThreadSafe<Dispatcher> {
- public:
- struct DispatcherInTransit {
- DispatcherInTransit();
- DispatcherInTransit(const DispatcherInTransit& other);
- ~DispatcherInTransit();
-
- scoped_refptr<Dispatcher> dispatcher;
- MojoHandle local_handle;
- };
-
- enum class Type {
- UNKNOWN = 0,
- MESSAGE_PIPE,
- DATA_PIPE_PRODUCER,
- DATA_PIPE_CONSUMER,
- SHARED_BUFFER,
- WATCHER,
-
- // "Private" types (not exposed via the public interface):
- PLATFORM_HANDLE = -1,
- };
-
- // All Dispatchers must minimally implement these methods.
-
- virtual Type GetType() const = 0;
- virtual MojoResult Close() = 0;
-
- ///////////// Watcher API ////////////////////
-
- virtual MojoResult WatchDispatcher(scoped_refptr<Dispatcher> dispatcher,
- MojoHandleSignals signals,
- uintptr_t context);
- virtual MojoResult CancelWatch(uintptr_t context);
- virtual MojoResult Arm(uint32_t* num_ready_contexts,
- uintptr_t* ready_contexts,
- MojoResult* ready_results,
- MojoHandleSignalsState* ready_signals_states);
-
- ///////////// Message pipe API /////////////
-
- virtual MojoResult WriteMessage(std::unique_ptr<MessageForTransit> message,
- MojoWriteMessageFlags flags);
-
- virtual MojoResult ReadMessage(std::unique_ptr<MessageForTransit>* message,
- uint32_t* num_bytes,
- MojoHandle* handles,
- uint32_t* num_handles,
- MojoReadMessageFlags flags,
- bool read_any_size);
-
- ///////////// Shared buffer API /////////////
-
- // |options| may be null. |new_dispatcher| must not be null, but
- // |*new_dispatcher| should be null (and will contain the dispatcher for the
- // new handle on success).
- virtual MojoResult DuplicateBufferHandle(
- const MojoDuplicateBufferHandleOptions* options,
- scoped_refptr<Dispatcher>* new_dispatcher);
-
- virtual MojoResult MapBuffer(
- uint64_t offset,
- uint64_t num_bytes,
- MojoMapBufferFlags flags,
- std::unique_ptr<PlatformSharedBufferMapping>* mapping);
-
- ///////////// Data pipe consumer API /////////////
-
- virtual MojoResult ReadData(void* elements,
- uint32_t* num_bytes,
- MojoReadDataFlags flags);
-
- virtual MojoResult BeginReadData(const void** buffer,
- uint32_t* buffer_num_bytes,
- MojoReadDataFlags flags);
-
- virtual MojoResult EndReadData(uint32_t num_bytes_read);
-
- ///////////// Data pipe producer API /////////////
-
- virtual MojoResult WriteData(const void* elements,
- uint32_t* num_bytes,
- MojoWriteDataFlags flags);
-
- virtual MojoResult BeginWriteData(void** buffer,
- uint32_t* buffer_num_bytes,
- MojoWriteDataFlags flags);
-
- virtual MojoResult EndWriteData(uint32_t num_bytes_written);
-
- ///////////// Wait set API /////////////
-
- // Adds a dispatcher to wait on. When the dispatcher satisfies |signals|, it
- // will be returned in the next call to |GetReadyDispatchers()|. If
- // |dispatcher| has been added, it must be removed before adding again,
- // otherwise |MOJO_RESULT_ALREADY_EXISTS| will be returned.
- virtual MojoResult AddWaitingDispatcher(
- const scoped_refptr<Dispatcher>& dispatcher,
- MojoHandleSignals signals,
- uintptr_t context);
-
- // Removes a dispatcher to wait on. If |dispatcher| has not been added,
- // |MOJO_RESULT_NOT_FOUND| will be returned.
- virtual MojoResult RemoveWaitingDispatcher(
- const scoped_refptr<Dispatcher>& dispatcher);
-
- // Returns a set of ready dispatchers. |*count| is the maximum number of
- // dispatchers to return, and will contain the number of dispatchers returned
- // in |dispatchers| on completion.
- virtual MojoResult GetReadyDispatchers(uint32_t* count,
- DispatcherVector* dispatchers,
- MojoResult* results,
- uintptr_t* contexts);
-
- ///////////// General-purpose API for all handle types /////////
-
- // Gets the current handle signals state. (The default implementation simply
- // returns a default-constructed |HandleSignalsState|, i.e., no signals
- // satisfied or satisfiable.) Note: The state is subject to change from other
- // threads.
- virtual HandleSignalsState GetHandleSignalsState() const;
-
- // Adds a WatcherDispatcher reference to this dispatcher, to be notified of
- // all subsequent changes to handle state including signal changes or closure.
- // The reference is associated with a |context| for disambiguation of
- // removals.
- virtual MojoResult AddWatcherRef(
- const scoped_refptr<WatcherDispatcher>& watcher,
- uintptr_t context);
-
- // Removes a WatcherDispatcher reference from this dispatcher.
- virtual MojoResult RemoveWatcherRef(WatcherDispatcher* watcher,
- uintptr_t context);
-
- // Informs the caller of the total serialized size (in bytes) and the total
- // number of platform handles and ports needed to transfer this dispatcher
- // across a message pipe.
- //
- // Must eventually be followed by a call to EndSerializeAndClose(). Note that
- // StartSerialize() and EndSerialize() are always called in sequence, and
- // only between calls to BeginTransit() and either (but not both)
- // CompleteTransitAndClose() or CancelTransit().
- //
- // For this reason it is IMPERATIVE that the implementation ensure a
- // consistent serializable state between BeginTransit() and
- // CompleteTransitAndClose()/CancelTransit().
- virtual void StartSerialize(uint32_t* num_bytes,
- uint32_t* num_ports,
- uint32_t* num_platform_handles);
-
- // Serializes this dispatcher into |destination|, |ports|, and |handles|.
- // Returns true iff successful, false otherwise. In either case the dispatcher
- // will close.
- //
- // NOTE: Transit MAY still fail after this call returns. Implementations
- // should not assume PlatformHandle ownership has transferred until
- // CompleteTransitAndClose() is called. In other words, if CancelTransit() is
- // called, the implementation should retain its PlatformHandles in working
- // condition.
- virtual bool EndSerialize(void* destination,
- ports::PortName* ports,
- PlatformHandle* handles);
-
- // Does whatever is necessary to begin transit of the dispatcher. This
- // should return |true| if transit is OK, or false if the underlying resource
- // is deemed busy by the implementation.
- virtual bool BeginTransit();
-
- // Does whatever is necessary to complete transit of the dispatcher, including
- // closure. This is only called upon successfully transmitting an outgoing
- // message containing this serialized dispatcher.
- virtual void CompleteTransitAndClose();
-
- // Does whatever is necessary to cancel transit of the dispatcher. The
- // dispatcher should remain in a working state and resume normal operation.
- virtual void CancelTransit();
-
- // Deserializes a specific dispatcher type from an incoming message.
- static scoped_refptr<Dispatcher> Deserialize(
- Type type,
- const void* bytes,
- size_t num_bytes,
- const ports::PortName* ports,
- size_t num_ports,
- PlatformHandle* platform_handles,
- size_t num_platform_handles);
-
- protected:
- friend class base::RefCountedThreadSafe<Dispatcher>;
-
- Dispatcher();
- virtual ~Dispatcher();
-
- DISALLOW_COPY_AND_ASSIGN(Dispatcher);
-};
-
-// So logging macros and |DCHECK_EQ()|, etc. work.
-MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(std::ostream& out,
- Dispatcher::Type type) {
- return out << static_cast<int>(type);
-}
-
-} // namespace edk
-} // namespace mojo
-
-#endif // MOJO_EDK_SYSTEM_DISPATCHER_H_