Closed Bug 1207862 Opened 6 years ago Closed 6 years ago

allow retrieving proxied accessibles by id

Categories

(Core :: Disability Access APIs, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla44
Tracking Status
firefox44 --- fixed

People

(Reporter: tbsaunde, Assigned: tbsaunde)

References

Details

Attachments

(5 files)

No description provided.
While we're reorganizing this function move the simple cases to the beginning,
      and make lookup in the document tree last.
Attachment #8665193 - Flags: review?(dbolter)
Soon we will need to iterate over all of the top level remote documents.
Attachment #8665194 - Flags: review?(dbolter)
Assignee: nobody → tbsaunde+mozbugs
Blocks: e10sa11y2
Comment on attachment 8665193 [details] [diff] [review]
refactor GetXPAccessibleFor() so proxies and non proxies are handle in the same place for each type of id

Review of attachment 8665193 [details] [diff] [review]:
-----------------------------------------------------------------

::: accessible/windows/msaa/AccessibleWrap.cpp
@@ +1452,4 @@
>  #ifdef _WIN64
>      GetAccessibleInSubtree(document, static_cast<uint32_t>(aVarChild.lVal));
>  #else
> +  document->GetAccessibleByUniqueIDInSubtree(uniqueID);

nit: needs 2 more spaces.
Attachment #8665193 - Flags: review?(dbolter) → review+
Attachment #8665194 - Flags: review?(dbolter) → review+
Attachment #8665196 - Flags: review?(dbolter) → review+
Attachment #8665197 - Flags: review?(dbolter) → review+
Comment on attachment 8665198 [details] [diff] [review]
make AccessibleWrap::GetXPAccessibleFor() return the AccessibleWrap for proxies

Review of attachment 8665198 [details] [diff] [review]:
-----------------------------------------------------------------

OK. Please see/fix comments before landing.

::: accessible/windows/msaa/AccessibleWrap.cpp
@@ +1462,5 @@
>    // Convert child ID to unique ID.
> +  // First handle the case that both this accessible and the id'd one are in
> +  // this process.
> +  if (!IsProxy()) {
> +      void* uniqueID = reinterpret_cast<void*>(-aVarChild.lVal);

nit: This whole if block has 2 too many spaces and other formatting issues.

@@ +1481,5 @@
> +      // ARIA documents and popups).
> +      Accessible* parent = child;
> +      while (parent && parent != document) {
> +      if (parent == this)
> +      return child;

nit: the while, if, and if block need relative indenting.

@@ +1509,5 @@
> +  }
> +
> +  // Finally we need to handle the case that this accessible is in the main
> +  // process, but the target is proxied.  This is the case when the target
> +  // accessible is in a different document from this one.

We chatted and you mentioned changing this last comment to 'child document'.

@@ +1513,5 @@
> +  // accessible is in a different document from this one.
> +  DocAccessibleParent* proxyDoc = nullptr;
> +  DocAccessible* doc = Document();
> +  const nsTArray<DocAccessibleParent*>* remoteDocs =
> +    DocManager::TopLevelRemoteDocs();

We chatted and think we need an early bailout for remoteDocs null.

@@ +1529,5 @@
> +    Accessible* parent = outerDoc;
> +    while (parent && parent != doc) {
> +      if (parent == this) {
> +        AccessibleWrap* proxyWrapper =
> +          GetProxiedAccessibleInSubtree(remoteDocs->ElementAt(i), id);

nit: could use a variable for remoteDocs->ElementAt(i) (up at top of for loop).
Attachment #8665198 - Flags: review?(dbolter) → review+
Possible this change caused bug 1208680 ?
No longer depends on: 1208680
You need to log in before you can comment on or make changes to this bug.