Home | History | Annotate | Download | only in win
      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.
     13 UIATextProvider::UIATextProvider()
     14     : editable_(false) {}
     15 
     16 // static
     17 bool 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 
     36 STDMETHODIMP UIATextProvider::get_IsReadOnly(BOOL* read_only) {
     37   *read_only = !editable_;
     38   return S_OK;
     39 }
     40 
     41 STDMETHODIMP UIATextProvider::get_Value(BSTR* value) {
     42   *value = SysAllocString(value_.c_str());
     43   return S_OK;
     44 }
     45 
     46 }  // namespace win
     47 }  // namespace base
     48