| Index: content/renderer/accessibility/render_accessibility_impl.cc
|
| diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc
|
| index f38f070221a1c76612f15256b316858102d4520b..ac34b84850fd8b3adc1c4b2a405572d5a6e4470a 100644
|
| --- a/content/renderer/accessibility/render_accessibility_impl.cc
|
| +++ b/content/renderer/accessibility/render_accessibility_impl.cc
|
| @@ -81,7 +81,7 @@ RenderAccessibilityImpl::RenderAccessibilityImpl(RenderFrameImpl* render_frame)
|
| render_frame_(render_frame),
|
| tree_source_(render_frame),
|
| serializer_(&tree_source_),
|
| - pdf_tree_source_(nullptr),
|
| + plugin_tree_source_(nullptr),
|
| last_scroll_offset_(gfx::Size()),
|
| ack_pending_(false),
|
| reset_token_(0),
|
| @@ -254,10 +254,18 @@ int RenderAccessibilityImpl::GenerateAXID() {
|
| return root.generateAXID();
|
| }
|
|
|
| -void RenderAccessibilityImpl::SetPdfTreeSource(
|
| - RenderAccessibilityImpl::PdfAXTreeSource* pdf_tree_source) {
|
| - pdf_tree_source_ = pdf_tree_source;
|
| - pdf_serializer_.reset(new PdfAXTreeSerializer(pdf_tree_source_));
|
| +void RenderAccessibilityImpl::SetPluginTreeSource(
|
| + RenderAccessibilityImpl::PluginAXTreeSource* plugin_tree_source) {
|
| + plugin_tree_source_ = plugin_tree_source;
|
| + plugin_serializer_.reset(new PluginAXTreeSerializer(plugin_tree_source_));
|
| +
|
| + OnPluginRootNodeUpdated();
|
| +}
|
| +
|
| +void RenderAccessibilityImpl::OnPluginRootNodeUpdated() {
|
| + // Search the accessibility tree for an EMBED element and post a
|
| + // children changed notification on it to force it to update the
|
| + // plugin accessibility tree.
|
|
|
| ScopedFreezeBlinkAXTreeSource freeze(&tree_source_);
|
| WebAXObject root = tree_source_.GetRoot();
|
| @@ -348,8 +356,8 @@ void RenderAccessibilityImpl::SendPendingAccessibilityEvents() {
|
| continue;
|
| }
|
|
|
| - if (pdf_tree_source_)
|
| - AddPdfTreeToUpdate(&event_msg.update);
|
| + if (plugin_tree_source_)
|
| + AddPluginTreeToUpdate(&event_msg.update);
|
|
|
| event_msgs.push_back(event_msg);
|
|
|
| @@ -533,8 +541,8 @@ void RenderAccessibilityImpl::OnReset(int reset_token) {
|
|
|
| void RenderAccessibilityImpl::OnScrollToMakeVisible(
|
| int acc_obj_id, gfx::Rect subfocus) {
|
| - if (pdf_tree_source_ && pdf_tree_source_->GetFromId(acc_obj_id)) {
|
| - ScrollPdf(acc_obj_id);
|
| + if (plugin_tree_source_ && plugin_tree_source_->GetFromId(acc_obj_id)) {
|
| + ScrollPlugin(acc_obj_id);
|
| return;
|
| }
|
|
|
| @@ -703,43 +711,44 @@ void RenderAccessibilityImpl::OnDestruct() {
|
| delete this;
|
| }
|
|
|
| -void RenderAccessibilityImpl::AddPdfTreeToUpdate(AXContentTreeUpdate* update) {
|
| +void RenderAccessibilityImpl::AddPluginTreeToUpdate(
|
| + AXContentTreeUpdate* update) {
|
| for (size_t i = 0; i < update->nodes.size(); ++i) {
|
| if (update->nodes[i].role == ui::AX_ROLE_EMBEDDED_OBJECT) {
|
| - const ui::AXNode* root = pdf_tree_source_->GetRoot();
|
| + const ui::AXNode* root = plugin_tree_source_->GetRoot();
|
| update->nodes[i].child_ids.push_back(root->id());
|
|
|
| - ui::AXTreeUpdate pdf_update;
|
| - pdf_serializer_->SerializeChanges(root, &pdf_update);
|
| + ui::AXTreeUpdate plugin_update;
|
| + plugin_serializer_->SerializeChanges(root, &plugin_update);
|
|
|
| // We have to copy the updated nodes using a loop because we're
|
| // converting from a generic ui::AXNodeData to a vector of its
|
| // content-specific subclass AXContentNodeData.
|
| size_t old_count = update->nodes.size();
|
| - size_t new_count = pdf_update.nodes.size();
|
| + size_t new_count = plugin_update.nodes.size();
|
| update->nodes.resize(old_count + new_count);
|
| for (size_t i = 0; i < new_count; ++i)
|
| - update->nodes[old_count + i] = pdf_update.nodes[i];
|
| + update->nodes[old_count + i] = plugin_update.nodes[i];
|
| break;
|
| }
|
| }
|
| }
|
|
|
| -void RenderAccessibilityImpl::ScrollPdf(int id_to_make_visible) {
|
| - // The PDF content doesn't scroll itself, rather it's just one big document
|
| - // and the embedding page scrolls. So, when we're requested to scroll to make
|
| - // a particular PDF node visible, get the coordinates of the target PDF node
|
| - // and then tell the document node to scroll to those coordinates.
|
| +void RenderAccessibilityImpl::ScrollPlugin(int id_to_make_visible) {
|
| + // Plugin content doesn't scroll itself, so when we're requested to
|
| + // scroll to make a particular plugin node visible, get the
|
| + // coordinates of the target plugin node and then tell the document
|
| + // node to scroll to those coordinates.
|
| //
|
| // Note that calling scrollToMakeVisibleWithSubFocus() is preferable to
|
| // telling the document to scroll to a specific coordinate because it will
|
| // first compute whether that rectangle is visible and do nothing if it is.
|
| // If it's not visible, it will automatically center it.
|
|
|
| - DCHECK(pdf_tree_source_);
|
| - ui::AXNodeData root_data = pdf_tree_source_->GetRoot()->data();
|
| + DCHECK(plugin_tree_source_);
|
| + ui::AXNodeData root_data = plugin_tree_source_->GetRoot()->data();
|
| ui::AXNodeData target_data =
|
| - pdf_tree_source_->GetFromId(id_to_make_visible)->data();
|
| + plugin_tree_source_->GetFromId(id_to_make_visible)->data();
|
|
|
| gfx::RectF bounds = target_data.location;
|
| if (root_data.transform)
|
|
|