1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4#include "ui/base/win/accessibility_misc_utils.h" 5 6#include "base/logging.h" 7#include "ui/base/win/atl_module.h" 8 9namespace base { 10namespace win { 11 12// UIA TextProvider implementation. 13UIATextProvider::UIATextProvider() 14 : editable_(false) {} 15 16// static 17bool UIATextProvider::CreateTextProvider(const string16& value, 18 bool editable, 19 IUnknown** provider) { 20 // Make sure ATL is initialized in this module. 21 ui::win::CreateATLModuleIfNeeded(); 22 23 CComObject<UIATextProvider>* text_provider = NULL; 24 HRESULT hr = CComObject<UIATextProvider>::CreateInstance(&text_provider); 25 if (SUCCEEDED(hr)) { 26 DCHECK(text_provider); 27 text_provider->set_editable(editable); 28 text_provider->set_value(value); 29 text_provider->AddRef(); 30 *provider = static_cast<ITextProvider*>(text_provider); 31 return true; 32 } 33 return false; 34} 35 36STDMETHODIMP UIATextProvider::get_IsReadOnly(BOOL* read_only) { 37 *read_only = !editable_; 38 return S_OK; 39} 40 41STDMETHODIMP UIATextProvider::get_Value(BSTR* value) { 42 *value = SysAllocString(value_.c_str()); 43 return S_OK; 44} 45 46} // namespace win 47} // namespace base 48