mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Enforce valid key responses in FakeExoMediaDrm
Make this behaviour optional, so it can be disabled for AnalyticsCollectorTest where we don't use FakeExoMediaDrm.LicenseServer. PiperOrigin-RevId: 393133721
This commit is contained in:
parent
84cf63a72f
commit
9c2b4b860b
2 changed files with 41 additions and 8 deletions
|
|
@ -173,7 +173,9 @@ public final class AnalyticsCollectorTest {
|
||||||
|
|
||||||
private final DrmSessionManager drmSessionManager =
|
private final DrmSessionManager drmSessionManager =
|
||||||
new DefaultDrmSessionManager.Builder()
|
new DefaultDrmSessionManager.Builder()
|
||||||
.setUuidAndExoMediaDrmProvider(DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm())
|
.setUuidAndExoMediaDrmProvider(
|
||||||
|
DRM_SCHEME_UUID,
|
||||||
|
uuid -> new FakeExoMediaDrm.Builder().setEnforceValidKeyResponses(false).build())
|
||||||
.setMultiSession(true)
|
.setMultiSession(true)
|
||||||
.build(new EmptyDrmCallback());
|
.build(new EmptyDrmCallback());
|
||||||
|
|
||||||
|
|
@ -1452,7 +1454,9 @@ public final class AnalyticsCollectorTest {
|
||||||
BlockingDrmCallback mediaDrmCallback = BlockingDrmCallback.returnsEmpty();
|
BlockingDrmCallback mediaDrmCallback = BlockingDrmCallback.returnsEmpty();
|
||||||
DrmSessionManager blockingDrmSessionManager =
|
DrmSessionManager blockingDrmSessionManager =
|
||||||
new DefaultDrmSessionManager.Builder()
|
new DefaultDrmSessionManager.Builder()
|
||||||
.setUuidAndExoMediaDrmProvider(DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm())
|
.setUuidAndExoMediaDrmProvider(
|
||||||
|
DRM_SCHEME_UUID,
|
||||||
|
uuid -> new FakeExoMediaDrm.Builder().setEnforceValidKeyResponses(false).build())
|
||||||
.setMultiSession(true)
|
.setMultiSession(true)
|
||||||
.build(mediaDrmCallback);
|
.build(mediaDrmCallback);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource =
|
||||||
|
|
@ -1518,7 +1522,9 @@ public final class AnalyticsCollectorTest {
|
||||||
BlockingDrmCallback mediaDrmCallback = BlockingDrmCallback.alwaysFailing();
|
BlockingDrmCallback mediaDrmCallback = BlockingDrmCallback.alwaysFailing();
|
||||||
DrmSessionManager failingDrmSessionManager =
|
DrmSessionManager failingDrmSessionManager =
|
||||||
new DefaultDrmSessionManager.Builder()
|
new DefaultDrmSessionManager.Builder()
|
||||||
.setUuidAndExoMediaDrmProvider(DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm())
|
.setUuidAndExoMediaDrmProvider(
|
||||||
|
DRM_SCHEME_UUID,
|
||||||
|
uuid -> new FakeExoMediaDrm.Builder().setEnforceValidKeyResponses(false).build())
|
||||||
.setMultiSession(true)
|
.setMultiSession(true)
|
||||||
.build(mediaDrmCallback);
|
.build(mediaDrmCallback);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource =
|
||||||
|
|
|
||||||
|
|
@ -65,16 +65,29 @@ public final class FakeExoMediaDrm implements ExoMediaDrm {
|
||||||
|
|
||||||
/** Builder for {@link FakeExoMediaDrm} instances. */
|
/** Builder for {@link FakeExoMediaDrm} instances. */
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
private boolean enforceValidKeyResponses;
|
||||||
private int provisionsRequired;
|
private int provisionsRequired;
|
||||||
private boolean throwNotProvisionedExceptionFromGetKeyRequest;
|
private boolean throwNotProvisionedExceptionFromGetKeyRequest;
|
||||||
private int maxConcurrentSessions;
|
private int maxConcurrentSessions;
|
||||||
|
|
||||||
/** Constructs an instance. */
|
/** Constructs an instance. */
|
||||||
public Builder() {
|
public Builder() {
|
||||||
|
enforceValidKeyResponses = true;
|
||||||
provisionsRequired = 0;
|
provisionsRequired = 0;
|
||||||
maxConcurrentSessions = Integer.MAX_VALUE;
|
maxConcurrentSessions = Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether key responses passed to {@link #provideKeyResponse(byte[], byte[])} should be
|
||||||
|
* checked for validity (i.e. that they came from a {@link LicenseServer}).
|
||||||
|
*
|
||||||
|
* <p>Defaults to true.
|
||||||
|
*/
|
||||||
|
public Builder setEnforceValidKeyResponses(boolean enforceValidKeyResponses) {
|
||||||
|
this.enforceValidKeyResponses = enforceValidKeyResponses;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets how many successful provisioning round trips are needed for the {@link FakeExoMediaDrm}
|
* Sets how many successful provisioning round trips are needed for the {@link FakeExoMediaDrm}
|
||||||
* to be provisioned.
|
* to be provisioned.
|
||||||
|
|
@ -120,7 +133,10 @@ public final class FakeExoMediaDrm implements ExoMediaDrm {
|
||||||
*/
|
*/
|
||||||
public FakeExoMediaDrm build() {
|
public FakeExoMediaDrm build() {
|
||||||
return new FakeExoMediaDrm(
|
return new FakeExoMediaDrm(
|
||||||
provisionsRequired, throwNotProvisionedExceptionFromGetKeyRequest, maxConcurrentSessions);
|
enforceValidKeyResponses,
|
||||||
|
provisionsRequired,
|
||||||
|
throwNotProvisionedExceptionFromGetKeyRequest,
|
||||||
|
maxConcurrentSessions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -141,6 +157,7 @@ public final class FakeExoMediaDrm implements ExoMediaDrm {
|
||||||
private static final ImmutableList<Byte> PROVISIONING_REQUIRED_RESPONSE =
|
private static final ImmutableList<Byte> PROVISIONING_REQUIRED_RESPONSE =
|
||||||
TestUtil.createByteList(4, 5, 6);
|
TestUtil.createByteList(4, 5, 6);
|
||||||
|
|
||||||
|
private final boolean enforceValidKeyResponses;
|
||||||
private final int provisionsRequired;
|
private final int provisionsRequired;
|
||||||
private final int maxConcurrentSessions;
|
private final int maxConcurrentSessions;
|
||||||
private final boolean throwNotProvisionedExceptionFromGetKeyRequest;
|
private final boolean throwNotProvisionedExceptionFromGetKeyRequest;
|
||||||
|
|
@ -164,15 +181,18 @@ public final class FakeExoMediaDrm implements ExoMediaDrm {
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public FakeExoMediaDrm(int maxConcurrentSessions) {
|
public FakeExoMediaDrm(int maxConcurrentSessions) {
|
||||||
this(
|
this(
|
||||||
|
/* enforceValidKeyResponses= */ true,
|
||||||
/* provisionsRequired= */ 0,
|
/* provisionsRequired= */ 0,
|
||||||
/* throwNotProvisionedExceptionFromGetKeyRequest= */ false,
|
/* throwNotProvisionedExceptionFromGetKeyRequest= */ false,
|
||||||
maxConcurrentSessions);
|
maxConcurrentSessions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private FakeExoMediaDrm(
|
private FakeExoMediaDrm(
|
||||||
|
boolean enforceValidKeyResponses,
|
||||||
int provisionsRequired,
|
int provisionsRequired,
|
||||||
boolean throwNotProvisionedExceptionFromGetKeyRequest,
|
boolean throwNotProvisionedExceptionFromGetKeyRequest,
|
||||||
int maxConcurrentSessions) {
|
int maxConcurrentSessions) {
|
||||||
|
this.enforceValidKeyResponses = enforceValidKeyResponses;
|
||||||
this.provisionsRequired = provisionsRequired;
|
this.provisionsRequired = provisionsRequired;
|
||||||
this.maxConcurrentSessions = maxConcurrentSessions;
|
this.maxConcurrentSessions = maxConcurrentSessions;
|
||||||
this.throwNotProvisionedExceptionFromGetKeyRequest =
|
this.throwNotProvisionedExceptionFromGetKeyRequest =
|
||||||
|
|
@ -265,13 +285,20 @@ public final class FakeExoMediaDrm implements ExoMediaDrm {
|
||||||
throws NotProvisionedException, DeniedByServerException {
|
throws NotProvisionedException, DeniedByServerException {
|
||||||
Assertions.checkState(referenceCount > 0);
|
Assertions.checkState(referenceCount > 0);
|
||||||
List<Byte> responseAsList = Bytes.asList(response);
|
List<Byte> responseAsList = Bytes.asList(response);
|
||||||
if (responseAsList.equals(VALID_KEY_RESPONSE)) {
|
if (responseAsList.equals(KEY_DENIED_RESPONSE)) {
|
||||||
sessionIdsWithValidKeys.add(Bytes.asList(scope));
|
|
||||||
} else if (responseAsList.equals(KEY_DENIED_RESPONSE)) {
|
|
||||||
throw new DeniedByServerException("Key request denied");
|
throw new DeniedByServerException("Key request denied");
|
||||||
} else if (responseAsList.equals(PROVISIONING_REQUIRED_RESPONSE)) {
|
}
|
||||||
|
if (responseAsList.equals(PROVISIONING_REQUIRED_RESPONSE)) {
|
||||||
throw new NotProvisionedException("Provisioning required");
|
throw new NotProvisionedException("Provisioning required");
|
||||||
}
|
}
|
||||||
|
if (enforceValidKeyResponses && !responseAsList.equals(VALID_KEY_RESPONSE)) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Unrecognised response. scope="
|
||||||
|
+ Util.toHexString(scope)
|
||||||
|
+ ", response="
|
||||||
|
+ Util.toHexString(response));
|
||||||
|
}
|
||||||
|
sessionIdsWithValidKeys.add(Bytes.asList(scope));
|
||||||
return Util.EMPTY_BYTE_ARRAY;
|
return Util.EMPTY_BYTE_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue