blob: df9ec76d9949cac28b91a641a72c38780ac53882 [file] [log] [blame]
// Copyright (c) 2012 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 "content/browser/accessibility/dump_accessibility_tree_helper.h"
#include <oleacc.h>
#include <string>
#include "base/file_path.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_win.h"
#include "content/common/accessibility_node_data.h"
#include "content/public/test/accessibility_test_utils_win.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/iaccessible2/ia2_api_all.h"
#include "ui/base/win/atl_module.h"
void DumpAccessibilityTreeHelper::Initialize() {
ui::win::CreateATLModuleIfNeeded();
}
string16 DumpAccessibilityTreeHelper::ToString(
BrowserAccessibility* node, char* prefix) {
BrowserAccessibilityWin* acc_obj = node->ToBrowserAccessibilityWin();
// Get the computed name.
VARIANT variant_self;
variant_self.vt = VT_I4;
variant_self.lVal = CHILDID_SELF;
CComBSTR msaa_name_variant;
HRESULT hresult = acc_obj->get_accName(variant_self, &msaa_name_variant);
string16 name;
if (S_OK == hresult)
name = msaa_name_variant.m_str;
// Get state strings.
std::vector<string16> state_strings;
IAccessibleStateToStringVector(acc_obj->ia_state(), &state_strings);
IAccessible2StateToStringVector(acc_obj->ia2_state(), &state_strings);
// Get the description, help, and attributes.
string16 description;
acc_obj->GetStringAttribute(content::AccessibilityNodeData::ATTR_DESCRIPTION,
&description);
string16 help;
acc_obj->GetStringAttribute(content::AccessibilityNodeData::ATTR_HELP, &help);
const std::vector<string16>& ia2_attributes = acc_obj->ia2_attributes();
// Build the line.
StartLine();
Add(true, IAccessible2RoleToString(acc_obj->ia2_role()));
Add(true, L"name='" + name + L"'");
for (std::vector<string16>::const_iterator it = state_strings.begin();
it != state_strings.end();
++it) {
Add(false, *it);
}
for (std::vector<string16>::const_iterator it = ia2_attributes.begin();
it != ia2_attributes.end();
++it) {
Add(false, *it);
}
Add(false, L"role_name='" + acc_obj->role_name() + L"'");
Add(false, L"value='" + acc_obj->value() + L"'");
Add(false, L"description='" + description + L"'");
return UTF8ToUTF16(prefix) + FinishLine() + ASCIIToUTF16("\n");
}
const FilePath::StringType DumpAccessibilityTreeHelper::GetActualFileSuffix()
const {
return FILE_PATH_LITERAL("-actual-win.txt");
}
const FilePath::StringType DumpAccessibilityTreeHelper::GetExpectedFileSuffix()
const {
return FILE_PATH_LITERAL("-expected-win.txt");
}
const std::string DumpAccessibilityTreeHelper::GetAllowString() const {
return "@WIN-ALLOW:";
}
const std::string DumpAccessibilityTreeHelper::GetDenyString() const {
return "@WIN-DENY:";
}