void NativeTextfieldWin::InitializeAccessibilityInfo() { // Set the accessible state. accessibility_state_ = 0; base::win::ScopedComPtr<IAccPropServices> pAccPropServices; HRESULT hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER, IID_IAccPropServices, reinterpret_cast<void**>(&pAccPropServices)); if(!SUCCEEDED(hr)) { return; } VARIANT var; // Set the accessible role. var.vt = VT_I4; var.lVal = ROLE_SYSTEM_TEXT; hr = pAccPropServices->SetHwndProp(m_hWnd, OBJID_CLIENT, CHILDID_SELF, PROPID_ACC_ROLE, var); // Set the accessible name by getting the label text. View* parent = textfield_->parent(); int label_index = parent->GetIndexOf(textfield_) - 1; if(label_index >= 0) { // Try to find the name of this text field. // We expect it to be a Label preceeding this view (if it exists). string16 name; View* label_view = parent->child_at(label_index); if(label_view->GetClassName() == Label::kViewClassName) { ui::AccessibleViewState state; label_view->GetAccessibleState(&state); hr = pAccPropServices->SetHwndPropStr(m_hWnd, OBJID_CLIENT, CHILDID_SELF, PROPID_ACC_NAME, state.name.c_str()); } } }