Stop double-encoding CMCD query parameters

`Uri.appendQueryParameter` is documented to encode its arguments, so
calling `Uri.encode` beforehand results in double-encoding.

Issue: androidx/media#1075

#minor-release

PiperOrigin-RevId: 604995441
This commit is contained in:
ibaker 2024-02-07 08:41:45 -08:00 committed by Copybara-Service
parent 5f9c96ab53
commit 7ebfed505c
6 changed files with 12 additions and 15 deletions

View file

@ -10,6 +10,8 @@
* Fix the regex used for validating custom Common Media Client Data (CMCD) * Fix the regex used for validating custom Common Media Client Data (CMCD)
key names by modifying it to only check for hyphen key names by modifying it to only check for hyphen
([#1028](https://github.com/androidx/media/issues/1028)). ([#1028](https://github.com/androidx/media/issues/1028)).
* Stop double-encoding CMCD query parameters
([#1075](https://github.com/androidx/media/issues/1075)).
* Transformer: * Transformer:
* Add `audioConversionProcess` and `videoConversionProcess` to * Add `audioConversionProcess` and `videoConversionProcess` to
`ExportResult` indicating how the respective track in the output file `ExportResult` indicating how the respective track in the output file

View file

@ -417,8 +417,7 @@ public final class CmcdData {
.uri .uri
.buildUpon() .buildUpon()
.appendQueryParameter( .appendQueryParameter(
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY, CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY, COMMA_JOINER.join(keyValuePairs));
Uri.encode(COMMA_JOINER.join(keyValuePairs)));
return dataSpec.buildUpon().setUri(uriBuilder.build()).build(); return dataSpec.buildUpon().setUri(uriBuilder.build()).build();
} }
} }

View file

@ -108,7 +108,7 @@ public class CmcdDataTest {
getCustomData() { getCustomData() {
return new ImmutableListMultimap.Builder<String, String>() return new ImmutableListMultimap.Builder<String, String>()
.put("CMCD-Object", "key-1=1") .put("CMCD-Object", "key-1=1")
.put("CMCD-Request", "key-2=\"stringValue1,stringValue2\"") .put("CMCD-Request", "key-2=\"stringVälue1,stringVälue2\"")
.build(); .build();
} }
@ -143,11 +143,13 @@ public class CmcdDataTest {
dataSpec = cmcdData.addToDataSpec(dataSpec); dataSpec = cmcdData.addToDataSpec(dataSpec);
assertThat( // Confirm that the values above are URL-encoded
Uri.decode(dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))) assertThat(dataSpec.uri.toString()).doesNotContain("ä");
assertThat(dataSpec.uri.toString()).contains(Uri.encode("ä"));
assertThat(dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
.isEqualTo( .isEqualTo(
"bl=1800,br=840,bs,cid=\"mediaId\",d=3000,dl=900,key-1=1," "bl=1800,br=840,bs,cid=\"mediaId\",d=3000,dl=900,key-1=1,"
+ "key-2=\"stringValue1,stringValue2\",mtp=500,pr=2.00,rtp=1700,sf=d," + "key-2=\"stringVälue1,stringVälue2\",mtp=500,pr=2.00,rtp=1700,sf=d,"
+ "sid=\"sessionId\",st=l,su,tb=1000"); + "sid=\"sessionId\",st=l,su,tb=1000");
} }

View file

@ -532,9 +532,7 @@ public class DefaultDashChunkSourceTest {
output); output);
assertThat( assertThat(
Uri.decode( output.chunk.dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
output.chunk.dataSpec.uri.getQueryParameter(
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
.isEqualTo( .isEqualTo(
"bl=0,br=700,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0," "bl=0,br=700,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0,"
+ "key-2=\"stringValue\",mtp=1000,nor=\"..%2Fvideo_4000_700000.m4s\",nrr=\"0-\"," + "key-2=\"stringValue\",mtp=1000,nor=\"..%2Fvideo_4000_700000.m4s\",nrr=\"0-\","

View file

@ -442,9 +442,7 @@ public class HlsChunkSourceTest {
output); output);
assertThat( assertThat(
Uri.decode( output.chunk.dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
output.chunk.dataSpec.uri.getQueryParameter(
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
.isEqualTo( .isEqualTo(
"bl=0,br=800,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0," "bl=0,br=800,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0,"
+ "key-2=\"stringValue\",nor=\"..%2F3.mp4\",nrr=\"0-\",ot=v,sf=h," + "key-2=\"stringValue\",nor=\"..%2F3.mp4\",nrr=\"0-\",ot=v,sf=h,"

View file

@ -283,9 +283,7 @@ public class DefaultSsChunkSourceTest {
output); output);
assertThat( assertThat(
Uri.decode( output.chunk.dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
output.chunk.dataSpec.uri.getQueryParameter(
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
.isEqualTo( .isEqualTo(
"bl=0,br=308,cid=\"mediaId\",com.example.test-key-1=1,d=1968,dl=0," "bl=0,br=308,cid=\"mediaId\",com.example.test-key-1=1,d=1968,dl=0,"
+ "key-2=\"stringValue\",mtp=1000,nor=\"..%2FFragments(video%3D19680000)\",ot=v," + "key-2=\"stringValue\",mtp=1000,nor=\"..%2FFragments(video%3D19680000)\",ot=v,"