1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // 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>
- #include "base/component_export.h"
- #include "base/memory/raw_ptr_exclusion.h"
- namespace mojo {
- namespace core {
- namespace ports {
- // 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 COMPONENT_EXPORT(MOJO_CORE_PORTS) UserMessage {
- public:
- struct TypeInfo {};
- explicit UserMessage(const TypeInfo* type_info);
- UserMessage(const UserMessage&) = delete;
- UserMessage& operator=(const UserMessage&) = delete;
- virtual ~UserMessage();
- const TypeInfo* type_info() const { return type_info_; }
- // Invoked immediately before the system asks the embedder to forward this
- // message to an external node.
- //
- // 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();
- // Returns the size in bytes of this message iff it's serialized. Zero
- // otherwise.
- virtual size_t GetSizeIfSerialized() const;
- private:
- // `type_info_` is not a raw_ptr<...> for performance reasons (based on
- // analysis of sampling profiler data and tab_search:top100:2020).
- RAW_PTR_EXCLUSION const TypeInfo* const type_info_;
- };
- } // namespace ports
- } // namespace core
- } // namespace mojo
- #endif // MOJO_CORE_PORTS_USER_MESSAGE_H_
|