// services/device/public/mojom/geolocation_context.mojom-blink.h is auto generated by mojom_bindings_generator.py, do not edit

// 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 SERVICES_DEVICE_PUBLIC_MOJOM_GEOLOCATION_CONTEXT_MOJOM_BLINK_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_GEOLOCATION_CONTEXT_MOJOM_BLINK_H_

#include <stdint.h>

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

#include "third_party/abseil-cpp/absl/types/optional.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 "services/device/public/mojom/geolocation_context.mojom-shared.h"
#include "services/device/public/mojom/geolocation_context.mojom-blink-forward.h"
#include "services/device/public/mojom/geolocation.mojom-blink-forward.h"
#include "services/device/public/mojom/geoposition.mojom-blink-forward.h"
#include "url/mojom/url.mojom-blink.h"

#include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h"
#include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

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


#include "third_party/blink/public/platform/web_common.h"

#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif


namespace device {
namespace mojom {
namespace blink {

class GeolocationContextProxy;

template <typename ImplRefTraits>
class GeolocationContextStub;

class GeolocationContextRequestValidator;


// @generated_from: device.mojom.GeolocationContext
class BLINK_PLATFORM_EXPORT GeolocationContext
    : public GeolocationContextInterfaceBase {
 public:
  static const char Name_[];
  static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
  static const char* MessageToMethodName_(mojo::Message& message);
  static constexpr uint32_t Version_ = 0;
  static constexpr bool PassesAssociatedKinds_ = false;
  static constexpr bool HasSyncMethods_ = false;
  static constexpr bool HasUninterruptableMethods_ = false;

  using Base_ = GeolocationContextInterfaceBase;
  using Proxy_ = GeolocationContextProxy;

  template <typename ImplRefTraits>
  using Stub_ = GeolocationContextStub<ImplRefTraits>;

  using RequestValidator_ = GeolocationContextRequestValidator;
  using ResponseValidator_ = mojo::PassThroughFilter;
  enum MethodMinVersions : uint32_t {
    kBindGeolocationMinVersion = 0,
    kSetOverrideMinVersion = 0,
    kClearOverrideMinVersion = 0,
  };

// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
  struct BindGeolocation_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetOverride_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ClearOverride_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~GeolocationContext() = default;

  
// @generated_from: device.mojom.GeolocationContext.BindGeolocation
  virtual void BindGeolocation(::mojo::PendingReceiver<::device::mojom::blink::Geolocation> receiver, const ::blink::KURL& origin) = 0;

  
// @generated_from: device.mojom.GeolocationContext.SetOverride
  virtual void SetOverride(::device::mojom::blink::GeopositionPtr geoposition) = 0;

  
// @generated_from: device.mojom.GeolocationContext.ClearOverride
  virtual void ClearOverride() = 0;
};



// @generated_from: device.mojom.GeolocationContext
class BLINK_PLATFORM_EXPORT GeolocationContextProxy
    : public GeolocationContext {
 public:
  using InterfaceType = GeolocationContext;

  explicit GeolocationContextProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: device.mojom.GeolocationContext.BindGeolocation
  void BindGeolocation(::mojo::PendingReceiver<::device::mojom::blink::Geolocation> receiver, const ::blink::KURL& origin) final;
  
// @generated_from: device.mojom.GeolocationContext.SetOverride
  void SetOverride(::device::mojom::blink::GeopositionPtr geoposition) final;
  
// @generated_from: device.mojom.GeolocationContext.ClearOverride
  void ClearOverride() final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};
class BLINK_PLATFORM_EXPORT GeolocationContextStubDispatch {
 public:
  static bool Accept(GeolocationContext* impl, mojo::Message* message);
  static bool AcceptWithResponder(
      GeolocationContext* impl,
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};

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

  GeolocationContextStub() = default;
  ~GeolocationContextStub() override = default;

  void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
  ImplPointerType& sink() { return sink_; }

  bool Accept(mojo::Message* message) override {
    if (ImplRefTraits::IsNull(sink_))
      return false;
    return GeolocationContextStubDispatch::Accept(
        ImplRefTraits::GetRawPointer(&sink_), message);
  }

  bool AcceptWithResponder(
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
    if (ImplRefTraits::IsNull(sink_))
      return false;
    return GeolocationContextStubDispatch::AcceptWithResponder(
        ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
  }

 private:
  ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT GeolocationContextRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};





}  // namespace blink
}  // namespace mojom
}  // namespace device

namespace mojo {

}  // namespace mojo

#endif  // SERVICES_DEVICE_PUBLIC_MOJOM_GEOLOCATION_CONTEXT_MOJOM_BLINK_H_

/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjE0MCwgImJlZ2luIjogMjEyMiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5HZW9sb2NhdGlvbkNvbnRleHQi
fX0sIHsiZW5kIjogMzU4MiwgImJlZ2luIjogMzU2NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5HZW9sb2NhdGlvbkNvbnRleHQuQmluZEdl
b2xvY2F0aW9uIn19LCB7ImVuZCI6IDM3ODIsICJiZWdpbiI6IDM3NzEsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uR2VvbG9jYXRpb25Db250
ZXh0LlNldE92ZXJyaWRlIn19LCB7ImVuZCI6IDM5MzgsICJiZWdpbiI6IDM5MjUsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uR2VvbG9jYXRp
b25Db250ZXh0LkNsZWFyT3ZlcnJpZGUifX0sIHsiZW5kIjogNDMxOSwgImJlZ2luIjogNDMwNCwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5H
ZW9sb2NhdGlvbkNvbnRleHQuQmluZEdlb2xvY2F0aW9uIn19LCB7ImVuZCI6IDQ1MTIsICJiZWdp
biI6IDQ1MDEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZp
Y2UubW9qb20uR2VvbG9jYXRpb25Db250ZXh0LlNldE92ZXJyaWRlIn19LCB7ImVuZCI6IDQ2NjEs
ICJiZWdpbiI6IDQ2NDgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uR2VvbG9jYXRpb25Db250ZXh0LkNsZWFyT3ZlcnJpZGUifX1dLCAidHlw
ZSI6ICJreXRoZTAifQ==
*/