//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Networking.Sockets.idl";
import "Windows.Security.Credentials.idl";
import "Windows.Security.Cryptography.Certificates.idl";
import "Windows.System.idl";
import "Windows.Web.Http.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        runtimeclass Deferral;

        interface IClosable;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace Sockets
        {
            typedef enum SocketSslErrorSeverity SocketSslErrorSeverity;
        }
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Credentials
        {
            runtimeclass PasswordCredential;
        }
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Cryptography
        {
            namespace Certificates
            {
                runtimeclass Certificate;

                typedef enum ChainValidationResult ChainValidationResult;
            }
        }
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace Web
    {
        namespace Http
        {
            runtimeclass HttpCookieManager;

            typedef struct HttpProgress HttpProgress;

            runtimeclass HttpRequestMessage;

            runtimeclass HttpResponseMessage;

            typedef enum HttpVersion HttpVersion;
        }
    }
}
namespace Windows
{
    namespace Web
    {
        namespace Http
        {
            namespace Filters
            {
                typedef enum HttpCacheReadBehavior HttpCacheReadBehavior;

                typedef enum HttpCacheWriteBehavior HttpCacheWriteBehavior;

                typedef enum HttpCookieUsageBehavior HttpCookieUsageBehavior;

                interface IHttpBaseProtocolFilter;

                interface IHttpBaseProtocolFilter2;

                interface IHttpBaseProtocolFilter3;

                interface IHttpBaseProtocolFilter4;

                interface IHttpBaseProtocolFilter5;

                interface IHttpBaseProtocolFilterStatics;

                interface IHttpCacheControl;

                interface IHttpFilter;

                interface IHttpServerCustomValidationRequestedEventArgs;

                runtimeclass HttpBaseProtocolFilter;

                runtimeclass HttpCacheControl;

