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

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 16:26:47 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 307974e97fa0976aa873f74e10ab3388c6b2750a
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 23 22:33:49 2010 +0000

    2010-11-23  Chris Guillory  <chris.guillory at google.com>
    
            Reviewed by Dimitri Glazkov.
    
            Include the FrameView widget of a RenderWidget in the accessibility tree.
            https://bugs.webkit.org/show_bug.cgi?id=49106
    
            * accessibility/iframe-has-document-expected.txt: Added.
            * accessibility/iframe-has-document.html: Added.
            * platform/win/Skipped:
    2010-11-23  Chris Guillory  <chris.guillory at google.com>
    
            Reviewed by Dimitri Glazkov.
    
            Include the FrameView widget of a RenderWidget in the accessibility tree.
            https://bugs.webkit.org/show_bug.cgi?id=49106
    
            Include render widget children in the accessibility tree for not mac webkit ports.
    
            Test: accessibility/iframe-has-document.html
    
            * accessibility/AccessibilityRenderObject.cpp:
            (WebCore::AccessibilityRenderObject::renderParentObject):
            (WebCore::AccessibilityRenderObject::addChildren):
            (WebCore::AccessibilityRenderObject::addRenderWidgetChildren):
            * accessibility/AccessibilityRenderObject.h:
            * accessibility/chromium/AccessibilityObjectChromium.cpp:
            (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
    2010-11-23  Chris Guillory  <chris.guillory at google.com>
    
            Reviewed by Dimitri Glazkov.
    
            Include the FrameView widget of a RenderWidget in the accessibility tree.
            https://bugs.webkit.org/show_bug.cgi?id=49106
    
            * public/WebAccessibilityObject.h:
            * src/WebAccessibilityObject.cpp:
            (WebKit::WebAccessibilityObject::equals):
            (WebKit::WebAccessibilityObject::parentObject):
    2010-11-23  Chris Guillory  <chris.guillory at google.com>
    
            Reviewed by Dimitri Glazkov.
    
            Include the FrameView widget of a RenderWidget in the accessibility tree.
            https://bugs.webkit.org/show_bug.cgi?id=49106
    
            * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
            (AccessibilityUIElement::AccessibilityUIElement):
            (AccessibilityUIElement::parentElementCallback):
            (AccessibilityUIElement::isEqualCallback):
            * DumpRenderTree/chromium/AccessibilityUIElement.h:
            * DumpRenderTree/chromium/CppBoundClass.cpp:
            (CppBoundClass::getFromCppVariant):
            * DumpRenderTree/chromium/CppBoundClass.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72628 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index c66380c..460802e 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,14 @@
+2010-11-23  Chris Guillory  <chris.guillory at google.com>
+
+        Reviewed by Dimitri Glazkov.
+
+        Include the FrameView widget of a RenderWidget in the accessibility tree.
+        https://bugs.webkit.org/show_bug.cgi?id=49106
+
+        * accessibility/iframe-has-document-expected.txt: Added.
+        * accessibility/iframe-has-document.html: Added.
+        * platform/win/Skipped:
+
 2010-11-23  Tony Chang  <tony at chromium.org>
 
         Reviewed by Ojan Vafai.
diff --git a/LayoutTests/accessibility/iframe-has-document-expected.txt b/LayoutTests/accessibility/iframe-has-document-expected.txt
new file mode 100644
index 0000000..27a27f8
--- /dev/null
+++ b/LayoutTests/accessibility/iframe-has-document-expected.txt
@@ -0,0 +1,11 @@
+
+This test makes sure the iframe's document is included in the main AX tree.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS parentIframeDocument.isEqual(iframe) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/accessibility/iframe-has-document.html b/LayoutTests/accessibility/iframe-has-document.html
new file mode 100644
index 0000000..dd51c73
--- /dev/null
+++ b/LayoutTests/accessibility/iframe-has-document.html
@@ -0,0 +1,37 @@
+<html>
+<head>
+<link rel="stylesheet" href="../fast/js/resources/js-test-style.css" />
+<script>
+var successfullyParsed = false;
+</script>
+<script src="../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body id="body">
+
+    <iframe id='iframe1' src='resources/cake.png'></iframe>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+    description("This test makes sure the iframe's document is included in the main AX tree.");
+
+    if (window.accessibilityController) {
+        document.body.focus();
+        var body = accessibilityController.focusedElement;
+        var renderBlock = body.childAtIndex(0);
+        var iframe = renderBlock.childAtIndex(0);
+        var iframeDocument = iframe.childAtIndex(0);
+        
+        var parentIframeDocument = iframeDocument.parentElement();
+        
+        shouldBe("parentIframeDocument.isEqual(iframe)", "true");
+    }
+
+    successfullyParsed = true;
+</script>
+
+<script src="../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/platform/win/Skipped b/LayoutTests/platform/win/Skipped
index 260d403..46f36d8 100644
--- a/LayoutTests/platform/win/Skipped
+++ b/LayoutTests/platform/win/Skipped
@@ -380,9 +380,6 @@ fast/workers/storage/change-version-handle-reuse-sync.html
 # Sometimes fails http://webkit.org/b/49182
 animations/stop-animation-on-suspend.html
 
-# Crashing in AccessibilityUIElement::parentElement http://webkit.org/b/49379
-accessibility/iframe-bastardization.html
-
 ################################################################################
 ####################### No bugs filed about the below yet#######################
 ################################################################################
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index d10ea40..4592c5a 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,22 @@
+2010-11-23  Chris Guillory  <chris.guillory at google.com>
+
+        Reviewed by Dimitri Glazkov.
+
+        Include the FrameView widget of a RenderWidget in the accessibility tree.
+        https://bugs.webkit.org/show_bug.cgi?id=49106
+
+        Include render widget children in the accessibility tree for not mac webkit ports.
+
+        Test: accessibility/iframe-has-document.html
+
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::renderParentObject):
+        (WebCore::AccessibilityRenderObject::addChildren):
+        (WebCore::AccessibilityRenderObject::addRenderWidgetChildren):
+        * accessibility/AccessibilityRenderObject.h:
+        * accessibility/chromium/AccessibilityObjectChromium.cpp:
+        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
+
 2010-11-23  Chris Rogers  <crogers at google.com>
 
         Reviewed by Alexey Proskuryakov.
