Title: [214400] trunk
Revision
214400
Author
commit-qu...@webkit.org
Date
2017-03-25 10:45:22 -0700 (Sat, 25 Mar 2017)

Log Message

AX: Media controls are unlabeled
https://bugs.webkit.org/show_bug.cgi?id=169947
<rdar://problem/30153323>

Patch by Aaron Chu <aaron_...@apple.com> on 2017-03-25
Reviewed by Antoine Quint.

Source/WebCore:

Added a "label" property for Icons, which are used to set
the aria-label for the controls in modern media controls.

Test: Addition to all existing modern media controls tests.

* English.lproj/modern-media-controls-localized-strings.js:
* Modules/modern-media-controls/controls/icon-button.js:
(IconButton.prototype.set iconName):
(IconButton.prototype.handleEvent):
(IconButton.prototype._loadImage):
* Modules/modern-media-controls/controls/icon-service.js:
* Modules/modern-media-controls/controls/start-button.js:
(StartButton):
* Modules/modern-media-controls/js-files:

LayoutTests:

* media/modern-media-controls/airplay-button/airplay-button-expected.txt:
* media/modern-media-controls/airplay-button/airplay-button.html:
* media/modern-media-controls/forward-button/forward-button-expected.txt:
* media/modern-media-controls/forward-button/forward-button.html:
* media/modern-media-controls/fullscreen-button/fullscreen-button-expected.txt:
* media/modern-media-controls/fullscreen-button/fullscreen-button.html:
* media/modern-media-controls/icon-button/icon-button-expected.txt:
* media/modern-media-controls/icon-button/icon-button.html:
* media/modern-media-controls/icon-service/icon-service-expected.txt:
* media/modern-media-controls/icon-service/icon-service.html:
* media/modern-media-controls/mute-button/mute-button-expected.txt:
* media/modern-media-controls/mute-button/mute-button.html:
* media/modern-media-controls/pip-button/pip-button-expected.txt:
* media/modern-media-controls/pip-button/pip-button.html:
* media/modern-media-controls/play-pause-button/play-pause-button-expected.txt:
* media/modern-media-controls/play-pause-button/play-pause-button.html:
* media/modern-media-controls/rewind-button/rewind-button-expected.txt:
* media/modern-media-controls/rewind-button/rewind-button.html:
* media/modern-media-controls/skip-back-button/skip-back-button-expected.txt:
* media/modern-media-controls/skip-back-button/skip-back-button.html:
* media/modern-media-controls/start-button/start-button-expected.txt:
* media/modern-media-controls/start-button/start-button.html:
* media/modern-media-controls/tracks-button/tracks-button-expected.txt:
* media/modern-media-controls/tracks-button/tracks-button.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (214399 => 214400)


--- trunk/LayoutTests/ChangeLog	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/ChangeLog	2017-03-25 17:45:22 UTC (rev 214400)
@@ -1,3 +1,36 @@
+2017-03-25  Aaron Chu  <aaron_...@apple.com>
+
+        AX: Media controls are unlabeled
+        https://bugs.webkit.org/show_bug.cgi?id=169947
+        <rdar://problem/30153323>
+
+        Reviewed by Antoine Quint.
+
+        * media/modern-media-controls/airplay-button/airplay-button-expected.txt:
+        * media/modern-media-controls/airplay-button/airplay-button.html:
+        * media/modern-media-controls/forward-button/forward-button-expected.txt:
+        * media/modern-media-controls/forward-button/forward-button.html:
+        * media/modern-media-controls/fullscreen-button/fullscreen-button-expected.txt:
+        * media/modern-media-controls/fullscreen-button/fullscreen-button.html:
+        * media/modern-media-controls/icon-button/icon-button-expected.txt:
+        * media/modern-media-controls/icon-button/icon-button.html:
+        * media/modern-media-controls/icon-service/icon-service-expected.txt:
+        * media/modern-media-controls/icon-service/icon-service.html:
+        * media/modern-media-controls/mute-button/mute-button-expected.txt:
+        * media/modern-media-controls/mute-button/mute-button.html:
+        * media/modern-media-controls/pip-button/pip-button-expected.txt:
+        * media/modern-media-controls/pip-button/pip-button.html:
+        * media/modern-media-controls/play-pause-button/play-pause-button-expected.txt:
+        * media/modern-media-controls/play-pause-button/play-pause-button.html:
+        * media/modern-media-controls/rewind-button/rewind-button-expected.txt:
+        * media/modern-media-controls/rewind-button/rewind-button.html:
+        * media/modern-media-controls/skip-back-button/skip-back-button-expected.txt:
+        * media/modern-media-controls/skip-back-button/skip-back-button.html:
+        * media/modern-media-controls/start-button/start-button-expected.txt:
+        * media/modern-media-controls/start-button/start-button.html:
+        * media/modern-media-controls/tracks-button/tracks-button-expected.txt:
+        * media/modern-media-controls/tracks-button/tracks-button.html:
+
 2017-03-25  Carlos Garcia Campos  <cgar...@igalia.com>
 
         Unreviewed GTK+ gardening. Update expectations of several tests.

