chromium/out/Default/gen/components/page_load_metrics/common/page_load_metrics.mojom.h

// components/page_load_metrics/common/page_load_metrics.mojom.h is auto generated by mojom_bindings_generator.py, do not edit

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

#ifndef COMPONENTS_PAGE_LOAD_METRICS_COMMON_PAGE_LOAD_METRICS_MOJOM_H_
#define COMPONENTS_PAGE_LOAD_METRICS_COMMON_PAGE_LOAD_METRICS_MOJOM_H_

#include <stdint.h>

#include <limits>
#include <optional>
#include <type_traits>
#include <utility>

#include "base/types/cxx23_to_underlying.h"
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"

#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"

#include "components/page_load_metrics/common/page_load_metrics.mojom-features.h"  // IWYU pragma: export
#include "components/page_load_metrics/common/page_load_metrics.mojom-shared.h"  // IWYU pragma: export
#include "components/page_load_metrics/common/page_load_metrics.mojom-forward.h"  // IWYU pragma: export
#include "ui/gfx/geometry/mojom/geometry.mojom.h"
#include "mojo/public/mojom/base/shared_memory.mojom.h"
#include "mojo/public/mojom/base/time.mojom.h"
#include "third_party/blink/public/mojom/loader/javascript_framework_detection.mojom.h"
#include "services/network/public/mojom/request_priority.mojom.h"
#include "third_party/blink/public/mojom/use_counter/use_counter_feature.mojom.h"
#include <string>
#include <vector>

#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/lib/message_size_estimator.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"


#include "components/page_load_metrics/common/page_load_metrics_mojom_traits.h"