diff --git a/WebCore/accessibility/AccessibilityRenderObject.cpp b/WebCore/accessibility/AccessibilityRenderObject.cpp
index 141d725..4c9fdd8 100644
--- a/WebCore/accessibility/AccessibilityRenderObject.cpp
+++ b/WebCore/accessibility/AccessibilityRenderObject.cpp
@@ -390,26 +390,33 @@ RenderObject* AccessibilityRenderObject::renderParentObject() const
     RenderObject* startOfConts = 0;
     RenderObject* firstChild = 0;
     if (m_renderer->isRenderBlock() && (startOfConts = startOfContinuations(m_renderer)))
-        parent = startOfConts;
+        return startOfConts;
 
     // Case 2: node's parent is an inline which is some node's continuation; parent is 
     // the earliest node in the continuation chain.
-    else if (parent && parent->isRenderInline() && (startOfConts = startOfContinuations(parent)))
-        parent = startOfConts;
+    if (parent && parent->isRenderInline() && (startOfConts = startOfContinuations(parent)))
+        return startOfConts;
     
     // Case 3: The first sibling is the beginning of a continuation chain. Find the origin of that continuation.
-    else if (parent && (firstChild = parent->firstChild()) && firstChild->node()) {
+    if (parent && (firstChild = parent->firstChild()) && firstChild->node()) {
         // Get the node's renderer and follow that continuation chain until the first child is found
         RenderObject* nodeRenderFirstChild = firstChild->node()->renderer();
         if (nodeRenderFirstChild != firstChild) {
             for (RenderObject* contsTest = nodeRenderFirstChild; contsTest; contsTest = nextContinuation(contsTest)) {
-                if (contsTest == firstChild) {
-                    parent = nodeRenderFirstChild->parent();
-                    break;
-                }
+                if (contsTest == firstChild)
+                    return nodeRenderFirstChild->parent();
             }
         }
     }
+
+#if !PLATFORM(MAC)
+    // Case 4: The node is a RenderView whose FrameView has an associated RenderWidget.
+    // The parent is the associated RenderWidget.
+    // On the mac port this parent logic is in AccessibilityObjectWrapper.mm.
+    RenderWidget* renderWidget = 0;
+    if (!parent && (renderWidget = RenderWidget::find(frameViewIfRenderView())))
+        return renderWidget;
+#endif
         
     return parent;
 }
@@ -3358,6 +3365,27 @@ void AccessibilityRenderObject::addChildren()
             }
         }
     }
+
+    addRenderWidgetChildren();
+}
+
+void AccessibilityRenderObject::addRenderWidgetChildren()
+{
+#if !PLATFORM(MAC)
+    // For RenderWidget, add frame's content renderer if the widget is a FrameView.
+    // On the mac port this children logic is in AccessibilityObjectWrapper.mm.
+    Widget* widget = widgetForAttachmentView();
+    if (!widget || !widget->isFrameView())
+        return;
+    Frame* frame = static_cast<FrameView*>(widget)->frame();
+    if (!frame)
+        return;
+    RenderView* renderView = frame->contentRenderer();
+    if (!renderView)
+        return;
+    ASSERT(!m_children.size());
+    m_children.append(axObjectCache()->getOrCreate(renderView));
+#endif
 }
         
 const AtomicString& AccessibilityRenderObject::ariaLiveRegionStatus() const
