//
// 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.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStreamReference;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace ContentRestrictions
        {
            typedef enum ContentAccessRestrictionLevel ContentAccessRestrictionLevel;

            typedef enum RatedContentCategory RatedContentCategory;

            interface IContentRestrictionsBrowsePolicy;

            interface IRatedContentDescription;

            interface IRatedContentDescriptionFactory;

            interface IRatedContentRestrictions;

            interface IRatedContentRestrictionsFactory;

            runtimeclass ContentRestrictionsBrowsePolicy;

            runtimeclass RatedContentDescription;

            runtimeclass RatedContentRestrictions;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace ContentRestrictions
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Media.ContentRestrictions.ContentAccessRestrictionLevel>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.ContentRestrictions.ContentRestrictionsBrowsePolicy*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace ContentRestrictions
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum ContentAccessRestrictionLevel
            {
                Allow = 0,
                Warn  = 1,
                Block = 2,
                Hide  = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum RatedContentCategory
            {
                General     = 0,
                Application = 1,
                Game        = 2,
                Movie       = 3,
                Television  = 4,
                Music       = 5
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.ContentRestrictions.ContentRestrictionsBrowsePolicy)]
            [uuid(8C0133A4-442E-461A-8757-FAD2F5BD37E4)]
            interface IContentRestrictionsBrowsePolicy : IInspectable
            {
                [propget] HRESULT GeographicRegion([out] [retval] HSTRING* value);
                [propget] HRESULT MaxBrowsableAgeRating([out] [retval] Windows.Foundation.IReference<UINT32>** value);
                [propget] HRESULT PreferredAgeRating([out] [retval] Windows.Foundation.IReference<UINT32>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.ContentRestrictions.RatedContentDescription)]
            [uuid(694866DF-66B2-4DC3-96B1-F090EEDEE255)]
            interface IRatedContentDescription : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propput] HRESULT Id([in] HSTRING value);
                [propget] HRESULT Title([out] [retval] HSTRING* value);
                [propput] HRESULT Title([in] HSTRING value);
                [propget] HRESULT Image([out] [retval] Windows.Storage.Streams.IRandomAccessStreamReference** value);
                [propput] HRESULT Image([in] Windows.Storage.Streams.IRandomAccessStreamReference* value);
                [propget] HRESULT Category([out] [retval] Windows.Media.ContentRestrictions.RatedContentCategory* value);
                [propput] HRESULT Category([in] Windows.Media.ContentRestrictions.RatedContentCategory value);
                [propget] HRESULT Ratings([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                [propput] HRESULT Ratings([in] Windows.Foundation.Collections.IVector<HSTRING>* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.ContentRestrictions.RatedContentDescription)]
            [uuid(2E38DF62-9B90-4FA6-89C1-4B8D2FFB3573)]
            interface IRatedContentDescriptionFactory : IInspectable
            {
                HRESULT Create([in] HSTRING id, [in] HSTRING title, [in] Windows.Media.ContentRestrictions.RatedContentCategory category, [out] [retval] Windows.Media.ContentRestrictions.RatedContentDescription** RatedContentDescription);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.ContentRestrictions.RatedContentRestrictions)]
            [uuid(3F7F23CB-BA07-4401-A49D-8B9222205723)]
            interface IRatedContentRestrictions : IInspectable
            {
                HRESULT GetBrowsePolicyAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.ContentRestrictions.ContentRestrictionsBrowsePolicy*>** operation);
                HRESULT GetRestrictionLevelAsync([in] Windows.Media.ContentRestrictions.RatedContentDescription* RatedContentDescription, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.ContentRestrictions.ContentAccessRestrictionLevel>** operation);
                HRESULT RequestContentAccessAsync([in] Windows.Media.ContentRestrictions.RatedContentDescription* RatedContentDescription, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
                [eventadd] HRESULT RestrictionsChanged([in] Windows.Foundation.EventHandler<IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RestrictionsChanged([in] EventRegistrationToken token);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.ContentRestrictions.RatedContentRestrictions)]
            [uuid(FB4B2996-C3BD-4910-9619-97CFD0694D56)]
            interface IRatedContentRestrictionsFactory : IInspectable
            {
                HRESULT CreateWithMaxAgeRating([in] UINT32 maxAgeRating, [out] [retval] Windows.Media.ContentRestrictions.RatedContentRestrictions** ratedContentRestrictions);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass ContentRestrictionsBrowsePolicy
            {
                [default] interface Windows.Media.ContentRestrictions.IContentRestrictionsBrowsePolicy;
            }

            [activatable(Windows.Media.ContentRestrictions.IRatedContentDescriptionFactory, Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass RatedContentDescription
            {
                [default] interface Windows.Media.ContentRestrictions.IRatedContentDescription;
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [activatable(Windows.Media.ContentRestrictions.IRatedContentRestrictionsFactory, Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass RatedContentRestrictions
            {
                [default] interface Windows.Media.ContentRestrictions.IRatedContentRestrictions;
            }
        }
    }
}
