From c970d68052f59003ca14dabf952fd479f17d4955 Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Tue, 1 Mar 2016 10:54:49 -0500 Subject: [PATCH] Bug 1252260 - get rid of HTML table CacheChildren, r=marcoz --- accessible/generic/Accessible.h | 1 + accessible/html/HTMLTableAccessible.cpp | 16 +--- accessible/html/HTMLTableAccessible.h | 5 +- .../tests/mochitest/treeupdate/a11y.ini | 1 + .../mochitest/treeupdate/test_table.html | 81 +++++++++++++++++++ 5 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 accessible/tests/mochitest/treeupdate/test_table.html diff --git a/accessible/generic/Accessible.h b/accessible/generic/Accessible.h index 1c700f86ce9..d7996f6611a 100644 --- a/accessible/generic/Accessible.h +++ b/accessible/generic/Accessible.h @@ -590,6 +590,7 @@ public: HyperTextAccessible* AsHyperText(); bool IsHTMLBr() const { return mType == eHTMLBRType; } + bool IsHTMLCaption() const { return mType == eHTMLCaptionType; } bool IsHTMLCombobox() const { return mType == eHTMLComboboxType; } bool IsHTMLFileInput() const { return mType == eHTMLFileInputType; } diff --git a/accessible/html/HTMLTableAccessible.cpp b/accessible/html/HTMLTableAccessible.cpp index 5a8de9ff0bc..04bb744897f 100644 --- a/accessible/html/HTMLTableAccessible.cpp +++ b/accessible/html/HTMLTableAccessible.cpp @@ -393,24 +393,14 @@ NS_IMPL_ISUPPORTS_INHERITED0(HTMLTableAccessible, Accessible) //////////////////////////////////////////////////////////////////////////////// // HTMLTableAccessible: Accessible -void -HTMLTableAccessible::CacheChildren() +bool +HTMLTableAccessible::InsertChildAt(uint32_t aIndex, Accessible* aChild) { // Move caption accessible so that it's the first child. Check for the first // caption only, because nsAccessibilityService ensures we don't create // accessibles for the other captions, since only the first is actually // visible. - TreeWalker walker(this, mContent); - - Accessible* child = nullptr; - while ((child = walker.Next())) { - if (child->Role() == roles::CAPTION) { - InsertChildAt(0, child); - while ((child = walker.Next()) && AppendChild(child)); - break; - } - AppendChild(child); - } + return Accessible::InsertChildAt(aChild->IsHTMLCaption() ? 0 : aIndex, aChild); } role diff --git a/accessible/html/HTMLTableAccessible.h b/accessible/html/HTMLTableAccessible.h index 5bef8e00d40..4bab484962d 100644 --- a/accessible/html/HTMLTableAccessible.h +++ b/accessible/html/HTMLTableAccessible.h @@ -157,12 +157,13 @@ public: virtual already_AddRefed NativeAttributes() override; virtual Relation RelationByType(RelationType aRelationType) override; + bool InsertChildAt(uint32_t aIndex, Accessible* aChild) override; + protected: virtual ~HTMLTableAccessible() {} // Accessible virtual ENameValueFlag NativeName(nsString& aName) override; - virtual void CacheChildren() override; // HTMLTableAccessible @@ -209,7 +210,7 @@ class HTMLCaptionAccessible : public HyperTextAccessibleWrap { public: HTMLCaptionAccessible(nsIContent* aContent, DocAccessible* aDoc) : - HyperTextAccessibleWrap(aContent, aDoc) { } + HyperTextAccessibleWrap(aContent, aDoc) { mType = eHTMLCaptionType; } // Accessible virtual a11y::role NativeRole() override; diff --git a/accessible/tests/mochitest/treeupdate/a11y.ini b/accessible/tests/mochitest/treeupdate/a11y.ini index bdb1b957017..e9294409873 100644 --- a/accessible/tests/mochitest/treeupdate/a11y.ini +++ b/accessible/tests/mochitest/treeupdate/a11y.ini @@ -29,6 +29,7 @@ skip-if = buildapp == "mulet" [test_recreation.html] [test_select.html] [test_shutdown.xul] +[test_table.html] [test_textleaf.html] [test_visibility.html] [test_whitespace.html] diff --git a/accessible/tests/mochitest/treeupdate/test_table.html b/accessible/tests/mochitest/treeupdate/test_table.html new file mode 100644 index 00000000000..abadefdb028 --- /dev/null +++ b/accessible/tests/mochitest/treeupdate/test_table.html @@ -0,0 +1,81 @@ + + + + Table update tests + + + + + + + + + + + +

+ +
+  
+ + + + + + +
cell1cell2
+ +