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());
            }
        }
    }