| 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 a78d8b2f0aac81fe59c296b4b17cc0184eee8388..bf3b0affdd751d7d45d1dc592723149d05660882 100644
 | 
| --- a/content/browser/accessibility/browser_accessibility_win.cc
 | 
| +++ b/content/browser/accessibility/browser_accessibility_win.cc
 | 
| @@ -42,10 +42,6 @@ const GUID GUID_IAccessibleContentDocument = {
 | 
|  
 | 
|  const base::char16 BrowserAccessibilityWin::kEmbeddedCharacter = L'\xfffc';
 | 
|  
 | 
| -// static
 | 
| -LONG BrowserAccessibilityWin::next_unique_id_win_ =
 | 
| -    base::win::kFirstBrowserAccessibilityManagerAccessibilityId;
 | 
| -
 | 
|  //
 | 
|  // BrowserAccessibilityRelation
 | 
|  //
 | 
| @@ -150,7 +146,7 @@ STDMETHODIMP BrowserAccessibilityRelation::get_target(long target_index,
 | 
|      return E_FAIL;
 | 
|  
 | 
|    *target = static_cast<IAccessible*>(
 | 
| -      result->ToBrowserAccessibilityWin()->NewReference());
 | 
| +      ToBrowserAccessibilityWin(result)->NewReference());
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -207,29 +203,10 @@ BrowserAccessibility* BrowserAccessibility::Create() {
 | 
|    return instance->NewReference();
 | 
|  }
 | 
|  
 | 
| -const BrowserAccessibilityWin* BrowserAccessibility::ToBrowserAccessibilityWin()
 | 
| -    const {
 | 
| -  return static_cast<const BrowserAccessibilityWin*>(this);
 | 
| -}
 | 
| -
 | 
| -BrowserAccessibilityWin* BrowserAccessibility::ToBrowserAccessibilityWin() {
 | 
| -  return static_cast<BrowserAccessibilityWin*>(this);
 | 
| -}
 | 
| -
 | 
|  BrowserAccessibilityWin::BrowserAccessibilityWin()
 | 
|      : win_attributes_(new WinAttributes()),
 | 
|        previous_scroll_x_(0),
 | 
|        previous_scroll_y_(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_;
 | 
| -  if (next_unique_id_win_ ==
 | 
| -          base::win::kLastBrowserAccessibilityManagerAccessibilityId) {
 | 
| -    next_unique_id_win_ =
 | 
| -        base::win::kFirstBrowserAccessibilityManagerAccessibilityId;
 | 
| -  }
 | 
| -  next_unique_id_win_--;
 | 
|  }
 | 
|  
 | 
|  BrowserAccessibilityWin::~BrowserAccessibilityWin() {
 | 
| @@ -281,7 +258,7 @@ STDMETHODIMP BrowserAccessibilityWin::accHitTest(LONG x_left,
 | 
|      child->lVal = CHILDID_SELF;
 | 
|    } else {
 | 
|      child->vt = VT_DISPATCH;
 | 
| -    child->pdispVal = result->ToBrowserAccessibilityWin()->NewReference();
 | 
| +    child->pdispVal = ToBrowserAccessibilityWin(result)->NewReference();
 | 
|    }
 | 
|    return S_OK;
 | 
|  }
 | 
| @@ -355,7 +332,7 @@ STDMETHODIMP BrowserAccessibilityWin::accNavigate(LONG nav_dir,
 | 
|    }
 | 
|  
 | 
|    end->vt = VT_DISPATCH;
 | 
| -  end->pdispVal = result->ToBrowserAccessibilityWin()->NewReference();
 | 
| +  end->pdispVal = ToBrowserAccessibilityWin(result)->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -511,7 +488,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) {
 | 
|    if (!disp_parent)
 | 
|      return E_INVALIDARG;
 | 
|  
 | 
| -  IAccessible* parent_obj = GetParent()->ToBrowserAccessibilityWin();
 | 
| +  IAccessible* parent_obj = ToBrowserAccessibilityWin(GetParent());
 | 
|    if (parent_obj == NULL) {
 | 
|      // This happens if we're the root of the tree;
 | 
|      // return the IAccessible for the window.
 | 
| @@ -646,7 +623,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accSelection(VARIANT* selected) {
 | 
|        if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) {
 | 
|          selected->vt = VT_DISPATCH;
 | 
|          selected->pdispVal =
 | 
| -            InternalGetChild(i)->ToBrowserAccessibilityWin()->NewReference();
 | 
| +            ToBrowserAccessibilityWin(InternalGetChild(i))->NewReference();
 | 
|          return S_OK;
 | 
|        }
 | 
|      }
 | 
| @@ -661,7 +638,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_accSelection(VARIANT* selected) {
 | 
|      if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) {
 | 
|        enum_variant->ItemAt(index)->vt = VT_DISPATCH;
 | 
|        enum_variant->ItemAt(index)->pdispVal =
 | 
| -        InternalGetChild(i)->ToBrowserAccessibilityWin()->NewReference();
 | 
| +          ToBrowserAccessibilityWin(InternalGetChild(i))->NewReference();
 | 
|        ++index;
 | 
|      }
 | 
|    }
 | 
