Add additional tests for ISO location redaction
Verify location gets redacted if a 64-bit box appears before
the location in the mp4 file. Also verify 0-length box is handled
correctly.
Bug: 134155286
Test: atest MediaStore_Video_MediaTest
Change-Id: I6aef2a4c23e67ef7723792ba893f6e89e705100b
Merged-In: I6aef2a4c23e67ef7723792ba893f6e89e705100b
(cherry picked from commit ee7ccc8a46142674ede1ab8d83984e16e157665c)
diff --git a/tests/tests/provider/res/raw/moov-at-end-zero-len.mp4 b/tests/tests/provider/res/raw/moov-at-end-zero-len.mp4
new file mode 100644
index 0000000..5b307e2
--- /dev/null
+++ b/tests/tests/provider/res/raw/moov-at-end-zero-len.mp4
Binary files differ
diff --git a/tests/tests/provider/res/raw/moov-at-end.mp4 b/tests/tests/provider/res/raw/moov-at-end.mp4
new file mode 100644
index 0000000..cdf74b5
--- /dev/null
+++ b/tests/tests/provider/res/raw/moov-at-end.mp4
Binary files differ
diff --git a/tests/tests/provider/res/raw/testvideo_meta.mp4 b/tests/tests/provider/res/raw/testvideo_meta.mp4
index 8f04b40..e83c61d 100644
--- a/tests/tests/provider/res/raw/testvideo_meta.mp4
+++ b/tests/tests/provider/res/raw/testvideo_meta.mp4
Binary files differ
diff --git a/tests/tests/provider/src/android/provider/cts/media/MediaStore_Video_MediaTest.java b/tests/tests/provider/src/android/provider/cts/media/MediaStore_Video_MediaTest.java
index 0fa99ca..88295eb 100644
--- a/tests/tests/provider/src/android/provider/cts/media/MediaStore_Video_MediaTest.java
+++ b/tests/tests/provider/src/android/provider/cts/media/MediaStore_Video_MediaTest.java
@@ -258,29 +258,45 @@
// STOPSHIP: remove this once isolated storage is always enabled
Assume.assumeTrue(StorageManager.hasIsolatedStorage());
- final Uri publishUri = ProviderTestUtils.stageMedia(R.raw.testvideo_meta, mExternalVideo,
- "video/mp4");
+ // These videos have all had their ISO location metadata (in the (c)xyz box) artificially
+ // modified to +58.0000+011.0000 (middle of Skagerrak).
+ int[] videoIds = new int[] {
+ R.raw.testvideo_meta,
+ R.raw.moov_at_end,
+ R.raw.moov_at_end_zero_len,
+ };
+ Uri[] uris = new Uri[videoIds.length];
+ for (int i = 0; i < videoIds.length; i++) {
+ uris[i] = ProviderTestUtils.stageMedia(videoIds[i], mExternalVideo, "video/mp4");
+ }
- // Since we own the video, we should be able to see the location
- // we ourselves contributed
- try (ParcelFileDescriptor pfd = mContentResolver.openFile(publishUri, "r", null);
- MediaMetadataRetriever mmr = new MediaMetadataRetriever()) {
- mmr.setDataSource(pfd.getFileDescriptor());
- assertEquals("+37.4217-122.0834/",
- mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION));
- assertEquals("2", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS));
+ for (int i = 0; i < uris.length; i++) {
+ // Since we own the video, we should be able to see the location
+ // we ourselves contributed
+ try (ParcelFileDescriptor pfd = mContentResolver.openFile(uris[i], "r", null);
+ MediaMetadataRetriever mmr = new MediaMetadataRetriever()) {
+ mmr.setDataSource(pfd.getFileDescriptor());
+ assertEquals("+58.0000+011.0000/",
+ mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION));
+ assertEquals("2",
+ mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS));
+ }
}
// Revoke location access and remove ownership, which means that location should be redacted
ProviderTestUtils.revokeMediaLocationPermission(mContext);
- ProviderTestUtils.clearOwner(publishUri);
- try (ParcelFileDescriptor pfd = mContentResolver.openFile(publishUri, "r", null);
- MediaMetadataRetriever mmr = new MediaMetadataRetriever()) {
- mmr.setDataSource(pfd.getFileDescriptor());
- assertEquals(null,
- mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION));
- assertEquals("2", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS));
+ for (int i = 0; i < uris.length; i++) {
+ ProviderTestUtils.clearOwner(uris[i]);
+
+ try (ParcelFileDescriptor pfd = mContentResolver.openFile(uris[i], "r", null);
+ MediaMetadataRetriever mmr = new MediaMetadataRetriever()) {
+ mmr.setDataSource(pfd.getFileDescriptor());
+ assertEquals(null,
+ mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION));
+ assertEquals("2",
+ mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS));
+ }
}
}