[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da

cfleizach at apple.com cfleizach at apple.com
Wed Dec 22 18:27:10 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 8665fa25a4451d669272c9ac0303e3fb21f0810e
Author: cfleizach at apple.com <cfleizach at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Dec 11 02:00:46 2010 +0000

    AX: refactor AccessibilityRenderObject::doAccessibilityHitTest
    https://bugs.webkit.org/show_bug.cgi?id=50574
    
    Reviewed by Darin Adler.
    
    WebCore:
    
    Refactors accessibility hit testing to allow for a more flexible model when handling elements
    with fake sub-elements (like sliders or list boxes).
    
    Renamed doAccessibilityHitTest -> accessibilityHitTest, which is called on the root
    accessibility render object. Then subclassers are able to override
    elementAccessibilityHitTest to return their own specific elements.
    
    * accessibility/AccessibilityListBox.cpp:
    (WebCore::AccessibilityListBox::elementAccessibilityHitTest):
    * accessibility/AccessibilityListBox.h:
    * accessibility/AccessibilityObject.h:
    (WebCore::AccessibilityObject::accessibilityHitTest):
    (WebCore::AccessibilityObject::elementAccessibilityHitTest):
    * accessibility/AccessibilityRenderObject.cpp:
    (WebCore::AccessibilityRenderObject::accessibilityHitTest):
    * accessibility/AccessibilityRenderObject.h:
    * accessibility/AccessibilitySlider.cpp:
    (WebCore::AccessibilitySlider::elementAccessibilityHitTest):
    * accessibility/AccessibilitySlider.h:
    * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
    (webkit_accessible_component_ref_accessible_at_point):
    * accessibility/mac/AccessibilityObjectWrapper.mm:
    (-[AccessibilityObjectWrapper accessibilityHitTest:]):
    
    WebKit/chromium:
    
    * src/WebAccessibilityObject.cpp:
    (WebKit::WebAccessibilityObject::hitTest):
    
    WebKit/win:
    
    * AccessibleBase.cpp:
    (AccessibleBase::accHitTest):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73825 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 59bc6ce..9019ff9 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,34 @@
+2010-12-10  Chris Fleizach  <cfleizach at apple.com>
+
+        Reviewed by Darin Adler.
+
+        AX: refactor AccessibilityRenderObject::doAccessibilityHitTest
+        https://bugs.webkit.org/show_bug.cgi?id=50574
+
+        Refactors accessibility hit testing to allow for a more flexible model when handling elements
+        with fake sub-elements (like sliders or list boxes).
+
+        Renamed doAccessibilityHitTest -> accessibilityHitTest, which is called on the root
+        accessibility render object. Then subclassers are able to override 
+        elementAccessibilityHitTest to return their own specific elements.
+
+        * accessibility/AccessibilityListBox.cpp:
+        (WebCore::AccessibilityListBox::elementAccessibilityHitTest):
+        * accessibility/AccessibilityListBox.h:
+        * accessibility/AccessibilityObject.h:
+        (WebCore::AccessibilityObject::accessibilityHitTest):
+        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
+        * accessibility/AccessibilityRenderObject.h:
+        * accessibility/AccessibilitySlider.cpp:
+        (WebCore::AccessibilitySlider::elementAccessibilityHitTest):
+        * accessibility/AccessibilitySlider.h:
+        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+        (webkit_accessible_component_ref_accessible_at_point):
+        * accessibility/mac/AccessibilityObjectWrapper.mm:
+        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
+
 2010-12-10  Kenneth Russell  <kbr at google.com>
 
         Reviewed by Darin Adler.
diff --git a/WebCore/accessibility/AccessibilityListBox.cpp b/WebCore/accessibility/AccessibilityListBox.cpp
index 8a9e062..191a041 100644
--- a/WebCore/accessibility/AccessibilityListBox.cpp
+++ b/WebCore/accessibility/AccessibilityListBox.cpp
@@ -163,7 +163,7 @@ bool AccessibilityListBox::accessibilityIsIgnored() const
     return false;
 }
 
-AccessibilityObject* AccessibilityListBox::doAccessibilityHitTest(const IntPoint& point) const
+AccessibilityObject* AccessibilityListBox::elementAccessibilityHitTest(const IntPoint& point) const
 {
     // the internal HTMLSelectElement methods for returning a listbox option at a point
     // ignore optgroup elements.
diff --git a/WebCore/accessibility/AccessibilityListBox.h b/WebCore/accessibility/AccessibilityListBox.h
index dcfdd6f..cfccb52 100644
--- a/WebCore/accessibility/AccessibilityListBox.h
+++ b/WebCore/accessibility/AccessibilityListBox.h
@@ -41,7 +41,6 @@ public:
     static PassRefPtr<AccessibilityListBox> create(RenderObject*);
     virtual ~AccessibilityListBox();
     
-    virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const;
     virtual bool isListBox() const { return true; }
     
     virtual bool canSetFocusAttribute() const { return true; }
@@ -57,6 +56,7 @@ public:
 private:    
     AccessibilityObject* listBoxOptionAccessibilityObject(HTMLElement*) const;
     virtual bool accessibilityIsIgnored() const;
+    virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
 };
     
 } // namespace WebCore
