// third_party/blink/public/mojom/messaging/transferable_message.mojom-send-validation.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_PUBLIC_MOJOM_MESSAGING_TRANSFERABLE_MESSAGE_MOJOM_SEND_VALIDATION_H_
#define THIRD_PARTY_BLINK_PUBLIC_MOJOM_MESSAGING_TRANSFERABLE_MESSAGE_MOJOM_SEND_VALIDATION_H_

#include "third_party/blink/public/mojom/messaging/transferable_message.mojom-shared-internal.h"
#include "third_party/blink/public/mojom/array_buffer/array_buffer_contents.mojom-shared.h"
#include "third_party/blink/public/mojom/blob/serialized_blob.mojom-shared.h"
#include "third_party/blink/public/mojom/messaging/cloneable_message.mojom-shared.h"
#include "third_party/blink/public/mojom/messaging/delegated_capability.mojom-shared.h"
#include "third_party/blink/public/mojom/messaging/message_port_descriptor.mojom-shared.h"
#include "third_party/blink/public/mojom/messaging/user_activation_snapshot.mojom-shared.h"
#include "third_party/blink/public/mojom/messaging/task_attribution_id.mojom-shared.h"
#include "third_party/blink/public/mojom/messaging/static_bitmap_image.mojom-shared.h"

#include "third_party/blink/public/mojom/messaging/transferable_message.mojom-data-view.h"

#include "mojo/public/cpp/bindings/lib/send_validation_type.h"
#include "mojo/public/cpp/bindings/lib/send_validation.h"

namespace mojo::internal {

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::blink::mojom::TransferableMessageDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::blink::mojom::TransferableMessageDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::blink::mojom::internal::TransferableMessage_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      decltype(Traits::message(input)) in_message = Traits::message(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->message)::BaseType> message_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::blink::mojom::CloneableMessageDataView, send_validation>(
        in_message,
        message_fragment);

      fragment->message.Set(
          message_fragment.is_null() ? nullptr : message_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->message.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null message in TransferableMessage struct");

      decltype(Traits::ports(input)) in_ports = Traits::ports(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->ports)::BaseType>
          ports_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& ports_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::blink::mojom::MessagePortDescriptorDataView>, send_validation>(
        in_ports,
        ports_fragment,
        &ports_validate_params);

      fragment->ports.Set(
          ports_fragment.is_null() ? nullptr : ports_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->ports.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null ports in TransferableMessage struct");

      decltype(Traits::stream_channels(input)) in_stream_channels = Traits::stream_channels(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->stream_channels)::BaseType>
          stream_channels_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& stream_channels_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::blink::mojom::MessagePortDescriptorDataView>, send_validation>(
        in_stream_channels,
        stream_channels_fragment,
        &stream_channels_validate_params);

      fragment->stream_channels.Set(
          stream_channels_fragment.is_null() ? nullptr : stream_channels_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->stream_channels.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null stream_channels in TransferableMessage struct");

      decltype(Traits::array_buffer_contents_array(input)) in_array_buffer_contents_array = Traits::array_buffer_contents_array(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->array_buffer_contents_array)::BaseType>
          array_buffer_contents_array_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& array_buffer_contents_array_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::blink::mojom::SerializedArrayBufferContentsDataView>, send_validation>(
        in_array_buffer_contents_array,
        array_buffer_contents_array_fragment,
        &array_buffer_contents_array_validate_params);

      fragment->array_buffer_contents_array.Set(
          array_buffer_contents_array_fragment.is_null() ? nullptr : array_buffer_contents_array_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->array_buffer_contents_array.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null array_buffer_contents_array in TransferableMessage struct");

      decltype(Traits::image_bitmap_contents_array(input)) in_image_bitmap_contents_array = Traits::image_bitmap_contents_array(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->image_bitmap_contents_array)::BaseType>
          image_bitmap_contents_array_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& image_bitmap_contents_array_validate_params =
          mojo::internal::GetArrayValidator<0, false, nullptr>();
      
      mojo::internal::Serialize<mojo::ArrayDataView<::blink::mojom::SerializedStaticBitmapImageDataView>, send_validation>(
        in_image_bitmap_contents_array,
        image_bitmap_contents_array_fragment,
        &image_bitmap_contents_array_validate_params);

      fragment->image_bitmap_contents_array.Set(
          image_bitmap_contents_array_fragment.is_null() ? nullptr : image_bitmap_contents_array_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->image_bitmap_contents_array.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null image_bitmap_contents_array in TransferableMessage struct");

      decltype(Traits::user_activation(input)) in_user_activation = Traits::user_activation(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->user_activation)::BaseType> user_activation_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::blink::mojom::UserActivationSnapshotDataView, send_validation>(
        in_user_activation,
        user_activation_fragment);

      fragment->user_activation.Set(
          user_activation_fragment.is_null() ? nullptr : user_activation_fragment.data());

      
      mojo::internal::Serialize<::blink::mojom::DelegatedCapability>(
        Traits::delegated_capability(input),
        &fragment->delegated_capability);

      decltype(Traits::task_state_id(input)) in_task_state_id = Traits::task_state_id(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->task_state_id)::BaseType> task_state_id_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::blink::mojom::TaskAttributionIdDataView, send_validation>(
        in_task_state_id,
        task_state_id_fragment);

      fragment->task_state_id.Set(
          task_state_id_fragment.is_null() ? nullptr : task_state_id_fragment.data());
  }
};

}  // namespace mojo::internal

#endif  // THIRD_PARTY_BLINK_PUBLIC_MOJOM_MESSAGING_TRANSFERABLE_MESSAGE_MOJOM_SEND_VALIDATION_H_