Modified: trunk/LayoutTests/media/modern-media-controls/airplay-button/airplay-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/airplay-button/airplay-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/airplay-button/airplay-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -21,10 +21,10 @@
 PASS airplayButton.element.localName is "button"
 PASS airplayButton.element.classList.contains("icon") is true
 PASS airplayButton.element.classList.contains("airplay") is true
-PASS airplayButton.iconName is "airplay"
+PASS airplayButton.iconName is Icons.Airplay
 FAIL airplayButton.width should be 0. Was 25.
 FAIL airplayButton.height should be 0. Was 22.
-PASS airplayButton._image is iconService.imageForIconNameAndLayoutTraits(Icons.Airplay, LayoutTraits.macOS)
+PASS airplayButton._image is iconService.imageForIconNameAndLayoutTraits(Icons.Airplay.name, LayoutTraits.macOS)
 PASS airplayButton._image.src is not ""
 FAIL airplayButton._image.complete should be false. Was true.
 PASS airplayButton.width is not 0
@@ -46,6 +46,7 @@
 frameDidFire()
 PASS dirtyNodes.has(airplayButton) is false
 PASS airplayButton.needsLayout is false
+PASS airplayButton.element.getAttribute('aria-label') is "AirPlay"
 _frameDidFire() - end
 PASS airplayButton.element.style.webkitMaskImage.includes("macOS/airplay@") became true
 PASS successfullyParsed is true

Modified: trunk/LayoutTests/media/modern-media-controls/airplay-button/airplay-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/airplay-button/airplay-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/airplay-button/airplay-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -15,10 +15,10 @@
 shouldBeEqualToString("airplayButton.element.localName", "button");
 shouldBeTrue('airplayButton.element.classList.contains("icon")');
 shouldBeTrue('airplayButton.element.classList.contains("airplay")');
-shouldBeEqualToString("airplayButton.iconName", `${Icons.Airplay}`);
+shouldBe("airplayButton.iconName", "Icons.Airplay");
 shouldBe("airplayButton.width", "0");
 shouldBe("airplayButton.height", "0");
-shouldBe("airplayButton._image", "iconService.imageForIconNameAndLayoutTraits(Icons.Airplay, LayoutTraits.macOS)");
+shouldBe("airplayButton._image", "iconService.imageForIconNameAndLayoutTraits(Icons.Airplay.name, LayoutTraits.macOS)");
 shouldNotBeEqualToString("airplayButton._image.src", "");
 shouldBeFalse("airplayButton._image.complete");
 
@@ -42,6 +42,7 @@
         debug("frameDidFire()");
         shouldBeFalse("dirtyNodes.has(airplayButton)");
         shouldBeFalse("airplayButton.needsLayout");
+        shouldBeEqualToString("airplayButton.element.getAttribute('aria-label')", "AirPlay");
     }
     shouldBecomeEqual('airplayButton.element.style.webkitMaskImage.includes("macOS/airplay@")', "true", finishJSTest);
     // shouldBecomeEqual('airplayButton.element.style.webkitMaskImage.includes("macOS/airplay@")', "true", () => {

Modified: trunk/LayoutTests/media/modern-media-controls/forward-button/forward-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/forward-button/forward-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/forward-button/forward-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,7 +6,7 @@
 PASS forwardButton.element.localName is "button"
 PASS forwardButton.element.classList.contains("icon") is true
 PASS forwardButton.element.classList.contains("forward") is true
-PASS forwardButton.iconName is "forward"
+PASS forwardButton.iconName is Icons.Forward
 PASS forwardButton.element.style.webkitMaskImage.includes("macOS/forward@") became true
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/media/modern-media-controls/forward-button/forward-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/forward-button/forward-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/forward-button/forward-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,7 +13,7 @@
 shouldBeEqualToString("forwardButton.element.localName", "button");
 shouldBeTrue('forwardButton.element.classList.contains("icon")');
 shouldBeTrue('forwardButton.element.classList.contains("forward")');