namespace page_load_metrics::mojom {

class PageLoadMetricsProxy;

template <typename ImplRefTraits>
class PageLoadMetricsStub;

class PageLoadMetricsRequestValidator;


class PageLoadMetrics
    : public PageLoadMetricsInterfaceBase {};



class  PageLoadMetricsProxy
    : public PageLoadMetrics {};
class  PageLoadMetricsStubDispatch {};

template <typename ImplRefTraits =
              mojo::RawPtrImplRefTraits<PageLoadMetrics>>
class PageLoadMetricsStub
    : public mojo::MessageReceiverWithResponderStatus {
 public:
  using ImplPointerType = typename ImplRefTraits::PointerType;

  PageLoadMetricsStub() = default;
  ~PageLoadMetricsStub() override = default;

  void set_sink(ImplPointerType sink) {}
  ImplPointerType& sink() {}

  bool Accept(mojo::Message* message) override {}

  bool AcceptWithResponder(
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {}

 private:
  ImplPointerType sink_;
};
class  PageLoadMetricsRequestValidator : public mojo::MessageReceiver {};

























class  UserInteractionLatencies {};





class  DocumentTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, DocumentTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, DocumentTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, DocumentTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, DocumentTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  LcpResourceLoadTimings {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, LcpResourceLoadTimings::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, LcpResourceLoadTimings::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, LcpResourceLoadTimings::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, LcpResourceLoadTimings::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  LargestContentfulPaintTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, LargestContentfulPaintTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, LargestContentfulPaintTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, LargestContentfulPaintTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, LargestContentfulPaintTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  PaintTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, PaintTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, PaintTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, PaintTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, PaintTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  ParseTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, ParseTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, ParseTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, ParseTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, ParseTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  InteractiveTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, InteractiveTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, InteractiveTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, InteractiveTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, InteractiveTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  CustomUserTimingMark {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CustomUserTimingMark::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, CustomUserTimingMark::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, CustomUserTimingMark::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, CustomUserTimingMark::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  DomainLookupTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, DomainLookupTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, DomainLookupTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, DomainLookupTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, DomainLookupTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  PageLoadTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, PageLoadTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, PageLoadTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, PageLoadTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, PageLoadTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  FrameMetadata {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, FrameMetadata::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, FrameMetadata::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, FrameMetadata::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, FrameMetadata::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  SubresourceLoadMetrics {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, SubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, SubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, SubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  ServiceWorkerSubresourceLoadMetrics {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, ServiceWorkerSubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, ServiceWorkerSubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, ServiceWorkerSubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, ServiceWorkerSubresourceLoadMetrics::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  ResourceDataUpdate {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, ResourceDataUpdate::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, ResourceDataUpdate::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, ResourceDataUpdate::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, ResourceDataUpdate::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  LayoutShift {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, LayoutShift::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, LayoutShift::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, LayoutShift::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, LayoutShift::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  FrameRenderDataUpdate {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, FrameRenderDataUpdate::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, FrameRenderDataUpdate::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, FrameRenderDataUpdate::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, FrameRenderDataUpdate::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  CpuTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CpuTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, CpuTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, CpuTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, CpuTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  InputTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, InputTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, InputTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, InputTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, InputTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  UserInteractionLatency {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, UserInteractionLatency::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, UserInteractionLatency::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, UserInteractionLatency::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, UserInteractionLatency::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  BackForwardCacheTiming {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, BackForwardCacheTiming::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, BackForwardCacheTiming::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, BackForwardCacheTiming::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, BackForwardCacheTiming::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}





class  SoftNavigationMetrics {};

// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SoftNavigationMetrics::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, SoftNavigationMetrics::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {}

template <typename T, SoftNavigationMetrics::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {}

template <typename T, SoftNavigationMetrics::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {}

template <typename UnionPtrType>
UserInteractionLatenciesPtr UserInteractionLatencies::Clone() const {}

template <typename T,
          typename std::enable_if<std::is_same<
              T, UserInteractionLatencies>::value>::type*>
bool UserInteractionLatencies::Equals(const T& other) const {}
template <typename StructPtrType>
DocumentTimingPtr DocumentTiming::Clone() const {}

template <typename T, DocumentTiming::EnableIfSame<T>*>
bool DocumentTiming::Equals(const T& other_struct) const {}

template <typename T, DocumentTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
LcpResourceLoadTimingsPtr LcpResourceLoadTimings::Clone() const {}

template <typename T, LcpResourceLoadTimings::EnableIfSame<T>*>
bool LcpResourceLoadTimings::Equals(const T& other_struct) const {}

template <typename T, LcpResourceLoadTimings::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
LargestContentfulPaintTimingPtr LargestContentfulPaintTiming::Clone() const {}

template <typename T, LargestContentfulPaintTiming::EnableIfSame<T>*>
bool LargestContentfulPaintTiming::Equals(const T& other_struct) const {}

template <typename T, LargestContentfulPaintTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
PaintTimingPtr PaintTiming::Clone() const {}

template <typename T, PaintTiming::EnableIfSame<T>*>
bool PaintTiming::Equals(const T& other_struct) const {}

template <typename T, PaintTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
ParseTimingPtr ParseTiming::Clone() const {}

template <typename T, ParseTiming::EnableIfSame<T>*>
bool ParseTiming::Equals(const T& other_struct) const {}

template <typename T, ParseTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
InteractiveTimingPtr InteractiveTiming::Clone() const {}

template <typename T, InteractiveTiming::EnableIfSame<T>*>
bool InteractiveTiming::Equals(const T& other_struct) const {}

template <typename T, InteractiveTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
CustomUserTimingMarkPtr CustomUserTimingMark::Clone() const {}

template <typename T, CustomUserTimingMark::EnableIfSame<T>*>
bool CustomUserTimingMark::Equals(const T& other_struct) const {}

template <typename T, CustomUserTimingMark::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
DomainLookupTimingPtr DomainLookupTiming::Clone() const {}

template <typename T, DomainLookupTiming::EnableIfSame<T>*>
bool DomainLookupTiming::Equals(const T& other_struct) const {}

template <typename T, DomainLookupTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
PageLoadTimingPtr PageLoadTiming::Clone() const {}

template <typename T, PageLoadTiming::EnableIfSame<T>*>
bool PageLoadTiming::Equals(const T& other_struct) const {}

template <typename T, PageLoadTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
FrameMetadataPtr FrameMetadata::Clone() const {}

template <typename T, FrameMetadata::EnableIfSame<T>*>
bool FrameMetadata::Equals(const T& other_struct) const {}

template <typename T, FrameMetadata::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
SubresourceLoadMetricsPtr SubresourceLoadMetrics::Clone() const {}

template <typename T, SubresourceLoadMetrics::EnableIfSame<T>*>
bool SubresourceLoadMetrics::Equals(const T& other_struct) const {}

template <typename T, SubresourceLoadMetrics::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
ServiceWorkerSubresourceLoadMetricsPtr ServiceWorkerSubresourceLoadMetrics::Clone() const {}

template <typename T, ServiceWorkerSubresourceLoadMetrics::EnableIfSame<T>*>
bool ServiceWorkerSubresourceLoadMetrics::Equals(const T& other_struct) const {}

template <typename T, ServiceWorkerSubresourceLoadMetrics::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
ResourceDataUpdatePtr ResourceDataUpdate::Clone() const {}

template <typename T, ResourceDataUpdate::EnableIfSame<T>*>
bool ResourceDataUpdate::Equals(const T& other_struct) const {}

template <typename T, ResourceDataUpdate::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
LayoutShiftPtr LayoutShift::Clone() const {}

template <typename T, LayoutShift::EnableIfSame<T>*>
bool LayoutShift::Equals(const T& other_struct) const {}

template <typename T, LayoutShift::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
FrameRenderDataUpdatePtr FrameRenderDataUpdate::Clone() const {}

template <typename T, FrameRenderDataUpdate::EnableIfSame<T>*>
bool FrameRenderDataUpdate::Equals(const T& other_struct) const {}

template <typename T, FrameRenderDataUpdate::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
CpuTimingPtr CpuTiming::Clone() const {}

template <typename T, CpuTiming::EnableIfSame<T>*>
bool CpuTiming::Equals(const T& other_struct) const {}

template <typename T, CpuTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
InputTimingPtr InputTiming::Clone() const {}

template <typename T, InputTiming::EnableIfSame<T>*>
bool InputTiming::Equals(const T& other_struct) const {}

template <typename T, InputTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
UserInteractionLatencyPtr UserInteractionLatency::Clone() const {}

template <typename T, UserInteractionLatency::EnableIfSame<T>*>
bool UserInteractionLatency::Equals(const T& other_struct) const {}

template <typename T, UserInteractionLatency::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
BackForwardCacheTimingPtr BackForwardCacheTiming::Clone() const {}

template <typename T, BackForwardCacheTiming::EnableIfSame<T>*>
bool BackForwardCacheTiming::Equals(const T& other_struct) const {}

template <typename T, BackForwardCacheTiming::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}
template <typename StructPtrType>
SoftNavigationMetricsPtr SoftNavigationMetrics::Clone() const {}

template <typename T, SoftNavigationMetrics::EnableIfSame<T>*>
bool SoftNavigationMetrics::Equals(const T& other_struct) const {}

template <typename T, SoftNavigationMetrics::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {}


}  // page_load_metrics::mojom

namespace mojo {


template <>
struct  StructTraits<::page_load_metrics::mojom::DocumentTiming::DataView,
                                         ::page_load_metrics::mojom::DocumentTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::LcpResourceLoadTimings::DataView,
                                         ::page_load_metrics::mojom::LcpResourceLoadTimingsPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::LargestContentfulPaintTiming::DataView,
                                         ::page_load_metrics::mojom::LargestContentfulPaintTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::PaintTiming::DataView,
                                         ::page_load_metrics::mojom::PaintTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::ParseTiming::DataView,
                                         ::page_load_metrics::mojom::ParseTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::InteractiveTiming::DataView,
                                         ::page_load_metrics::mojom::InteractiveTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::CustomUserTimingMark::DataView,
                                         ::page_load_metrics::mojom::CustomUserTimingMarkPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::DomainLookupTiming::DataView,
                                         ::page_load_metrics::mojom::DomainLookupTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::PageLoadTiming::DataView,
                                         ::page_load_metrics::mojom::PageLoadTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::FrameMetadata::DataView,
                                         ::page_load_metrics::mojom::FrameMetadataPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::SubresourceLoadMetrics::DataView,
                                         ::page_load_metrics::mojom::SubresourceLoadMetricsPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::ServiceWorkerSubresourceLoadMetrics::DataView,
                                         ::page_load_metrics::mojom::ServiceWorkerSubresourceLoadMetricsPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::ResourceDataUpdate::DataView,
                                         ::page_load_metrics::mojom::ResourceDataUpdatePtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::LayoutShift::DataView,
                                         ::page_load_metrics::mojom::LayoutShiftPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::FrameRenderDataUpdate::DataView,
                                         ::page_load_metrics::mojom::FrameRenderDataUpdatePtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::CpuTiming::DataView,
                                         ::page_load_metrics::mojom::CpuTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::InputTiming::DataView,
                                         ::page_load_metrics::mojom::InputTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::UserInteractionLatency::DataView,
                                         ::page_load_metrics::mojom::UserInteractionLatencyPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::BackForwardCacheTiming::DataView,
                                         ::page_load_metrics::mojom::BackForwardCacheTimingPtr> {};


template <>
struct  StructTraits<::page_load_metrics::mojom::SoftNavigationMetrics::DataView,
                                         ::page_load_metrics::mojom::SoftNavigationMetricsPtr> {};


template <>
struct  UnionTraits<::page_load_metrics::mojom::UserInteractionLatencies::DataView,
                                        ::page_load_metrics::mojom::UserInteractionLatenciesPtr> {};

}  // namespace mojo

#endif  // COMPONENTS_PAGE_LOAD_METRICS_COMMON_PAGE_LOAD_METRICS_MOJOM_H_