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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Security.Credentials.idl";
import "Windows.Storage.idl";
import "Windows.Storage.Streams.idl";
import "Windows.Web.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Esecurity2Ecredentials_h__)")
cpp_quote("#include <Windows.Security.Credentials.h>")
cpp_quote("#endif // !defined(__windows2Esecurity2Ecredentials_h__)")
cpp_quote("#if !defined(__windows2Estorage_h__)")
cpp_quote("#include <Windows.Storage.h>")
cpp_quote("#endif // !defined(__windows2Estorage_h__)")
cpp_quote("#if !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#include <Windows.Storage.Streams.h>")
cpp_quote("#endif // !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#if !defined(__windows2Eweb_h__)")
cpp_quote("#include <Windows.Web.h>")
cpp_quote("#endif // !defined(__windows2Eweb_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        runtimeclass Uri;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Credentials
        {
            runtimeclass PasswordCredential;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        interface IStorageFile;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IInputStream;
        }
    }
}
namespace Windows
{
    namespace Web
    {
        typedef enum WebErrorStatus WebErrorStatus;
    }
}
namespace Windows
{
    namespace Networking
    {
        namespace BackgroundTransfer
        {
            typedef enum BackgroundTransferStatus BackgroundTransferStatus;

            typedef enum BackgroundTransferCostPolicy BackgroundTransferCostPolicy;

            typedef struct BackgroundDownloadProgress BackgroundDownloadProgress;

            typedef struct BackgroundUploadProgress BackgroundUploadProgress;

            interface IBackgroundTransferBase;

            interface IBackgroundDownloader;

            interface IBackgroundUploader;

            interface IBackgroundTransferOperation;

            interface IDownloadOperation;

            interface IUploadOperation;

            interface IBackgroundDownloaderStaticMethods;

            interface IBackgroundUploaderStaticMethods;

            interface IResponseInformation;

            interface IBackgroundTransferErrorStaticMethods;

            interface IBackgroundTransferContentPart;

            interface IBackgroundTransferContentPartFactory;

            runtimeclass DownloadOperation;

            runtimeclass UploadOperation;

            runtimeclass BackgroundTransferContentPart;

            runtimeclass ResponseInformation;

            runtimeclass BackgroundDownloader;

            runtimeclass BackgroundUploader;

