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

Unified Diff: chrome/browser/ui/views/autofill/autofill_popup_view_views.cc

Issue 2670003002: Accessibility for Autofill Popup View in native code (Closed)
Patch Set: Incorporates Mathieu Perreault's suggestions. Adds NotifyAccessibilityEvent to mouse events in Auto… Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/autofill/autofill_popup_view_views.cc
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_views.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_views.cc
index 89925cee23efa839e82e4105a6ff2f6b6bc68806..7cd59a54f97355f6c6d7be2f1df94c69472e0e9b 100644
--- a/chrome/browser/ui/views/autofill/autofill_popup_view_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_popup_view_views.cc
@@ -8,6 +8,7 @@
#include "chrome/browser/ui/autofill/autofill_popup_layout_model.h"
#include "components/autofill/core/browser/popup_item_ids.h"
#include "components/autofill/core/browser/suggestion.h"
+#include "ui/accessibility/ax_node_data.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/geometry/point.h"
@@ -15,6 +16,7 @@
#include "ui/gfx/image/image.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/text_utils.h"
+#include "ui/views/background.h"
#include "ui/views/border.h"
#include "ui/views/widget/widget.h"
@@ -24,19 +26,27 @@ AutofillPopupViewViews::AutofillPopupViewViews(
AutofillPopupController* controller,
views::Widget* parent_widget)
: AutofillPopupBaseView(controller, parent_widget),
- controller_(controller) {}
+ controller_(controller) {
+ for (size_t i = 0; i < controller_->GetLineCount(); ++i) {
+ AutofillPopupChildView *child = new AutofillPopupChildView(controller, i);
+ AddChildViewAt(child, static_cast<int>(i));
+ }
+ SetFocusBehavior(FocusBehavior::ALWAYS);
+ set_background(views::Background::CreateSolidBackground(
+ GetNativeTheme()->GetSystemColor(
+ ui::NativeTheme::kColorId_ResultsTableNormalBackground)));
+}
AutofillPopupViewViews::~AutofillPopupViewViews() {}
void AutofillPopupViewViews::Show() {
DoShow();
+ NotifyAccessibilityEvent(ui::AX_EVENT_MENU_POPUP_START, true);
}
void AutofillPopupViewViews::Hide() {
- // The controller is no longer valid after it hides us.
- controller_ = NULL;
-
DoHide();
+ NotifyAccessibilityEvent(ui::AX_EVENT_MENU_POPUP_END, true);
}
void AutofillPopupViewViews::UpdateBoundsAndRedrawPopup() {
@@ -44,30 +54,38 @@ void AutofillPopupViewViews::UpdateBoundsAndRedrawPopup() {
}
void AutofillPopupViewViews::OnPaint(gfx::Canvas* canvas) {
- if (!controller_)
- return;
-
- canvas->DrawColor(GetNativeTheme()->GetSystemColor(
- ui::NativeTheme::kColorId_ResultsTableNormalBackground));
+ OnPaintBackground(canvas);
OnPaintBorder(canvas);
-
- for (size_t i = 0; i < controller_->GetLineCount(); ++i) {
- gfx::Rect line_rect = controller_->layout_model().GetRowBounds(i);
-
- if (controller_->GetSuggestionAt(i).frontend_id ==
- POPUP_ITEM_ID_SEPARATOR) {
- canvas->FillRect(
- line_rect,
- GetNativeTheme()->GetSystemColor(
- ui::NativeTheme::kColorId_ResultsTableNormalDimmedText));
- } else {
- DrawAutofillEntry(canvas, i, line_rect);
- }
+ for (int i = 0; i < child_count(); ++i) {
+ (static_cast<AutofillPopupChildView*>(child_at(i)))->OnPaint(canvas);
}
}
void AutofillPopupViewViews::InvalidateRow(size_t row) {
- SchedulePaintInRect(controller_->layout_model().GetRowBounds(row));
+ child_at(row)->SchedulePaint();
+}
+
+AutofillPopupChildView::AutofillPopupChildView(
+ AutofillPopupController* controller, size_t index)
+ : controller_(controller), index_(index) {
+ SetFocusBehavior(FocusBehavior::ALWAYS);
+}
+
+AutofillPopupChildView::~AutofillPopupChildView() {}
+
+void AutofillPopupChildView::OnPaint(gfx::Canvas* canvas) {
+ if (!controller_)
+ return;
+ const gfx::Rect line_rect = controller_->layout_model().GetRowBounds(index_);
+ if (controller_->GetSuggestionAt(index_).frontend_id ==
+ POPUP_ITEM_ID_SEPARATOR) {
+ canvas->FillRect(
+ line_rect,
+ GetNativeTheme()->GetSystemColor(
+ ui::NativeTheme::kColorId_ResultsTableNormalDimmedText));
+ } else {
+ DrawAutofillEntry(canvas, index_, line_rect);
+ }
}
/**
@@ -92,7 +110,7 @@ void AutofillPopupViewViews::InvalidateRow(size_t row) {
* #mark-non-secure-as flag as "display form warning", go to goo.gl/CEIjc6 with
* stored autofill info and check for credit card or password forms.
*/
-void AutofillPopupViewViews::DrawAutofillEntry(gfx::Canvas* canvas,
+void AutofillPopupChildView::DrawAutofillEntry(gfx::Canvas* canvas,
int index,
const gfx::Rect& entry_rect) {
canvas->FillRect(
@@ -189,6 +207,21 @@ void AutofillPopupViewViews::DrawAutofillEntry(gfx::Canvas* canvas,
}
}
+void AutofillPopupChildView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
+ if (!controller_)
+ return;
+ if (controller_->GetSuggestionAt(index_).frontend_id ==
+ POPUP_ITEM_ID_SEPARATOR) {
+ node_data->role = ui::AX_ROLE_SPLITTER;
+ node_data->AddStateFlag(ui::AX_STATE_READ_ONLY);
+ return;
+ }
+ node_data->role = ui::AX_ROLE_TEXT_FIELD;
+ node_data->SetName(controller_->GetElidedLabelAt(index_));
+ node_data->SetValue(controller_->GetElidedValueAt(index_));
+ node_data->AddStateFlag(ui::AX_STATE_EDITABLE);
+}
+
AutofillPopupView* AutofillPopupView::Create(
AutofillPopupController* controller) {
views::Widget* observing_widget =

Powered by Google App Engine
This is Rietveld 408576698