diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
commit | 2362e4fe2905ab75d3230ebc3e307ae53e2b8362 (patch) | |
tree | e6d88357a2021811e0e354f618247217be8bb3da /views/accessibility/view_accessibility_wrapper.cc | |
parent | db23ac3e713dc17509b2b15d3ee634968da45715 (diff) | |
download | chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.zip chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.gz chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.bz2 |
Move src/chrome/views to src/views. RS=darin http://crbug.com/11387
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/accessibility/view_accessibility_wrapper.cc')
-rw-r--r-- | views/accessibility/view_accessibility_wrapper.cc | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/views/accessibility/view_accessibility_wrapper.cc b/views/accessibility/view_accessibility_wrapper.cc new file mode 100644 index 0000000..ff336ae --- /dev/null +++ b/views/accessibility/view_accessibility_wrapper.cc @@ -0,0 +1,79 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "views/accessibility/view_accessibility_wrapper.h" + +#include "views/accessibility/view_accessibility.h" + +//////////////////////////////////////////////////////////////////////////////// +// +// ViewAccessibilityWrapper - constructors, destructors +// +//////////////////////////////////////////////////////////////////////////////// + +ViewAccessibilityWrapper::ViewAccessibilityWrapper(views::View* view) + : accessibility_info_(NULL), + view_(view) { +} + +STDMETHODIMP ViewAccessibilityWrapper::CreateDefaultInstance(REFIID iid) { + if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) { + // If there is no instance of ViewAccessibility created, create it + // now. Otherwise reuse previous instance. + if (!accessibility_info_) { + CComObject<ViewAccessibility>* instance = NULL; + + HRESULT hr = CComObject<ViewAccessibility>::CreateInstance(&instance); + + if (!SUCCEEDED(hr) || !instance) + return E_FAIL; + + CComPtr<IAccessible> accessibility_instance(instance); + + if (!SUCCEEDED(instance->Initialize(view_))) + return E_FAIL; + + // All is well, assign the temp instance to the class smart pointer. + accessibility_info_.Attach(accessibility_instance.Detach()); + } + return S_OK; + } + // Interface not supported. + return E_NOINTERFACE; +} + +STDMETHODIMP ViewAccessibilityWrapper::GetInstance(REFIID iid, + void** interface_ptr) { + if (IID_IUnknown == iid || IID_IDispatch == iid || IID_IAccessible == iid) { + // If there is no accessibility instance created, create a default now. + // Otherwise reuse previous instance. + if (!accessibility_info_) { + HRESULT hr = CreateDefaultInstance(iid); + + if (hr != S_OK) { + // Interface creation failed. + *interface_ptr = NULL; + return E_NOINTERFACE; + } + } + *interface_ptr = static_cast<IAccessible*>(accessibility_info_); + return S_OK; + } + // No supported interface found, return error. + *interface_ptr = NULL; + return E_NOINTERFACE; +} + +STDMETHODIMP ViewAccessibilityWrapper::SetInstance(IAccessible* interface_ptr) { + if (!interface_ptr) + return E_NOINTERFACE; + + accessibility_info_.Attach(interface_ptr); + + // Paranoia check, to make sure we do have a valid IAccessible pointer stored. + if (!accessibility_info_) + return E_FAIL; + + return S_OK; +} |