-shouldBeEqualToString("forwardButton.iconName", `${Icons.Forward}`);
+shouldBe("forwardButton.iconName", "Icons.Forward");
 
 shouldBecomeEqual('forwardButton.element.style.webkitMaskImage.includes("macOS/forward@")', "true", finishMediaControlsTest);
 

Modified: trunk/LayoutTests/media/modern-media-controls/fullscreen-button/fullscreen-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/fullscreen-button/fullscreen-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/fullscreen-button/fullscreen-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,8 +6,8 @@
 PASS enterFullscreenButton.element.localName is "button"
 PASS enterFullscreenButton.element.classList.contains("icon") is true
 PASS enterFullscreenButton.element.classList.contains("fullscreen") is true
-PASS enterFullscreenButton.iconName is "enter-fullscreen"
-PASS exitFullscreenButton.iconName is "exit-fullscreen"
+PASS enterFullscreenButton.iconName is Icons.EnterFullscreen
+PASS exitFullscreenButton.iconName is Icons.ExitFullscreen
 PASS enterFullscreenButton.element.style.webkitMaskImage.includes("macOS/enter-fullscreen@") is true
 PASS iOSEnterFullscreenButton.element.style.webkitMaskImage.includes("iOS/enter-fullscreen@") is true
 PASS exitFullscreenButton.element.style.webkitMaskImage.includes("macOS/exit-fullscreen@") is true

Modified: trunk/LayoutTests/media/modern-media-controls/fullscreen-button/fullscreen-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/fullscreen-button/fullscreen-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/fullscreen-button/fullscreen-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,12 +13,12 @@
 shouldBeEqualToString("enterFullscreenButton.element.localName", "button");
 shouldBeTrue('enterFullscreenButton.element.classList.contains("icon")');
 shouldBeTrue('enterFullscreenButton.element.classList.contains("fullscreen")');
-shouldBeEqualToString("enterFullscreenButton.iconName", `${Icons.EnterFullscreen}`);
+shouldBe("enterFullscreenButton.iconName", "Icons.EnterFullscreen");
 
 const iOSEnterFullscreenButton = new FullscreenButton({ layoutTraits: LayoutTraits.iOS });
 
 const exitFullscreenButton = new FullscreenButton({ layoutTraits: LayoutTraits.macOS | LayoutTraits.Fullscreen });
-shouldBeEqualToString("exitFullscreenButton.iconName", `${Icons.ExitFullscreen}`);
+shouldBe("exitFullscreenButton.iconName", "Icons.ExitFullscreen");
 
 scheduler.frameDidFire = function()
 {

Modified: trunk/LayoutTests/media/modern-media-controls/icon-button/icon-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/icon-button/icon-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/icon-button/icon-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -18,6 +18,7 @@
 PASS iconButton.element.style.width is "22px"
 PASS iconButton.element.style.height is "24px"
 PASS iconButton.element.style.webkitMaskSize is "22px 24px"
+PASS iconButton.element.getAttribute('aria-label') is "Pause"
 
 Setting start icon
 PASS iconButton.element.style.webkitMaskImage.includes("macOS/start") is true
@@ -24,6 +25,7 @@
 PASS iconButton.element.style.width is "70px"
 PASS iconButton.element.style.height is "70px"
 PASS iconButton.element.style.webkitMaskSize is "70px 70px"
+PASS iconButton.element.getAttribute('aria-label') is "Start"
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/media/modern-media-controls/icon-button/icon-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/icon-button/icon-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/icon-button/icon-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -41,6 +41,7 @@
         shouldBeEqualToString("iconButton.element.style.height", "24px");
         shouldBeEqualToString("iconButton.element.style.webkitMaskSize", "22px 24px");
 
+        shouldBeEqualToString("iconButton.element.getAttribute('aria-label')", `${Icons.Pause.label}`);
         debug("");
         debug("Setting start icon");
         iconButton.iconName = Icons.Start;
@@ -49,6 +50,7 @@
         shouldBeEqualToString("iconButton.element.style.width", "70px");
         shouldBeEqualToString("iconButton.element.style.height", "70px");
         shouldBeEqualToString("iconButton.element.style.webkitMaskSize", "70px 70px");
+        shouldBeEqualToString("iconButton.element.getAttribute('aria-label')", `${Icons.Start.label}`);
 
         finishMediaControlsTest();
     } 