| @@ -751,7 +728,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_uniqueID(LONG* unique_id) {
 | 
|    if (!unique_id)
 | 
|      return E_INVALIDARG;
 | 
|  
 | 
| -  *unique_id = unique_id_win_;
 | 
| +  *unique_id = -unique_id_;
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -1289,7 +1266,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnIndex(long cell_index,
 | 
|  
 | 
|    int cell_id = unique_cell_ids[cell_index];
 | 
|    BrowserAccessibilityWin* cell =
 | 
| -      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(cell_id));
 | 
|    int col_index;
 | 
|    if (cell &&
 | 
|        cell->GetIntAttribute(
 | 
| @@ -1394,7 +1371,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowDescription(long row,
 | 
|    for (int i = 0; i < columns; ++i) {
 | 
|      int cell_id = cell_ids[row * columns + i];
 | 
|      BrowserAccessibilityWin* cell =
 | 
| -        manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
 | 
| +        ToBrowserAccessibilityWin(manager()->GetFromID(cell_id));
 | 
|      if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
 | 
|        base::string16 cell_name = cell->GetString16Attribute(
 | 
|            ui::AX_ATTR_NAME);
 | 
| @@ -1439,7 +1416,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowExtentAt(long row,
 | 
|        GetIntListAttribute(ui::AX_ATTR_CELL_IDS);
 | 
|    int cell_id = cell_ids[row * columns + column];
 | 
|    BrowserAccessibilityWin* cell =
 | 
| -      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(cell_id));
 | 
|    int rowspan;
 | 
|    if (cell &&
 | 
|        cell->GetIntAttribute(
 | 
| @@ -1477,7 +1454,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowIndex(long cell_index,
 | 
|  
 | 
|    int cell_id = unique_cell_ids[cell_index];
 | 
|    BrowserAccessibilityWin* cell =
 | 
| -      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(cell_id));
 | 
|    int cell_row_index;
 | 
|    if (cell &&
 | 
|        cell->GetIntAttribute(
 | 
| @@ -1606,7 +1583,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowColumnExtentsAtIndex(
 | 
|  
 | 
|    int cell_id = unique_cell_ids[index];
 | 
|    BrowserAccessibilityWin* cell =
 | 
| -      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(cell_id));
 | 
|    int rowspan;
 | 
|    int colspan;
 | 
|    if (cell &&
 | 
| @@ -1765,7 +1742,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnHeaderCells(
 | 
|    for (int i = 0; i < rows; ++i) {
 | 
|      int cell_id = cell_ids[i * columns + column];
 | 
|      BrowserAccessibilityWin* cell =
 | 
| -        manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
 | 
| +        ToBrowserAccessibilityWin(manager()->GetFromID(cell_id));
 | 
|      if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER)
 | 
|        (*n_column_header_cells)++;
 | 
|    }
 | 
| @@ -1778,7 +1755,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_columnHeaderCells(
 | 
|      BrowserAccessibility* cell = manager()->GetFromID(cell_id);
 | 
|      if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
 | 
|        (*cell_accessibles)[index] = static_cast<IAccessible*>(
 | 
| -          cell->ToBrowserAccessibilityWin()->NewReference());
 | 
| +          ToBrowserAccessibilityWin(cell)->NewReference());
 | 
|        ++index;
 | 
|      }
 | 
|    }
 | 
| @@ -1875,7 +1852,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_rowHeaderCells(
 | 
|      BrowserAccessibility* cell = manager()->GetFromID(cell_id);
 | 
|      if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
 | 
|        (*cell_accessibles)[index] = static_cast<IAccessible*>(
 | 
| -          cell->ToBrowserAccessibilityWin()->NewReference());
 | 
| +          ToBrowserAccessibilityWin(cell)->NewReference());
 | 
|        ++index;
 | 
|      }
 | 
|    }
 | 
| @@ -1970,7 +1947,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_table(IUnknown** table) {
 | 
|    }
 | 
|  
 | 
|    *table = static_cast<IAccessibleTable*>(
 | 
| -      find_table->ToBrowserAccessibilityWin()->NewReference());
 | 
| +      ToBrowserAccessibilityWin(find_table)->NewReference());
 | 
|  
 | 
|    return S_OK;
 | 
|  }
 | 
| @@ -2412,7 +2389,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_hyperlink(
 | 
|  
 | 
|    int32_t id = hyperlinks()[index];
 | 
|    BrowserAccessibilityWin* child =
 | 
| -      manager()->GetFromID(id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(id));
 | 
|    if (child) {
 | 
|      *hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference());
 | 
|      return S_OK;
 | 
| @@ -2510,7 +2487,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_startIndex(long* index) {
 | 
|    const auto parent = GetParent();
 | 
|    if (parent) {
 | 
|      hypertext_offset =
 | 
| -        parent->ToBrowserAccessibilityWin()->GetHypertextOffsetFromChild(*this);
 | 
| +        ToBrowserAccessibilityWin(parent)->GetHypertextOffsetFromChild(*this);
 | 
|    }
 | 
|    *index = static_cast<LONG>(hypertext_offset);
 | 
|    return S_OK;
 | 
| @@ -2751,7 +2728,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_nodeInfo(
 | 
|    *name_space_id = 0;
 | 
|    *node_value = SysAllocString(value().c_str());
 | 
|    *num_children = PlatformChildCount();
 | 
| -  *unique_id = unique_id_win_;
 | 
| +  *unique_id = -unique_id_;
 | 
|  
 | 
|    if (GetRole() == ui::AX_ROLE_ROOT_WEB_AREA ||
 | 
|      GetRole() == ui::AX_ROLE_WEB_AREA) {
 | 
| @@ -2889,7 +2866,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) {
 | 
|    if (!node)
 | 
|      return E_INVALIDARG;
 | 
|  
 | 
| -  *node = GetParent()->ToBrowserAccessibilityWin()->NewReference();
 | 
| +  *node = ToBrowserAccessibilityWin(GetParent())->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -2905,7 +2882,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node)  {
 | 
|      return S_FALSE;
 | 
|    }
 | 
|  
 | 
| -  *node = PlatformGetChild(0)->ToBrowserAccessibilityWin()->NewReference();
 | 
| +  *node = ToBrowserAccessibilityWin(PlatformGetChild(0))->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -2921,8 +2898,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) {
 | 
|      return S_FALSE;
 | 
|    }
 | 
|  
 | 
| -  *node = PlatformGetChild(PlatformChildCount() - 1)
 | 
| -      ->ToBrowserAccessibilityWin()->NewReference();
 | 
| +  *node = ToBrowserAccessibilityWin(
 | 
| +      PlatformGetChild(PlatformChildCount() - 1))->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -2939,8 +2916,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_previousSibling(
 | 
|      return S_FALSE;
 | 
|    }
 | 
|  
 | 
| -  *node = GetParent()->InternalGetChild(GetIndexInParent() - 1)->
 | 
| -      ToBrowserAccessibilityWin()->NewReference();
 | 
| +  *node = ToBrowserAccessibilityWin(
 | 
| +      GetParent()->InternalGetChild(GetIndexInParent() - 1))->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -2959,8 +2936,8 @@ STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) {
 | 
|      return S_FALSE;
 | 
|    }
 | 
|  
 | 
| -  *node = GetParent()->InternalGetChild(GetIndexInParent() + 1)->
 | 
| -      ToBrowserAccessibilityWin()->NewReference();
 | 
| +  *node = ToBrowserAccessibilityWin(
 | 
| +      GetParent()->InternalGetChild(GetIndexInParent() + 1))->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -2982,7 +2959,7 @@ STDMETHODIMP BrowserAccessibilityWin::get_childAt(
 | 
|      return S_FALSE;
 | 
|    }
 | 
|  
 | 
| -  *node = child->ToBrowserAccessibilityWin()->NewReference();
 | 
| +  *node = ToBrowserAccessibilityWin(child)->NewReference();
 | 
|    return S_OK;
 | 
|  }
 | 
|  
 | 
| @@ -3101,7 +3078,7 @@ STDMETHODIMP BrowserAccessibilityWin::QueryService(REFGUID guid_service,
 | 
|      BrowserAccessibility* node = this;
 | 
|      while (node->GetParent())
 | 
|        node = node->GetParent()->manager()->GetRoot();
 | 
| -    return node->ToBrowserAccessibilityWin()->QueryInterface(
 | 
| +    return ToBrowserAccessibilityWin(node)->QueryInterface(
 | 
|          IID_IAccessible2, object);
 | 
|    }
 | 
|  
 | 
| @@ -3458,7 +3435,7 @@ void BrowserAccessibilityWin::UpdateStep2ComputeHypertext() {
 | 
|    // child object it points to.
 | 
|    for (unsigned int i = 0; i < PlatformChildCount(); ++i) {
 | 
|      BrowserAccessibilityWin* child =
 | 
| -        PlatformGetChild(i)->ToBrowserAccessibilityWin();
 | 
| +        ToBrowserAccessibilityWin(PlatformGetChild(i));
 | 
|      DCHECK(child);
 | 
|      // Similar to Firefox, we don't expose text-only objects in IA2 hypertext.
 | 
|      if (child->IsTextOnlyObject()) {
 | 
| @@ -3562,7 +3539,7 @@ void BrowserAccessibilityWin::UpdateStep3FireEvents(bool is_subtree_creation) {
 | 
|  
 | 
|      // Changing a static text node can affect the IAccessibleText hypertext
 | 
|      // of the parent node, so force an update on the parent.
 | 
| -    BrowserAccessibilityWin* parent = GetParent()->ToBrowserAccessibilityWin();
 | 
| +    BrowserAccessibilityWin* parent = ToBrowserAccessibilityWin(GetParent());
 | 
|      if (parent && IsTextOnlyObject() &&
 | 
|          name() != old_win_attributes_->name) {
 | 
|        parent->UpdateStep1ComputeWinAttributes();
 | 
| @@ -3611,10 +3588,10 @@ BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID(
 | 
|      return this;
 | 
|  
 | 
|    if (child_id >= 1 && child_id <= static_cast<LONG>(PlatformChildCount()))
 | 
| -    return PlatformGetChild(child_id - 1)->ToBrowserAccessibilityWin();
 | 
| +    return ToBrowserAccessibilityWin(PlatformGetChild(child_id - 1));
 | 
|  
 | 
| -  return manager()->ToBrowserAccessibilityManagerWin()->
 | 
| -      GetFromUniqueIdWin(child_id);
 | 
| +  return ToBrowserAccessibilityWin(
 | 
| +      BrowserAccessibility::GetFromUniqueID(-child_id));
 | 
|  }
 | 
|  
 | 
|  HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr(
 | 
| @@ -3687,7 +3664,7 @@ bool BrowserAccessibilityWin::IsHyperlink() const {
 | 
|    const auto parent = GetParent();
 | 
|    if (parent) {
 | 
|      hyperlink_index =
 | 
| -        parent->ToBrowserAccessibilityWin()->GetHyperlinkIndexFromChild(*this);
 | 
| +        ToBrowserAccessibilityWin(parent)->GetHyperlinkIndexFromChild(*this);
 | 
|    }
 | 
|  
 | 
|    if (hyperlink_index >= 0)
 | 
| @@ -3734,7 +3711,7 @@ int32_t BrowserAccessibilityWin::GetHypertextOffsetFromChild(
 | 
|      DCHECK_LT(index_in_parent, static_cast<int32_t>(InternalChildCount()));
 | 
|      for (uint32_t i = 0; i < static_cast<uint32_t>(index_in_parent); ++i) {
 | 
|        const BrowserAccessibilityWin* sibling =
 | 
| -          InternalGetChild(i)->ToBrowserAccessibilityWin();
 | 
| +          ToBrowserAccessibilityWin(InternalGetChild(i));
 | 
|        DCHECK(sibling);
 | 
|        if (sibling->IsTextOnlyObject())
 | 
|          hypertextOffset += sibling->GetText().size();
 | 
| @@ -3753,11 +3730,11 @@ int32_t BrowserAccessibilityWin::GetHypertextOffsetFromChild(
 | 
|  
 | 
|  int32_t BrowserAccessibilityWin::GetHypertextOffsetFromDescendant(
 | 
|      const BrowserAccessibilityWin& descendant) const {
 | 
| -  auto parent_object = descendant.GetParent()->ToBrowserAccessibilityWin();
 | 
| +  auto parent_object = ToBrowserAccessibilityWin(descendant.GetParent());
 | 
|    auto current_object = const_cast<BrowserAccessibilityWin*>(&descendant);
 | 
|    while (parent_object && parent_object != this) {
 | 
|      current_object = parent_object;
 | 
| -    parent_object = current_object->GetParent()->ToBrowserAccessibilityWin();
 | 
| +    parent_object = ToBrowserAccessibilityWin(current_object->GetParent());
 | 
|    }
 | 
|    if (!parent_object)
 | 
|      return -1;
 | 
| @@ -3839,7 +3816,7 @@ int BrowserAccessibilityWin::GetHypertextOffsetFromEndpoint(
 | 
|  int BrowserAccessibilityWin::GetSelectionAnchor() const {
 | 
|    int32_t anchor_id = manager()->GetTreeData().sel_anchor_object_id;
 | 
|    const auto anchor_object =
 | 
| -      manager()->GetFromID(anchor_id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(anchor_id));
 | 
|    if (!anchor_object)
 | 
|      return -1;
 | 
|  
 | 
| @@ -3850,7 +3827,7 @@ int BrowserAccessibilityWin::GetSelectionAnchor() const {
 | 
|  int BrowserAccessibilityWin::GetSelectionFocus() const {
 | 
|    int32_t focus_id = manager()->GetTreeData().sel_focus_object_id;
 | 
|    const auto focus_object =
 | 
| -      manager()->GetFromID(focus_id)->ToBrowserAccessibilityWin();
 | 
| +      ToBrowserAccessibilityWin(manager()->GetFromID(focus_id));
 | 
|    if (!focus_object)
 | 
|      return -1;
 | 
|  
 | 
| @@ -4048,7 +4025,7 @@ LONG BrowserAccessibilityWin::FindBoundary(
 | 
|  }
 | 
|  
 | 
|  BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromID(int32_t id) {
 | 
| -  return manager()->GetFromID(id)->ToBrowserAccessibilityWin();
 | 
| +  return ToBrowserAccessibilityWin(manager()->GetFromID(id));
 | 
|  }
 | 
|  
 | 
|  bool BrowserAccessibilityWin::IsListBoxOptionOrMenuListOption() {
 | 
| @@ -4703,4 +4680,15 @@ void BrowserAccessibilityWin::InitRoleAndState() {
 | 
|    win_attributes_->ia2_state = ia2_state;
 | 
|  }
 | 
|  
 | 
| +BrowserAccessibilityWin* ToBrowserAccessibilityWin(BrowserAccessibility* obj) {
 | 
| +  DCHECK(!obj || obj->IsNative());
 | 
| +  return static_cast<BrowserAccessibilityWin*>(obj);
 | 
| +}
 | 
| +
 | 
| +const BrowserAccessibilityWin*
 | 
| +ToBrowserAccessibilityWin(const BrowserAccessibility* obj) {
 | 
| +  DCHECK(!obj || obj->IsNative());
 | 
| +  return static_cast<const BrowserAccessibilityWin*>(obj);
 | 
| +}
 | 
| +
 | 
|  }  // namespace content
 | 
| 
 |