| Index: content/browser/accessibility/browser_accessibility_win.cc
|
| diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
|
| index a7b88434b7ba90cef7207818fa2e697cc3067384..764bd4ec3cd330fc8607a6b1a68064fb7bdbdf40 100644
|
| --- a/content/browser/accessibility/browser_accessibility_win.cc
|
| +++ b/content/browser/accessibility/browser_accessibility_win.cc
|
| @@ -32,6 +32,9 @@ const GUID GUID_IAccessibleContentDocument = {
|
|
|
| const char16 BrowserAccessibilityWin::kEmbeddedCharacter[] = L"\xfffc";
|
|
|
| +// static
|
| +LONG BrowserAccessibilityWin::next_unique_id_win_ = -1;
|
| +
|
| //
|
| // BrowserAccessibilityRelation
|
| //
|
| @@ -188,6 +191,13 @@ BrowserAccessibilityWin::BrowserAccessibilityWin()
|
| ia2_state_(0),
|
| first_time_(true),
|
| old_ia_state_(0) {
|
| + // Start unique IDs at -1 and decrement each time, because get_accChild
|
| + // uses positive IDs to enumerate children, so we use negative IDs to
|
| + // clearly distinguish between indices and unique IDs.
|
| + unique_id_win_ = next_unique_id_win_;
|
| + next_unique_id_win_--;
|
| + if (next_unique_id_win_ > 0)
|
| + next_unique_id_win_ = -1;
|
| }
|
|
|
| BrowserAccessibilityWin::~BrowserAccessibilityWin() {
|
| @@ -668,7 +678,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_uniqueID(LONG* unique_id) {
|
| if (!unique_id)
|
| return E_INVALIDARG;
|
|
|
| - *unique_id = child_id_;
|
| + *unique_id = unique_id_win_;
|
| return S_OK;
|
| }
|
|
|
| @@ -2250,7 +2260,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_nodeInfo(
|
| *name_space_id = 0;
|
| *node_value = SysAllocString(value_.c_str());
|
| *num_children = children_.size();
|
| - *unique_id = child_id_;
|
| + *unique_id = unique_id_win_;
|
|
|
| if (ia_role_ == ROLE_SYSTEM_DOCUMENT) {
|
| *node_type = NODETYPE_DOCUMENT;
|
| @@ -2879,17 +2889,17 @@ void BrowserAccessibilityWin::PostInitialize() {
|
| (ia_state_ & STATE_SYSTEM_FOCUSED) &&
|
| !(old_ia_state_ & STATE_SYSTEM_FOCUSED)) {
|
| ::NotifyWinEvent(EVENT_OBJECT_FOCUS, hwnd,
|
| - OBJID_CLIENT, child_id());
|
| + OBJID_CLIENT, unique_id_win());
|
| }
|
|
|
| if ((ia_state_ & STATE_SYSTEM_SELECTED) &&
|
| !(old_ia_state_ & STATE_SYSTEM_SELECTED)) {
|
| ::NotifyWinEvent(EVENT_OBJECT_SELECTIONADD, hwnd,
|
| - OBJID_CLIENT, child_id());
|
| + OBJID_CLIENT, unique_id_win());
|
| } else if (!(ia_state_ & STATE_SYSTEM_SELECTED) &&
|
| (old_ia_state_ & STATE_SYSTEM_SELECTED)) {
|
| ::NotifyWinEvent(EVENT_OBJECT_SELECTIONREMOVE, hwnd,
|
| - OBJID_CLIENT, child_id());
|
| + OBJID_CLIENT, unique_id_win());
|
| }
|
|
|
| old_ia_state_ = ia_state_;
|
| @@ -2927,7 +2937,8 @@ BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID(
|
| if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size()))
|
| return children_[child_id - 1]->ToBrowserAccessibilityWin();
|
|
|
| - return manager_->GetFromChildID(child_id)->ToBrowserAccessibilityWin();
|
| + return manager_->ToBrowserAccessibilityManagerWin()->
|
| + GetFromUniqueIdWin(child_id);
|
| }
|
|
|
| HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr(
|
|
|