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 9 namespace base { 10 namespace win { 11 12 // UIA TextProvider implementation. UIATextProvider()13UIATextProvider::UIATextProvider() 14 : editable_(false) {} 15 16 // static CreateTextProvider(const string16 & value,bool editable,IUnknown ** provider)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 get_IsReadOnly(BOOL * read_only)36STDMETHODIMP UIATextProvider::get_IsReadOnly(BOOL* read_only) { 37 *read_only = !editable_; 38 return S_OK; 39 } 40 get_Value(BSTR * value)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