Modified: trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -4,16 +4,16 @@
 
 
 Checking path to images is computed according to traits
-PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS).src.includes("macOS/pause@") is true
-PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS).src.includes("iOS/pause@") is true
-PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS | LayoutTraits.Fullscreen).src.includes("macOS/pause-fullscreen@") is true
+PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS).src.includes("macOS/pause@") is true
+PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS).src.includes("iOS/pause@") is true
+PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS | LayoutTraits.Fullscreen).src.includes("macOS/pause-fullscreen@") is true
 
 Checking fullscreen or compact layout traits are ignored on iOS
-PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS | LayoutTraits.Fullscreen) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS) is true
-PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS | LayoutTraits.Compact) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS) is true
+PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS | LayoutTraits.Fullscreen) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS) is true
+PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS | LayoutTraits.Compact) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS) is true
 
 Checking requested images are cached
-PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS) is true
+PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS) is true
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -1,7 +1,5 @@
 <script src=""
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
-<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
 <body>
 <script type="text/_javascript_">
 
@@ -10,18 +8,18 @@
 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
 
 debug("Checking path to images is computed according to traits");
-shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS).src.includes("macOS/pause@")');
-shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS).src.includes("iOS/pause@")');
-shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS | LayoutTraits.Fullscreen).src.includes("macOS/pause-fullscreen@")');
+shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS).src.includes("macOS/pause@")');
+shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS).src.includes("iOS/pause@")');
+shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS | LayoutTraits.Fullscreen).src.includes("macOS/pause-fullscreen@")');
 
 debug("");
 debug("Checking fullscreen or compact layout traits are ignored on iOS");
-shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS | LayoutTraits.Fullscreen) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS)');
-shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS | LayoutTraits.Compact) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS)');
+shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS | LayoutTraits.Fullscreen) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS)');
+shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS | LayoutTraits.Compact) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.iOS)');
 
 debug("");
 debug("Checking requested images are cached");
-shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS)');
+shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS) === iconService.imageForIconNameAndLayoutTraits(Icons.Pause.name, LayoutTraits.macOS)');
 
 </script>
 <script src=""

Modified: trunk/LayoutTests/media/modern-media-controls/mute-button/mute-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/mute-button/mute-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/mute-button/mute-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,10 +6,10 @@
 PASS muteButton.element.localName is "button"
 PASS muteButton.element.classList.contains("icon") is true
 PASS muteButton.element.classList.contains("mute") is true
-PASS muteButton.iconName is "volume"
+PASS muteButton.iconName is Icons.Volume
 PASS muteButton.muted is false
 PASS mutedButton.muted is true
-PASS mutedButton.iconName is "volume-mute"
+PASS mutedButton.iconName is Icons.VolumeMuted
 PASS muteButton.element.style.webkitMaskImage.includes("macOS/volume@") became true
 PASS mutedButton.element.style.webkitMaskImage.includes("macOS/volume-mute@") became true
 PASS successfullyParsed is true

Modified: trunk/LayoutTests/media/modern-media-controls/mute-button/mute-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/mute-button/mute-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/mute-button/mute-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,13 +13,13 @@
 shouldBeEqualToString("muteButton.element.localName", "button");
 shouldBeTrue('muteButton.element.classList.contains("icon")');
 shouldBeTrue('muteButton.element.classList.contains("mute")');
-shouldBeEqualToString("muteButton.iconName", `${Icons.Volume}`);
+shouldBe("muteButton.iconName", "Icons.Volume");
 shouldBeFalse("muteButton.muted");
 
 const mutedButton = new MuteButton({ layoutTraits: LayoutTraits.macOS });
 mutedButton.muted = true;
 shouldBeTrue("mutedButton.muted");