                runtimeclass HttpServerCustomValidationRequestedEventArgs;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Web
    {
        namespace Http
        {
            namespace Filters
            {
                declare
                {
                    interface Windows.Foundation.TypedEventHandler<Windows.Web.Http.Filters.HttpBaseProtocolFilter*, Windows.Web.Http.Filters.HttpServerCustomValidationRequestedEventArgs*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Web
    {
        namespace Http
        {
            namespace Filters
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum HttpCacheReadBehavior
                {
                    Default       = 0,
                    MostRecent    = 1,
                    OnlyFromCache = 2,
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    NoCache       = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum HttpCacheWriteBehavior
                {
                    Default = 0,
                    NoCache = 1
                };

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                enum HttpCookieUsageBehavior
                {
                    Default   = 0,
                    NoCookies = 1
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpBaseProtocolFilter)]
                [uuid(71C89B09-E131-4B54-A53C-EB43FF37E9BB)]
                interface IHttpBaseProtocolFilter : IInspectable
                {
                    [propget] HRESULT AllowAutoRedirect([out] [retval] boolean* value);
                    [propput] HRESULT AllowAutoRedirect([in] boolean value);
                    [propget] HRESULT AllowUI([out] [retval] boolean* value);
                    [propput] HRESULT AllowUI([in] boolean value);
                    [propget] HRESULT AutomaticDecompression([out] [retval] boolean* value);
                    [propput] HRESULT AutomaticDecompression([in] boolean value);
                    [propget] HRESULT CacheControl([out] [retval] Windows.Web.Http.Filters.HttpCacheControl** value);
                    [propget] HRESULT CookieManager([out] [retval] Windows.Web.Http.HttpCookieManager** value);
                    [propget] HRESULT ClientCertificate([out] [retval] Windows.Security.Cryptography.Certificates.Certificate** value);
                    [propput] HRESULT ClientCertificate([in] Windows.Security.Cryptography.Certificates.Certificate* value);
                    [propget] HRESULT IgnorableServerCertificateErrors([out] [retval] Windows.Foundation.Collections.IVector<Windows.Security.Cryptography.Certificates.ChainValidationResult>** value);
                    [propget] HRESULT MaxConnectionsPerServer([out] [retval] UINT32* value);
                    [propput] HRESULT MaxConnectionsPerServer([in] UINT32 value);
                    [propget] HRESULT ProxyCredential([out] [retval] Windows.Security.Credentials.PasswordCredential** value);
                    [propput] HRESULT ProxyCredential([in] Windows.Security.Credentials.PasswordCredential* value);
                    [propget] HRESULT ServerCredential([out] [retval] Windows.Security.Credentials.PasswordCredential** value);
                    [propput] HRESULT ServerCredential([in] Windows.Security.Credentials.PasswordCredential* value);
                    [propget] HRESULT UseProxy([out] [retval] boolean* value);
                    [propput] HRESULT UseProxy([in] boolean value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpBaseProtocolFilter)]
                [uuid(2EC30013-9427-4900-A017-FA7DA3B5C9AE)]
                interface IHttpBaseProtocolFilter2 : IInspectable
                {
                    [propget] HRESULT MaxVersion([out] [retval] Windows.Web.Http.HttpVersion* value);
                    [propput] HRESULT MaxVersion([in] Windows.Web.Http.HttpVersion value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 2.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpBaseProtocolFilter)]
                [uuid(D43F4D4C-BD42-43AE-8717-AD2C8F4B2937)]
                interface IHttpBaseProtocolFilter3 : IInspectable
                {
                    [propget] HRESULT CookieUsageBehavior([out] [retval] Windows.Web.Http.Filters.HttpCookieUsageBehavior* value);
                    [propput] HRESULT CookieUsageBehavior([in] Windows.Web.Http.Filters.HttpCookieUsageBehavior value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpBaseProtocolFilter)]
                [uuid(9FE36CCF-2983-4893-941F-EB518CA8CEF9)]
                interface IHttpBaseProtocolFilter4 : IInspectable
                {
                    [eventadd] HRESULT ServerCustomValidationRequested([in] Windows.Foundation.TypedEventHandler<Windows.Web.Http.Filters.HttpBaseProtocolFilter*, Windows.Web.Http.Filters.HttpServerCustomValidationRequestedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT ServerCustomValidationRequested([in] EventRegistrationToken token);
                    HRESULT ClearAuthenticationCache();
                }

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpBaseProtocolFilter)]
                [uuid(416E4993-31E3-4816-BF09-E018EE8DC1F5)]
                interface IHttpBaseProtocolFilter5 : IInspectable
                {
                    [propget] HRESULT User([out] [retval] Windows.System.User** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 8.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpBaseProtocolFilter)]
                [uuid(6D4DEE0C-E908-494E-B5A3-1263C9B8242A)]
                interface IHttpBaseProtocolFilterStatics : IInspectable
                {
                    HRESULT CreateForUser([in] Windows.System.User* user, [out] [retval] Windows.Web.Http.Filters.HttpBaseProtocolFilter** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpCacheControl)]
                [uuid(C77E1CB4-3CEA-4EB5-AC85-04E186E63AB7)]
                interface IHttpCacheControl : IInspectable
                {
                    [propget] HRESULT ReadBehavior([out] [retval] Windows.Web.Http.Filters.HttpCacheReadBehavior* value);
                    [propput] HRESULT ReadBehavior([in] Windows.Web.Http.Filters.HttpCacheReadBehavior value);
                    [propget] HRESULT WriteBehavior([out] [retval] Windows.Web.Http.Filters.HttpCacheWriteBehavior* value);
                    [propput] HRESULT WriteBehavior([in] Windows.Web.Http.Filters.HttpCacheWriteBehavior value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(A4CB6DD5-0902-439E-BFD7-E12552B165CE)]
                interface IHttpFilter : IInspectable
                    requires
                        Windows.Foundation.IClosable
                {
                    HRESULT SendRequestAsync([in] Windows.Web.Http.HttpRequestMessage* request, [out] [retval] Windows.Foundation.IAsyncOperationWithProgress<Windows.Web.Http.HttpResponseMessage*, Windows.Web.Http.HttpProgress>** operation);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Web.Http.Filters.HttpServerCustomValidationRequestedEventArgs)]
                [uuid(3165FE32-E7DD-48B7-A361-939C750E63CC)]
                interface IHttpServerCustomValidationRequestedEventArgs : IInspectable
                {
                    [propget] HRESULT RequestMessage([out] [retval] Windows.Web.Http.HttpRequestMessage** value);
                    [propget] HRESULT ServerCertificate([out] [retval] Windows.Security.Cryptography.Certificates.Certificate** value);
                    [propget] HRESULT ServerCertificateErrorSeverity([out] [retval] Windows.Networking.Sockets.SocketSslErrorSeverity* value);
                    [propget] HRESULT ServerCertificateErrors([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.ChainValidationResult>** value);
                    [propget] HRESULT ServerIntermediateCertificates([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>** value);
                    HRESULT Reject();
                    HRESULT GetDeferral([out] [retval] Windows.Foundation.Deferral** result);
                }

                [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Web.Http.Filters.IHttpBaseProtocolFilterStatics, Windows.Foundation.UniversalApiContract, 8.0)]
                [threading(both)]
                runtimeclass HttpBaseProtocolFilter
                {
                    [default] interface Windows.Web.Http.Filters.IHttpBaseProtocolFilter;
                    [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.Web.Http.Filters.IHttpBaseProtocolFilter2;
                    [contract(Windows.Foundation.UniversalApiContract, 2.0)] interface Windows.Web.Http.Filters.IHttpBaseProtocolFilter3;
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.Web.Http.Filters.IHttpBaseProtocolFilter4;
                    [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.Web.Http.Filters.IHttpBaseProtocolFilter5;
                    interface Windows.Web.Http.Filters.IHttpFilter;
                    interface Windows.Foundation.IClosable;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass HttpCacheControl
                {
                    [default] interface Windows.Web.Http.Filters.IHttpCacheControl;
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                runtimeclass HttpServerCustomValidationRequestedEventArgs
                {
                    [default] interface Windows.Web.Http.Filters.IHttpServerCustomValidationRequestedEventArgs;
                }
            }
        }
    }
}