diff --git a/WebCore/accessibility/AccessibilityObject.h b/WebCore/accessibility/AccessibilityObject.h
index 77b6a1f..c1ea04f 100644
--- a/WebCore/accessibility/AccessibilityObject.h
+++ b/WebCore/accessibility/AccessibilityObject.h
@@ -368,7 +368,11 @@ public:
     virtual void setARIAGrabbed(bool) { }
     virtual void determineARIADropEffects(Vector<String>&) { }
     
-    virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const { return 0; }
+    // Called on the root AX object to return the deepest available element.
+    virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const { return 0; }
+    // Called on the AX object after the render tree determines which is the right AccessibilityRenderObject.
+    virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const { return const_cast<AccessibilityObject*>(this); }
+
     virtual AccessibilityObject* focusedUIElement() const { return 0; }
 
     virtual AccessibilityObject* firstChild() const { return 0; }
diff --git a/WebCore/accessibility/AccessibilityRenderObject.cpp b/WebCore/accessibility/AccessibilityRenderObject.cpp
index c3f9920..9206094 100644
--- a/WebCore/accessibility/AccessibilityRenderObject.cpp
+++ b/WebCore/accessibility/AccessibilityRenderObject.cpp
@@ -2733,7 +2733,7 @@ AccessibilityObject* AccessibilityRenderObject::accessibilityImageMapHitTest(HTM
     return 0;
 }
     
