RUN(internals.initializeMockMediaSource())
RUN(mock = internals.registerMockCDM())
RUN(mock.supportedDataTypes = ["mock"])

SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.keySystem == 'org.webkit.mock') OK
EXPECTED (access.getConfiguration().initDataTypes.length == '1') OK
EXPECTED (access.getConfiguration().initDataTypes[0] == 'mock') OK
EXPECTED (access.getConfiguration().sessionTypes.length == '1') OK
EXPECTED (access.getConfiguration().sessionTypes[0] == 'temporary') OK
EXPECTED (access.getConfiguration().distinctiveIdentifier == 'not-allowed') OK
EXPECTED (access.getConfiguration().persistentState == 'not-allowed') OK

SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "unknown/mime; codecs=\"unknown\"" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise rejected correctly OK
EXPECTED (exceptionCode.name == 'NotSupportedError') OK

SET capabilities = '[ { "initDataTypes": [ "unknownType" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise rejected correctly OK
EXPECTED (exceptionCode.name == 'NotSupportedError') OK

RUN(mock.supportedRobustness = ["high"])
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"", "robustness": "high" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().videoCapabilities.length == '1') OK
EXPECTED (access.getConfiguration().videoCapabilities[0].robustness == 'high') OK

RUN(mock.supportedRobustness = ["high"])
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"", "robustness": "low" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise rejected correctly OK
EXPECTED (exceptionCode.name == 'NotSupportedError') OK

RUN(mock.distinctiveIdentifierRequirement = "not-allowed")
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "distinctiveIdentifier": "optional" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().distinctiveIdentifier == 'not-allowed') OK

RUN(mock.distinctiveIdentifiersRequirement = "required")
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "distinctiveIdentifier": "optional" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().distinctiveIdentifier == 'required') OK

RUN(mock.distinctiveIdentifiersRequirement = "not-allowed")
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "distinctiveIdentifier": "required" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise rejected correctly OK
EXPECTED (exceptionCode.name == 'NotSupportedError') OK

RUN(mock.distinctiveIdentifiersRequirement = "not-allowed")
SET capabilities = '[ { "label": "distinctive-identifiers-required", "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "distinctiveIdentifier": "required" }, { "label": "distinctive-identifiers-not-required", "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "distinctiveIdentifier": "optional" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().label == 'distinctive-identifiers-not-required') OK
EXPECTED (access.getConfiguration().distinctiveIdentifier == 'not-allowed') OK

RUN(mock.persistentStateRequirement = "required")
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "persistentState": "optional" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().persistentState == 'required') OK

RUN(mock.persistentStateRequirement = "not-allowed")
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "persistentState": "optional" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().persistentState == 'not-allowed') OK

RUN(mock.persistentStateRequirement = "not-allowed")
SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "persistentState": "required" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise rejected correctly OK
EXPECTED (exceptionCode.name == 'NotSupportedError') OK

RUN(mock.persistentStateRequirement = "not-allowed")
SET capabilities = '[ { "label": "persistent-state-required", "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "persistentState": "required" }, { "label": "persistent-state-not-required", "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"" } ], "persistentState": "optional" } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().label == 'persistent-state-not-required') OK
EXPECTED (access.getConfiguration().persistentState == 'not-allowed') OK

RUN(mock.supportedEncryptionSchemes = ["cenc"])
SET capabilities = '[ { "label": "encryption-scheme-cenc", "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"", "encryptionScheme": "cenc" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().label == 'encryption-scheme-cenc') OK
EXPECTED (access.getConfiguration().videoCapabilities[0].encryptionScheme == 'cenc') OK

SET capabilities = '[ { "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"", "encryptionScheme": "cbcs" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise rejected correctly OK
EXPECTED (exceptionCode.name == 'NotSupportedError') OK

RUN(mock.supportedEncryptionSchemes = ["cenc", "cbcs"])
SET capabilities = '[ { "label": "encryption-scheme-cbcs", "initDataTypes": [ "mock" ], "videoCapabilities": [ { "contentType": "video/mock; codecs=\"mock\"", "encryptionScheme": "cbcs" } ] } ]'
RUN(promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", capabilities))
Promise resolved OK
EXPECTED (access.getConfiguration().label == 'encryption-scheme-cbcs') OK
EXPECTED (access.getConfiguration().videoCapabilities[0].encryptionScheme == 'cbcs') OK
END OF TEST

