Diff
Modified: trunk/LayoutTests/ChangeLog (273213 => 273214)
--- trunk/LayoutTests/ChangeLog 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/LayoutTests/ChangeLog 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1,3 +1,17 @@
+2021-02-20 Chris Fleizach <[email protected]>
+
+ AX: Image should report the embedded accessibility description if available
+ https://bugs.webkit.org/show_bug.cgi?id=221875
+ <rdar://problem/74320584>
+
+ Reviewed by Jer Noble.
+
+ * accessibility/embedded-image-description-expected.txt: Added.
+ * accessibility/embedded-image-description.html: Added.
+ * accessibility/resources/embedded-image-description-example.jpg: Added.
+ * platform/ios-simulator/TestExpectations:
+ * platform/win/TestExpectations:
+
2021-02-20 Youenn Fablet <[email protected]>
Add support for adding/removing/clearing mock devices in GPUProcess
Added: trunk/LayoutTests/accessibility/embedded-image-description-expected.txt (0 => 273214)
--- trunk/LayoutTests/accessibility/embedded-image-description-expected.txt (rev 0)
+++ trunk/LayoutTests/accessibility/embedded-image-description-expected.txt 2021-02-21 04:15:52 UTC (rev 273214)
@@ -0,0 +1,10 @@
+This tests that the embedded image description can be retrieved.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS image.embeddedImageDescription is 'AXEmbeddedImageDescription: Birds Eye View'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/accessibility/embedded-image-description.html (0 => 273214)
--- trunk/LayoutTests/accessibility/embedded-image-description.html (rev 0)
+++ trunk/LayoutTests/accessibility/embedded-image-description.html 2021-02-21 04:15:52 UTC (rev 273214)
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+
+<body id="body">
+
+<img src="" id="image" _onload_="runTest();">
+
+<script>
+ description("This tests that the embedded image description can be retrieved.");
+ jsTestIsAsync = true;
+
+ var image;
+ function runTest() {
+ image = accessibilityController.accessibleElementById("image");
+ shouldBe("image.embeddedImageDescription", "'AXEmbeddedImageDescription: Birds Eye View'");
+ finishJSTest();
+ }
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/accessibility/image-link-expected.txt (273213 => 273214)
--- trunk/LayoutTests/accessibility/image-link-expected.txt 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/LayoutTests/accessibility/image-link-expected.txt 2021-02-21 04:15:52 UTC (rev 273214)
@@ -64,9 +64,8 @@
AXFocusableAncestor: <AXImage>
AXEditableAncestor: (null)
AXHighestEditableAncestor: (null)
+AXEmbeddedImageDescription:
AXURL: LayoutTests/accessibility/resources/cake.png
-AXAccessKey: (null)
-AXLinkRelationshipType:
AXElementBusy: 0
Added: trunk/LayoutTests/accessibility/resources/embedded-image-description-example.jpg (0 => 273214)
--- trunk/LayoutTests/accessibility/resources/embedded-image-description-example.jpg (rev 0)
+++ trunk/LayoutTests/accessibility/resources/embedded-image-description-example.jpg 2021-02-21 04:15:52 UTC (rev 273214)
@@ -0,0 +1,61 @@
+\xFF\xD8\xFF\xE0��JFIF������d��d����\xFF\xE1 \x98http://ns.adobe.com/xap/1.0/��<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:Iptc4xmpExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/" Iptc4xmpExt:ArtworkContentDescription="Birds Eye View"/> </rdf:RDF> </x:xmpmeta>
<?xpacket end="w"?>��\xFF\xEE��Adobe��d\xC0������\xFF\xDB��\x84��+#%'%#//33//@@@@@@@@@@@@@@@&&0##0+.'''.+550055@@?@@@@@@@@@@@@\xFF\xC0��,\xC2"��\xFF\xC4��\x92�������������������������������������������������� ��������!1AQaq\x81&q
uot;2\x91\xA1\xB1\xC1\xD1BRb#r\x823\x
E1C$\x92\xA2\xC2S������������!1QAa2\x81\xB1q\x91\xA1"B\xD1\xFF\xDA������?��\xF2(\xB2\xCB:\xB2\x99d\x80\x9A\xA2\x82)\x80,\xD0H
+H\x82\xE0( T)p_\xE0\x90+A$\4\xD5@E5\xA6B\x98\xD3TQp\I\xAA\xD4A \x82\xA08$P)\xAAZ\xA8|t��\xB45\xA0Z&\xAE\x90i\xC44\x8B\xA6*\xD0pHaN\xA5qĵA\xAB\x84\xAA\xA89P/LhGq\xC0S7\x92\xEAW\xDC\xF4\xC9\xD8gu+\x88\xF7@K(\xA0Ӎ\xCA\x90\xFCH\x96\x86 ȦM\xA0\xAC\x92Ua\xB5A\x83E\xE9M
+\x82@\xC7R\xA0\xBA\xA5\xC1h\xA8(\xA2 \xA2\xCB\xE2\+aPH- \xA0h)\xA1\x9CJ\x81\xAA[E\x82\xB8\x97PAA) \x92.H\x9Ah`\x9CFA8\x93B\xA0\x90EAt@\xD5 \x82@\xD1I$\\xD3\xA2\xE0\x86i\x89\x91pC��D\x88\xD4\x8A\x8BH\xB4D\xCB"\xA3@\xC0DH\xABĴ\x82\x82\xF80\xA1H\xB8\x89j\x8C\x9AT$\x86*\xB1\xBF\xDA\xA4\x8B+\x8B\xF4\xDA%\xE4\xEAE\x8Cuq\xB0\xFD6s\xBC\x99\xC6L\x9C++-\xE3Н\x8Ccxżl\xDA\xE8Z\xC4Y\xC8a\xF4\x9A\xE83a\x9B}\xD0+Xw\'\x89\M// \xC8cɏP3e\xB1\xCB"\xC2k\xBA\xB0\xBA\xEA\xCD\xEF\x90\xC1\xE4Y\xC8`u+\x81\xAD\xE1'\xA2o\xB2\xE3'\xFD˄<e<l\xDE\xFBw0G\x82\xC6'7,`\xE0\xC9\xC4\xDD\xFE3\xB7B\xAD\xDA\xE8^\xEB\x8CI\xC1\x8FxX~\x96\x84\xEC2:\xC0\xD2\xF1b\x92\xF61\x9B\x80K4,Z\x86\xB1\x8E\xE62zpZ\xA9\xA2\xD8\xC0t\x93\x82q\xA8GA\xD9HhQ\xEE\x85:\x94\xC2 \xA8\xF1\x93\xD3.\xA9i\xAA��\x95F\x85\xF1#CZ\xA2j\xE1M!\x8A\xA1\xAA
+\x80\xAD\xF4\xC7S\xA0\xFD3\x9D\xE41ނ\xD5Y\xBAؤ[\xC3NF\xAAHh\xD3\!z\xBBE\xC6D\xA5\x8E\xAE9^\xDC~</%\xC2+\x80?@\xD9\A\xACh\xC5\xE4\xB8\xE7\xFF��\x8F\xA8\xCAv\xE6\xDBR\x95\xAB\xB5\x9CUj\xDB\xB2d\xB4z8\x9B\xAE\xEE\xF6\xD2\x8Cv\xE5\xF0N6\xA9v\xF5J^\x8B\xC4\xED\xD6\xF5\xA4;Z\xCE*\xAA\xA4Nl\xD6\xC9\xF5J\xE7\x8Aˊj!/\xE6\xAEڊ\xA6|\x983\xFA\xB5\xD1\xDFUf\xFC+\xCF_\xDBs\x84\x9F'ߺ\xA5-jp\x9BUƏ\xAF\x9E\x86|\x9D\xF5\xEA\x94V\x92\xF7Z\xB16\xF52\xE6\xC9jN\x9B\xB5\xE2V\xEEmEǓrދMM\xCF_\xA3'\xD3f>\xE3%\xB2\xFAVX\xEBx\x96\xAC\xF8\xC2\xFD\xEF\xC0ۋ\xD2ʟ\xA6狆y\xCB\xE5x\xEF\xE9bp\xA8\xB9^\xFEkV\xC9\xED\xFE\xE3|\xC2ȝ\x9D[\xFE\xE2{Z\xAF\x999\xFAe\xE3z\xCF,\xECצ\xF4\xA0\xD5A\xA3Ly\xF1\xAC\x98ڵ-\xAAh\xAB\xD3Cʹ\xF8\xEA\xEDF\x99tՆ,(ƆR\x93\xB0\xFA\xE2"1\xBC@<f\xEB\xE3\xF1\xB0\xACV\xA6\xA1\xAA\xB6?"V\xB3\xA0Ր\xAEQ2\x9E)F\xA5VQ&]\xB0\xB9.\xBD\xBB\xF05\xA9\xAC|<\x88o\xFF��\x83M[§`-\x86N\x83ĀX\xD7#\x96\xB2̻}6\xF8#\xA1\xD2tP-\xE3Lޮ9w
�
�\x8FOS\xA9\x9B#7\xA2KQ\x97\xD2'\xA4lXQ~\x90\xD3"\xFD3S\xC6\xAC1\xA63<@<F\xB7P8\xC62\xFAd\xF4ٯ\xD3 b\x92c\xC6\xA6oxS\xF1A\xB9\xC9q\x93\xD2)\xE35\xF0+\xD3/q\x8D\xE3+\x89\xAA\xF4\xD0M\xAAY\xC9 #.\xC8R\xB4\xBA\xA1\xB5\xA04R\xB2NU\x8E\xA38Iu\xA8uG\xB8L\xAFE1ŤH\xB8O\xA4Z\xC6;\x8B/\x89\xB9Z\x90\x95\x8CejlU\xC1$U\xF2S\x9B\xB8\x9D\xEA\xC1v\x85/ds;\x9E\xEBմ)\x8D\xA1l^;_Б\xB1\xF7\xF5\xB7\xF6\xB3Q\xD7\\xBE.^\x9E)/\xDA'\xDC\xF2\xF6\x99x\xE4\xEC\xADe\xEBO\x92\xFA\xB6[\x99i\x9F\xA5R\xACo:\x8F\xA6<\xFD\xC2\xF4\xD6)\xB3\xD6j\xB8\xB7\xF0{\x99\xC7Y&\xF9rM5\xE4\xA1\xF8\xCA\xF0\xF3\x83\xB6\xBE[zoEj\xCD|>+\xC3\xF7\x9Dn\xD3\xDA\xAEZf\xAB\\xF1\xC66\xF4j\xF5\\xAA\xFF��c5\xAEޘ\xEA\xAA\xD7ԵV\xF0\x9Br5\x89\xACݷ\xB6\xE2UO5=7h\x97\xB4\xB4ZƟ\xBCu\xB5p\xE1]\xBE*\xAA\xA9WQ\xE3Z\xF1\x83O\xAD{U\xD19㦾_\xF41eV\xB3\x8C\xCBO\x85\x91\x9B^b\xF8\xAC\xE9\xDD/\xFB\x89~\x84\xE5\x9C\xF5v\xB6\xD2߸bXs,\xB8\xF5\xAB\x94\xFF��\x8F|k\x94\xE3SG\xF8\xA2\xEB.ϱ\xFB\x9A\x{DF
8C
}\xCD\xFA9\xFF��\xCBoԤ\xADT\xD44Ԩ\xD7C\xC2\xE3\xFBb8\xD5}\xABf\xDB\xEAv\xFD\x93\xDD\xFF��ǵ{N\xE5\xFF��a\xB8\xA5\xFF��\x91\xBF\xE9<\xFE\xEFU\xB3\xBF\x9F\xCCY\xD5\xF0\xF8L:\x9D5\x81=w\x92\xD7m\xE4yJ͋\xADCX\xA0:К\x85<\\xBA\xF0*\x92#\xAC\x94s\xAF۰V:^\x9A\xEA*\xF4F9Q\x89b\xEAGH5<`\xBCpg\xB5\x837\xA2\x9B\x8F\xB7\x91\xB4ǩ\xA7\xB9\xC9dg\xFF��\xDF\xE9\xA2\xD5\xC7:\xC9
+\xFE#G\xC0\xB6&a,$\xAAʶ\x85\xD3)T\xE8-c\xC5ه\xE9\xB8Z\xCF\xE9\x95\xE9\xC1\xA7\x806\xA9N\xB5\x9A\xD5di\xB2\xE8ɦR`\xB5Q\xD5\xC7\xE26\x98$\xB2k2\xC7!\xACz\xBD\xBAӄXue\xE2.\xF4\x94i\xB5E\xBA\x94\xC2+\x8F\xC4'D1U\xC1A\x8C\xB9qd\xB5N\x96E\xA1\x8F-<+H\x98\xC7j\x94\xB1\xB6i\xAE6\xD8ň\xBD\xB1Y\xA9\x8DɧC\xAE(ZjK\xCBLRPA\xEBh*\xF6\xED\x90\xC2[\xD8}0\xB6j\xC7\xDBGCU;u\xA4s\xD6(\xD8\xFC\x8E\xA3\xED\xB4\xD8]\xBBq\xAD\xC7-բq\x93m\xF0k\xB0+K\xF09\xDD\xC7m\xDCf\xE3ZV\xCFŸU\xDA\xCD\xEF\x82\xFF��\xB4ĸ\xDEլ}\xF9\xB5WҲ\xB7\xB7\xE8Fn\xFB\xDEV,\xAD\xA2T\x8COY\xBBno\x9D\xA1|\x8Eq|\xF9}\xDF'<\xB9\xD7*\xD1>*\xAAz·\xA7\xD7\xC6\xE6C\x95\x91\xD2˶\xCE닎Y_um\xC9O\xE0h\xC3Z\xE3p\xAD\xF7\xE3z\xFCoc\x91\x83\xBA\xEE0\xF7\xB7y$\xF8Ɨ\xA5\x9A\xE9\xAA:\xFD\xD6\xD3\xFCly\xF1%\x8B;_\xDCƶV[DŽ\x9D2\xFE|1\xB1\xDD\xC7\xDD\xFF��\x91\xDA\xF3N/X\x9F\x96\x83^EɩJ#\xA9\xC5\xF6\xCE\xEBGG\xBC\xED\xE2\x99\xD8]\xE5{k`\xC0\xB1\xFA\x9E\xB7\xDDd\xD7Ҟ\x93}Mp\xF3|\xA
7
!\xE4\x{DA4F}n\xD4+6\xFC>g7\xBF\xCA\xDE+S\xAB\xBAj\xDA:\xA3\xA3\xDCe\xAD\xED\w\xB4R]g\xC0\xF3\xFE\xE2\xB2v]\xDEN\xDF#\xD5l\xD7\xDBj\xBD\x9A;\xCB+\x95d\xEE(\xF2\xE1\xF58\xF1\x8BE\xEB\xB4?\xFA\x9C\xF4\xB6<\x8E4Oc\xBA\xB2+\xA7D\xE1>\x9D}\xCFe\\x89\xE0ֶV\xD5|\x8Cr\xE3\xF4J\xE6+\xD99c\x96E\xEEKv\xB7I\xCBj?\x99:\x89I\xEF\xD0\xC5m\xEE\xFF��)\xF7\xF6\xEE{{v\x99m\xCA\xF8x\xDF_M\xF4\xF93\xD1\xD7g\x89\xFC\x9Bx\xEF\xD5aE\xA9mW\xC2a\xEE\xAA\xD4l\x93\x9D\xFD|\x94\x9Ba\x8DE\xB5ȑ6ǩƐ\x8A̍KB\x9Dߡ\x9DjA1|$'i.\xA3\xE5\xA9\xC0\xBFM\x91\xE2\x93J\xA4\x86\xB1\xE8:\xB5=l~\x9C\xA5`s\xC7TE\x91\xA9\xC1\\x88\xEAB\xC2[š\xAF\xD3D\xE0\x8Dc]c\x9E\xF0\xF9lt-D\xA0äa\xAEc=%\x8FO\xA9\xC5\xE9-\x8CNLF\xEBc\xF1>\xA3\xA4axX>\x8B:\x97\xE8yN\x8E}p6\xD26c\xC0\xAA\x87\xD3
+N`r\xA25ŕ\xE2Q\xB0\x8C\xB8\xD2GJ\xD4Pe\xCDAS\xAB\x9Bj\xEA\xA6;\x89K"ub\xE0\xD7\xC0\xAFNvGC\xFCy
+\x9D\xB2OB\xCA\xCFW2ݽ\x9E\xE2\xAD\xDA\xE9\xB1\xDA}\xB0\x{D8E1}{/G\xBD\xBBOa\x8BѷmDZ\xED\xFC\x8Et\xFF��\x9D\xE8\xF9LJ]\x8D\x9F\xE3\x8EÁ'\xAA&\x93\x835;#E;cMq\xA9\xD8\xD1\j+/X͏��\xFAၵ\xAA\xD3
+x\xD4
+\xBE#SH\xA6\x91G>\xF8\x93\xBEk\xB7\xEDse\xFEJY\xAF\x8Chu\xEFDy\xCF̝\xDELv\xC7\xDAcҶ\\xA5\xE37\x94\x85\x8F\xDE\xE4\xBE\\x8DkuX\xAD\xF1Z\xA8.\xD6\xED\xF1\xE5u\xFBy\xC4\xE8vq<N\xF2\xA2\x96]Rܾ紥\xA9ʮ'u\xB1\xED\x93LJ;\xE6\xF9y\x85[&\x9E\xA9\xAE\xA7\xAB\xC1\x9Fw\xED\xB6V\x85{c\xE5\xA7\x99\xC0\xC9\xD8d\xA5\x9F\xD7G_\xE6\xE5\xFBӸ\xF4\xE9eV\xD5UxW\xCC\xD3\xB7\xB7\xBAf\xAE7G\xF5\xD5q\xB7\x8Ag[&Lu\xC7G\xDCQ\xDB6r\xC3eս \xF2]\x97s~\xDE\xD30\x9E\xE7\xAA\xCD\xDD\xE1\xC3\xED\xF8;\x9C\xDA\xF3\xE3g\xE3\xE2\x84\xF1\xB8\xB6\xEE/\xBBɓj\xEF\xF7F\xBF\x8B\xEE\xFDŲҍ\xBF\xAA\x8B跗\x81\xAB\xB8\xF7Kw\x98\xDD\xF1\xE2\xBF\xFCP\xE0\xE4w9yE\xF8\xA6k\xB38E{\x87)\xF5\xEAm\xA6\xC8\xDBn\xD0\xD3\xF0O\xA29?nXvl\xEC\xB0\xD7!\xC5W&9s'>㷉\xB5o\xC5\xF86\xCCUn\x96r\xA5=\xD3:K,ۋ\xD2\xDE\xD53&z\xAA\xDE8\xF0\xB7U\xD3\xE4s\x97Z\xB1\xDF\xFC\x9E\xB1\x9B[+q\xAB}/\xF9c\xA1\xEDy4\xCF\xF9%R\xDE\xE3z\xBA\xFDK\xAD[~ \x9E\xD2\xF5}'\xBF\xF7\xFF��E\xEB\xB0\xCAd\xD0\
]
eԜ~S\xA8-y2ò\xFCJH͍q\x88\xF6*\xBC\x93 U\x87Z2\xC7Ip\xEC{+B\xB1\xE89nT\xE3 \xBA@\xC4S\xB9 gLe@P\Kt\x92\xBD1\xEA\xA4\xE20\xECG\xA6GDhU\xD4ٝ>\x99\xA1Ю$])cDtC\xA1\xC0K\xAC\xCA&\xA2\x9B\x84*\xD5\xE5\xAB\xA3$!\xAA\xCDj\xA8:\xD5@lM*\x95P\xDA\xD1!kq\x89\x95\x91\xF0L\xD1\xCE��\xB5\xCAJ[\xA2\x88m\x94\xB53V\xD0qAU$\x84dc\xB1\x95Z\x8E[\xA9mG&Ɲ\x8C\xF3' yh.ց\xA1\xAE\xE8\xA7s=\xAEo#T\xF7d\xAA\xEC\xF6Z\x9E\xDD;\x87\xDCw\xD9sZ\xAE\xDA\xC5T誶=o\xB8f\xF4\xFBK\xC6\xF6M#\xC2ޖ\xB5\xDD~\xE7\xD1\x8FD\xF9\xA9hVg[=O\xC7\xFE\x83\xE9\xDC\xE3u\x8BZ|RRe\xCFK\xD1\xF0\xE3\xF0gt\xA1\xC5|ދ\xE6z%f\x9D\xDCW\xB7\xB2qO4\x9C\xBB\xC2oHKdi\xCBܥN\xB3\xB7\xF3\x9EIjvZ\xC1\xADb\xB4\xD3\xD7[5W\xC1'Z=\xA5\xBD9y$\xA5\x9D;w\xEF\xA1\xDA\xEA\xF8\xB1\xEE\xEC\xB8ѵ\xFC\xB4]>'Ե\xB2\xF1\xFE\x9F\xC0\xEA\xE0\xBDk\x8E\x91
+<ٞVȲMt\xBA_8\xC7EJ\xAD=?\x9D\xDE\xE5\xFF��)\xAB֪\x99?\x98V{M\x93\xE8\x98S\xF4\xCA\xF8#7\x95^\xB1\x8B>֫#[=\xD1\xD0\xC4\xEB|u\xFA\xA2R\xDFbUU\xE3r\xA5F\xAB\xE2+j\xAB\xE9\xA7\xF4\xA7\xD5\xF2\xD8g\x90e\xC2\xE7Y\xF2uS\xFBH\xEB\x95\xD1\xD367jt\xB4}U\xB2]8\xFBmч[ߒW\xC9^\xE4G\xF2K\xA5}\xD7&7\xAD\x9E+p\xB7\xC1\xA9=\xC7 <\xB1R\xFD\x97\xBEv\xB9\xBE\xEC\x9B\xC6\xEC\xB6^\xA2\x85\xFAO\xA0\x9Eo\xEE\xFF��X\xD7\x82\xB8j\xBE\x83ޤh\xE5GFJ\xD7]G_\xC0J\x86V\x8AUH
+\xDA\x99E\x85\xE4\xB8 094[e'3%\xD8
+\xC4v&\xAFe\xC9��\xE6\x88MMhL4\xE4T\xC3
+\xB65\xAE\xB6\xA0\x92\x85\xC9I\xB3s\x9B=M\x92\x9B\x919\xB1\xD5m\x81%\xBBgZ\x91M\x81Ȼ4%\xDBRkC\x92Ґ\xBC\x82T\xE0P1X\x8C\x8B\xB3\xED\xA9v\xB0\xAB] \xCF#SEȊ\xDDH\xD5i*O(\xEC\xC1\x9E\xA1đPkY-\x92\\x87Ď\xA8\xA9p:\x92j\xA4\xE0b\xC6z\xC5V\x8Bq\x89B-WB\x98\xC4\xEA\xA6\xF4f2\xC2캋][\xCE KR\xFD\xC9U\xF6\x96\xE6\xDDR]\xF7d\xFAo\xC5;g\xA6\xF7\xBE\xE5\xDB\xEDq?\xEE5\xCB'\xF4\xD7\xCF\xE2y|8\xAD\x96\xFCyyt=\xDF\xC7\xE3zm\xFC\xB3kCÎ\xCAk\x93\x94o\x93j\xCF\xED\x97\xF8\xCA\xE3z\xFF��3:\xBF\xFEe\xB8\xAA\xD9\xD5_\x8C\xF0\xABҵ\xF1b-\x83\xB6\*\xE7*\xB3ִꗛ\xE8vʚ\xF3\xF9\xB1\xDE\xCA\xFE\x95~\x9A\xFD\xCD-\x82\xF2\x99\xEA;\xAAd\xEEq\xDF^\xFA\xAF\xC7\xE9ōS\xFE&y\xBC\xF8\xE3#ג\x9F\xBBi\xF83\xC8\xF7\xE5\xF3gC\xF0ע\x97\xF1z\x98\xB1\xD57\xF5iU\xA9\xABIyi\xE0\xA5|\x89f\x93\xC0ou\xC4~9q\xE0\xBFY\x91\xAET\xF5:'ۉnz̙\xB1uT\xB4[\x8FG\xFB\xAB*=\xA6\xF0\xF0d\xD3\xC6\xC6d\x8B4\xBF\x9B\xAF\x83jV\xB3\x9A\xB5\xC9oG\xB3\x8B\xEB\xAF.\xBBתO\xBB՝\x97]S\xF1\x
9
2\x97\x9FW\xB7q\x91o^\x96F\xA4gS\xFB\x9E\xD2ի\x8Bc\xA5\x93\xAB\xEA\x9Ar\x8F\xA4b\xC9\ة\x9A\xAEk\x92\xAA\xC9\xF9YI\xF3e\xDC\xDA\xE9\xFA\x95\x9AD]\xC7Ս\xFF��W\x8A=\x9F\xE5\xAE\xE9\xE4\xF6\xDA\xE1n^Ưy\xA3\xFA\xAAy\xFF��\x93\xC7\xC4\xE5\xF4\xD7\xEC\xC86`;\x94\xEE\x8F4hMN\xA2ޏB[$w%b\xD1r+\R\xB2 \xD49ZYrt \xB1\xA6@-n\x857\xDBrdY\x83u\x90)\xB42\xC2\xF7p,wdn\xAAIՒ\xF5\xA6\x97ȮD\xB5XI\xF0ܐ|\x8B\xE5\xA0$Sf\xC55\xA8\xDB4/VȊ\xD5\xA5\x89\xA3ElT\xB0m\x94\xE1\x80\xD9\\x82\xC0䯁\x9B%MoQY*\xA0\xB1l\x95\x92\xB6jƌm\xB1N\xA9\xB1\xF8\x92+\x8D\x98}*\xAB\xA1,\xF43Y\xEC1|\xA1\x81\x93$
+Ye\x99\xECNU\xA9XbjRɌ\x92\xDA֘\x9A$ V\xC1U3R\xB4]A\xB5t��\xB5\xA0\xA8\xC7z\xB3\xB8w\xF8}\xBBˑ\xA7w\xFF��:\xB7\xFB\x86{\xBF\xBAv\xBEׇ\xD4\xCC\xF9d\xB2\xFE\xD6\xF7Y\xFE\xC5\xE6x\xF3\xDC;\x9Fp\xEEl\xF6\x9BY\xE9U\xA5j\xBA$\x8D\xFA\xBD7\x9D\xDB\xE3\x8C\xFF��\x96yY\x9D\xFD\xF2\xBB<\xB7X\xEB\x95\xBF+\x90\x9A{\x82\xA3\xBD0\xA8\xE4\xE1]\xF8|u\xEDUv\xAA\xF9x\xDBĺ&\xDF\xD0\xF5Z\xA3\xDD&1\xAE\xF5m\x95֘/x\xF5\xAC\x9D\xD4\xEB\x8Ct%\xB3[7s~\xDF_j\xFDŜ\xAB\xF7\xDC1,u\xABy\x87\x91\xEF/q\x98;\xDA\xE1\xED/Uw\x8F%\xF5n\xBB\xF8%%Fܕ\xB3\xAA\xEC\xA9e\|\x9B\xB2ow\xBB\xB5\x85c\xF6\xBCY\xBB[wM\xFF��e76\xCB]\xDF\xCFc/\xB5\xE5W\xB6Z\xE4p\xADYw\xB37,\xF5\xC7\xD8\xFF��\x85\x8E\xEE鹕\xB7\xC3\xE0L5\xCA\xEE\xF0W袶R\xBC\x91\x86\x8E\xEA\xFC\x96\xDB3\xB7\xC5\xE5\xF6\xBF\xEFE,\xEDo\xADi2#m\x8B\xBBQ\x87EXv{L8`sqeJ֥\xFE\xDB\xFE\x86n\xEDl\xEC\x9D\xE9\xDD{e\xF1Z\xF0\xD3Uz9\xD1\xFCK\xED\xB1g\xB5i\x96\x95\x97\x8D\xF1\xBA\xEB v\x95\xB1W\xCCz\xC7[U\xF9νk\xD3%4\xACE\x95\xBF\
x87X
5?n\xEE\xF1'\x9A\xB7\xAD\xAA\xBE\xE4\xBCTY"]c\xBBT\xC9\xCAbWx?\x89+ejq\xA5\x9DmMj\xFA\xAF"\xED\x8A(\x9Cv\xEA\xB65b풬\xCA\xE5\xD2ѯ\xCC\xD4\xE1\xBF\xDEXF\x992}U\x85\xDCS\x95\xF0g\xF2\xCFuL]\x{DC2F}\xA7qF\xEBG\xD2\xF5\xD5\xD4\xE6`\xA7o\x9E\xCFOO=7K\xA9o\xD5\xED;\x9Cy\xD4'K+&\xB6m~\xA7\xFA\xCC\xFB}[\xC2ϕ\xE3\xCB\xCB\xDC\xDA\xC8[l\xACY)\x97rSZ\xDD+U\xF9=F\xA4\xA0\xF9N\xD8\xCF{0%\x9Am\x8B\x97@\x89Y\xE8\xAA'+P\x954 ( \x81\xB4\xA2ԓvh\xEB :\x8DH\xBE%0\x98 \xEE$\x8D6B\xD3J\xC5\xDAn\xA6\xDD\xE4=0\x8C\xF5\xCB\x87\xEB.\x85\x96%\xE2&\xA5\x94\xE8\x8AV\xEAGs5f\x85\xA8\xB2^\xC2\xF9\xAD$\xA8)9/QH!z\xB3Z\x85Z@v\xD4u\x90\xABWS:\x959\xF4\xB9\x898\x9A\x95c=\xB7\x8D\xB4]\xB1\xB6JզZ\x97\x8E\x9C\xAC\xFA\x92\xD6Ъ\xA2\xEC\xB4#?\xE3d\xCA\xF5Z\xB9|z\x94\xA8fè\xB1!\xF5\xA6\xB2:i] \x85\xE2\xD6\xADCT.F\xE4��\xD1\xC9\xF7\xEF|\xC1\xED%\xC5\xFB\x9B\xAF\xEDb\xFF��\xE5o \xFD\xF3\xDF;h\xC1\xCA\xFF��_qt\xFD,3\xAB\xFE\xABxT\xF9\xC7{\xDEw\xEFq~㸿<\xD9\xB7
\xD
1.\x89y#\xB7\xA7\xD5yݿ\xB7\xFB\xB1ϖx\xFC\xAB\xBC\xEE\xFB\x8E\xF7\xB8\xB7q\xDC\xDD\xDB%\xB7\xB1x!\xCC-\x96\xBA\x92\xC1\xED\xC9&G%\xAE+}CYv\xD0 U\xDBp97\xAB��\xECԔ\xEC\xB6\xB2\x93\xF4ik\xB8\xCF\xF2m]Lܙ\\xA4+\xAF\xBAy\x95+\x93Lx\x93◟\x88\xEEoLJ\x94|S\xDE\x9C\xA5\xC0|\xB4��\xDEl\xB6N\xBC\xB4{\x87\x87\xB8x\xA1'\xA1\x9D8RS\xB7U\xB9\xFC\xF9\xAD{\xCA\xD1m\xA7Yrt;/vuK_\xB5\xFD-\xFE\xD6q\xB9K.J\x8E\xDFc\x96\x94}\xC7(\x84\xFE\x9A\xBD\xB5c\xF1\xE5\xED\xEC\xEDW\xF4Ɖ\xAE\xAFS\x87L\xAFy\xFA\xBA\x{11BB19C}\xADe\xB0\xC9Z\xBB\xBB_r\xB2\xE2r֩\xF8\xAE\xA8\xEAa\xEE1\xF7x+d\xB4\xB2\xD5y\x9C|t\xCB\xDDc\x9A\xEA\xE8\xE3\xE4Wm\x9B/mv\xAB\xF6\xDBUW\xE2\x8DN_\x96l{c\xEFU{,\xAF\xE9\xB3~\x85\xBC\xF7t~~}P\xF9\xFF��k\xDF\xFAғ\xE1\x92f\xBEV[3\xDB\xFB/\xB8\xD7ܻ5\x95\xFD9\xB1\xBE\xE9\xFC\xB7_\xBC\xF1+\xD5%\xEF\xC7\xE3\x97\xCF\xFA\xBA\xFA\xF9[2\xFC\xC6\xD5@\xBD4P[P\xA4\xF2\xE3\xA9N\xB0-\x9An&䱜)\xE8\xCBV{j]Y1d=4X\xBA\xA1\xA8\xD6/Uj@\xA0\x83\xA0\xB5\x85\xBB+\x91\xAB]C2\x89\xCA
\xE6��3\xA6\\x8A5+]1
+\xB2\x86Ҫ\x8B\xB3\x92\x9A\x8DPPh\xBA\xA1\x89ԵbjZb\xAC\x97\xC0\x95z#\xC0\xEA.\xD4\xC1jK\x81<PJ\x85\xBA\xEA\xD8.\x81\xD5��\xEA\x878B\xB2[R՜\x92\xB4\x84\x81KH\xD4D\xBC\x8A\xB6' \xACnM%5\xA9\xD84\xACP\x85'+^\xB5\xAB\xB5\x9A\xADk\xABm\xC2K\xCCCt\xD9\xD0\xE4\xFB\xEF\xBD\xE0\xF6\x8Eߓ\x8B\xF79\xF4qx\xFF��U\xBF\xA5\x9Fy\xFC\xE7\x8F
+\xB6lK.M\xBDv\xBE\x94\xFF��\xA1u\xF8\x9E/\xB9\xEE\xFB\x8E\xEF5\xB3w-\x93-\xBE\xEBY\xC9\xEA\xF5z/,\xBC\xBCO\xAF\xCDs\xE5\xCEO]\xEFw\x9F\xBD\xEE/\xDCw7y2\xDD\xCBo\xF4/%\xE4"#\xAA\x8D
+\xF0\x83י\xE29#т۟\xD4YS.��\x93Шdn&��\xAE\x93\xCB`\xBDv6E%l[e2\xBE\x80[)=HWP\x82\xD1\xEBԋ̵P[j\x9AoB6K\xD9\xF3\xAA[%:\xB5+\xE4;\xB9\xAD/-ie\xAA3v\x98\xE9U\\xB3+\xD4\xF9Z\xB4\xAD\x99`\x95M\xF2\xAD~\x9C\xA9\xA6\xBE's\xF2ϻ\xBE\xD7\xDD(\xF2>8\xFB\xA8\xC3\xDC.\x8B"\xFB.y\xA7\x91\xBB+N\xBD\xEAg\xE4S$j\x9A\xE4\x97X'99q\xB2\xFEW\x8D\xCB+\xEB\xE9\xEB\xA9n\xDA=\x9F\xBD]\xF7a\x8F4\xCD\xEB8\xEF\xFE\xAAhki\x9F6\xCB-\x97\xF0\xF5|\xC5Z\xFA\xC2)\xEA9\xB5l\x963՞\xF5\x97V\x90;\xD2\xB4\xD3Q"\xCF\xA54+RUAVF\x8D$=V\xA1p\x95\xC4潙-\x8F\xC0F\xCFM\xE9\x97\xBB%j\xCBKSO\xA9\xA91e
+A=\x88\xAA\xAC\x85\xB4\x96\xC0\xFB\xE2l\x86wY\xB44\xB8\xCA\xDBR\x96/\xD3h\xB2\xB1\xA3v@; o\xA23\xDF7\xABG"\xF9hgǑ1\xA9\x90\xAA\xC9v%\xDDΣ28\xD3oS:Ɲ\x8EƊ[A\xAA>\xB0\x8A\x9Ab*Ȓ\xA0\xE7{\xB7\xBDv\xDEׇ\x9E_\xAF5\xBF\xE2\xB6~/\xC1y\x96KnI\xB6\x9Ao\xDF\xF6\xBE߁\xE7\xEE\xAFƿ\xC3]\xEDg\xE1Txox\xFC\xC5\xDE{\x9Bi\xFF��g\xB4_n\xF7\xFF��W\xF3?\xD0e\xF7t\xCF\xEE\xDEn\xE6ܭҫ\xED\xAA\xFEZ\xA3Y\xB4j\x92=ޟD\xE1痞_ً\xCA\xDF6\xB5\xB8\xA1m\x8C\xA6\x89\xFF��*\xFD`\xD9\xD6v;\xB2F\x92\xD9v\xDC\x90\xA6\x84p\xBAk\xE2[[G\x81[\xE8\xC8G\xB9i.\x88\x89/\x89\xB5\xEASKp\x9C\xF8Ű\xE9ԩlj\xAA\x8Dv"ƞ\xC8��JP-k\xA0\xE7O\xC0\xAFJ\xFDtZ\x94\x97Q\xFC*\xB7rim\xA2\xE8\xF8\xEB\xE4@\xBEE芅\xB5 \xB4\xC7J\xF0.\xB5v\xB4-\xDE\xC0LY\xF8$\x9C\xB8\xE8_+櫴EV\xE0\xDF\xB95\xA2k\xA7\x88\xCA\xD9a\xA5hܭ\xF4;\xFA^\xBD+8\xF8\xE3\xEE\xB1\xDE\xDF\xF1\xBB/\xC1\x99\xF4n\xCF}\xD9\xD2\xC9\xDB\xD5\xFB~;\xFF��+\xCA@\xF5\x93;\xA5\xFEG{\xDAO\xD2\xF8\xE7ƿ\xF6[\xF6\xAD\xA3\xE7\xFF��\x92rY
{\xAD
l\xDFޯ\x8E\xDF:\xF3_\xA6\xA7\xD0O\xBEg;\xFA\xF9z=w\xFE\xB3\xF4\xD2-\x914rmp\]Bu5\x8C\xDA\x9B
+
+h\x80b\xE9j\xE1\xD6\xFE :AMX\xC7Z\xC1ܑ\З0.\xCE\xDD\x95cG$+\x9A[\xDAC\xE4\xD92\xAD1\xB5F^p;U\xD4JS\xA2A\x88e\xAB쎞\xF2\xB8)\xA5;\xECr\xE4Rrjd\xCB]M\x97f{\xD6I))X\xDF\x8Aj\x85V\x9A\xEAi\xC7T\x91Z\xCD\xA9(T\x8D+\xBDZdK\xC4T\x89\xE2\xFAǙ\x8F\xDD=\xDB\xB6v\xAF.O\xAF-\xB4ŋ\xAD\xAD\xFB\x97S|f܌X/y\xF7\xBC\xD5\xDBˋ\xF79?\xE1\xC5\xE3\xFDV\xFE\x94x>\xE7\xBA\xC9\xDE\xE7\xBFq\x9E\xEE\xF9m\xAD\xAC\xF6^K\xE0Ww\x9F7y\x96\xDD\xCFs~yr9\x95^ \xEE\xE1*\xADS\xDF\xEA\xF5N\xF5.v\xEA\xAFT\x97Ӭ\x80\xA8\xF7\xB0N\xFF��L"\xA6*\xBFI\xD5wO\x80:X\xBB\xA7g\xA2+\x8B[\x81:\xF8\x92\xEFX\xF0"o\xA2#\xE32\xFE 訍\xD8j\x89k\xE2E\x8D\xEF\xF8��-5\xB6\xC5\xC5Z\xD7O \xEB\xE62*\xB5H\xF1K\xD2N\xD6\xDC;U\xB7%\xD18d��\xE8\xEB\xD2H\xABg亳ER\xAE\x96\xEB\xB2\x95\xBEP\xC2\xE2\x9AU_N\xAF\xC4\xDA[l<m=ȫ*ֲ\x80\x8B\x92\x94-'\xD0\xDA\xEBWuP@ֺ\x85n)\x9A\x86\xFE"[\x90-\xB5N^\x80!\x93\xE0T\xBA䝵+#V֛~\xA2Qך\xE6\xA5u\x83f|8-\x83\xD5¸\xBD4?m\xC1Q\xD6\xEAy\xDFqW
\
x85\xE3[q\x84se\xAB@\xDCoĚ=䶫\xEEX\xD3\xDE\xF7i|\xA9c\xE8l\xF9\xCF\xE4\xEA\xBB{\xD6\xE9\xE7g\xFF��\xA2\xC7\xD1[<~\xFF��\xDF\xFD\xFD
+{Yl=\xC9UC*\x86F\x80Q1\x8Fc\xAF\xE1\xCE\xDF%=\xC9g��\xF22ԋ\x84B\xA5\x86\x89\\xC1 \xF4u\x8Ci\xA8\xB7\x8C\xD2\xD0+#7\x84jVL%\x8Cd"#\x82\x94\xF1\xA2*@\xE8*\xFF��\x8C\x81N\x89Ҩ[bݬ1\xA0l\x89x/\x82ݴd8'\x8E@ ՠW\xD0+\xC0\xCAQ\xDB,!^\xA3\xB0\xBB+_\xA5jg+7S\xB9\xEEp\xF6}\xBD\xFB\x9C\xEE1\xE3R\xFC\xDFD\xBE'\x80\xF7q\xEE=˸\xB7q\x97\xE9\xA3ҕ]*\xBA0\xFB\xB3\xF7\xCB;\xE1\xE1o\x8Cܷ[|<5\xEE\xE1W\xA2՞\xFF��\xE3\xFA\xBA\xF1\xED\xCB\xF7_\xF8\x8E<\xB9~"\xE6m\xFA\x90\xBB\xA7>e\xABn\xCAWvz\xECzGO\xA5>\x9ByZk\xBE@\xF2Vsd\xD8\x9B\x96\x89n\\xE6GB\xBD'\xBB\xD0
+voD\xA1x"\xDDtE5\xAA\xF7zU\xC6ވ;cu\xAA\x97\xAF\x80i\xAA\xA2\x95\xA6Ѽ\xF4J[\xF8+\x84ڬ\xC2\xEAHoM\x91G\xFC1+\xC7\xC0g*\xA4\xED
+\xC2\xE6Z\xA5>e\xE6\xABU\xE2\xBA\xBDoW{n\xB5)%\x916\xB7Eq\x8A\xBF\x805n\xBA\x84Z\k\xAE\xE5=h\xFC/%\xAC\xE9_\xD3\xF8\x93\xE5\xCAz\xA0\xAF\x88Yq\xD7t\xD4AV\xAF/-\x81#\xE8mx\xEC-\xC3\xF2c\x9Dx\xE1\x9F\xA8\x9BW]P\xB9EC\xDD\xB7RIPI\xF8\x9Bi\x92{kUY6\x96\xDF[D\xDDL\xCA_\x88L\\xB3)\xDBrc\xA3nѵT\xB2%eyOm\xD8\xFC.;kU}\xF9l\xBFbՏK\xF9\xB5o\xB9\xEE;\xA6\xB4\xC7N~w\xB9\xD1[S\x8F\xF9S\xB4]\xA7\xB3R\xEDE\xB3\xD9\xDF\xFD\xAB\xE9\xAFꓨާ\x8B\xDB\xCByZ\xF4q\xF1!\xF5aT]5
+`\xE7\xABkEl\x88\xEC\x84+\x83|\xC9-\x9D\xFC3\xD7Ȳ\xDCW6&\xF9[e+6gu\xD2Osd\x8E\xB4\x92v<\xBAS\xA8.\x83\xA0\x9CL\xF5^\xCC\xEE\x80:\xB3[\xA0.\x88\xCD\xE1Z\x9CٵD\xD4\xD0\xF1\x80\xF1\x93\xAA\xF6\x84\xEAA\xAE\x85p&.\x97\xA1M!\xBE\x991\x86\x93Į#]Au1x\xB5(!\xD50\xA0\xB2u4\x8BQ\xF3?\xB8\xAE\xDB\xEC\xF1\xB8˕NH\xDDS\xC3\xFD\xC7\xBD\xEE\xB1v}\xB6N\xEB3\x8AbR\xFC\xDFD\xBE'\xCC\xFB\xDE\xEF7}\xDC\xE4\xEE2?\xAB%\xA6\xCF\xC3«\xE0\x8D\xFA\xBDR\xF2\xDB\xF1\xC7\xFB\xB3\xEC\xE5\x93'\xCD%\xBBd\xBB\xF0\xAE\xFF��\xB8\xB3\xF2x\xAF\xA4\xABd\xB7=n��ɢU]��\xAE\xAEYr\xAA\x86\x97\x885\xA2[9\xF8N\xCE\x\xD6^\xE3-)\xB5\xE5\xAC��\xE1\xFC\xBA^6\xD7E\xAF\x88\xDD\xF5z\xB1t_\x88\xF5zR\xBB}@f\xBB=e\xF4\xF5nJX\xDC&XI\xAA)\xEA_\xA7Ʋ)\xEBmzO\xE6\xDA\xE4֯\xF5\x82՜\xC8\xC8\xD2p;_\xD6-]Z\xF1DXJ\xBFMw\x8DX5\xCBe\xE6E\x8E\xCA_\xC4\xA2\x92\xA1\xBC\xDBq\xD1}\xC9\x9BU\xA3_)?\xA7͍ə\xF1\xAAI=\xE4\xFC\xC5\xFCPCt~Z\x92\xBAQ\x97L\x96꾟\xE2\xCE-\x8A\x82\xBD\x95\xA3\x96\xFE
&quo
t;\xEE\xD2Jˮ\xEC\xAB9.\xD0\xE8\xA8\xFC9HV\xADG_5۬\xAE\xA3\xE3\xC7fm[~!ё戊\x83\xAE\xAE\xD3\xC1J\xAE\xCEף\x98\xB2vO\xC7o\xDAs+\xA2\xF36v=<\x8B\x9F\xFCv\xD2Ӵ\x9A\xCD\xEA\xBFw\xB7v\x99;\x8E\xE3\xFD\xF9\x9CS\xC97\xDF%,\x9D\xCFgE\x9E\xB6\xAF\xFC|\xB9\xF8\xF9\x93\xF2\x8Fe\xEA\xE6\xCB\xEE\x99+_\xDA헂_s_\xA8\xE1\xEE\xE5\xD2]o\x87\x9F/WLtNJ\x98\xB1\xE9LuU\xAA\xF2\xAA\x84W]CЫ#\xC1k\xA6\x99F]\x80\xA8V\xA5\xB6\xF6\xDB\xDA)\xEAMXM\x94)%-,e\xAA\x9A*\x94HԮ\xDCl3B]\\x8E\xA9`\xC9h\xFA:\xF1,\xB2\x91e\x88\x84!
+\x8A\x82\x9A\x8C\x96.\x81\xA0x\x86H3x\xAE\x86
+u\x86qt\xB7PG4FljR\x9DA\x81\xCD?\xCC~Xp\xBF\xFC\xAC\xA9\xBF\xF4S\xAD\xBFb3\xD7nF\xBB8_\x9C=\xD7l\xAB\xDB\xE9\xED\xE1\xFA\xB2G\xF1_\xC3\xFD\xA7\x95v\x9D\x89\xEC\xBCy\xAFl\x99]\xAD\xAB\xB3\xE4\xFF��`\xB7n\xBE:/\x81\xE9\xE3\xC6q\x98\xE5\xCA\xED]\xAC\x9B\x8F+.\xEBm\xE0i\xA7\xF1~\xA2\x95[Ш)v\xBE\x8A\xB6\xF7\xD9|z\x83Z\xF1\\xB7\xE8\x88\xDF'\xA2\xF0\xB9Y\xA6\xDE\xEC\xADF\xA4\x9Dcn\xAC\xC6t\xE6\x99M\xCA)\xA6\xFA\xC2.j\x94��<\xED\xB2\xD8?\xA9W\x95\xBA슭*\xD8}\xCEJ\xA5ZS\xA7Pdp\xEB2qO}\x85\xA6Z\xFA\xEC\x97B\xBC$\x95A\xE4\xEB\xB6\xECgp\x92ɦЄ\xA7\xAC\xF5i\x9C\x9Dc\xAC9/-"\xA9\xAD\x9E\xAB\xE0/VKڸ\xE9^\xAD?\xD6\x98V\xABJ\xAF\xC4
+\xDAϨ\xD6\xF9U\xA5\xFC*x)Q\xC6\xFB\xF4Z\x80\xED\xB1-n\x88"r\xD6*\xB5\xF1e\xE5\xA3\xC7Z?J(\xD7v^{;./\xA6\xA1u\x9D\xE8\xD3[g,%\xB2@_Y
+\xF0\x95\xE5d\x91U\xC6ٯ+V\xB2\x94O\x88$.\xB4\xAC\xED\xF3c\xE5:\xA9ҫé\xA7\xE9z*\x95h\xB7\xDA\xFA\x91[\xF0]w\xFD,\xCE(\x96\x91\xBB\xF9\x9D\x9Fm\xF7l\x9D\xA6,]\xBD\xF2V\xFD\xBE5\xAE**\xE4\x8F\xEA\x97<\xDDo\xC2z켼M4ˢ\xD1=\xBElϳ\x84\xE73\x94ָ\xF8\xF8{\xF9\x97\xDBR\xFE>Q<Z\x815\xE1\xAA\xFA0;>\x93h\xFDh\xF2\x96\xB6\xCE\xD5u_̿D\x8B\xBEXi8r\xB78\xCF\xE3\xFA\xFE\xB7\xFA\xAE\xBDO\xCE}\xD2\xD7uOnN\xCF\xF5A\x93\xB8\xFC\xE1\xEEy4\xA5\xAB\x8B\xC5UO\xE0\xD9½\x9E\xB2\xB5[\xFC\xDF&\x9CVۣs\xD5\xC2|q\x89k\xB2\xFF��1{ó\xFF��ɼ%\xE5\xFA\x99x\xFF��6\xFB\xC68\x9C\x8B'\xFA\xAA\x9Fꃅ\xCD\xFC|<\x88\xAF\xC7Z\xF5\xE8k\xFC|/\xCF?읯\xDB\xDA\xFBo\xE7,9l\xB1\xFB\x8E?A[E\x9A\xBA\xD3\xFD\xCBtzzq\xB5U\xE8իe5\xB2r\x9A}S>B\x9D\x9E\xB7\x97_\xD2~X\xFC\xC3n\xC3-{<\xED۱\xC8\xE2\xB6n}+>\xBF\xE9\xF1\xFCO?\xBB\xF8\xF2N\xDC?\xF9\xFF��\xE3|=\x97\xE2\xBD\xEE\x84\x92\xF1^;\xF4\xF1!\xE3\xD7N\xF5\xD5-\x82Gԑ\x846\xCA\x84$e\xB5b\x84
+\xA2\x86D(\xB2\x88\xAC\xFD\xF7w\x87\xB1\xEDrwY\x9FэLx\xBE\x95_\xE6~\xE3\xDEg\xEFs\xE4ϝ\xCD\xF3>W\xF2\xAA\xFBj\x8FE\xF9\xCB\xDC\xFDN\xE2\xBEߍ\xCE<VX\xEB\x91\xEC\xBEH\xF2y\x9B\xE4\xAB:\xEFfo\x84\xFC\xA5\xAC\xF9w~,\x95\xA2Z\xDB\x96\xB3\xE5O.֗\xDA\xD57\xA6\xAD\x96\xAA\x93Kv\xC3QE=z\x8B\xAD\xE7#\xEA\xD2\xFD,\xE6QI[-\x95KB\xE8\x87\xF4S\xF8\xC9\xDA\xD1@\xA3\xF3\xAD\xA8\xCC\xCET-]\x80g)$UkՂ\x8B\xE4p 8\xDBv\xF5\xB1z%\xE6^U:\xAF+��Sm\xE8\xBEaѪ\xD5\xDB\xC3E\xF1b\xF6з\xF6\xA5\xE2@~\xA4\xD6\xF9\x85\xF4%\xE7\xD0Nȴ\xFA\xFE+\x8A\xAF0n\xE7\x8F\xC0X\xBD\xE9VWE%\xD6\xEE\x90\xFA\xFE\xF0&a\xEDԠ\xEFE\xAB\xB05\xC6\xDAv{$\xD9x\xB1\xDA\xCE[\x8A\x97\xCAn\xDF\xF0\xB7\xE4LPQ\xEA\xA7{N\xDB],׀ti+2\xA11Ź\xE8ʭ9\xDF\xC8dKר\xE5EX\xA2Z\xF5��\xB1+&G9H\x97n\x9B\x8B\xD2\xEB]'VE
+\x96\xBC\xD8t\xE2\xA6\xD6r\xB6\x84-Bo_\xA4\x93\xF5ytt\xA9\x99\x95\xE0mYJ\xCFM\xB4jE\xAB\xF8\xAE\xA0U\xAA\xD9;x\x85?=\xEDG\x93[@\xB7\x95:\xC3\xDC\x97V\x9BulS\xB2K\xE4CN\xB6V\xF5ncO\x90\x99\\xA2\xCF\xE1��;h+\xAD0\M\xAD\xB3[߇ȉ\xEAK=B-Y\xA6\xA45h\xD0[\xD9\x9EĪ\xE8\xFB~\xE3\xFF��\xDFo\xF8}+\xFF��\xED\xF8\xC5!\x9E\x9C~\xA2\xED\xFB}\xD12\xD3\xACZf'%\xB0\xC9.E\xA6\x9B\x9C\x99\xC1.K\xA6#!RX\x85\x94\xC0\xA8(\xB2\xE0\x98\xA1\x81}\xCEjvݾ^\xE2\xFF��n*\xBB\xBF\xF6\xA9\xF3y\xE8\xF6T\xEDj\xFE\xAE\xE2\xD3\xF4c\xFA\x9F\xE2\xE0a#>l\x99;\x8B\xE6\xCA\xE7%ݲd\xD5o\xDC`\xBD\xB5m\xEE\xCDM;E[\xFA\xB29o\xFAQ\x91\xD6\xCE\xED\xB3
+\xDFڵovJ\xD1'WՖ\xD4h\x99Z\xF4Ed7io\xD0Om\xAA\xB5\xB6N͗\xDDYҶoraQ\xDB\xD5\xF5b\xA8\xEDma<W/\xE2kO\xDE:\xCC\xDA\xDB"\xEE\xDC\xC7\xE2��q\xE4U\xEBQ\x8B@3h\xF4��\xB5\x8A\xEEV\x95^~%)[U\xD9\xEAKcon8\xD5?\x8B\xA9)Z\xD7]\xE0U\xEC\xEDf\xD9\x97%\xDBd
+\xA5\xA8\xA3z\x94)\xBDc\xA19\x8BdT\x856 \xA5[Y\xC2F\x85\x8E\xAE\x8A\x89͖\xE2\xAA\xFA-\xDA\xFD*z\xF4E\xC0\x8F\x94A\[\xEE\xF0.So^\xACM\xA7\x91;\xA5X\x9F\xA9\xE8\x8A\xD9$RI\xDA:-~e\xB7Eڳ_0T\xC4~!\xE2\xD3[l\xCBY1\xF3p\xB9U|\x82\xABaOW\xB7\xC0\xBBYէ\xBB\xEA[\xB4\xF7\xD1\xEAJ[\x95uߡ\xBB+\xD6:\xF8\xE9\xDB\xE5\xFA E\xF56\xF7\xF0\xE8^k\xB7_\x87@\xA4\xDB\xE9\x95\xE1Ժ(\xFA\x{DBC0}\x87g\xB1\xA7|a)\xF0a\xCDٽ4﮿\x81w\xB3M\xF4\xF1ޡf\xFCw%\xEB\xFCK_0)\xB0$\xE8SD\xE8Z-\xCBp\xC1\x92\xFC��\xB7W\x95\xDBP\x93ik\xB6\xC5D?"(\xC8W&A\xE4}\xB5\%s:\xE4\x93\xC9\xE5\xDE\xE1\xCA\xC5\xF3\xAC\xF5\x9D\xBE\x99\xFF��\xAF\xD9\xFC\xCB\xE4!r r5//\xA4\xB3\x8Fټ\x82V\xA8JMK\xCB集\xC9$%\xEAoo\xD2x\x96\xA4Գ~\x90g\xCF3\xF7\xFF��\xE5{\x96gW4'\xF5?\xC4\xF7\x9Dǭ\xE8e\xF4\xE5\xE1oO\xFDQ\xA7\xE9>W\xDCr\xE7\xF5L\xF2\xFA\xBCv,Xhn\xCBÍ~\xEF\xF4$r\xAC}\xBD\xE5\x9D|+%)\xB4\xFC\xBCëⅨ \xECTc\xEFrr\xBA\xA7͎\xC0\x93\xC7U\xFAL9yz\xB6弛\xF0Ơ\x8B\x85Z\xAA\xAF\x8B2\xE4m
\x
B6À-\xB9~H\xA7\xABKr=\xB4ۡT\xFB\x80\xBB\xEF\xE4\xB6+o\xA0\xB5=AV\xDCU\x8A\xDCm\xA3\xD3\xF3\xE64��\x9B\xE8\xBEl\xAEQ\xB6\x85-\xB4("r{N\xE3.\xF6]\x82\xB1p\x9D~\xEE\x92]\xFE\xE7$U\xD4eu|\xBA-\x85\xEB[(ۡQv\xB1V\\x9C\xF4\xDC^9\x87\xF0p)ćJ;=~ \xA8\xD3\xF4\x8E\xBF./\x8F\xDB`BreQ\xD9~\x90*\xD2@\xB8\x9DH\xA0_R\x862\x8A\xABqz\xC2\xE3\xB9)2\xE7h`\xEB\xABB\xF1l\x92\xBC\xFCB\xCB<T\xEF\xD4C\x90 )\xD4o4\xE9\xC5h\xD7AX\xE6|\xBA\x95i姈A^\xF3\xA5\x97\xCC\\x97}\xC1D\xF4$\x84\xE3\x8A\xA8ZS\xB1L*\xCF@-BJY?\x89\xC1:s\xBD|v$8D\xB6\xFEe\xBF\xB4 \xA1
+!\xFF\xD9
\ No newline at end of file
Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (273213 => 273214)
--- trunk/LayoutTests/platform/ios-simulator/TestExpectations 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations 2021-02-21 04:15:52 UTC (rev 273214)
@@ -7,6 +7,7 @@
accessibility/misspelling-range.html [ Pass ]
accessibility/url-test.html [ Pass ]
accessibility/keyevents-posted-for-dismiss-action.html [ Pass ]
+accessibility/embedded-image-description.html [ Pass ]
fast/multicol/flexbox-rows.html [ Skip ]
workers/wasm-mem-post-message.html [ Failure ]
Modified: trunk/LayoutTests/platform/win/TestExpectations (273213 => 273214)
--- trunk/LayoutTests/platform/win/TestExpectations 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/LayoutTests/platform/win/TestExpectations 2021-02-21 04:15:52 UTC (rev 273214)
@@ -268,6 +268,7 @@
# Need to implement AccessibilityUIElement::clearSelectedChildren()
accessibility/aria-listbox-clear-selection-crash.html [ Skip ]
accessibility/listbox-clear-selection.html [ Skip ]
+accessibility/embedded-image-description.html [ Skip ]
# TODO Investigate why these mouse scroll tests are failing.
fast/events/scroll-in-scaled-page-with-overflow-hidden.html [ Failure ]
Modified: trunk/Source/WebCore/ChangeLog (273213 => 273214)
--- trunk/Source/WebCore/ChangeLog 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/ChangeLog 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1,3 +1,44 @@
+2021-02-20 Chris Fleizach <[email protected]>
+
+ AX: Image should report the embedded accessibility description if available
+ https://bugs.webkit.org/show_bug.cgi?id=221875
+ <rdar://problem/74320584>
+
+ Reviewed by Jer Noble.
+
+ Check if images have accessibility description metadata and expose that to the AX API.
+
+ Test: accessibility/embedded-image-description.html
+
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::embeddedImageDescription const):
+ * accessibility/AccessibilityObject.h:
+ * accessibility/AccessibilityObjectInterface.h:
+ * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+ (-[WebAccessibilityObjectWrapper _accessibilityPhotoDescription]):
+ * accessibility/isolatedtree/AXIsolatedObject.cpp:
+ (WebCore::AXIsolatedObject::initializeAttributeData):
+ * accessibility/isolatedtree/AXIsolatedObject.h:
+ * accessibility/isolatedtree/AXIsolatedTree.h:
+ * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+ (-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
+ (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+ * platform/cf/MediaAccessibilitySoftLink.cpp:
+ * platform/cf/MediaAccessibilitySoftLink.h:
+ * platform/graphics/BitmapImage.h:
+ * platform/graphics/Image.h:
+ (WebCore::Image::accessibilityDescription const):
+ * platform/graphics/ImageDecoder.h:
+ * platform/graphics/ImageSource.cpp:
+ (WebCore::ImageSource::accessibilityDescription):
+ * platform/graphics/ImageSource.h:
+ * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
+ * platform/graphics/cg/ImageDecoderCG.cpp:
+ (WebCore::ImageDecoderCG::accessibilityDescription const):
+ * platform/graphics/cg/ImageDecoderCG.h:
+ * rendering/RenderImage.h:
+ (WebCore::RenderImage::accessibilityDescription const):
+
2021-02-20 Peng Liu <[email protected]>
Video elements do not work as sources for TexImage2D calls in GPU Process
Modified: trunk/Source/WebCore/PAL/ChangeLog (273213 => 273214)
--- trunk/Source/WebCore/PAL/ChangeLog 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/PAL/ChangeLog 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1,3 +1,14 @@
+2021-02-20 Chris Fleizach <[email protected]>
+
+ AX: Image should report the embedded accessibility description if available
+ https://bugs.webkit.org/show_bug.cgi?id=221875
+ <rdar://problem/74320584>
+
+ Reviewed by Jer Noble.
+
+ * PAL.xcodeproj/project.pbxproj:
+ * pal/spi/cocoa/MediaAccessibilitySPI.h: Added.
+
2021-02-18 Wenson Hsieh <[email protected]>
[iOS] Specify a _UIDataOwner when reading or writing from the system pasteboard
Modified: trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj (273213 => 273214)
--- trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj 2021-02-21 04:15:52 UTC (rev 273214)
@@ -117,6 +117,7 @@
1D12CC4B2411BCAE00FDA0A3 /* FeatureFlagsSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D12CC4A2411BCAE00FDA0A3 /* FeatureFlagsSPI.h */; };
293EE4A824154F8F0047493D /* AccessibilitySupportSoftLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 293EE4A624154F8F0047493D /* AccessibilitySupportSoftLink.cpp */; };
293EE4A924154F8F0047493D /* AccessibilitySupportSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 293EE4A724154F8F0047493D /* AccessibilitySupportSoftLink.h */; };
+ 29C15F4825D75FDF001CE31C /* MediaAccessibilitySPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 29C15F4725D75F63001CE31C /* MediaAccessibilitySPI.h */; };
29CDEBA62548D57F007C07B7 /* AXSpeechManagerSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CDEB9E2548D055007C07B7 /* AXSpeechManagerSPI.h */; };
2D02E93C2056FAA700A13797 /* AudioToolboxSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D02E93B2056FAA700A13797 /* AudioToolboxSPI.h */; };
2E1342CC215AA10A007199D2 /* UIKitSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E1342CA215AA10A007199D2 /* UIKitSoftLink.h */; };
@@ -320,6 +321,7 @@
1D12CC4A2411BCAE00FDA0A3 /* FeatureFlagsSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FeatureFlagsSPI.h; sourceTree = "<group>"; };
293EE4A624154F8F0047493D /* AccessibilitySupportSoftLink.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilitySupportSoftLink.cpp; sourceTree = "<group>"; };
293EE4A724154F8F0047493D /* AccessibilitySupportSoftLink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccessibilitySupportSoftLink.h; sourceTree = "<group>"; };
+ 29C15F4725D75F63001CE31C /* MediaAccessibilitySPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaAccessibilitySPI.h; sourceTree = "<group>"; };
29CDEB9E2548D055007C07B7 /* AXSpeechManagerSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AXSpeechManagerSPI.h; sourceTree = "<group>"; };
2D02E93B2056FAA700A13797 /* AudioToolboxSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioToolboxSPI.h; sourceTree = "<group>"; };
2E1342CA215AA10A007199D2 /* UIKitSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIKitSoftLink.h; sourceTree = "<group>"; };
@@ -462,6 +464,7 @@
0C2DA06C1F33CA8400DBC317 /* CoreMediaSPI.h */,
0C2DA1241F3BEB4900DBC317 /* CoreTextSPI.h */,
CD17B268255F1625008430F9 /* CoreVideoSPI.h */,
+ 29C15F4725D75F63001CE31C /* MediaAccessibilitySPI.h */,
);
path = cf;
sourceTree = "<group>";
@@ -862,6 +865,7 @@
0C77858B1F45130F00F4EBB6 /* LookupSPI.h in Headers */,
5C7C787323AC3E770065F47E /* ManagedConfigurationSoftLink.h in Headers */,
5C7C787623AC3E850065F47E /* ManagedConfigurationSPI.h in Headers */,
+ 29C15F4825D75FDF001CE31C /* MediaAccessibilitySPI.h in Headers */,
0C5AF91D1F43A4C7002EAC02 /* MediaPlayerSPI.h in Headers */,
0C77858C1F45130F00F4EBB6 /* MediaRemoteSPI.h in Headers */,
0C00CFD41F68CE4600AAC26D /* MediaTimeAVFoundation.h in Headers */,
Modified: trunk/Source/WebCore/PAL/pal/PlatformAppleWin.cmake (273213 => 273214)
--- trunk/Source/WebCore/PAL/pal/PlatformAppleWin.cmake 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/PAL/pal/PlatformAppleWin.cmake 2021-02-21 04:15:52 UTC (rev 273214)
@@ -8,6 +8,7 @@
spi/cf/CFUtilitiesSPI.h
spi/cf/CoreAudioSPI.h
spi/cf/CoreMediaSPI.h
+ spi/cf/MediaAccessibilitySPI.h
spi/win/CFNetworkSPIWin.h
spi/win/CoreTextSPIWin.h
Modified: trunk/Source/WebCore/PAL/pal/PlatformMac.cmake (273213 => 273214)
--- trunk/Source/WebCore/PAL/pal/PlatformMac.cmake 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/PAL/pal/PlatformMac.cmake 2021-02-21 04:15:52 UTC (rev 273214)
@@ -18,6 +18,7 @@
spi/cf/CoreAudioSPI.h
spi/cf/CoreMediaSPI.h
spi/cf/CoreTextSPI.h
+ spi/cf/MediaAccessibilitySPI.h
spi/cg/CoreGraphicsSPI.h
spi/cg/ImageIOSPI.h
Added: trunk/Source/WebCore/PAL/pal/spi/cf/MediaAccessibilitySPI.h (0 => 273214)
--- trunk/Source/WebCore/PAL/pal/spi/cf/MediaAccessibilitySPI.h (rev 0)
+++ trunk/Source/WebCore/PAL/pal/spi/cf/MediaAccessibilitySPI.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#include <MediaAccessibility/MAImageCaptioningPrivate.h>
+
+#else
+
+#include <ImageIO/CGImageSource.h>
+
+WTF_EXTERN_C_BEGIN
+
+CFStringRef MAImageCaptioningCopyCaptionWithSource(CGImageSourceRef, CFErrorRef*);
+
+WTF_EXTERN_C_END
+
+#endif // !USE(APPLE_INTERNAL_SDK)
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (273213 => 273214)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -2257,6 +2257,13 @@
}
#endif
+String AccessibilityObject::embeddedImageDescription() const
+{
+ if (!is<RenderImage>(renderer()))
+ return { };
+ return downcast<RenderImage>(renderer())->accessibilityDescription();
+}
+
String AccessibilityObject::ariaLandmarkRoleDescription() const
{
switch (roleValue()) {
Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (273213 => 273214)
--- trunk/Source/WebCore/accessibility/AccessibilityObject.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -399,6 +399,7 @@
bool accessibleNameDerivesFromContent() const override;
String brailleLabel() const override { return getAttribute(HTMLNames::aria_braillelabelAttr); }
String brailleRoleDescription() const override { return getAttribute(HTMLNames::aria_brailleroledescriptionAttr); }
+ String embeddedImageDescription() const override;
// Abbreviations
String expandedTextValue() const override { return String(); }
Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (273213 => 273214)
--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1011,6 +1011,7 @@
virtual double estimatedLoadingProgress() const = 0;
virtual String brailleLabel() const = 0;
virtual String brailleRoleDescription() const = 0;
+ virtual String embeddedImageDescription() const = 0;
virtual bool supportsARIAOwns() const = 0;
virtual bool isActiveDescendantOfFocusedContainer() const = 0;
Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (273213 => 273214)
--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1820,6 +1820,14 @@
return self.axBackingObject->canSetValueAttribute();
}
+- (NSString *)_accessibilityPhotoDescription
+{
+ if (![self _prepareAccessibilityCall])
+ return nil;
+
+ return self.axBackingObject->embeddedImageDescription();
+}
+
- (NSString *)accessibilityLinkRelationshipType
{
if (![self _prepareAccessibilityCall])
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (273213 => 273214)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -296,6 +296,9 @@
object.selectedChildren(selectedChildren);
setObjectVectorProperty(AXPropertyName::SelectedChildren, selectedChildren);
}
+
+ if (object.isImage())
+ setProperty(AXPropertyName::EmbeddedImageDescription, object.embeddedImageDescription().isolatedCopy());
AccessibilityChildrenVector visibleChildren;
object.visibleChildren(visibleChildren);
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (273213 => 273214)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -272,6 +272,7 @@
void accessibilityText(Vector<AccessibilityText>& texts) const override;
String brailleLabel() const override { return stringAttributeValue(AXPropertyName::BrailleLabel); }
String brailleRoleDescription() const override { return stringAttributeValue(AXPropertyName::BrailleRoleDescription); }
+ String embeddedImageDescription() const override { return stringAttributeValue(AXPropertyName::EmbeddedImageDescription); }
String computedRoleString() const override { return stringAttributeValue(AXPropertyName::ComputedRoleString); }
bool isValueAutofilled() const override { return boolAttributeValue(AXPropertyName::IsValueAutofilled); }
Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h (273213 => 273214)
--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -107,6 +107,7 @@
DocumentURI,
EditableAncestor,
ElementRect,
+ EmbeddedImageDescription,
EstimatedLoadingProgress,
ExpandedTextValue,
ExposesTitleUIElement,
Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (273213 => 273214)
--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm 2021-02-21 04:15:52 UTC (rev 273214)
@@ -543,6 +543,10 @@
#define NSAccessibilityBrailleRoleDescriptionAttribute @"AXBrailleRoleDescription"
#endif
+#ifndef NSAccessibilityEmbeddedImageDescriptionAttribute
+#define NSAccessibilityEmbeddedImageDescriptionAttribute @"AXEmbeddedImageDescription"
+#endif
+
extern "C" AXUIElementRef NSAccessibilityCreateAXUIElementRef(id element);
@implementation WebAccessibilityObjectWrapper
@@ -1318,6 +1322,7 @@
static NSArray *buttonAttrs;
static NSArray *scrollViewAttrs;
static NSArray *incrementorAttrs;
+ static NSArray *imageAttrs;
static NSArray *attributes = retainPtr(@[
NSAccessibilityRoleAttribute,
NSAccessibilitySubroleAttribute,
@@ -1588,6 +1593,12 @@
[tempArray addObject:NSAccessibilityVerticalScrollBarAttribute];
scrollViewAttrs = tempArray.leakRef();
}
+ if (!imageAttrs) {
+ auto tempArray = adoptNS([[NSMutableArray alloc] initWithArray:attributes]);
+ [tempArray addObject:NSAccessibilityEmbeddedImageDescriptionAttribute];
+ [tempArray addObject:NSAccessibilityURLAttribute];
+ imageAttrs = tempArray.leakRef();
+ }
NSArray *objectAttributes = attributes;
@@ -1597,8 +1608,10 @@
objectAttributes = webAreaAttrs;
else if (backingObject->isTextControl())
objectAttributes = textAttrs;
- else if (backingObject->isLink() || backingObject->isImage())
+ else if (backingObject->isLink())
objectAttributes = anchorAttrs;
+ else if (backingObject->isImage())
+ objectAttributes = imageAttrs;
else if (backingObject->isTable() && backingObject->isExposable())
objectAttributes = tableAttrs;
else if (backingObject->isTableColumn())
@@ -2402,6 +2415,8 @@
return [self position];
if ([attributeName isEqualToString:NSAccessibilityPathAttribute])
return [self path];
+ if ([attributeName isEqualToString:NSAccessibilityEmbeddedImageDescriptionAttribute])
+ return backingObject->embeddedImageDescription();
if ([attributeName isEqualToString:NSAccessibilityWindowAttribute]
|| [attributeName isEqualToString:NSAccessibilityTopLevelUIElementAttribute])
Modified: trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.cpp (273213 => 273214)
--- trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -27,6 +27,7 @@
#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
#include <CoreText/CoreText.h>
+#include <ImageIO/CGImageSource.h>
#include <MediaAccessibility/MediaAccessibility.h>
#include <wtf/SoftLinking.h>
@@ -56,5 +57,6 @@
SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(WebCore, MediaAccessibility, MACaptionAppearanceCopyFontDescriptorWithStrokeForStyle, CTFontDescriptorRef, (MACaptionAppearanceDomain domain, MACaptionAppearanceBehavior *behavior, MACaptionAppearanceFontStyle fontStyle, CFStringRef trackLanguage, CGFloat darwingPointSize, CGFloat *strokeWidthPt), (domain, behavior, fontStyle, trackLanguage, darwingPointSize, strokeWidthPt));
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, MediaAccessibility, kMAXCaptionAppearanceSettingsChangedNotification, CFStringRef)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE(WebCore, MediaAccessibility, kMAAudibleMediaSettingsChangedNotification, CFStringRef)
+SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(WebCore, MediaAccessibility, MAImageCaptioningCopyCaptionWithSource, CFStringRef, (CGImageSourceRef imageSource, CFErrorRef *error), (imageSource, error))
#endif // HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
Modified: trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.h (273213 => 273214)
--- trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/cf/MediaAccessibilitySoftLink.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -29,6 +29,7 @@
#include <CoreText/CoreText.h>
#include <MediaAccessibility/MediaAccessibility.h>
+#include <pal/spi/cf/MediaAccessibilitySPI.h>
#include <wtf/SoftLinking.h>
SOFT_LINK_FRAMEWORK_FOR_HEADER(WebCore, MediaAccessibility)
@@ -71,6 +72,8 @@
#define kMAXCaptionAppearanceSettingsChangedNotification get_MediaAccessibility_kMAXCaptionAppearanceSettingsChangedNotification()
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(WebCore, MediaAccessibility, kMAAudibleMediaSettingsChangedNotification, CFStringRef)
#define kMAAudibleMediaSettingsChangedNotification get_MediaAccessibility_kMAAudibleMediaSettingsChangedNotification()
+SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(WebCore, MediaAccessibility, MAImageCaptioningCopyCaptionWithSource, CFStringRef, (CGImageSourceRef imageSource, CFErrorRef * CF_RETURNS_RETAINED error), (imageSource, error))
+#define MAImageCaptioningCopyCaptionWithSource softLink_MediaAccessibility_MAImageCaptioningCopyCaptionWithSource
#endif // HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
Modified: trunk/Source/WebCore/platform/graphics/BitmapImage.h (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/BitmapImage.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/BitmapImage.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -82,6 +82,7 @@
RepetitionCount repetitionCount() const { return m_source->repetitionCount(); }
String uti() const override { return m_source->uti(); }
String filenameExtension() const override { return m_source->filenameExtension(); }
+ String accessibilityDescription() const override { return m_source->accessibilityDescription(); }
Optional<IntPoint> hotSpot() const override { return m_source->hotSpot(); }
// FloatSize due to override.
Modified: trunk/Source/WebCore/platform/graphics/Image.h (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/Image.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/Image.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -129,6 +129,7 @@
virtual String uti() const { return String(); } // null string if unknown
virtual String filenameExtension() const { return String(); } // null string if unknown
+ virtual String accessibilityDescription() const { return String(); } // null string if unknown
virtual void destroyDecodedData(bool destroyAll = true) = 0;
Modified: trunk/Source/WebCore/platform/graphics/ImageDecoder.h (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/ImageDecoder.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/ImageDecoder.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -115,6 +115,7 @@
virtual RepetitionCount repetitionCount() const = 0;
virtual String uti() const { return emptyString(); }
virtual String filenameExtension() const = 0;
+ virtual String accessibilityDescription() const { return emptyString(); };
virtual Optional<IntPoint> hotSpot() const = 0;
virtual IntSize frameSizeAtIndex(size_t, SubsamplingLevel = SubsamplingLevel::Default) const = 0;
Modified: trunk/Source/WebCore/platform/graphics/ImageSource.cpp (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/ImageSource.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/ImageSource.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -557,6 +557,11 @@
return metadata<String, (&ImageDecoder::filenameExtension)>(String(), &m_filenameExtension);
}
+String ImageSource::accessibilityDescription()
+{
+ return metadata<String, (&ImageDecoder::accessibilityDescription)>(String(), &m_accessibilityDescription);
+}
+
Optional<IntPoint> ImageSource::hotSpot()
{
return metadata<Optional<IntPoint>, (&ImageDecoder::hotSpot)>(WTF::nullopt, &m_hotSpot);
Modified: trunk/Source/WebCore/platform/graphics/ImageSource.h (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/ImageSource.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/ImageSource.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -94,6 +94,7 @@
RepetitionCount repetitionCount();
String uti();
String filenameExtension();
+ String accessibilityDescription();
Optional<IntPoint> hotSpot();
Optional<IntSize> densityCorrectedSize(ImageOrientation = ImageOrientation::FromImage);
bool hasDensityCorrectedSize() { return densityCorrectedSize().hasValue(); }
@@ -199,6 +200,7 @@
Optional<RepetitionCount> m_repetitionCount;
Optional<String> m_uti;
Optional<String> m_filenameExtension;
+ Optional<String> m_accessibilityDescription;
Optional<Optional<IntPoint>> m_hotSpot;
// Image metadata which is calculated from the first ImageFrame.
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -72,6 +72,7 @@
String uti() const final;
String filenameExtension() const final;
Optional<IntPoint> hotSpot() const final { return WTF::nullopt; }
+ String accessibilityDescription() const final { return String(); }
IntSize frameSizeAtIndex(size_t, SubsamplingLevel = SubsamplingLevel::Default) const final;
bool frameIsCompleteAtIndex(size_t) const final;
Modified: trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.cpp (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -34,6 +34,7 @@
#include "IntPoint.h"
#include "IntSize.h"
#include "Logging.h"
+#include "MediaAccessibilitySoftLink.h"
#include "MIMETypeRegistry.h"
#include "SharedBuffer.h"
#include "UTIRegistry.h"
@@ -284,6 +285,17 @@
return WebCore::preferredExtensionForImageType(uti());
}
+String ImageDecoderCG::accessibilityDescription() const
+{
+ if (!MediaAccessibilityLibrary() || !canLoad_MediaAccessibility_MAImageCaptioningCopyCaptionWithSource())
+ return { };
+
+ auto description = adoptCF(MAImageCaptioningCopyCaptionWithSource(m_nativeDecoder.get(), nullptr));
+ if (!description)
+ return { };
+ return description.get();
+}
+
EncodedDataStatus ImageDecoderCG::encodedDataStatus() const
{
if (m_encodedDataStatus == EncodedDataStatus::Error || m_encodedDataStatus == EncodedDataStatus::Complete)
Modified: trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.h (273213 => 273214)
--- trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -50,6 +50,7 @@
RepetitionCount repetitionCount() const final;
String uti() const final;
String filenameExtension() const final;
+ String accessibilityDescription() const final;
Optional<IntPoint> hotSpot() const final;
IntSize frameSizeAtIndex(size_t, SubsamplingLevel = SubsamplingLevel::Default) const final;
Modified: trunk/Source/WebCore/rendering/RenderImage.h (273213 => 273214)
--- trunk/Source/WebCore/rendering/RenderImage.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebCore/rendering/RenderImage.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -79,6 +79,8 @@
bool hasNonBitmapImage() const;
+ String accessibilityDescription() const { return imageResource().image()->accessibilityDescription(); }
+
protected:
void willBeDestroyed() override;
Modified: trunk/Source/WebKit/ChangeLog (273213 => 273214)
--- trunk/Source/WebKit/ChangeLog 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebKit/ChangeLog 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1,3 +1,13 @@
+2021-02-20 Chris Fleizach <[email protected]>
+
+ AX: Image should report the embedded accessibility description if available
+ https://bugs.webkit.org/show_bug.cgi?id=221875
+ <rdar://problem/74320584>
+
+ Reviewed by Jer Noble.
+
+ * WebProcess/GPU/media/RemoteImageDecoderAVF.h:
+
2021-02-20 Peng Liu <[email protected]>
Video elements do not work as sources for TexImage2D calls in GPU Process
Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVF.h (273213 => 273214)
--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVF.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteImageDecoderAVF.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -66,6 +66,7 @@
String uti() const final;
String filenameExtension() const final;
Optional<WebCore::IntPoint> hotSpot() const final { return WTF::nullopt; }
+ String accessibilityDescription() const final { return String(); }
WebCore::IntSize frameSizeAtIndex(size_t, WebCore::SubsamplingLevel = WebCore::SubsamplingLevel::Default) const final;
bool frameIsCompleteAtIndex(size_t) const final;
Modified: trunk/Tools/ChangeLog (273213 => 273214)
--- trunk/Tools/ChangeLog 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/ChangeLog 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1,3 +1,26 @@
+2021-02-20 Chris Fleizach <[email protected]>
+
+ AX: Image should report the embedded accessibility description if available
+ https://bugs.webkit.org/show_bug.cgi?id=221875
+ <rdar://problem/74320584>
+
+ Reviewed by Jer Noble.
+
+ * DumpRenderTree/AccessibilityUIElement.cpp:
+ (getEmbeddedImageDescription):
+ (AccessibilityUIElement::getJSClass):
+ * DumpRenderTree/AccessibilityUIElement.h:
+ * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
+ (AccessibilityUIElement::embeddedImageDescription const):
+ * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
+ (AccessibilityUIElement::embeddedImageDescription const):
+ * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+ * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+ * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
+ (WTR::AccessibilityUIElement::embeddedImageDescription const):
+ * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
+ (WTR::AccessibilityUIElement::embeddedImageDescription const):
+
2021-02-20 Peng Liu <[email protected]>
Video elements do not work as sources for TexImage2D calls in GPU Process
Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp (273213 => 273214)
--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1610,6 +1610,14 @@
#endif
+#if PLATFORM(COCOA)
+static JSValueRef getEmbeddedImageDescription(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+ auto embeddedImageDescription = toAXElement(thisObject)->embeddedImageDescription();
+ return JSValueMakeString(context, embeddedImageDescription.get());
+}
+#endif
+
// Implementation
// Unsupported methods on various platforms.
@@ -1934,6 +1942,9 @@
{ "mathPostscriptsDescription", mathPostscriptsDescriptionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "mathPrescriptsDescription", mathPrescriptsDescriptionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
#endif
+#if PLATFORM(COCOA)
+ { "embeddedImageDescription", getEmbeddedImageDescription, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+#endif
{ 0, 0, 0, 0 }
};
Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.h (273213 => 273214)
--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -317,6 +317,10 @@
AccessibilityTextMarkerRange textMarkerRangeMatchesTextNearMarkers(JSStringRef, AccessibilityTextMarker*, AccessibilityTextMarker*);
#endif // PLATFORM(IOS_FAMILY)
+#if PLATFORM(COCOA)
+ JSRetainPtr<JSStringRef> embeddedImageDescription() const;
+#endif
+
#if PLATFORM(MAC)
// Returns an ordered list of supported actions for an element.
JSRetainPtr<JSStringRef> supportedActions();
Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (273213 => 273214)
--- trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm 2021-02-21 04:15:52 UTC (rev 273214)
@@ -87,6 +87,7 @@
- (NSString *)accessibilityTextualContext;
- (BOOL)accessibilityHasPopup;
- (NSString *)accessibilityPopupValue;
+- (NSString *)_accessibilityPhotoDescription;
- (BOOL)accessibilityPerformEscape;
// TextMarker related
@@ -903,6 +904,11 @@
return WTR::createJSString();
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::embeddedImageDescription() const
+{
+ return [[m_element _accessibilityPhotoDescription] createJSStringRef];
+}
+
int AccessibilityUIElement::lineForIndex(int index)
{
return -1;
Modified: trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm (273213 => 273214)
--- trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm 2021-02-21 04:15:52 UTC (rev 273214)
@@ -962,6 +962,14 @@
return false;
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::embeddedImageDescription() const
+{
+ BEGIN_AX_OBJC_EXCEPTIONS
+ NSString *value = descriptionOfValue([m_element accessibilityAttributeValue:@"AXEmbeddedImageDescription"], m_element.get());
+ return concatenateAttributeAndValue(@"AXEmbeddedImageDescription", value);
+ END_AX_OBJC_EXCEPTIONS
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::ariaDropEffects() const
{
BEGIN_AX_OBJC_EXCEPTIONS
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (273213 => 273214)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp 2021-02-21 04:15:52 UTC (rev 273214)
@@ -127,6 +127,7 @@
RefPtr<AccessibilityTextMarkerRange> AccessibilityUIElement::misspellingTextMarkerRange(AccessibilityTextMarkerRange*, bool) { return nullptr; }
void AccessibilityUIElement::dismiss() { }
JSValueRef AccessibilityUIElement::errorMessageElements() const { return { }; }
+JSRetainPtr<JSStringRef> AccessibilityUIElement::embeddedImageDescription() const { return nullptr; }
#endif
} // namespace WTR
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (273213 => 273214)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h 2021-02-21 04:15:52 UTC (rev 273214)
@@ -195,7 +195,8 @@
JSRetainPtr<JSStringRef> documentURI();
JSRetainPtr<JSStringRef> url();
JSRetainPtr<JSStringRef> classList() const;
-
+ JSRetainPtr<JSStringRef> embeddedImageDescription() const;
+
// CSS3-speech properties.
JSRetainPtr<JSStringRef> speakAs();
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (273213 => 273214)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl 2021-02-21 04:15:52 UTC (rev 273214)
@@ -109,6 +109,7 @@
readonly attribute boolean ariaIsGrabbed;
readonly attribute DOMString ariaDropEffects;
readonly attribute DOMString classList;
+ readonly attribute DOMString embeddedImageDescription;
readonly attribute long x;
readonly attribute long y;
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (273213 => 273214)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm 2021-02-21 04:15:52 UTC (rev 273214)
@@ -99,6 +99,7 @@
- (id)_accessibilityTableAncestor;
- (id)_accessibilityLandmarkAncestor;
- (id)_accessibilityListAncestor;
+- (id)_accessibilityPhotoDescription;
// TextMarker related
- (NSArray *)textMarkerRange;
@@ -1081,6 +1082,11 @@
return false;
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::embeddedImageDescription() const
+{
+ return concatenateAttributeAndValue(@"AXEmbeddedImageDescription", [m_element _accessibilityPhotoDescription]);
+}
+
bool AccessibilityUIElement::isCollapsed() const
{
return false;
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm (273213 => 273214)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm 2021-02-21 02:05:38 UTC (rev 273213)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm 2021-02-21 04:15:52 UTC (rev 273214)
@@ -1654,6 +1654,15 @@
return false;
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::embeddedImageDescription() const
+{
+ BEGIN_AX_OBJC_EXCEPTIONS
+ NSString *value = descriptionOfValue(attributeValue(m_element.get(), @"AXEmbeddedImageDescription"), m_element.get());
+ return concatenateAttributeAndValue(@"AXEmbeddedImageDescription", value);
+ END_AX_OBJC_EXCEPTIONS
+ return nullptr;
+}
+
bool AccessibilityUIElement::isIgnored() const
{
BOOL result = NO;