Update the wpt test with chapterInfo

Bug: b/316044047
Change-Id: Iaaa16b5229d5e23ab9612bb0b93b237496113884
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5516503
Reviewed-by: Tommy Steimel <steimel@chromium.org>
Commit-Queue: Jiaming Cheng <jiamingc@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1296983}
diff --git a/mediasession/mediametadata.html b/mediasession/mediametadata.html
index f87e71d..d73a431 100644
--- a/mediasession/mediametadata.html
+++ b/mediasession/mediametadata.html
@@ -50,8 +50,27 @@
 test(function() {
   var image1 = { src: 'http://example.com/1', sizes: 'sizes1', type: 'type1' };
   var image2 = { src: 'http://example.com/2', sizes: 'sizes2', type: 'type2' };
+  var chapter1_image1 = { src: 'http://chapterexample.com/1', sizes: '128x128', type: 'image/png' };
+  var chapter1_image2 = { src: 'http://chapterexample.com/2', sizes: '512x512', type: 'image/png' };
+  var chapter2_image1 = { src: 'http://chapterexample.com/3', sizes: '128x128', type: 'image/png' };
+  var chapter2_image2 = { src: 'http://chapterexample.com/4', sizes: '512x512', type: 'image/png' };
   var metadata = new MediaMetadata({
-      title: 'foo', album: 'bar', artist: 'plop', artwork: [ image1, image2 ]
+    title: 'foo', album: 'bar', artist: 'plop', artwork: [image1, image2],
+    chapterInfo: [{
+      title: 'Chapter 1',
+      startTime: 0,
+      artwork: [
+        chapter1_image1,
+        chapter1_image2
+      ]
+    }, {
+      title: 'Chapter 2',
+      startTime: 16,
+      artwork: [
+        chapter2_image1,
+        chapter2_image2,
+      ]
+    }]
   });
 
   assert_equals(metadata.title, 'foo');
@@ -64,6 +83,22 @@
   assert_equals(metadata.artwork[1].src, image2.src);
   assert_equals(metadata.artwork[1].sizes, image2.sizes);
   assert_equals(metadata.artwork[1].type, image2.type);
+  assert_equals(metadata.chapterInfo[0].title, 'Chapter 1');
+  assert_equals(metadata.chapterInfo[0].startTime, 0);
+  assert_equals(metadata.chapterInfo[0].artwork[0].src, chapter1_image1.src);
+  assert_equals(metadata.chapterInfo[0].artwork[1].src, chapter1_image2.src);
+  assert_equals(metadata.chapterInfo[0].artwork[0].sizes, chapter1_image1.sizes);
+  assert_equals(metadata.chapterInfo[0].artwork[1].sizes, chapter1_image2.sizes);
+  assert_equals(metadata.chapterInfo[0].artwork[0].type, chapter1_image1.type);
+  assert_equals(metadata.chapterInfo[0].artwork[1].type, chapter1_image2.type);
+  assert_equals(metadata.chapterInfo[1].title, 'Chapter 2');
+  assert_equals(metadata.chapterInfo[1].startTime, 16);
+  assert_equals(metadata.chapterInfo[1].artwork[0].src, chapter2_image1.src);
+  assert_equals(metadata.chapterInfo[1].artwork[1].src, chapter2_image2.src);
+  assert_equals(metadata.chapterInfo[1].artwork[0].sizes, chapter2_image1.sizes);
+  assert_equals(metadata.chapterInfo[1].artwork[1].sizes, chapter2_image2.sizes);
+  assert_equals(metadata.chapterInfo[1].artwork[0].type, chapter2_image1.type);
+  assert_equals(metadata.chapterInfo[1].artwork[1].type, chapter2_image2.type);
 }, 'Test the different values allowed in MediaMetadata init dictionary');
 
 test(function() {
@@ -72,6 +107,7 @@
   assert_equals(metadata.artist, '');
   assert_equals(metadata.album, '');
   assert_equals(0, metadata.artwork.length);
+  assert_equals(0, metadata.chapterInfo.length);
 }, 'Test the default values for MediaMetadata with empty init dictionary');
 
 test(function() {
@@ -80,6 +116,7 @@
   assert_equals(metadata.artist, '');
   assert_equals(metadata.album, '');
   assert_equals(0, metadata.artwork.length);
+  assert_equals(0, metadata.chapterInfo.length);
 }, 'Test the default values for MediaMetadata with no init dictionary');
 
 test(function() {
@@ -90,8 +127,28 @@
 test(function() {
   var image1 = { src: 'http://example.com/1', sizes: 'sizes1', type: 'type1' };
   var image2 = { src: 'http://example.com/2', sizes: 'sizes2', type: 'type2' };
+  var chapter1_image1 = { src: 'http://chapterexample.com/1', sizes: '128x128', type: 'image/png' };
+  var chapter1_image2 = { src: 'http://chapterexample.com/2', sizes: '512x512', type: 'image/png' };
+  var chapter2_image1 = { src: 'http://chapterexample.com/3', sizes: '128x128', type: 'image/png' };
+  var chapter2_image2 = { src: 'http://chapterexample.com/4', sizes: '512x512', type: 'image/png' };
+
   var metadata = new MediaMetadata({
-    title: 'foo', album: 'bar', artist: 'plop', artwork: [ image1, image2 ]
+    title: 'foo', album: 'bar', artist: 'plop', artwork: [image1, image2],
+    chapterInfo: [{
+      title: 'Chapter 1',
+      startTime: 0,
+      artwork: [
+        chapter1_image1,
+        chapter1_image2
+      ]
+    }, {
+      title: 'Chapter 2',
+      startTime: 16,
+      artwork: [
+        chapter2_image1,
+        chapter2_image2,
+      ]
+    }]
   });
 
   metadata.title = 'something else';
@@ -109,6 +166,18 @@
   assert_equals(metadata.artwork[0].src, 'http://example.com/');
   assert_equals(metadata.artwork[0].sizes, '40x40');
   assert_equals(metadata.artwork[0].type, 'image/png');
+
+  // The chapterInfo cannot be modified.
+  var chapter_image = { src: 'http://example.com/', sizes: '40x40', type: 'image/png' };
+  var chapter = {
+    title: 'Chapter 3',
+    startTime: 22,
+    artwork: [chapter_image]
+  };
+  metadata.chapterInfo = [chapter];
+  assert_equals(metadata.chapterInfo[0].title, 'Chapter 1');
+  assert_equals(metadata.chapterInfo[0].startTime, 0);
+  assert_equals(metadata.chapterInfo.length, 2);
 }, "Test that MediaMetadata is read/write");
 
 test(function() {
@@ -121,7 +190,7 @@
 
   metadata.artwork[0].src = 'bar';
   assert_equals(metadata.artwork[0].src, 'http://foo.com/');
-}, "Test that MediaMetadat.artwork can't be modified");
+}, "Test that MediaMetadata.artwork can't be modified");
 
 test(function() {
   var metadata = new MediaMetadata({ artwork: [{
@@ -149,6 +218,34 @@
 }, "Test that MediaMetadata.artwork is Frozen");
 
 test(function() {
+  var chapter1_image1 = { src: 'http://chapterexample.com/1', sizes: '128x128', type: 'image/png' };
+  var chapter1_image2 = { src: 'http://chapterexample.com/2', sizes: '512x512', type: 'image/png' };
+  var chapter2_image1 = { src: 'http://chapterexample.com/3', sizes: '128x128', type: 'image/png' };
+  var chapter2_image2 = { src: 'http://chapterexample.com/4', sizes: '512x512', type: 'image/png' };
+  var metadata = new MediaMetadata({
+    chapterInfo: [{
+      title: 'Chapter 1',
+      startTime: 0,
+      artwork: [
+        chapter1_image1,
+        chapter1_image2
+      ]
+    }, {
+      title: 'Chapter 2',
+      startTime: 16,
+      artwork: [
+        chapter2_image1,
+        chapter2_image2,
+      ]
+    }]
+  });
+
+  assert_true(Object.isFrozen(metadata.chapterInfo));
+  for (var i = 0; i < metadata.chapterInfo.length; ++i)
+    assert_true(Object.isFrozen(metadata.chapterInfo[i]));
+}, "Test that MediaMetadata.chapterInfo is Frozen");
+
+test(function() {
   var metadata = new MediaMetadata({ artwork: [
     { src: 'http://example.com', sizes: '40x40', type: 'image/png' },
     { src: '../foo', sizes: '40x40', type: 'image/png' },
@@ -161,6 +258,39 @@
 }, "Test that MediaMetadata.artwork returns parsed urls");
 
 test(function() {
+  var chapter1_image1 = { src: 'http://chapterexample.com/1', sizes: '128x128', type: 'image/png' };
+  var chapter1_image2 = { src: 'http://chapterexample.com/2', sizes: '512x512', type: 'image/png' };
+  var chapter2_image1 = { src: 'http://chapterexample.com/3', sizes: '128x128', type: 'image/png' };
+  var chapter2_image2 = { src: 'http://chapterexample.com/4', sizes: '512x512', type: 'image/png' };
+  var metadata = new MediaMetadata({
+    chapterInfo: [{
+      title: 'Chapter 1',
+      startTime: 0,
+      artwork: [
+        chapter1_image1,
+        chapter1_image2
+      ]
+    }, {
+      title: 'Chapter 2',
+      startTime: 16,
+      artwork: [
+        chapter2_image1,
+        chapter2_image2,
+      ]
+    }]
+  });
+
+  assert_equals(metadata.chapterInfo[0].artwork[0].src,
+    new URL('http://chapterexample.com/1', document.URL).href)
+  assert_equals(metadata.chapterInfo[0].artwork[1].src,
+    new URL('http://chapterexample.com/2', document.URL).href)
+  assert_equals(metadata.chapterInfo[1].artwork[0].src,
+    new URL('http://chapterexample.com/3', document.URL).href)
+  assert_equals(metadata.chapterInfo[1].artwork[1].src,
+    new URL('http://chapterexample.com/4', document.URL).href)
+}, "Test that MediaMetadata.chapterInfo's artwork returns parsed urls");
+
+test(function() {
   var metadata = 42;
 
   assert_throws_js(TypeError, _ => {
@@ -180,6 +310,22 @@
   });
   assert_equals(metadata.artwork.length, 0);
 
+  assert_throws_js(TypeError, _ => {
+    metadata
+    new MediaMetadata({
+      chapterInfo: [{
+        title: 'Chapter 1',
+        startTime: 0,
+        artwork: [
+          // Valid url.
+          { src: 'http://example.com' },
+          // Invalid url.
+          { src: 'http://example.com:demo' },
+        ]
+      }]
+    });
+  });
+  assert_equals(metadata.chapterInfo.length, 0);
 }, "Test that MediaMetadata throws when setting an invalid url");
 
 test(function() {
@@ -190,13 +336,24 @@
 
 test(function() {
   assert_throws_js(TypeError, _ => {
-    new MediaMetadata({ artwork: [ {} ] });
+    new MediaMetadata({ artwork: [ {} ] })
   });
 
   var metadata = new MediaMetadata();
   assert_throws_js(TypeError, _ => {
     metadata.artwork = [ { type: 'image/png', sizes: '40x40' } ];
   });
+
+  assert_throws_js(TypeError, _ => {
+    metadata
+    new MediaMetadata({
+      chapterInfo: [{
+        title: 'Chapter 1',
+        startTime: 0,
+        artwork: [{ type: 'image/png', sizes: '40x40' }]
+      }]
+    });
+  });
 }, "Test that MediaImage.src is required")
 
 promise_test(async t => {