diff --git a/WebCore/accessibility/AccessibilityRenderObject.h b/WebCore/accessibility/AccessibilityRenderObject.h
index 970ef9f..b883d24 100644
--- a/WebCore/accessibility/AccessibilityRenderObject.h
+++ b/WebCore/accessibility/AccessibilityRenderObject.h
@@ -269,6 +269,7 @@ protected:
     virtual bool isDetached() const { return !m_renderer; }
 
 private:
+    void addRenderWidgetChildren();
     void ariaListboxSelectedChildren(AccessibilityChildrenVector&);
     void ariaListboxVisibleChildren(AccessibilityChildrenVector&);
     bool ariaIsHidden() const;
diff --git a/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp b/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp
index 5b4cfd5..2bd3bbe 100644
--- a/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp
+++ b/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp
@@ -26,11 +26,25 @@
 
 #include "config.h"
 #include "AccessibilityObject.h"
+#include "Frame.h"
+#include "FrameView.h"
+#include "Widget.h"
 
 namespace WebCore {
 
 bool AccessibilityObject::accessibilityIgnoreAttachment() const
 {
+    // Ignore render widgets with an attached RenderView because they have
+    // no role and are not useful in the accessibility tree.
+    // On the mac port, these render widgets are ignored by forwarding
+    // calls the to the attached widget.
+    Widget* widget = widgetForAttachmentView();
+    if (widget && widget->isFrameView()) {
+        Frame* frame = static_cast<FrameView*>(widget)->frame();
+        if (frame && frame->contentRenderer())
+            return true;
+    }
+
     return false;
 }
 
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 7a57986..126acd5 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,15 @@
+2010-11-23  Chris Guillory  <chris.guillory at google.com>
+
+        Reviewed by Dimitri Glazkov.
+
+        Include the FrameView widget of a RenderWidget in the accessibility tree.
+        https://bugs.webkit.org/show_bug.cgi?id=49106
+
+        * public/WebAccessibilityObject.h:
+        * src/WebAccessibilityObject.cpp:
+        (WebKit::WebAccessibilityObject::equals):
+        (WebKit::WebAccessibilityObject::parentObject):
+
 2010-11-23  John Knottenbelt  <jknotten at chromium.org>
 
         Reviewed by Darin Fisher.
diff --git a/WebKit/chromium/public/WebAccessibilityObject.h b/WebKit/chromium/public/WebAccessibilityObject.h
index f7c93f2..2d562f6 100644
--- a/WebKit/chromium/public/WebAccessibilityObject.h
+++ b/WebKit/chromium/public/WebAccessibilityObject.h
@@ -63,6 +63,7 @@ public:
 
     WEBKIT_API void reset();
     WEBKIT_API void assign(const WebAccessibilityObject&);
+    WEBKIT_API bool equals(const WebAccessibilityObject&) const;
 
     bool isNull() const { return !m_private; }
 
diff --git a/WebKit/chromium/src/WebAccessibilityObject.cpp b/WebKit/chromium/src/WebAccessibilityObject.cpp
index 9df69cf..f1d4574 100644
--- a/WebKit/chromium/src/WebAccessibilityObject.cpp
+++ b/WebKit/chromium/src/WebAccessibilityObject.cpp
@@ -65,6 +65,11 @@ void WebAccessibilityObject::assign(const WebKit::WebAccessibilityObject& other)
     assign(p);
 }
 
+bool WebAccessibilityObject::equals(const WebKit::WebAccessibilityObject& other) const
+{
+    return (m_private == other.m_private);
+}
+
 WebString WebAccessibilityObject::accessibilityDescription() const
 {
     if (!m_private)
@@ -178,7 +183,7 @@ WebAccessibilityObject WebAccessibilityObject::parentObject() const
         return WebAccessibilityObject();
 
     m_private->updateBackingStore();
-    return WebAccessibilityObject(m_private->parentObject());
+    return WebAccessibilityObject(m_private->parentObjectUnignored());
 }
 
 
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 6654258..3fb0281 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,19 @@
+2010-11-23  Chris Guillory  <chris.guillory at google.com>
+
+        Reviewed by Dimitri Glazkov.
+
+        Include the FrameView widget of a RenderWidget in the accessibility tree.
+        https://bugs.webkit.org/show_bug.cgi?id=49106
+
+        * DumpRenderTree/chromium/AccessibilityUIElement.cpp:
+        (AccessibilityUIElement::AccessibilityUIElement):
+        (AccessibilityUIElement::parentElementCallback):
+        (AccessibilityUIElement::isEqualCallback):
+        * DumpRenderTree/chromium/AccessibilityUIElement.h:
+        * DumpRenderTree/chromium/CppBoundClass.cpp:
+        (CppBoundClass::getFromCppVariant):
+        * DumpRenderTree/chromium/CppBoundClass.h:
+
 2010-11-23  Alex Grilo  <abgrilo at profusion.mobi>
 
         Reviewed by Kenneth Rohde Christiansen.
