*** Original commit ***

DataSource.open() throws if already opened.

Update DataSource implementations to throw an error if open() is called
when the DataSource is already open.

***

PiperOrigin-RevId: 348783425
This commit is contained in:
olly 2020-12-23 14:00:27 +00:00 committed by Oliver Woodman
parent 653d180d4c
commit d01093d711
21 changed files with 18 additions and 90 deletions

View File

@ -15,8 +15,6 @@
*/ */
package com.google.android.exoplayer2.ext.media2; package com.google.android.exoplayer2.ext.media2;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.Looper; import android.os.Looper;
@ -145,7 +143,6 @@ import org.junit.rules.ExternalResource;
private final DataSource wrappedDataSource; private final DataSource wrappedDataSource;
private final DataSourceInstrumentation instrumentation; private final DataSourceInstrumentation instrumentation;
private boolean opened;
public InstrumentedDataSource( public InstrumentedDataSource(
DataSource wrappedDataSource, DataSourceInstrumentation instrumentation) { DataSource wrappedDataSource, DataSourceInstrumentation instrumentation) {
@ -160,11 +157,8 @@ import org.junit.rules.ExternalResource;
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
instrumentation.onPreOpen(dataSpec); instrumentation.onPreOpen(dataSpec);
long length = wrappedDataSource.open(dataSpec); return wrappedDataSource.open(dataSpec);
opened = true;
return length;
} }
@Nullable @Nullable
@ -186,7 +180,6 @@ import org.junit.rules.ExternalResource;
@Override @Override
public void close() throws IOException { public void close() throws IOException {
wrappedDataSource.close(); wrappedDataSource.close();
opened = false;
} }
} }
} }

View File

