summaryrefslogtreecommitdiffstats
path: root/ipc/chromium/src/mojo/core/ports/user_message.h
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/chromium/src/mojo/core/ports/user_message.h')
-rw-r--r--ipc/chromium/src/mojo/core/ports/user_message.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/ipc/chromium/src/mojo/core/ports/user_message.h b/ipc/chromium/src/mojo/core/ports/user_message.h
new file mode 100644
index 0000000000..85c03a9557
--- /dev/null
+++ b/ipc/chromium/src/mojo/core/ports/user_message.h
@@ -0,0 +1,62 @@
+// Copyright 2017 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_CORE_PORTS_USER_MESSAGE_H_
+#define MOJO_CORE_PORTS_USER_MESSAGE_H_
+
+#include <stddef.h>
+
+namespace mojo {
+namespace core {
+namespace ports {
+
+class UserMessageEvent;
+
+// Base type to use for any embedder-defined user message implementation. This
+// class is intentionally empty.
+//
+// Provides a bit of type-safety help to subclasses since by design downcasting
+// from this type is a common operation in embedders.
+//
+// Each subclass should define a static const instance of TypeInfo named
+// |kUserMessageTypeInfo| and pass its address down to the UserMessage
+// constructor. The type of a UserMessage can then be dynamically inspected by
+// comparing |type_info()| to any subclass's |&kUserMessageTypeInfo|.
+class UserMessage {
+ public:
+ struct TypeInfo {};
+
+ explicit UserMessage(const TypeInfo* type_info);
+ virtual ~UserMessage();
+
+ UserMessage(const UserMessage&) = delete;
+ void operator=(const UserMessage&) = delete;
+
+ const TypeInfo* type_info() const { return type_info_; }
+
+ // Invoked immediately before the system asks the embedder to forward this
+ // message to an external node.
+ //
+ // The UserMessageEvent is passed in to allow ports and other such values to
+ // be attached to the message before it is sent externally, in case late
+ // serialization is performed.
+ //
+ // Returns |true| if the message is OK to route externally, or |false|
+ // otherwise. Returning |false| implies an unrecoverable condition, and the
+ // message event will be destroyed without further routing.
+ virtual bool WillBeRoutedExternally(UserMessageEvent& event);
+
+ // Returns the size in bytes of this message iff it's serialized. Zero
+ // otherwise.
+ virtual size_t GetSizeIfSerialized() const;
+
+ private:
+ const TypeInfo* const type_info_;
+};
+
+} // namespace ports
+} // namespace core
+} // namespace mojo
+
+#endif // MOJO_CORE_PORTS_USER_MESSAGE_H_