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) {
|
async function testRangeValueProps(id, ro, val, min, max, small, large) {
|
||||||
await assignPyVarToUiaWithId(id);
|
await assignPyVarToUiaWithId(id);
|
||||||
await definePyVar("pattern", `getUiaPattern(${id}, "RangeValue")`);
|
await definePyVar("pattern", `getUiaPattern(${id}, "RangeValue")`);
|
||||||
|
|||||||
@@ -1009,6 +1009,11 @@ uiaRawElmProvider::get_Value(__RPC__deref_out_opt BSTR* aRetVal) {
|
|||||||
}
|
}
|
||||||
nsAutoString value;
|
nsAutoString value;
|
||||||
acc->Value(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());
|
*aRetVal = ::SysAllocStringLen(value.get(), value.Length());
|
||||||
if (!*aRetVal) {
|
if (!*aRetVal) {
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
@@ -1391,7 +1396,7 @@ bool uiaRawElmProvider::HasValuePattern() const {
|
|||||||
Accessible* acc = Acc();
|
Accessible* acc = Acc();
|
||||||
MOZ_ASSERT(acc);
|
MOZ_ASSERT(acc);
|
||||||
if (acc->HasNumericValue() || acc->IsCombobox() || acc->IsHTMLLink() ||
|
if (acc->HasNumericValue() || acc->IsCombobox() || acc->IsHTMLLink() ||
|
||||||
acc->IsTextField()) {
|
acc->IsTextField() || acc->IsDoc()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
const nsRoleMapEntry* roleMapEntry = acc->ARIARoleMap();
|
const nsRoleMapEntry* roleMapEntry = acc->ARIARoleMap();
|
||||||
|
|||||||
Reference in New Issue
Block a user