Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: chrome/browser/extensions/api/automation_internal/automation_internal_api.cc

Issue 2426193003: Re-land: Create AXAction and AXActionData as a way to simplify accessibility actions (Closed)
Patch Set: Rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/automation_internal/automation_internal_ api.h" 5 #include "chrome/browser/extensions/api/automation_internal/automation_internal_ api.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 19 matching lines...) Expand all
30 #include "content/public/browser/browser_plugin_guest_manager.h" 30 #include "content/public/browser/browser_plugin_guest_manager.h"
31 #include "content/public/browser/render_frame_host.h" 31 #include "content/public/browser/render_frame_host.h"
32 #include "content/public/browser/render_view_host.h" 32 #include "content/public/browser/render_view_host.h"
33 #include "content/public/browser/render_widget_host.h" 33 #include "content/public/browser/render_widget_host.h"
34 #include "content/public/browser/render_widget_host_view.h" 34 #include "content/public/browser/render_widget_host_view.h"
35 #include "content/public/browser/web_contents.h" 35 #include "content/public/browser/web_contents.h"
36 #include "content/public/browser/web_contents_observer.h" 36 #include "content/public/browser/web_contents_observer.h"
37 #include "content/public/browser/web_contents_user_data.h" 37 #include "content/public/browser/web_contents_user_data.h"
38 #include "extensions/common/extension_messages.h" 38 #include "extensions/common/extension_messages.h"
39 #include "extensions/common/permissions/permissions_data.h" 39 #include "extensions/common/permissions/permissions_data.h"
40 #include "ui/accessibility/ax_action_data.h"
40 41
41 #if defined(USE_AURA) 42 #if defined(USE_AURA)
42 #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" 43 #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h"
43 #endif 44 #endif
44 45
45 namespace extensions { 46 namespace extensions {
46 class AutomationWebContentsObserver; 47 class AutomationWebContentsObserver;
47 } // namespace extensions 48 } // namespace extensions
48 49
49 DEFINE_WEB_CONTENTS_USER_DATA_KEY(extensions::AutomationWebContentsObserver); 50 DEFINE_WEB_CONTENTS_USER_DATA_KEY(extensions::AutomationWebContentsObserver);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 156
156 // Helper class that implements an action adapter for a |RenderFrameHost|. 157 // Helper class that implements an action adapter for a |RenderFrameHost|.
157 class RenderFrameHostActionAdapter : public AutomationActionAdapter { 158 class RenderFrameHostActionAdapter : public AutomationActionAdapter {
158 public: 159 public:
159 explicit RenderFrameHostActionAdapter(content::RenderFrameHost* rfh) 160 explicit RenderFrameHostActionAdapter(content::RenderFrameHost* rfh)
160 : rfh_(rfh) {} 161 : rfh_(rfh) {}
161 162
162 virtual ~RenderFrameHostActionAdapter() {} 163 virtual ~RenderFrameHostActionAdapter() {}
163 164
164 // AutomationActionAdapter implementation. 165 // AutomationActionAdapter implementation.
165 void DoDefault(int32_t id) override { 166 void PerformAction(const ui::AXActionData& data) override {
166 rfh_->AccessibilityDoDefaultAction(id); 167 rfh_->AccessibilityPerformAction(data);
167 }
168
169 void Focus(int32_t id) override { rfh_->AccessibilitySetFocus(id); }
170
171 void MakeVisible(int32_t id) override {
172 rfh_->AccessibilityScrollToMakeVisible(id, gfx::Rect());
173 }
174
175 void SetSelection(int32_t anchor_id,
176 int32_t anchor_offset,
177 int32_t focus_id,
178 int32_t focus_offset) override {
179 rfh_->AccessibilitySetSelection(anchor_id, anchor_offset, focus_id,
180 focus_offset);
181 }
182
183 void ShowContextMenu(int32_t id) override {
184 rfh_->AccessibilityShowContextMenu(id);
185 } 168 }
186 169
187 private: 170 private:
188 content::RenderFrameHost* rfh_; 171 content::RenderFrameHost* rfh_;
189 172
190 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostActionAdapter); 173 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostActionAdapter);
191 }; 174 };
192 175
193 } // namespace 176 } // namespace
194 177
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 } 342 }
360 343
361 RenderFrameHostActionAdapter adapter(rfh); 344 RenderFrameHostActionAdapter adapter(rfh);
362 return RouteActionToAdapter(params.get(), &adapter); 345 return RouteActionToAdapter(params.get(), &adapter);
363 } 346 }
364 347
365 ExtensionFunction::ResponseAction 348 ExtensionFunction::ResponseAction
366 AutomationInternalPerformActionFunction::RouteActionToAdapter( 349 AutomationInternalPerformActionFunction::RouteActionToAdapter(
367 api::automation_internal::PerformAction::Params* params, 350 api::automation_internal::PerformAction::Params* params,
368 AutomationActionAdapter* adapter) { 351 AutomationActionAdapter* adapter) {
369 int32_t automation_id = params->args.automation_node_id; 352 ui::AXActionData action;
353 action.target_node_id = params->args.automation_node_id;
370 switch (params->args.action_type) { 354 switch (params->args.action_type) {
371 case api::automation_internal::ACTION_TYPE_DODEFAULT: 355 case api::automation_internal::ACTION_TYPE_DODEFAULT:
372 adapter->DoDefault(automation_id); 356 action.action = ui::AX_ACTION_DO_DEFAULT;
357 adapter->PerformAction(action);
373 break; 358 break;
374 case api::automation_internal::ACTION_TYPE_FOCUS: 359 case api::automation_internal::ACTION_TYPE_FOCUS:
375 adapter->Focus(automation_id); 360 action.action = ui::AX_ACTION_SET_FOCUS;
361 adapter->PerformAction(action);
376 break; 362 break;
377 case api::automation_internal::ACTION_TYPE_MAKEVISIBLE: 363 case api::automation_internal::ACTION_TYPE_MAKEVISIBLE:
378 adapter->MakeVisible(automation_id); 364 action.action = ui::AX_ACTION_SCROLL_TO_MAKE_VISIBLE;
365 adapter->PerformAction(action);
379 break; 366 break;
380 case api::automation_internal::ACTION_TYPE_SETSELECTION: { 367 case api::automation_internal::ACTION_TYPE_SETSELECTION: {
381 api::automation_internal::SetSelectionParams selection_params; 368 api::automation_internal::SetSelectionParams selection_params;
382 EXTENSION_FUNCTION_VALIDATE( 369 EXTENSION_FUNCTION_VALIDATE(
383 api::automation_internal::SetSelectionParams::Populate( 370 api::automation_internal::SetSelectionParams::Populate(
384 params->opt_args.additional_properties, &selection_params)); 371 params->opt_args.additional_properties, &selection_params));
385 adapter->SetSelection(automation_id, selection_params.anchor_offset, 372 action.anchor_node_id = params->args.automation_node_id;
386 selection_params.focus_node_id, 373 action.anchor_offset = selection_params.anchor_offset;
387 selection_params.focus_offset); 374 action.focus_node_id = selection_params.focus_node_id;
375 action.focus_offset = selection_params.focus_offset;
376 action.action = ui::AX_ACTION_SET_SELECTION;
377 adapter->PerformAction(action);
388 break; 378 break;
389 } 379 }
390 case api::automation_internal::ACTION_TYPE_SHOWCONTEXTMENU: { 380 case api::automation_internal::ACTION_TYPE_SHOWCONTEXTMENU: {
391 adapter->ShowContextMenu(automation_id); 381 action.action = ui::AX_ACTION_SHOW_CONTEXT_MENU;
382 adapter->PerformAction(action);
383 break;
384 }
385 case api::automation_internal::ACTION_TYPE_SETACCESSIBILITYFOCUS: {
386 action.action = ui::AX_ACTION_SET_ACCESSIBILITY_FOCUS;
387 adapter->PerformAction(action);
392 break; 388 break;
393 } 389 }
394 default: 390 default:
395 NOTREACHED(); 391 NOTREACHED();
396 } 392 }
397 return RespondNow(NoArguments()); 393 return RespondNow(NoArguments());
398 } 394 }
399 395
400 ExtensionFunction::ResponseAction 396 ExtensionFunction::ResponseAction
401 AutomationInternalEnableDesktopFunction::Run() { 397 AutomationInternalEnableDesktopFunction::Run() {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 if (!error.empty()) { 458 if (!error.empty()) {
463 Respond(Error(error)); 459 Respond(Error(error));
464 return; 460 return;
465 } 461 }
466 462
467 Respond( 463 Respond(
468 OneArgument(base::MakeUnique<base::FundamentalValue>(result_acc_obj_id))); 464 OneArgument(base::MakeUnique<base::FundamentalValue>(result_acc_obj_id)));
469 } 465 }
470 466
471 } // namespace extensions 467 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698