-AccessibilityObject* AccessibilityRenderObject::doAccessibilityHitTest(const IntPoint& point) const
+AccessibilityObject* AccessibilityRenderObject::accessibilityHitTest(const IntPoint& point) const
 {
     if (!m_renderer || !m_renderer->hasLayer())
         return 0;
@@ -2759,17 +2759,11 @@ AccessibilityObject* AccessibilityRenderObject::doAccessibilityHitTest(const Int
         return 0;
     
     AccessibilityObject* result = obj->document()->axObjectCache()->getOrCreate(obj);
+    result->updateChildrenIfNecessary();
 
-    if (obj->isBoxModelObject() && toRenderBoxModelObject(obj)->isListBox()) {
-        // Make sure the children are initialized so that hit testing finds the right element.
-        AccessibilityListBox* listBox = static_cast<AccessibilityListBox*>(result);
-        listBox->updateChildrenIfNecessary();
-        return listBox->doAccessibilityHitTest(point);
-    }
+    // Allow the element to perform any hit-testing it might need to do to reach non-render children.
+    result = result->elementAccessibilityHitTest(point);
     
-    if (result->isInputSlider()) 
-        return result->doAccessibilityHitTest(point);
-
     if (result->accessibilityIsIgnored()) {
         // If this element is the label of a control, a hit test should return the control.
         AccessibilityObject* controlObject = result->correspondingControlForLabelElement();
diff --git a/WebCore/accessibility/AccessibilityRenderObject.h b/WebCore/accessibility/AccessibilityRenderObject.h
index a01008a..9660d5f 100644
--- a/WebCore/accessibility/AccessibilityRenderObject.h
+++ b/WebCore/accessibility/AccessibilityRenderObject.h
@@ -127,7 +127,6 @@ public:
     virtual int layoutCount() const;
     virtual double estimatedLoadingProgress() const;
     
-    virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const;
     virtual AccessibilityObject* focusedUIElement() const;
     virtual AccessibilityObject* firstChild() const;
     virtual AccessibilityObject* lastChild() const;
@@ -150,7 +149,10 @@ public:
     void updateAccessibilityRole();
     
     virtual AXObjectCache* axObjectCache() const;
-    
+
+    // Should be called on the root accessibility object to kick off a hit test.
+    virtual AccessibilityObject* accessibilityHitTest(const IntPoint&) const;
+
     virtual Element* actionElement() const;
     Element* mouseButtonListener() const;
     FrameView* frameViewIfRenderView() const;
diff --git a/WebCore/accessibility/AccessibilitySlider.cpp b/WebCore/accessibility/AccessibilitySlider.cpp
index f53db80..d4433a2 100644
--- a/WebCore/accessibility/AccessibilitySlider.cpp
+++ b/WebCore/accessibility/AccessibilitySlider.cpp
@@ -99,7 +99,7 @@ const AtomicString& AccessibilitySlider::getAttribute(const QualifiedName& attri
     return element()->getAttribute(attribute);
 }
     
-AccessibilityObject* AccessibilitySlider::doAccessibilityHitTest(const IntPoint& point) const
+AccessibilityObject* AccessibilitySlider::elementAccessibilityHitTest(const IntPoint& point) const
 {
     if (m_children.size()) {
         ASSERT(m_children.size() == 1);
diff --git a/WebCore/accessibility/AccessibilitySlider.h b/WebCore/accessibility/AccessibilitySlider.h
index e5728d3..406c3ab 100644
--- a/WebCore/accessibility/AccessibilitySlider.h
+++ b/WebCore/accessibility/AccessibilitySlider.h
@@ -47,7 +47,7 @@ protected:
 private:
     HTMLInputElement* element() const;
     virtual bool accessibilityIsIgnored() const;
-    virtual AccessibilityObject* doAccessibilityHitTest(const IntPoint&) const;
+    virtual AccessibilityObject* elementAccessibilityHitTest(const IntPoint&) const;
 
     virtual AccessibilityRole roleValue() const { return SliderRole; }    
     virtual bool isSlider() const { return true; }
diff --git a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
index ca0d80b..5a55bb1 100644
--- a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
+++ b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
@@ -1789,7 +1789,8 @@ static IntPoint atkToContents(AccessibilityObject* coreObject, AtkCoordType coor
 static AtkObject* webkit_accessible_component_ref_accessible_at_point(AtkComponent* component, gint x, gint y, AtkCoordType coordType)
 {
     IntPoint pos = atkToContents(core(component), coordType, x, y);
-    AccessibilityObject* target = core(component)->doAccessibilityHitTest(pos);
+    
+    AccessibilityObject* target = core(component)->accessibilityHitTest(pos);
     if (!target)
         return 0;
     g_object_ref(target->wrapper());
diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
index 5100bfc..9a5d133 100644
--- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
+++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
@@ -1948,7 +1948,7 @@ static NSString* roleValueToNSString(AccessibilityRole value)
     if (![self updateObjectBackingStore])
         return nil;
 
-    RefPtr<AccessibilityObject> axObject = m_object->doAccessibilityHitTest(IntPoint(point));
+    RefPtr<AccessibilityObject> axObject = m_object->accessibilityHitTest(IntPoint(point));
     if (axObject)
         return NSAccessibilityUnignoredAncestor(axObject->wrapper());
     return NSAccessibilityUnignoredAncestor(self);
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 94c712a..5ffbfbb 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,13 @@
+2010-12-10  Chris Fleizach  <cfleizach at apple.com>
+
+        Reviewed by Darin Adler.
+
+        AX: refactor AccessibilityRenderObject::doAccessibilityHitTest
+        https://bugs.webkit.org/show_bug.cgi?id=50574
+
+        * src/WebAccessibilityObject.cpp:
+        (WebKit::WebAccessibilityObject::hitTest):
+
 2010-12-10  Zhenyao Mo  <zmo at google.com>
 
         Reviewed by Adam Barth.
diff --git a/WebKit/chromium/src/WebAccessibilityObject.cpp b/WebKit/chromium/src/WebAccessibilityObject.cpp
index 9df69cf..1a425e3 100644
--- a/WebKit/chromium/src/WebAccessibilityObject.cpp
+++ b/WebKit/chromium/src/WebAccessibilityObject.cpp
@@ -379,7 +379,7 @@ WebAccessibilityObject WebAccessibilityObject::hitTest(const WebPoint& point) co
 
     m_private->updateBackingStore();
     IntPoint contentsPoint = m_private->documentFrameView()->windowToContents(point);
-    RefPtr<AccessibilityObject> hit = m_private->doAccessibilityHitTest(contentsPoint);
+    RefPtr<AccessibilityObject> hit = m_private->accessibilityHitTest(contentsPoint);
 
     if (hit.get())
         return WebAccessibilityObject(hit);
diff --git a/WebKit/win/AccessibleBase.cpp b/WebKit/win/AccessibleBase.cpp
index 3e8306f..1ebd45c 100644
--- a/WebKit/win/AccessibleBase.cpp
+++ b/WebKit/win/AccessibleBase.cpp
@@ -574,7 +574,7 @@ HRESULT STDMETHODCALLTYPE AccessibleBase::accHitTest(long x, long y, VARIANT* pv
         return E_FAIL;
 
     IntPoint point = m_object->documentFrameView()->screenToContents(IntPoint(x, y));
-    AccessibilityObject* childObj = m_object->doAccessibilityHitTest(point);
+    AccessibilityObject* childObj = m_object->accessibilityHitTest(point);
 
     if (!childObj) {
         // If we did not hit any child objects, test whether the point hit us, and
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index e06c64b..c2a111e 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,3 +1,13 @@
+2010-12-10  Chris Fleizach  <cfleizach at apple.com>
+
+        Reviewed by Darin Adler.
+
+        AX: refactor AccessibilityRenderObject::doAccessibilityHitTest
+        https://bugs.webkit.org/show_bug.cgi?id=50574
+
+        * AccessibleBase.cpp:
+        (AccessibleBase::accHitTest):
+
 2010-12-09  Brian Weinstein  <bweinstein at apple.com>
 
         Reviewed by Adam Roben.

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list