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