Bug 1960347: Expose document URL via the UIA Value pattern. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D245531
This commit is contained in:
@@ -447,6 +447,29 @@ addUiaTask(
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* Test the Value pattern on a document.
|
||||
*/
|
||||
addUiaTask(``, async function testValueDoc(browser) {
|
||||
// A test snippet is a data: URI. The accessibility engine won't return these.
|
||||
let url = new URL("https://example.net/document-builder.sjs");
|
||||
url.searchParams.append("html", `<body id=${DEFAULT_CONTENT_DOC_BODY_ID}>`);
|
||||
let loaded = waitForEvent(
|
||||
EVENT_DOCUMENT_LOAD_COMPLETE,
|
||||
DEFAULT_CONTENT_DOC_BODY_ID
|
||||
);
|
||||
BrowserTestUtils.startLoadingURIString(browser, url.href);
|
||||
await loaded;
|
||||
await definePyVar("doc", `getDocUia()`);
|
||||
await definePyVar("pattern", `getUiaPattern(doc, "Value")`);
|
||||
ok(await runPython(`bool(pattern)`), "doc has Value pattern");
|
||||
is(
|
||||
await runPython(`pattern.CurrentValue`),
|
||||
url.href,
|
||||
"doc has correct Value"
|
||||
);
|
||||
});
|
||||
|
||||
async function testRangeValueProps(id, ro, val, min, max, small, large) {
|
||||
await assignPyVarToUiaWithId(id);
|
||||
await definePyVar("pattern", `getUiaPattern(${id}, "RangeValue")`);
|
||||
|
||||
@@ -1009,6 +1009,11 @@ uiaRawElmProvider::get_Value(__RPC__deref_out_opt BSTR* aRetVal) {
|
||||
}
|
||||
nsAutoString value;
|
||||
acc->Value(value);
|
||||
if (value.IsEmpty() && acc->IsDoc()) {
|
||||
// Exposing the URl via the Value pattern doesn't seem to be documented
|
||||
// anywhere. However, Chromium does it, as does the IA2 -> UIA proxy.
|
||||
nsAccUtils::DocumentURL(acc, value);
|
||||
}
|
||||
*aRetVal = ::SysAllocStringLen(value.get(), value.Length());
|
||||
if (!*aRetVal) {
|
||||
return E_OUTOFMEMORY;
|
||||
@@ -1391,7 +1396,7 @@ bool uiaRawElmProvider::HasValuePattern() const {
|
||||
Accessible* acc = Acc();
|
||||
MOZ_ASSERT(acc);
|
||||
if (acc->HasNumericValue() || acc->IsCombobox() || acc->IsHTMLLink() ||
|
||||
acc->IsTextField()) {
|
||||
acc->IsTextField() || acc->IsDoc()) {
|
||||
return true;
|
||||
}
|
||||
const nsRoleMapEntry* roleMapEntry = acc->ARIARoleMap();
|
||||
|
||||
Reference in New Issue
Block a user