@ -16,7 +16,6 @@
package com.google.android.exoplayer2.ext.okhttp; package com.google.android.exoplayer2.ext.okhttp;
import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AGENT; import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AGENT;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -278,7 +277,6 @@ public class OkHttpDataSource extends BaseDataSource implements HttpDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws HttpDataSourceException { public long open(DataSpec dataSpec) throws HttpDataSourceException {
checkState(!opened);
this.dataSpec = dataSpec; this.dataSpec = dataSpec;
this.bytesRead = 0; this.bytesRead = 0;
this.bytesSkipped = 0; this.bytesSkipped = 0;

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.ext.rtmp; package com.google.android.exoplayer2.ext.rtmp;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import android.net.Uri; import android.net.Uri;
@ -38,7 +37,6 @@ public final class RtmpDataSource extends BaseDataSource {
@Nullable private RtmpClient rtmpClient; @Nullable private RtmpClient rtmpClient;
@Nullable private Uri uri; @Nullable private Uri uri;
private boolean opened;
public RtmpDataSource() { public RtmpDataSource() {
super(/* isNetwork= */ true); super(/* isNetwork= */ true);
@ -46,14 +44,12 @@ public final class RtmpDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws RtmpIOException { public long open(DataSpec dataSpec) throws RtmpIOException {
checkState(!opened);
transferInitializing(dataSpec); transferInitializing(dataSpec);
rtmpClient = new RtmpClient(); rtmpClient = new RtmpClient();
rtmpClient.open(dataSpec.uri.toString(), false); rtmpClient.open(dataSpec.uri.toString(), false);
this.uri = dataSpec.uri; this.uri = dataSpec.uri;
transferStarted(dataSpec); transferStarted(dataSpec);
opened = true;
return C.LENGTH_UNSET; return C.LENGTH_UNSET;
} }
@ -77,7 +73,6 @@ public final class RtmpDataSource extends BaseDataSource {
rtmpClient.close(); rtmpClient.close();
rtmpClient = null; rtmpClient = null;
} }
opened = false;
} }
@Override @Override

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -58,7 +57,6 @@ public final class AssetDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws AssetDataSourceException { public long open(DataSpec dataSpec) throws AssetDataSourceException {
checkState(!opened);
try { try {
uri = dataSpec.uri; uri = dataSpec.uri;
String path = Assertions.checkNotNull(uri.getPath()); String path = Assertions.checkNotNull(uri.getPath());

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static java.lang.Math.min; import static java.lang.Math.min;
import android.net.Uri; import android.net.Uri;
@ -46,7 +45,6 @@ public final class ByteArrayDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
uri = dataSpec.uri; uri = dataSpec.uri;
transferInitializing(dataSpec); transferInitializing(dataSpec);
readPosition = (int) dataSpec.position; readPosition = (int) dataSpec.position;

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -63,8 +62,6 @@ public final class ContentDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws ContentDataSourceException { public long open(DataSpec dataSpec) throws ContentDataSourceException {
checkState(!opened);
try { try {
Uri uri = dataSpec.uri; Uri uri = dataSpec.uri;
this.uri = uri; this.uri = uri;

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -45,7 +44,6 @@ public final class DataSchemeDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(this.dataSpec == null);
transferInitializing(dataSpec); transferInitializing(dataSpec);
this.dataSpec = dataSpec; this.dataSpec = dataSpec;
readPosition = (int) dataSpec.position; readPosition = (int) dataSpec.position;

View File

@ -16,7 +16,6 @@
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AGENT; import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AGENT;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static java.lang.Math.max; import static java.lang.Math.max;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -343,7 +342,6 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou
*/ */
@Override @Override
public long open(DataSpec dataSpec) throws HttpDataSourceException { public long open(DataSpec dataSpec) throws HttpDataSourceException {
checkState(!opened);
this.dataSpec = dataSpec; this.dataSpec = dataSpec;
this.bytesRead = 0; this.bytesRead = 0;
this.bytesSkipped = 0; this.bytesSkipped = 0;

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -81,7 +80,6 @@ public final class FileDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws FileDataSourceException { public long open(DataSpec dataSpec) throws FileDataSourceException {
checkState(!opened);
try { try {
Uri uri = dataSpec.uri; Uri uri = dataSpec.uri;
this.uri = uri; this.uri = uri;

View File

@ -15,8 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
@ -42,7 +40,6 @@ public final class PriorityDataSource implements DataSource {
private final DataSource upstream; private final DataSource upstream;
private final PriorityTaskManager priorityTaskManager; private final PriorityTaskManager priorityTaskManager;
private final int priority; private final int priority;
private boolean opened;
/** /**
* @param upstream The upstream {@link DataSource}. * @param upstream The upstream {@link DataSource}.
@ -64,11 +61,8 @@ public final class PriorityDataSource implements DataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
priorityTaskManager.proceedOrThrow(priority); priorityTaskManager.proceedOrThrow(priority);
long length = upstream.open(dataSpec); return upstream.open(dataSpec);
opened = true;
return length;
} }
@Override @Override
@ -91,7 +85,6 @@ public final class PriorityDataSource implements DataSource {
@Override @Override
public void close() throws IOException { public void close() throws IOException {
upstream.close(); upstream.close();
opened = false;
} }
} }

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -99,7 +98,6 @@ public final class RawResourceDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws RawResourceDataSourceException { public long open(DataSpec dataSpec) throws RawResourceDataSourceException {
checkState(!opened);
Uri uri = dataSpec.uri; Uri uri = dataSpec.uri;
this.uri = uri; this.uri = uri;

View File

@ -16,7 +16,6 @@
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -104,7 +103,6 @@ public final class ResolvingDataSource implements DataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!upstreamOpened);
DataSpec resolvedDataSpec = resolver.resolveDataSpec(dataSpec); DataSpec resolvedDataSpec = resolver.resolveDataSpec(dataSpec);
upstreamOpened = true; upstreamOpened = true;
return upstreamDataSource.open(resolvedDataSpec); return upstreamDataSource.open(resolvedDataSpec);

View File

@ -15,8 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
@ -37,7 +35,6 @@ public final class StatsDataSource implements DataSource {
private long bytesRead; private long bytesRead;
private Uri lastOpenedUri; private Uri lastOpenedUri;
private Map<String, List<String>> lastResponseHeaders; private Map<String, List<String>> lastResponseHeaders;
private boolean opened;
/** /**
* Creates the stats data source. * Creates the stats data source.
@ -81,14 +78,12 @@ public final class StatsDataSource implements DataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
// Reassign defaults in case dataSource.open throws an exception. // Reassign defaults in case dataSource.open throws an exception.
lastOpenedUri = dataSpec.uri; lastOpenedUri = dataSpec.uri;
lastResponseHeaders = Collections.emptyMap(); lastResponseHeaders = Collections.emptyMap();
long availableBytes = dataSource.open(dataSpec); long availableBytes = dataSource.open(dataSpec);
lastOpenedUri = Assertions.checkNotNull(getUri()); lastOpenedUri = Assertions.checkNotNull(getUri());
lastResponseHeaders = getResponseHeaders(); lastResponseHeaders = getResponseHeaders();
opened = true;
return availableBytes; return availableBytes;
} }
@ -115,6 +110,5 @@ public final class StatsDataSource implements DataSource {
@Override @Override
public void close() throws IOException { public void close() throws IOException {
dataSource.close(); dataSource.close();
opened = false;
} }
} }

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static java.lang.Math.min; import static java.lang.Math.min;
import android.net.Uri; import android.net.Uri;
@ -90,8 +89,6 @@ public final class UdpDataSource extends BaseDataSource {
@Override @Override
public long open(DataSpec dataSpec) throws UdpDataSourceException { public long open(DataSpec dataSpec) throws UdpDataSourceException {
checkState(!opened);
uri = dataSpec.uri; uri = dataSpec.uri;
String host = uri.getHost(); String host = uri.getHost();
int port = uri.getPort(); int port = uri.getPort();

View File

@ -16,7 +16,6 @@
package com.google.android.exoplayer2.upstream.cache; package com.google.android.exoplayer2.upstream.cache;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import static java.lang.Math.min; import static java.lang.Math.min;
@ -34,6 +33,7 @@ import com.google.android.exoplayer2.upstream.PriorityDataSource;
import com.google.android.exoplayer2.upstream.TeeDataSource; import com.google.android.exoplayer2.upstream.TeeDataSource;
import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.upstream.cache.Cache.CacheException; import com.google.android.exoplayer2.upstream.cache.Cache.CacheException;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.PriorityTaskManager; import com.google.android.exoplayer2.util.PriorityTaskManager;
import java.io.IOException; import java.io.IOException;
import java.io.InterruptedIOException; import java.io.InterruptedIOException;
@ -397,7 +397,6 @@ public final class CacheDataSource implements DataSource {
private boolean currentRequestIgnoresCache; private boolean currentRequestIgnoresCache;
private long totalCachedBytesRead; private long totalCachedBytesRead;
private long checkCachePosition; private long checkCachePosition;
private boolean opened;
/** /**
* Constructs an instance with default {@link DataSource} and {@link DataSink} instances for * Constructs an instance with default {@link DataSource} and {@link DataSink} instances for
@ -553,7 +552,6 @@ public final class CacheDataSource implements DataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
try { try {
String key = cacheKeyFactory.buildCacheKey(dataSpec); String key = cacheKeyFactory.buildCacheKey(dataSpec);
DataSpec requestDataSpec = dataSpec.buildUpon().setKey(key).build(); DataSpec requestDataSpec = dataSpec.buildUpon().setKey(key).build();
@ -579,7 +577,6 @@ public final class CacheDataSource implements DataSource {
} }
} }
openNextSource(requestDataSpec, false); openNextSource(requestDataSpec, false);
opened = true;
return bytesRemaining; return bytesRemaining;
} catch (Throwable e) { } catch (Throwable e) {
handleBeforeThrow(e); handleBeforeThrow(e);
@ -652,7 +649,6 @@ public final class CacheDataSource implements DataSource {
notifyBytesRead(); notifyBytesRead();
try { try {
closeCurrentSource(); closeCurrentSource();
opened = false;
} catch (Throwable e) { } catch (Throwable e) {
handleBeforeThrow(e); handleBeforeThrow(e);
throw e; throw e;
@ -743,7 +739,7 @@ public final class CacheDataSource implements DataSource {
? readPosition + MIN_READ_BEFORE_CHECKING_CACHE ? readPosition + MIN_READ_BEFORE_CHECKING_CACHE
: Long.MAX_VALUE; : Long.MAX_VALUE;
if (checkCache) { if (checkCache) {
checkState(isBypassingCache()); Assertions.checkState(isBypassingCache());
if (nextDataSource == upstreamDataSource) { if (nextDataSource == upstreamDataSource) {
// Continue reading from upstream. // Continue reading from upstream.
return; return;

View File

@ -16,7 +16,6 @@
package com.google.android.exoplayer2.upstream.crypto; package com.google.android.exoplayer2.upstream.crypto;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull; import static com.google.android.exoplayer2.util.Util.castNonNull;
import android.net.Uri; import android.net.Uri;
@ -37,7 +36,6 @@ public final class AesCipherDataSource implements DataSource {
private final DataSource upstream; private final DataSource upstream;
private final byte[] secretKey; private final byte[] secretKey;
private boolean opened;
@Nullable private AesFlushingCipher cipher; @Nullable private AesFlushingCipher cipher;
@ -54,13 +52,11 @@ public final class AesCipherDataSource implements DataSource {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
long dataLength = upstream.open(dataSpec); long dataLength = upstream.open(dataSpec);
long nonce = CryptoUtil.getFNV64Hash(dataSpec.key); long nonce = CryptoUtil.getFNV64Hash(dataSpec.key);
cipher = cipher =
new AesFlushingCipher( new AesFlushingCipher(
Cipher.DECRYPT_MODE, secretKey, nonce, dataSpec.uriPositionOffset + dataSpec.position); Cipher.DECRYPT_MODE, secretKey, nonce, dataSpec.uriPositionOffset + dataSpec.position);
opened = true;
return dataLength; return dataLength;
} }
@ -92,6 +88,5 @@ public final class AesCipherDataSource implements DataSource {
public void close() throws IOException { public void close() throws IOException {
cipher = null; cipher = null;
upstream.close(); upstream.close();
opened = false;
} }
} }

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.net.Uri; import android.net.Uri;
@ -90,18 +89,14 @@ public class BaseDataSourceTest {
private static final class TestSource extends BaseDataSource { private static final class TestSource extends BaseDataSource {
private boolean opened;
public TestSource(boolean isNetwork) { public TestSource(boolean isNetwork) {
super(isNetwork); super(isNetwork);
} }
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
transferInitializing(dataSpec); transferInitializing(dataSpec);
transferStarted(dataSpec); transferStarted(dataSpec);
opened = true;
return C.LENGTH_UNSET; return C.LENGTH_UNSET;
} }
@ -120,7 +115,6 @@ public class BaseDataSourceTest {
@Override @Override
public void close() throws IOException { public void close() throws IOException {
transferEnded(); transferEnded();
opened = false;
} }
} }

View File

@ -17,7 +17,6 @@ package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.C.RESULT_END_OF_INPUT; import static com.google.android.exoplayer2.C.RESULT_END_OF_INPUT;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import android.net.Uri; import android.net.Uri;
@ -131,20 +130,19 @@ public final class DataSchemeDataSourceTest {
} }
@Test @Test
public void malformedData_throwsIOException() { public void malformedData() {
assertThrows( try {
IOException.class, schemeDataDataSource.open(buildDataSpec("data:text/plain;base64,,This%20is%20Content"));
() -> fail();
schemeDataDataSource.open( } catch (IOException e) {
buildDataSpec("data:text/plain;base64,,This%20is%20Content"))); // Expected.
} }
try {
@Test schemeDataDataSource.open(buildDataSpec("data:text/plain;base64,IncorrectPadding=="));
public void malformedData_incorrectPadding_throwsIOException() { fail();
assertThrows( } catch (IOException e) {
IOException.class, // Expected.
() -> }
schemeDataDataSource.open(buildDataSpec("data:text/plain;base64,IncorrectPadding==")));
} }
@Test @Test

View File

@ -284,7 +284,6 @@ public final class CacheDataSourceTest {
cacheDataSource.open( cacheDataSource.open(
buildDataSpec(TEST_DATA.length - 2, C.LENGTH_UNSET, defaultCacheKey))) buildDataSpec(TEST_DATA.length - 2, C.LENGTH_UNSET, defaultCacheKey)))
.isEqualTo(2); .isEqualTo(2);
cacheDataSource.close();
// An unbounded request with offset for not cached content. // An unbounded request with offset for not cached content.
dataSpec = dataSpec =

View File

@ -15,8 +15,6 @@
*/ */
package com.google.android.exoplayer2.source.hls; package com.google.android.exoplayer2.source.hls;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import android.net.Uri; import android.net.Uri;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
@ -52,7 +50,6 @@ import javax.crypto.spec.SecretKeySpec;
private final DataSource upstream; private final DataSource upstream;
private final byte[] encryptionKey; private final byte[] encryptionKey;
private final byte[] encryptionIv; private final byte[] encryptionIv;
private boolean opened;
@Nullable private CipherInputStream cipherInputStream; @Nullable private CipherInputStream cipherInputStream;
@ -75,7 +72,6 @@ import javax.crypto.spec.SecretKeySpec;
@Override @Override
public final long open(DataSpec dataSpec) throws IOException { public final long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
Cipher cipher; Cipher cipher;
try { try {
cipher = getCipherInstance(); cipher = getCipherInstance();
@ -95,7 +91,7 @@ import javax.crypto.spec.SecretKeySpec;
DataSourceInputStream inputStream = new DataSourceInputStream(upstream, dataSpec); DataSourceInputStream inputStream = new DataSourceInputStream(upstream, dataSpec);
cipherInputStream = new CipherInputStream(inputStream, cipher); cipherInputStream = new CipherInputStream(inputStream, cipher);
inputStream.open(); inputStream.open();
opened = true;
return C.LENGTH_UNSET; return C.LENGTH_UNSET;
} }
@ -125,7 +121,6 @@ import javax.crypto.spec.SecretKeySpec;
if (cipherInputStream != null) { if (cipherInputStream != null) {
cipherInputStream = null; cipherInputStream = null;
upstream.close(); upstream.close();
opened = false;
} }
} }

View File

@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.source.hls; package com.google.android.exoplayer2.source.hls;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.net.Uri; import android.net.Uri;
@ -105,7 +104,6 @@ public class Aes128DataSourceTest {
@Override @Override
public long open(DataSpec dataSpec) throws IOException { public long open(DataSpec dataSpec) throws IOException {
checkState(!opened);
opened = true; opened = true;
return C.LENGTH_UNSET; return C.LENGTH_UNSET;
} }