            runtimeclass BackgroundTransferError;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Networking
    {
        namespace BackgroundTransfer
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Networking.BackgroundTransfer.DownloadOperation*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Networking.BackgroundTransfer.UploadOperation*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Networking.BackgroundTransfer.DownloadOperation*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Networking.BackgroundTransfer.UploadOperation*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.DownloadOperation*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.UploadOperation*>;

                interface Windows.Foundation.IAsyncOperationWithProgress<Windows.Networking.BackgroundTransfer.DownloadOperation*, Windows.Networking.BackgroundTransfer.DownloadOperation*>;

                interface Windows.Foundation.IAsyncOperationWithProgress<Windows.Networking.BackgroundTransfer.UploadOperation*, Windows.Networking.BackgroundTransfer.UploadOperation*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.DownloadOperation*>*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.UploadOperation*>*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.DownloadOperation*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.UploadOperation*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Networking
    {
        namespace BackgroundTransfer
        {
            [version(0x06020000)]
            enum BackgroundTransferStatus
            {
                Idle                = 0,
                Running             = 1,
                PausedByApplication = 2,
                PausedCostedNetwork = 3,
                PausedNoNetwork     = 4,
                Completed           = 5,
                Canceled            = 6,
                Error               = 7
            };

            [version(0x06020000)]
            enum BackgroundTransferCostPolicy
            {
                Default          = 0,
                UnrestrictedOnly = 1,
                Always           = 2
            };

            [version(0x06020000)]
            struct BackgroundDownloadProgress
            {
                UINT64 BytesReceived;
                UINT64 TotalBytesToReceive;
                Windows.Networking.BackgroundTransfer.BackgroundTransferStatus Status;
                boolean HasResponseChanged;
                boolean HasRestarted;
            };

            [version(0x06020000)]
            struct BackgroundUploadProgress
            {
                UINT64 BytesReceived;
                UINT64 BytesSent;
                UINT64 TotalBytesToReceive;
                UINT64 TotalBytesToSend;
                Windows.Networking.BackgroundTransfer.BackgroundTransferStatus Status;
                boolean HasResponseChanged;
                boolean HasRestarted;
            };

            [uuid(2A9DA250-C769-458C-AFE8-FEB8D4D3B2EF)]
            [version(0x06020000)]
            interface IBackgroundTransferBase : IInspectable
            {
                HRESULT SetRequestHeader([in] HSTRING headerName, [in] HSTRING headerValue);
                [propget] HRESULT ServerCredential([out] [retval] Windows.Security.Credentials.PasswordCredential** credential);
                [propput] HRESULT ServerCredential([in] Windows.Security.Credentials.PasswordCredential* credential);
                [propget] HRESULT ProxyCredential([out] [retval] Windows.Security.Credentials.PasswordCredential** credential);
                [propput] HRESULT ProxyCredential([in] Windows.Security.Credentials.PasswordCredential* credential);
                [propget] HRESULT Method([out] [retval] HSTRING* value);
                [propput] HRESULT Method([in] HSTRING value);
                [propget] HRESULT Group([out] [retval] HSTRING* value);
                [propput] HRESULT Group([in] HSTRING value);
                [propget] HRESULT CostPolicy([out] [retval] Windows.Networking.BackgroundTransfer.BackgroundTransferCostPolicy* value);
                [propput] HRESULT CostPolicy([in] Windows.Networking.BackgroundTransfer.BackgroundTransferCostPolicy value);
            }

            [uuid(C1C79333-6649-4B1D-A826-A4B3DD234D0B)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.BackgroundDownloader)]
            [version(0x06020000)]
            interface IBackgroundDownloader : IInspectable
                requires
                    Windows.Networking.BackgroundTransfer.IBackgroundTransferBase
            {
                [overload("CreateDownload")] HRESULT CreateDownload([in] Windows.Foundation.Uri* uri, [in] Windows.Storage.IStorageFile* resultFile, [out] [retval] Windows.Networking.BackgroundTransfer.DownloadOperation** operation);
                [overload("CreateDownload")] HRESULT CreateDownloadFromFile([in] Windows.Foundation.Uri* uri, [in] Windows.Storage.IStorageFile* resultFile, [in] Windows.Storage.IStorageFile* requestBodyFile, [out] [retval] Windows.Networking.BackgroundTransfer.DownloadOperation** operation);
                HRESULT CreateDownloadAsync([in] Windows.Foundation.Uri* uri, [in] Windows.Storage.IStorageFile* resultFile, [in] Windows.Storage.Streams.IInputStream* requestBodyStream, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.DownloadOperation*>** operation);
            }

            [uuid(C595C9AE-CEAD-465B-8801-C55AC90A01CE)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.BackgroundUploader)]
            [version(0x06020000)]
            interface IBackgroundUploader : IInspectable
                requires
                    Windows.Networking.BackgroundTransfer.IBackgroundTransferBase
            {
                HRESULT CreateUpload([in] Windows.Foundation.Uri* uri, [in] Windows.Storage.IStorageFile* sourceFile, [out] [retval] Windows.Networking.BackgroundTransfer.UploadOperation** operation);
                HRESULT CreateUploadFromStreamAsync([in] Windows.Foundation.Uri* uri, [in] Windows.Storage.Streams.IInputStream* sourceStream, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.UploadOperation*>** operation);
                [overload("CreateUploadAsync")] HRESULT CreateUploadWithFormDataAndAutoBoundaryAsync([in] Windows.Foundation.Uri* uri, [in] Windows.Foundation.Collections.IIterable<Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart*>* parts, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.UploadOperation*>** operation);
                [overload("CreateUploadAsync")] HRESULT CreateUploadWithSubTypeAsync([in] Windows.Foundation.Uri* uri, [in] Windows.Foundation.Collections.IIterable<Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart*>* parts, [in] HSTRING subType, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.UploadOperation*>** operation);
                [overload("CreateUploadAsync")] HRESULT CreateUploadWithSubTypeAndBoundaryAsync([in] Windows.Foundation.Uri* uri, [in] Windows.Foundation.Collections.IIterable<Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart*>* parts, [in] HSTRING subType, [in] HSTRING boundary, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Networking.BackgroundTransfer.UploadOperation*>** operation);
            }

            [uuid(DED06846-90CA-44FB-8FB1-124154C0D539)]
            [version(0x06020000)]
            interface IBackgroundTransferOperation : IInspectable
            {
                [propget] HRESULT Guid([out] [retval] GUID* value);
                [propget] HRESULT RequestedUri([out] [retval] Windows.Foundation.Uri** value);
                [propget] HRESULT Method([out] [retval] HSTRING* value);
                [propget] HRESULT Group([out] [retval] HSTRING* value);
                [propget] HRESULT CostPolicy([out] [retval] Windows.Networking.BackgroundTransfer.BackgroundTransferCostPolicy* value);
                [propput] HRESULT CostPolicy([in] Windows.Networking.BackgroundTransfer.BackgroundTransferCostPolicy value);
                HRESULT GetResultStreamAt([in] UINT64 position, [out] [retval] Windows.Storage.Streams.IInputStream** value);
                HRESULT GetResponseInformation([out] [retval] Windows.Networking.BackgroundTransfer.ResponseInformation** value);
            }

            [uuid(BD87EBB0-5714-4E09-BA68-BEF73903B0D7)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.DownloadOperation)]
            [version(0x06020000)]
            interface IDownloadOperation : IInspectable
                requires
                    Windows.Networking.BackgroundTransfer.IBackgroundTransferOperation
            {
                [propget] HRESULT ResultFile([out] [retval] Windows.Storage.IStorageFile** value);
                [propget] HRESULT Progress([out] [retval] Windows.Networking.BackgroundTransfer.BackgroundDownloadProgress* value);
                HRESULT StartAsync([out] [retval] Windows.Foundation.IAsyncOperationWithProgress<Windows.Networking.BackgroundTransfer.DownloadOperation*, Windows.Networking.BackgroundTransfer.DownloadOperation*>** operation);
                HRESULT AttachAsync([out] [retval] Windows.Foundation.IAsyncOperationWithProgress<Windows.Networking.BackgroundTransfer.DownloadOperation*, Windows.Networking.BackgroundTransfer.DownloadOperation*>** operation);
                HRESULT Pause();
                HRESULT Resume();
            }

            [uuid(3E5624E0-7389-434C-8B35-427FD36BBDAE)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.UploadOperation)]
            interface IUploadOperation : IInspectable
                requires
                    Windows.Networking.BackgroundTransfer.IBackgroundTransferOperation
            {
                [propget] HRESULT SourceFile([out] [retval] Windows.Storage.IStorageFile** value);
                [propget] HRESULT Progress([out] [retval] Windows.Networking.BackgroundTransfer.BackgroundUploadProgress* value);
                HRESULT StartAsync([out] [retval] Windows.Foundation.IAsyncOperationWithProgress<Windows.Networking.BackgroundTransfer.UploadOperation*, Windows.Networking.BackgroundTransfer.UploadOperation*>** operation);
                HRESULT AttachAsync([out] [retval] Windows.Foundation.IAsyncOperationWithProgress<Windows.Networking.BackgroundTransfer.UploadOperation*, Windows.Networking.BackgroundTransfer.UploadOperation*>** operation);
            }

            [uuid(52A65A35-C64E-426C-9919-540D0D21A650)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.BackgroundDownloader)]
            [version(0x06020000)]
            interface IBackgroundDownloaderStaticMethods : IInspectable
            {
                [overload("GetCurrentDownloadsAsync")] HRESULT GetCurrentDownloadsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.DownloadOperation*>*>** operation);
                [overload("GetCurrentDownloadsAsync")] HRESULT GetCurrentDownloadsForGroupAsync([in] HSTRING group, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.DownloadOperation*>*>** operation);
            }

            [uuid(F2875CFB-9B05-4741-9121-740A83E247DF)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.BackgroundUploader)]
            [version(0x06020000)]
            interface IBackgroundUploaderStaticMethods : IInspectable
            {
                [overload("GetCurrentUploadsAsync")] HRESULT GetCurrentUploadsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.UploadOperation*>*>** operation);
                [overload("GetCurrentUploadsAsync")] HRESULT GetCurrentUploadsForGroupAsync([in] HSTRING group, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Networking.BackgroundTransfer.UploadOperation*>*>** operation);
            }

            [uuid(F8BB9A12-F713-4792-8B68-D9D297F91D2E)]
            [version(0x06020000)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.ResponseInformation)]
            interface IResponseInformation : IInspectable
            {
                [propget] HRESULT IsResumable([out] [retval] boolean* value);
                [propget] HRESULT ActualUri([out] [retval] Windows.Foundation.Uri** value);
                [propget] HRESULT StatusCode([out] [retval] UINT32* value);
                [propget] HRESULT Headers([out] [retval] Windows.Foundation.Collections.IMapView<HSTRING, HSTRING>** value);
            }

            [uuid(AAD33B04-1192-4BF4-8B68-39C5ADD244E2)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.BackgroundTransferError)]
            [version(0x06020000)]
            interface IBackgroundTransferErrorStaticMethods : IInspectable
            {
                HRESULT GetStatus([in] INT32 hresult, [out] [retval] Windows.Web.WebErrorStatus* status);
            }

            [uuid(E8E15657-D7D1-4ED8-838E-674AC217ACE6)]
            [exclusiveto(Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart)]
            [version(0x06020000)]
            interface IBackgroundTransferContentPart : IInspectable
            {
                HRESULT SetHeader([in] HSTRING headerName, [in] HSTRING headerValue);
                HRESULT SetText([in] HSTRING value);
                HRESULT SetFile([in] Windows.Storage.IStorageFile* value);
            }

            [uuid(90EF98A9-7A01-4A0B-9F80-A0B0BB370F8D)]
            [version(0x06020000)]
            interface IBackgroundTransferContentPartFactory : IInspectable
            {
                HRESULT CreateWithName([in] HSTRING name, [out] [retval] Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart** value);
                HRESULT CreateWithNameAndFileName([in] HSTRING name, [in] HSTRING fileName, [out] [retval] Windows.Networking.BackgroundTransfer.BackgroundTransferContentPart** value);
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass DownloadOperation
            {
                [default] interface Windows.Networking.BackgroundTransfer.IDownloadOperation;
                interface Windows.Networking.BackgroundTransfer.IBackgroundTransferOperation;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            runtimeclass UploadOperation
            {
                [default] interface Windows.Networking.BackgroundTransfer.IUploadOperation;
                interface Windows.Networking.BackgroundTransfer.IBackgroundTransferOperation;
            }

            [marshaling_behavior(agile)]
            [activatable(Windows.Networking.BackgroundTransfer.IBackgroundTransferContentPartFactory, 0x06020000)]
            [threading(both)]
            [activatable(0x06020000)]
            [version(0x06020000)]
            runtimeclass BackgroundTransferContentPart
            {
                [default] interface Windows.Networking.BackgroundTransfer.IBackgroundTransferContentPart;
            }

            [version(0x06020000)]
            [marshaling_behavior(agile)]
            runtimeclass ResponseInformation
            {
                [default] interface Windows.Networking.BackgroundTransfer.IResponseInformation;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Networking.BackgroundTransfer.IBackgroundDownloaderStaticMethods, 0x06020000)]
            [activatable(0x06020000)]
            [threading(both)]
            [version(0x06020000)]
            runtimeclass BackgroundDownloader
            {
                [default] interface Windows.Networking.BackgroundTransfer.IBackgroundDownloader;
                interface Windows.Networking.BackgroundTransfer.IBackgroundTransferBase;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Networking.BackgroundTransfer.IBackgroundUploaderStaticMethods, 0x06020000)]
            [version(0x06020000)]
            [threading(both)]
            [activatable(0x06020000)]
            runtimeclass BackgroundUploader
            {
                [default] interface Windows.Networking.BackgroundTransfer.IBackgroundUploader;
                interface Windows.Networking.BackgroundTransfer.IBackgroundTransferBase;
            }

            [static(Windows.Networking.BackgroundTransfer.IBackgroundTransferErrorStaticMethods, 0x06020000)]
            [marshaling_behavior(agile)]
            [version(0x06020000)]
            [threading(both)]
            runtimeclass BackgroundTransferError
            {
            }
        }
    }
}