diff --git a/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp
index dbd025a..43a7380 100644
--- a/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.cpp
@@ -304,6 +304,7 @@ AccessibilityUIElement::AccessibilityUIElement(const WebAccessibilityObject& obj
     bindMethod("parentElement", &AccessibilityUIElement::parentElementCallback);
     bindMethod("increment", &AccessibilityUIElement::incrementCallback);
     bindMethod("decrement", &AccessibilityUIElement::decrementCallback);
+    bindMethod("isEqual", &AccessibilityUIElement::isEqualCallback);
 
     bindProperty("role", &AccessibilityUIElement::roleGetterCallback);
     bindProperty("subrole", &m_subrole);
@@ -490,7 +491,11 @@ void AccessibilityUIElement::isActionSupportedCallback(const CppArgumentList&, C
 
 void AccessibilityUIElement::parentElementCallback(const CppArgumentList&, CppVariant* result)
 {
-    result->setNull();
+    AccessibilityUIElement* parent = m_factory->create(accessibilityObject().parentObject());
+    if (parent)
+        result->set(*(parent->getAsCppVariant()));
+    else
+        result->setNull();        
 }
 
 void AccessibilityUIElement::incrementCallback(const CppArgumentList&, CppVariant* result)
@@ -503,6 +508,15 @@ void AccessibilityUIElement::decrementCallback(const CppArgumentList&, CppVarian
     result->setNull();
 }
 
+void AccessibilityUIElement::isEqualCallback(const CppArgumentList& arguments, CppVariant* result)
+{
+    bool equal = false;
+    AccessibilityUIElement* element = static_cast<AccessibilityUIElement*>(CppBoundClass::getFromCppVariant(arguments[0]));
+    if (element)
+        equal = accessibilityObject().equals(element->accessibilityObject());
+    result->set(equal);
+}
+
 void AccessibilityUIElement::fallbackCallback(const CppArgumentList &, CppVariant* result)
 {
     // FIXME: Implement this.
diff --git a/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h
index 366ed42..f2ce2e4 100644
--- a/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h
+++ b/WebKitTools/DumpRenderTree/chromium/AccessibilityUIElement.h
@@ -82,6 +82,7 @@ private:
     void parentElementCallback(const CppArgumentList&, CppVariant*);
     void incrementCallback(const CppArgumentList&, CppVariant*);
     void decrementCallback(const CppArgumentList&, CppVariant*);
+    void isEqualCallback(const CppArgumentList&, CppVariant*);
     void fallbackCallback(const CppArgumentList&, CppVariant*);
 
     void childrenCountGetterCallback(CppVariant*);
diff --git a/WebKitTools/DumpRenderTree/chromium/CppBoundClass.cpp b/WebKitTools/DumpRenderTree/chromium/CppBoundClass.cpp
index 1348bbf..2d3d0e1 100644
--- a/WebKitTools/DumpRenderTree/chromium/CppBoundClass.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/CppBoundClass.cpp
@@ -324,6 +324,18 @@ bool CppBoundClass::isMethodRegistered(const string& name) const
     return callback != m_methods.end();
 }
 
+// static
+CppBoundClass* CppBoundClass::getFromCppVariant(const CppVariant& value)
+{
+    if (!value.isObject())
+        return 0;
+    NPObject* npObj = NPVARIANT_TO_OBJECT(value);
+    if (!npObj || npObj->_class != &CppNPObject::npClass)
+        return 0;
+    CppNPObject* obj = reinterpret_cast<CppNPObject*>(npObj);
+    return obj->boundClass;
+}
+
 CppVariant* CppBoundClass::getAsCppVariant()
 {
     if (!m_selfVariant.isObject()) {
diff --git a/WebKitTools/DumpRenderTree/chromium/CppBoundClass.h b/WebKitTools/DumpRenderTree/chromium/CppBoundClass.h
index 6cb638e..3e271f9 100644
--- a/WebKitTools/DumpRenderTree/chromium/CppBoundClass.h
+++ b/WebKitTools/DumpRenderTree/chromium/CppBoundClass.h
@@ -85,6 +85,10 @@ public:
     CppBoundClass() : m_boundToFrame(false) {}
     virtual ~CppBoundClass();
 
+    // Return the CppBoundClass bound to a CppVariant if it exists. Returns null
+    // otherwise.
+    static CppBoundClass* getFromCppVariant(const CppVariant&);
+
     // Return a CppVariant representing this class, for use with BindProperty().
     // The variant type is guaranteed to be NPVariantType_Object.
     CppVariant* getAsCppVariant();

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list