-shouldBeEqualToString("mutedButton.iconName", `${Icons.VolumeMuted}`);
+shouldBe("mutedButton.iconName", "Icons.VolumeMuted");
 
 shouldBecomeEqual('muteButton.element.style.webkitMaskImage.includes("macOS/volume@")', "true", () => {
     shouldBecomeEqual('mutedButton.element.style.webkitMaskImage.includes("macOS/volume-mute@")', "true", finishJSTest);

Modified: trunk/LayoutTests/media/modern-media-controls/pip-button/pip-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/pip-button/pip-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/pip-button/pip-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,7 +6,7 @@
 PASS pipButton.element.localName is "button"
 PASS pipButton.element.classList.contains("icon") is true
 PASS pipButton.element.classList.contains("pip") is true
-PASS pipButton.iconName is "pip-in"
+PASS pipButton.iconName is Icons.EnterPiP
 PASS pipButton.element.style.webkitMaskImage.includes("macOS/pip-in@") became true
 PASS iOSPiPButton.element.style.webkitMaskImage.includes("iOS/pip-in@") became true
 

Modified: trunk/LayoutTests/media/modern-media-controls/pip-button/pip-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/pip-button/pip-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/pip-button/pip-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,7 +13,7 @@
 shouldBeEqualToString("pipButton.element.localName", "button");
 shouldBeTrue('pipButton.element.classList.contains("icon")');
 shouldBeTrue('pipButton.element.classList.contains("pip")');
-shouldBeEqualToString("pipButton.iconName", `${Icons.EnterPiP}`);
+shouldBe("pipButton.iconName", "Icons.EnterPiP");
 
 const iOSPiPButton = new PiPButton({ layoutTraits: LayoutTraits.iOS });
 

Modified: trunk/LayoutTests/media/modern-media-controls/play-pause-button/play-pause-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/play-pause-button/play-pause-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/play-pause-button/play-pause-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,10 +6,10 @@
 PASS playButton.element.localName is "button"
 PASS playButton.element.classList.contains("icon") is true
 PASS playButton.element.classList.contains("play-pause") is true
-PASS playButton.iconName is "play"
+PASS playButton.iconName is Icons.Play
 PASS playButton.playing is false
 PASS pauseButton.playing is true
-PASS pauseButton.iconName is "pause"
+PASS pauseButton.iconName is Icons.Pause
 PASS playButton.element.style.webkitMaskImage.includes("macOS/play@") became true
 PASS pauseButton.element.style.webkitMaskImage.includes("macOS/pause@") became true
 PASS iOSPlayButton.element.style.webkitMaskImage.includes("iOS/play@") became true

Modified: trunk/LayoutTests/media/modern-media-controls/play-pause-button/play-pause-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/play-pause-button/play-pause-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/play-pause-button/play-pause-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,7 +13,7 @@
 shouldBeEqualToString("playButton.element.localName", "button");
 shouldBeTrue('playButton.element.classList.contains("icon")');
 shouldBeTrue('playButton.element.classList.contains("play-pause")');
-shouldBeEqualToString("playButton.iconName", `${Icons.Play}`);
+shouldBe("playButton.iconName", "Icons.Play");
 shouldBeFalse("playButton.playing");
 
 const fullscreenPlayButton = new PlayPauseButton({ layoutTraits: LayoutTraits.macOS | LayoutTraits.Fullscreen });
@@ -22,7 +22,7 @@
 const pauseButton = new PlayPauseButton({ layoutTraits: LayoutTraits.macOS });
 pauseButton.playing = true;
 shouldBeTrue("pauseButton.playing");
-shouldBeEqualToString("pauseButton.iconName", `${Icons.Pause}`);
+shouldBe("pauseButton.iconName", "Icons.Pause");
 
 const fullscreenPauseButton = new PlayPauseButton({ layoutTraits: LayoutTraits.macOS | LayoutTraits.Fullscreen });
 fullscreenPauseButton.playing = true;

Modified: trunk/LayoutTests/media/modern-media-controls/rewind-button/rewind-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/rewind-button/rewind-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/rewind-button/rewind-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,7 +6,7 @@
 PASS rewindButton.element.localName is "button"
 PASS rewindButton.element.classList.contains("icon") is true
 PASS rewindButton.element.classList.contains("rewind") is true
-PASS rewindButton.iconName is "rewind"
+PASS rewindButton.iconName is Icons.Rewind
 PASS rewindButton.element.style.webkitMaskImage.includes("macOS/rewind@") became true
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/media/modern-media-controls/rewind-button/rewind-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/rewind-button/rewind-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/rewind-button/rewind-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -15,7 +15,7 @@
 shouldBeEqualToString("rewindButton.element.localName", "button");
 shouldBeTrue('rewindButton.element.classList.contains("icon")');
 shouldBeTrue('rewindButton.element.classList.contains("rewind")');
-shouldBeEqualToString("rewindButton.iconName", `${Icons.Rewind}`);
+shouldBe("rewindButton.iconName", "Icons.Rewind");
 
 shouldBecomeEqual('rewindButton.element.style.webkitMaskImage.includes("macOS/rewind@")', "true", finishJSTest);
 

Modified: trunk/LayoutTests/media/modern-media-controls/skip-back-button/skip-back-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/skip-back-button/skip-back-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/skip-back-button/skip-back-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,7 +6,7 @@
 PASS skipBackButton.element.localName is "button"
 PASS skipBackButton.element.classList.contains("icon") is true
 PASS skipBackButton.element.classList.contains("skip-back") is true
-PASS skipBackButton.iconName is "interval-skip-back"
+PASS skipBackButton.iconName is Icons.SkipBack
 PASS skipBackButton.element.style.webkitMaskImage.includes("macOS/interval-skip-back@") became true
 PASS iOSSkipBackButton.element.style.webkitMaskImage.includes("iOS/interval-skip-back@") became true
 PASS successfullyParsed is true

Modified: trunk/LayoutTests/media/modern-media-controls/skip-back-button/skip-back-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/skip-back-button/skip-back-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/skip-back-button/skip-back-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,7 +13,7 @@
 shouldBeEqualToString("skipBackButton.element.localName", "button");
 shouldBeTrue('skipBackButton.element.classList.contains("icon")');
 shouldBeTrue('skipBackButton.element.classList.contains("skip-back")');
-shouldBeEqualToString("skipBackButton.iconName", `${Icons.SkipBack}`);
+shouldBe("skipBackButton.iconName", "Icons.SkipBack");
 
 const iOSSkipBackButton = new SkipBackButton({ layoutTraits: LayoutTraits.iOS });
 

Modified: trunk/LayoutTests/media/modern-media-controls/start-button/start-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/start-button/start-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/start-button/start-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -11,6 +11,7 @@
 PASS startButton.element.lastElementChild.localName is "img"
 PASS startButton.element.lastElementChild.src.includes('macOS/start@') is true
 PASS iOSStartButton.element.lastElementChild.src.includes('iOS/start@') is true
+PASS startButton.element.getAttribute('aria-label') is "Start"
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/media/modern-media-controls/start-button/start-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/start-button/start-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/start-button/start-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -19,6 +19,7 @@
 shouldBeTrue("iOSStartButton.element.lastElementChild.src.includes('iOS/start@')");
 
 
+shouldBeEqualToString("startButton.element.getAttribute('aria-label')", "Start");
 </script>
 <script src=""
 </body>

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-button/tracks-button-expected.txt (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/tracks-button/tracks-button-expected.txt	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-button/tracks-button-expected.txt	2017-03-25 17:45:22 UTC (rev 214400)
@@ -6,7 +6,7 @@
 PASS tracksButton.element.localName is "button"
 PASS tracksButton.element.classList.contains("icon") is true
 PASS tracksButton.element.classList.contains("tracks") is true
-PASS tracksButton.iconName is "media-selection"
+PASS tracksButton.iconName is Icons.Tracks
 PASS tracksButton.element.style.webkitMaskImage.includes("macOS/media-selection@") became true
 PASS fullscreenTracksButton.element.style.webkitMaskImage.includes("macOS/media-selection-fullscreen@") became true
 PASS successfullyParsed is true

Modified: trunk/LayoutTests/media/modern-media-controls/tracks-button/tracks-button.html (214399 => 214400)


--- trunk/LayoutTests/media/modern-media-controls/tracks-button/tracks-button.html	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/LayoutTests/media/modern-media-controls/tracks-button/tracks-button.html	2017-03-25 17:45:22 UTC (rev 214400)
@@ -13,7 +13,7 @@
 shouldBeEqualToString("tracksButton.element.localName", "button");
 shouldBeTrue('tracksButton.element.classList.contains("icon")');
 shouldBeTrue('tracksButton.element.classList.contains("tracks")');
-shouldBeEqualToString("tracksButton.iconName", `${Icons.Tracks}`);
+shouldBe("tracksButton.iconName", "Icons.Tracks");
 
 const fullscreenTracksButton = new TracksButton({ layoutTraits: LayoutTraits.macOS | LayoutTraits.Fullscreen });
 

Modified: trunk/Source/WebCore/ChangeLog (214399 => 214400)


--- trunk/Source/WebCore/ChangeLog	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/Source/WebCore/ChangeLog	2017-03-25 17:45:22 UTC (rev 214400)
@@ -1,3 +1,26 @@
+2017-03-25  Aaron Chu  <aaron_...@apple.com>
+
+        AX: Media controls are unlabeled
+        https://bugs.webkit.org/show_bug.cgi?id=169947
+        <rdar://problem/30153323>
+
+        Reviewed by Antoine Quint.
+
+        Added a "label" property for Icons, which are used to set
+        the aria-label for the controls in modern media controls.
+
+        Test: Addition to all existing modern media controls tests.
+
+        * English.lproj/modern-media-controls-localized-strings.js:
+        * Modules/modern-media-controls/controls/icon-button.js:
+        (IconButton.prototype.set iconName):
+        (IconButton.prototype.handleEvent):
+        (IconButton.prototype._loadImage):
+        * Modules/modern-media-controls/controls/icon-service.js:
+        * Modules/modern-media-controls/controls/start-button.js:
+        (StartButton):
+        * Modules/modern-media-controls/js-files:
+
 2017-03-25  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [XDG] MIMETypeRegistry::getMIMETypeForExtension should return a null/empty string when mime type is unknown

Modified: trunk/Source/WebCore/English.lproj/modern-media-controls-localized-strings.js (214399 => 214400)


--- trunk/Source/WebCore/English.lproj/modern-media-controls-localized-strings.js	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/Source/WebCore/English.lproj/modern-media-controls-localized-strings.js	2017-03-25 17:45:22 UTC (rev 214400)
@@ -1,10 +1,29 @@
 const UIStrings = {
     "AirPlay": "AirPlay",
     "Audio": "Audio",
+    "Enter Fullscreen": "Enter Fullscreen",
+    "Enter Picture in Picture": "Enter Picture in Picture",
+    "Exit Full Screen": "Exit Full Screen",
     "Error": "Error",
+    "Forward": "Forward",
+    "Invalid": "Invalid",
+    "Skip Back 30 seconds": "Skip Back 30 seconds",
     "Live Broadcast": "Live Broadcast",
     "Loading": "Loading",
+    "Media Selection": "Media Selection",
+    "Mute": "Mute",
+    "Pause": "Pause",
+    "Picture in Picture": "Picture in Picture",
+    "Play": "Play",
+    "Rewind": "Rewind",
+    "Scale to Fill": "Scale to Fill",
+    "Scale to Fit": "Scale to Fit",
     "Subtitles": "Subtitles",
+    "Start": "Start",
     "This video is playing in Picture in Picture": "This video is playing in Picture in Picture",
-    "This video is playing on your Apple TV": "This video is playing on your Apple TV"
+    "This video is playing on your Apple TV": "This video is playing on your Apple TV",
+    "Unmute": "Unmute",
+    "Volume": "Volume",
+    "Volume Down": "Volume Down",
+    "Volume Up": "Volume Up"
 };

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-button.js (214399 => 214400)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-button.js	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-button.js	2017-03-25 17:45:22 UTC (rev 214400)
@@ -55,6 +55,7 @@
             return;
 
         this._loadImage(iconName);
+        this.element.setAttribute("aria-label", iconName.label);
     }
 
     get on()
@@ -80,7 +81,7 @@
             if (event.type === "load")
                 this._imageDidLoad();
             else if (event.type === "error")
-                console.error(`IconButton failed to load, iconName = ${this._iconName}, layoutTraits = ${this._iconLayoutTraits}, src = ""
+                console.error(`IconButton failed to load, iconName = ${this._iconName.name}, layoutTraits = ${this._iconLayoutTraits}, src = ""
         } else
             super.handleEvent(event);
     }
@@ -101,8 +102,9 @@
             this._image.removeEventListener("load", this);
 
         this._iconLayoutTraits = this.layoutTraits;
-        this._image = iconService.imageForIconNameAndLayoutTraits(iconName, this._iconLayoutTraits);
 
+        this._image = iconService.imageForIconNameAndLayoutTraits(iconName.name, this._iconLayoutTraits);
+
         this._iconName = iconName;
 
         if (this._image.complete)

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js (214399 => 214400)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js	2017-03-25 17:45:22 UTC (rev 214400)
@@ -24,30 +24,30 @@
  */
 
 const Icons = {
-    Airplay         : "airplay",
-    AirplayPlacard  : "airplay-placard",
-    EnterFullscreen : "enter-fullscreen",
-    EnterPiP        : "pip-in",
-    ExitFullscreen  : "exit-fullscreen",
-    Forward         : "forward",
-    InvalidPlacard  : "invalid-placard",
-    Pause           : "pause",
-    PiPPlacard      : "pip-placard",
-    Play            : "play",
-    Rewind          : "rewind",
-    ScaleToFill     : "scale-to-fill",
-    ScaleToFit      : "scale-to-fit",
-    SkipBack        : "interval-skip-back",
-    Start           : "start",
-    Tracks          : "media-selection",
-    Volume          : "volume",
-    VolumeDown      : "volume-down",
-    VolumeMuted     : "volume-mute",
-    VolumeUp        : "volume-up"
+    Airplay         : { name: "airplay", label: UIString("AirPlay") },
+    AirplayPlacard  : { name: "airplay-placard", label: UIString("AirPlay") },
+    EnterFullscreen : { name: "enter-fullscreen", label: UIString("Enter Full Screen") },
+    EnterPiP        : { name: "pip-in", label: UIString("Enter Picture in Picture") },
+    ExitFullscreen  : { name: "exit-fullscreen", label: UIString("Exit Full Screen") },
+    Forward         : { name: "forward", label: UIString("Forward") },
+    InvalidPlacard  : { name: "invalid-placard", label: UIString("Invalid") },
+    Pause           : { name: "pause", label: UIString("Pause") },
+    PiPPlacard      : { name: "pip-placard", label: UIString("Picture in Picture") },
+    Play            : { name: "play", label: UIString("Play") },
+    Rewind          : { name: "rewind", label: UIString("Rewind") },
+    ScaleToFill     : { name: "scale-to-fill", label: UIString("Scale to Fill") },
+    ScaleToFit      : { name: "scale-to-fit", label: UIString("Scale to Fit") },
+    SkipBack        : { name: "interval-skip-back", label: UIString("Skip Back 30 seconds") },
+    Start           : { name: "start", label: UIString("Start") },
+    Tracks          : { name: "media-selection", label: UIString("Media Selection") },
+    Volume          : { name: "volume", label: UIString("Mute") },
+    VolumeDown      : { name: "volume-down", label: UIString("Volume Down") },
+    VolumeMuted     : {name: "volume-mute", label: UIString("Unmute") },
+    VolumeUp        : { name: "volume-up", label: UIString("Volume Up") }
 };
 
-const IconsWithFullscreenVariants = [Icons.Airplay, Icons.Tracks, Icons.Pause, Icons.EnterPiP, Icons.Play, Icons.VolumeDown, Icons.VolumeUp];
-const IconsWithCompactVariants = [Icons.Play, Icons.Pause, Icons.SkipBack, Icons.Volume, Icons.VolumeMuted, Icons.Airplay, Icons.EnterPiP, Icons.Tracks, Icons.EnterFullscreen];
+const IconsWithFullscreenVariants = [Icons.Airplay.name, Icons.Tracks.name, Icons.Pause.name, Icons.EnterPiP.name, Icons.Play.name, Icons.VolumeDown.name, Icons.VolumeUp.name];
+const IconsWithCompactVariants = [Icons.Play.name, Icons.Pause.name, Icons.SkipBack.name, Icons.Volume.name, Icons.VolumeMuted.name, Icons.Airplay.name, Icons.EnterPiP.name, Icons.Tracks.name, Icons.EnterFullscreen.name];
 
 const iconService = new class IconService {
 

Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/start-button.js (214399 => 214400)


--- trunk/Source/WebCore/Modules/modern-media-controls/controls/start-button.js	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/start-button.js	2017-03-25 17:45:22 UTC (rev 214400)
@@ -36,7 +36,8 @@
         background.className = "background";
 
         const image = this.element.appendChild(new Image);
-        image.src = "" this.layoutTraits).src;
+        image.src = "" this.layoutTraits).src;
+        this.element.setAttribute("aria-label", Icons.Start.label);
     }
 
 }

Modified: trunk/Source/WebCore/Modules/modern-media-controls/js-files (214399 => 214400)


--- trunk/Source/WebCore/Modules/modern-media-controls/js-files	2017-03-25 14:44:26 UTC (rev 214399)
+++ trunk/Source/WebCore/Modules/modern-media-controls/js-files	2017-03-25 17:45:22 UTC (rev 214400)
@@ -1,3 +1,4 @@
+main.js
 gesture-recognizers/gesture-recognizer.js
 gesture-recognizers/tap.js
 gesture-recognizers/pinch.js
@@ -61,4 +62,4 @@
 media/volume-support.js
 media/volume-up-support.js
 media/media-controller.js
-main.js
+
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to