// Copyright 2019 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_NETWORK_PUBLIC_MOJOM_COOKIE_MANAGER_MOJOM_FORWARD_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_COOKIE_MANAGER_MOJOM_FORWARD_H_

#include <stdint.h>

#include "mojo/public/cpp/bindings/struct_ptr.h"

#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"


#include "mojo/public/cpp/bindings/lib/native_enum_serialization.h"
#include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"

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


namespace network {
namespace mojom {
class CookieManagerParamsDataView;

class CookieOptionsDataView;

class CanonicalCookieDataView;

class CookieWithStatusDataView;

class CookieAndLineWithStatusDataView;

class CookieDeletionFilterDataView;


enum class CookiePriority : int32_t;

enum class CookieSameSite : int32_t;

enum class CookieSameSiteContext : int32_t;

enum class CookieInclusionStatus : int32_t;

enum class CookieChangeCause : int32_t;

enum class CookieDeletionSessionControl : int32_t;
class CookieManagerParams;
using CookieManagerParamsPtr = mojo::StructPtr<CookieManagerParams>;

class CookieOptions;
using CookieOptionsPtr = mojo::StructPtr<CookieOptions>;

class CanonicalCookie;
using CanonicalCookiePtr = mojo::StructPtr<CanonicalCookie>;

class CookieWithStatus;
using CookieWithStatusPtr = mojo::StructPtr<CookieWithStatus>;

class CookieAndLineWithStatus;
using CookieAndLineWithStatusPtr = mojo::StructPtr<CookieAndLineWithStatus>;

class CookieDeletionFilter;
using CookieDeletionFilterPtr = mojo::StructPtr<CookieDeletionFilter>;

class CookieChangeListener;

// @generated_from: network.mojom.CookieChangeListener
using CookieChangeListenerPtr = mojo::InterfacePtr<CookieChangeListener>;
using CookieChangeListenerPtrInfo = mojo::InterfacePtrInfo<CookieChangeListener>;
using ThreadSafeCookieChangeListenerPtr =
    mojo::ThreadSafeInterfacePtr<CookieChangeListener>;

// @generated_from: network.mojom.CookieChangeListener
using CookieChangeListenerRequest = mojo::InterfaceRequest<CookieChangeListener>;

// @generated_from: network.mojom.CookieChangeListener
using CookieChangeListenerAssociatedPtr =
    mojo::AssociatedInterfacePtr<CookieChangeListener>;
using ThreadSafeCookieChangeListenerAssociatedPtr =
    mojo::ThreadSafeAssociatedInterfacePtr<CookieChangeListener>;
using CookieChangeListenerAssociatedPtrInfo =
    mojo::AssociatedInterfacePtrInfo<CookieChangeListener>;

// @generated_from: network.mojom.CookieChangeListener
using CookieChangeListenerAssociatedRequest =
    mojo::AssociatedInterfaceRequest<CookieChangeListener>;

class CookieManager;

// @generated_from: network.mojom.CookieManager
using CookieManagerPtr = mojo::InterfacePtr<CookieManager>;
using CookieManagerPtrInfo = mojo::InterfacePtrInfo<CookieManager>;
using ThreadSafeCookieManagerPtr =
    mojo::ThreadSafeInterfacePtr<CookieManager>;

// @generated_from: network.mojom.CookieManager
using CookieManagerRequest = mojo::InterfaceRequest<CookieManager>;

// @generated_from: network.mojom.CookieManager
using CookieManagerAssociatedPtr =
    mojo::AssociatedInterfacePtr<CookieManager>;
using ThreadSafeCookieManagerAssociatedPtr =
    mojo::ThreadSafeAssociatedInterfacePtr<CookieManager>;
using CookieManagerAssociatedPtrInfo =
    mojo::AssociatedInterfacePtrInfo<CookieManager>;

// @generated_from: network.mojom.CookieManager
using CookieManagerAssociatedRequest =
    mojo::AssociatedInterfaceRequest<CookieManager>;




}  // namespace mojom
}  // namespace network
#include "ipc/ipc_message_utils.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_constants.h"
#include "net/cookies/cookie_options.h"

#endif  // SERVICES_NETWORK_PUBLIC_MOJOM_COOKIE_MANAGER_MOJOM_FORWARD_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjUxMywgImJlZ2luIjogMjQ5MCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llQ2hhbmdlTGlzdGVu
ZXIifX0sIHsiZW5kIjogMjg3MywgImJlZ2luIjogMjg1MywgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llQ2hhbmdlTGlzdGVuZXIi
fX0sIHsiZW5kIjogMzUwOSwgImJlZ2luIjogMzQ5MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llTWFuYWdlciJ9fSwgeyJlbmQi
OiAzODEzLCAiYmVnaW4iOiAzODAwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVNYW5hZ2VyIn19XSwgInR5cGUiOiAia3l0aGUw
In0=
*/