[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

jhoneycutt at apple.com jhoneycutt at apple.com
Thu Feb 4 21:20:51 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 555d8dc3101a05936cf4a61b319838af9c06a186
Author: jhoneycutt at apple.com <jhoneycutt at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 20 01:43:26 2010 +0000

    MSAA: The child <option> elements of a non-multiple <select> are not
    exposed
    
    https://bugs.webkit.org/show_bug.cgi?id=33773
    <rdar://problem/7550556>
    
    WebCore:
    
    Reviewed by Alice Liu.
    
    This exposes the child <option> elements in a format similar to
    Firefox's: the <select> element has one child, a hidden list object,
    and this list has as its children the <option> elements.
    
    * GNUmakefile.am:
    * WebCore.gypi:
    * WebCore.vcproj/WebCore.vcproj:
    * WebCore.xcodeproj/project.pbxproj:
    Add new files to project.
    
    * accessibility/AXObjectCache.cpp:
    (WebCore::AXObjectCache::getOrCreate):
    If the element is a RenderMenuList, create an AccessibilityMenuList.
    (WebCore::AXObjectCache::getOrCreate):
    Add new types to create by role value.
    
    * accessibility/AccessibilityMenuList.cpp: Added.
    (WebCore::AccessibilityMenuList::AccessibilityMenuList):
    Call the base class constructor. Assert that the RenderObject passed
    is a RenderMenuList.
    (WebCore::AccessibilityMenuList::press):
    Show or hide the popup menu.
    (WebCore::AccessibilityMenuList::addChildren):
    Create an AccessibilityMenuListPopup. If the platform ignores its
    accessibility, remove it from the object cache and return early.
    Otherwise, set its parent object to this object, add it to our list of
    children, and tell it to add its children.
    (WebCore::AccessibilityMenuList::childrenChanged):
    Tell our child hidden list that its children changed.
    (WebCore::AccessibilityMenuList::isCollapsed):
    Return whether the popup menu is visible.
    
    * accessibility/AccessibilityMenuList.h: Added.
    (WebCore::AccessibilityMenuList::create):
    Adopt and return a new RenderMenuList.
    (WebCore::AccessibilityMenuList::isMenuList):
    (WebCore::AccessibilityMenuList::roleValue):
    (WebCore::AccessibilityMenuList::accessibilityIsIgnored):
    (WebCore::AccessibilityMenuList::canSetFocusAttribute):
    
    * accessibility/AccessibilityMenuListOption.cpp: Added.
    (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
    Initialize the pointer to our parent popup menu.
    (WebCore::AccessibilityMenuListOption::setElement):
    Assert that the element is an <option> element.
    (WebCore::AccessibilityMenuListOption::actionElement):
    Return our element.
    (WebCore::AccessibilityMenuListOption::parentObject):
    Return our parent popup menu.
    (WebCore::AccessibilityMenuListOption::isEnabled):
    Return true if the element itself is enabled.
    (WebCore::AccessibilityMenuListOption::isVisible):
    Return true if the popup is visible, or return true if the popup is
    collapsed but the element is selected.
    (WebCore::AccessibilityMenuListOption::isOffScreen):
    Return true if the object is invisible.
    (WebCore::AccessibilityMenuListOption::isSelected):
    (WebCore::AccessibilityMenuListOption::setSelected):
    (WebCore::AccessibilityMenuListOption::nameForMSAA):
    Return the <option> element's text.
    (WebCore::AccessibilityMenuListOption::canSetSelectedAttribute):
    Return true if enabled.
    (WebCore::AccessibilityMenuListOption::elementRect):
    Return the AccessibilityMenuList's rect.
    
    * accessibility/AccessibilityMenuListOption.h: Added.
    (WebCore::AccessibilityMenuListOption::create):
    Adopt and return a new AccessibilityMenuListOption.
    (WebCore::AccessibilityMenuListOption::setParent):
    (WebCore::AccessibilityMenuListOption::isMenuListOption):
    (WebCore::AccessibilityMenuListOption::roleValue):
    (WebCore::AccessibilityMenuListOption::canHaveChildren):
    (WebCore::AccessibilityMenuListOption::size):
    
    * accessibility/AccessibilityMenuListPopup.cpp: Added.
    (WebCore::AccessibilityMenuListPopup::AccessibilityMenuListPopup):
    Initialize the pointer to our parent list.
    (WebCore::AccessibilityMenuListPopup::isVisible):
    Return false; we're never considered visible.
    (WebCore::AccessibilityMenuListPopup::isOffScreen):
    Return true if the popup is collapsed.
    (WebCore::AccessibilityMenuListPopup::parentObject):
    Return our parent AccessibilityMenuList.
    (WebCore::AccessibilityMenuListPopup::isEnabled):
    Return true if our parent is enabled.
    (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
    If the element is an <option> element, create a list item for it, and
    set the object's element to this element.
    (WebCore::AccessibilityMenuListPopup::press):
    Call our parent's press() function to show or hide the popup menu.
    (WebCore::AccessibilityMenuListPopup::addChildren):
    Walk the select element's children, and create list items for them. Add
    them to our list of children.
    (WebCore::AccessibilityMenuListPopup::childrenChanged):
    If any of our children have been detached from the document, remove
    them from the AXObjectCache and from our child list.
    (WebCore::AccessibilityMenuListPopup::setMenuList):
    
    * accessibility/AccessibilityMenuListPopup.h: Added.
    (WebCore::AccessibilityMenuListPopup::create):
    Adopt and return an AccessibilityMenuListPopup.
    (WebCore::AccessibilityMenuListPopup::isMenuListPopup):
    (WebCore::AccessibilityMenuListPopup::elementRect):
    (WebCore::AccessibilityMenuListPopup::size):
    (WebCore::AccessibilityMenuListPopup::roleValue):
    
    * accessibility/AccessibilityObject.cpp:
    (WebCore::AccessibilityObject::actionVerb):
    Add the menuListAction and menuListPopupAction verbs.
    
    * accessibility/AccessibilityObject.h:
    (WebCore::):
    Add new roles.
    (WebCore::AccessibilityObject::isMenuList):
    Stubbed.
    (WebCore::AccessibilityObject::isMenuListHiddenList):
    Stubbed.
    (WebCore::AccessibilityObject::isMenuListOption):
    Stubbed.
    (WebCore::AccessibilityObject::isVisible):
    Stubbed.
    
    * accessibility/chromium/AccessibilityObjectChromium.cpp:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    Ignore the new object type.
    
    * accessibility/gtk/AccessibilityObjectAtk.cpp:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    Ditto.
    
    * accessibility/mac/AccessibilityObjectMac.mm:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    Ditto.
    
    * accessibility/qt/AccessibilityObjectQt.cpp:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    Ditto.
    
    * accessibility/win/AccessibilityObjectWin.cpp:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    Allow the new object types.
    
    * accessibility/wx/AccessibilityObjectWx.cpp:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    Ignore the new object type.
    
    * accessibility/win/AccessibilityObjectWin.cpp:
    (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
    If the object is an AccessibilityMenuListHiddenList or
    AccessibilityMenuListOption, include it.
    
    * html/HTMLOptionElement.cpp:
    (WebCore::HTMLOptionElement::disabled):
    Call ownElementDisabled().
    
    * html/HTMLOptionElement.h:
    (WebCore::HTMLOptionElement::ownElementDisabled):
    Return the base class implementation of disabled, which returns
    whether this <option> itself is disabled.
    
    * platform/LocalizedStrings.h:
    Declare new localized string functions.
    
    * platform/gtk/LocalizedStringsGtk.cpp:
    (WebCore::AXMenuListPopupActionVerb):
    Stubbed.
    (WebCore::AXMenuListActionVerb):
    Stubbed.
    
    * platform/haiku/LocalizedStringsHaiku.cpp:
    (WebCore::AXMenuListPopupActionVerb):
    Stubbed.
    (WebCore::AXMenuListActionVerb):
    Stubbed.
    
    * platform/mac/LocalizedStringsMac.mm:
    (WebCore::AXMenuListPopupActionVerb):
    Call the view factory's method.
    (WebCore::AXMenuListActionVerb):
    Ditto.
    
    * platform/qt/Localizations.cpp:
    (WebCore::AXMenuListPopupActionVerb):
    Stubbed.
    (WebCore::AXMenuListActionVerb):
    Stubbed.
    
    * platform/wx/LocalizedStringsWx.cpp:
    (WebCore::AXMenuListPopupActionVerb):
    Stubbed.
    (WebCore::AXMenuListActionVerb):
    Stubbed.
    
    WebKit:
    
    Reviewed by Alice Liu.
    
    * English.lproj/Localizable.strings:
    Add new localized strings.
    
    WebKit/mac:
    
    * WebCoreSupport/WebViewFactory.mm:
    (-[WebViewFactory AXMenuListPopupActionVerb]):
    Stubbed.
    (-[WebViewFactory AXMenuListActionVerb]):
    Stubbed.
    
    WebKit/win:
    
    Reviewed by Alice Liu.
    
    * AccessibleBase.cpp:
    (AccessibleBase::get_accState):
    If the object is invisible, set the invisible state flag. If the object
    is collapsed, set the collapsed state. If the object is a combo box,
    set the has popup flag, and if it's not collapsed, set the expanded
    flag.
    (MSAARole):
    Add new WebCore to MSAA role mappings.
    
    * WebCoreLocalizedStrings.cpp:
    (WebCore::AXMenuListActionVerb):
    Return the action verb that Firefox uses for <select> elements with
    popups.
    (WebCore::AXMenuListPopupActionVerb):
    Return the verb that Firefox uses for a popup list.
    
    WebKitTools:
    
    Reviewed by Alice Liu.
    
    * DumpRenderTree/AccessibilityUIElement.cpp:
    (getIsVisibleCallback):
    Call the object's isVisible() function.
    (getIsOffScreenCallback):
    Ditto, for isOffScreen().
    (getIsCollapsedCallback):
    Ditto, for isCollapsed().
    (getHasPopupCallback):
    Ditto, for hasPopup().
    (AccessibilityUIElement::getJSClass):
    Add isVisible and isOffScreen attributes.
    
    * DumpRenderTree/AccessibilityUIElement.h:
    Declare new functions.
    
    * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
    (AccessibilityUIElement::isVisible):
    Stubbed.
    (AccessibilityUIElement::isOffScreen):
    Stubbed.
    (AccessibilityUIElement::isCollapsed):
    Stubbed.
    (AccessibilityUIElement::hasPopup):
    Stubbed.
    
    * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
    (AccessibilityUIElement::isVisible):
    Stubbed.
    (AccessibilityUIElement::isOffScreen):
    Stubbed.
    (AccessibilityUIElement::isCollapsed):
    Stubbed.
    (AccessibilityUIElement::hasPopup):
    Stubbed.
    
    * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
    (AccessibilityUIElement::showMenu):
    Call the object's accDoDefaultAction() to show its popup menu.
    (AccessibilityUIElement::isEnabled):
    Check that the object does not have the "unavailable" state.
    (AccessibilityUIElement::isVisible):
    Check that the object does not have the "invisible" state.
    (AccessibilityUIElement::isOffScreen):
    Check whether the object has the "offscreen" state.
    (AccessibilityUIElement::isCollapsed):
    Check whether the object has the "collapsed" state.
    (AccessibilityUIElement::hasPopup):
    Check whether the object has the "has popup" state.
    
    LayoutTests:
    
    Reviewed by Alice Liu.
    
    * platform/win/accessibility/single-select-children-expected.txt: Added.
    * platform/win/accessibility/single-select-children.html: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53512 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 6887832..308c067 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,16 @@
+2010-01-17  Jon Honeycutt  <jhoneycutt at apple.com>
+
+        MSAA: The child <option> elements of a non-multiple <select> are not
+        exposed
+
+        https://bugs.webkit.org/show_bug.cgi?id=33773
+        <rdar://problem/7550556>
+
+        Reviewed by Alice Liu.
+
+        * platform/win/accessibility/single-select-children-expected.txt: Added.
+        * platform/win/accessibility/single-select-children.html: Added.
+
 2010-01-19  Simon Fraser  <simon.fraser at apple.com>
 
         Reviewed by Dan Bernstein.
diff --git a/LayoutTests/platform/win/accessibility/single-select-children-expected.txt b/LayoutTests/platform/win/accessibility/single-select-children-expected.txt
new file mode 100644
index 0000000..5ff39d4
--- /dev/null
+++ b/LayoutTests/platform/win/accessibility/single-select-children-expected.txt
@@ -0,0 +1,171 @@
+
+This tests that non-multiple select elements expose their list options.
+
+
+PASS selectElement.role is "combo box"
+PASS selectElement.isMultiSelectable is false
+PASS selectElement.isCollapsed is true
+PASS selectElement.hasPopup is true
+
+PASS list.role is "list"
+PASS list.isVisible is false
+PASS list.isOffScreen is true
+
+option.title: Option 1
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: false
+option.isEnabled: true
+option.isVisible: true
+option.isSelected: true
+option.isSelectable: true
+
+option.title: Option 2
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: true
+option.isEnabled: true
+option.isVisible: false
+option.isSelected: false
+option.isSelectable: true
+
+option.title: Option 3
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: true
+option.isEnabled: false
+option.isVisible: false
+option.isSelected: false
+option.isSelectable: false
+
+---
+
+option.title: Option 1
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: true
+option.isEnabled: true
+option.isVisible: false
+option.isSelected: false
+option.isSelectable: true
+
+option.title: Option 2
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: false
+option.isEnabled: true
+option.isVisible: true
+option.isSelected: true
+option.isSelectable: true
+
+option.title: Option 3
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: true
+option.isEnabled: false
+option.isVisible: false
+option.isSelected: false
+option.isSelectable: false
+
+---
+
+option.title: Option 1
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: false
+option.isEnabled: true
+option.isVisible: true
+option.isSelected: true
+option.isSelectable: true
+
+option.title: Option 2
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: true
+option.isEnabled: true
+option.isVisible: false
+option.isSelected: false
+option.isSelectable: true
+
+option.title: Option 3
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: true
+option.isEnabled: false
+option.isVisible: false
+option.isSelected: false
+option.isSelectable: false
+
+---
+
+PASS selectElement.isCollapsed is false
+PASS list.isOffScreen is false
+
+option.title: Option 1
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: false
+option.isEnabled: true
+option.isVisible: true
+option.isSelected: true
+option.isSelectable: true
+
+option.title: Option 2
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: false
+option.isEnabled: true
+option.isVisible: true
+option.isSelected: false
+option.isSelectable: true
+
+option.title: Option 3
+option.role: list item
+option.width: 78
+option.height: 22
+option.x: -790
+option.y: -591
+option.isOffScreen: false
+option.isEnabled: false
+option.isVisible: true
+option.isSelected: false
+option.isSelectable: false
+
+---
+
+PASS option.width != 0 is true
+PASS option.width == 0 is true
+
diff --git a/LayoutTests/platform/win/accessibility/single-select-children.html b/LayoutTests/platform/win/accessibility/single-select-children.html
new file mode 100644
index 0000000..f32ddd1
--- /dev/null
+++ b/LayoutTests/platform/win/accessibility/single-select-children.html
@@ -0,0 +1,84 @@
+<html>
+<head>
+    <link rel="stylesheet" href="../../../fast/js/resources/js-test-style.css">
+    <script src="../../../fast/js/resources/js-test-pre.js"></script>
+</head>
+
+<body id="body">
+
+<select id="selectElement" title="selectElement">
+    <option SELECTED>Option 1</option>
+    <option>Option 2</option>
+    <option DISABLED>Option 3</option>
+</select>
+
+<p>This tests that non-multiple select elements expose their list options.</p>
+
+<p id="notDRT">This test should only be run inside of DumpRenderTree.</p>
+
+<p id="console"></p>
+
+<script>
+    function dumpListOptionAttributes(list) {
+        for (var i = 0; i < list.childrenCount; ++i) {
+            var option = list.childAtIndex(i);
+            debug('option.title: ' + option.title);
+            debug('option.role: ' + option.role);
+            debug('option.width: ' + option.width);
+            debug('option.height: ' + option.height);
+            debug('option.x: ' + option.x);
+            debug('option.y: ' + option.y);
+            debug('option.isOffScreen: ' + option.isOffScreen);
+            debug('option.isEnabled: ' + option.isEnabled);
+            debug('option.isVisible: ' + option.isVisible);
+            debug('option.isSelected: ' + option.isSelected);
+            debug('option.isSelectable: ' + option.isSelectable);
+            debug("");
+        }
+        debug("---\n");
+    }
+    if (window.layoutTestController && window.accessibilityController) {
+        document.getElementById("notDRT").style.visibility = "hidden";
+
+        layoutTestController.dumpAsText();
+
+        document.getElementById("selectElement").focus();
+        var selectElement = accessibilityController.focusedElement;
+        shouldBe('selectElement.role', '"combo box"');
+        shouldBeFalse('selectElement.isMultiSelectable');
+        shouldBeTrue('selectElement.isCollapsed');
+        shouldBeTrue('selectElement.hasPopup');
+        debug("");
+
+        var list = accessibilityController.focusedElement.childAtIndex(0);
+        shouldBe('list.role', '"list"');
+        shouldBeFalse('list.isVisible');
+        shouldBeTrue('list.isOffScreen');
+        debug("");
+
+        dumpListOptionAttributes(list);
+
+        document.getElementById("selectElement").selectedIndex = 1;
+        dumpListOptionAttributes(list);
+
+        document.getElementById("selectElement").selectedIndex = 0;
+        document.getElementById("selectElement").disabled = true;
+        dumpListOptionAttributes(list);
+
+        document.getElementById("selectElement").disabled = false;
+        selectElement.showMenu();
+        shouldBeFalse('selectElement.isCollapsed');
+        shouldBeFalse('list.isOffScreen');
+        debug("");
+
+        dumpListOptionAttributes(list);
+
+        // Test that accessing a detached <option> does not crash.
+        var option = list.childAtIndex(0);
+        shouldBeTrue('option.width != 0');
+        document.getElementById("selectElement").options[0] = null;
+        shouldBeTrue('option.width == 0');
+    }
+</script>
+</body>
+</html>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c098af7..e296c10 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,206 @@
+2010-01-17  Jon Honeycutt  <jhoneycutt at apple.com>
+
+        MSAA: The child <option> elements of a non-multiple <select> are not
+        exposed
+
+        https://bugs.webkit.org/show_bug.cgi?id=33773
+        <rdar://problem/7550556>
+
+        Reviewed by Alice Liu.
+
+        This exposes the child <option> elements in a format similar to
+        Firefox's: the <select> element has one child, a hidden list object,
+        and this list has as its children the <option> elements.
+
+        * GNUmakefile.am:
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCore.vcproj:
+        * WebCore.xcodeproj/project.pbxproj:
+        Add new files to project.
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::AXObjectCache::getOrCreate):
+        If the element is a RenderMenuList, create an AccessibilityMenuList.
+        (WebCore::AXObjectCache::getOrCreate):
+        Add new types to create by role value.
+
+        * accessibility/AccessibilityMenuList.cpp: Added.
+        (WebCore::AccessibilityMenuList::AccessibilityMenuList):
+        Call the base class constructor. Assert that the RenderObject passed
+        is a RenderMenuList.
+        (WebCore::AccessibilityMenuList::press):
+        Show or hide the popup menu.
+        (WebCore::AccessibilityMenuList::addChildren):
+        Create an AccessibilityMenuListPopup. If the platform ignores its
+        accessibility, remove it from the object cache and return early.
+        Otherwise, set its parent object to this object, add it to our list of
+        children, and tell it to add its children.
+        (WebCore::AccessibilityMenuList::childrenChanged):
+        Tell our child hidden list that its children changed.
+        (WebCore::AccessibilityMenuList::isCollapsed):
+        Return whether the popup menu is visible.
+
+        * accessibility/AccessibilityMenuList.h: Added.
+        (WebCore::AccessibilityMenuList::create):
+        Adopt and return a new RenderMenuList.
+        (WebCore::AccessibilityMenuList::isMenuList):
+        (WebCore::AccessibilityMenuList::roleValue):
+        (WebCore::AccessibilityMenuList::accessibilityIsIgnored):
+        (WebCore::AccessibilityMenuList::canSetFocusAttribute):
+
+        * accessibility/AccessibilityMenuListOption.cpp: Added.
+        (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
+        Initialize the pointer to our parent popup menu.
+        (WebCore::AccessibilityMenuListOption::setElement):
+        Assert that the element is an <option> element.
+        (WebCore::AccessibilityMenuListOption::actionElement):
+        Return our element.
+        (WebCore::AccessibilityMenuListOption::parentObject):
+        Return our parent popup menu.
+        (WebCore::AccessibilityMenuListOption::isEnabled):
+        Return true if the element itself is enabled.
+        (WebCore::AccessibilityMenuListOption::isVisible):
+        Return true if the popup is visible, or return true if the popup is
+        collapsed but the element is selected.
+        (WebCore::AccessibilityMenuListOption::isOffScreen):
+        Return true if the object is invisible.
+        (WebCore::AccessibilityMenuListOption::isSelected):
+        (WebCore::AccessibilityMenuListOption::setSelected):
+        (WebCore::AccessibilityMenuListOption::nameForMSAA):
+        Return the <option> element's text.
+        (WebCore::AccessibilityMenuListOption::canSetSelectedAttribute):
+        Return true if enabled.
+        (WebCore::AccessibilityMenuListOption::elementRect):
+        Return the AccessibilityMenuList's rect.
+
+        * accessibility/AccessibilityMenuListOption.h: Added.
+        (WebCore::AccessibilityMenuListOption::create):
+        Adopt and return a new AccessibilityMenuListOption.
+        (WebCore::AccessibilityMenuListOption::setParent):
+        (WebCore::AccessibilityMenuListOption::isMenuListOption):
+        (WebCore::AccessibilityMenuListOption::roleValue):
+        (WebCore::AccessibilityMenuListOption::canHaveChildren):
+        (WebCore::AccessibilityMenuListOption::size):
+
+        * accessibility/AccessibilityMenuListPopup.cpp: Added.
+        (WebCore::AccessibilityMenuListPopup::AccessibilityMenuListPopup):
+        Initialize the pointer to our parent list.
+        (WebCore::AccessibilityMenuListPopup::isVisible):
+        Return false; we're never considered visible.
+        (WebCore::AccessibilityMenuListPopup::isOffScreen):
+        Return true if the popup is collapsed.
+        (WebCore::AccessibilityMenuListPopup::parentObject):
+        Return our parent AccessibilityMenuList.
+        (WebCore::AccessibilityMenuListPopup::isEnabled):
+        Return true if our parent is enabled.
+        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
+        If the element is an <option> element, create a list item for it, and
+        set the object's element to this element.
+        (WebCore::AccessibilityMenuListPopup::press):
+        Call our parent's press() function to show or hide the popup menu.
+        (WebCore::AccessibilityMenuListPopup::addChildren):
+        Walk the select element's children, and create list items for them. Add
+        them to our list of children.
+        (WebCore::AccessibilityMenuListPopup::childrenChanged):
+        If any of our children have been detached from the document, remove
+        them from the AXObjectCache and from our child list.
+        (WebCore::AccessibilityMenuListPopup::setMenuList):
+
+        * accessibility/AccessibilityMenuListPopup.h: Added.
+        (WebCore::AccessibilityMenuListPopup::create):
+        Adopt and return an AccessibilityMenuListPopup.
+        (WebCore::AccessibilityMenuListPopup::isMenuListPopup):
+        (WebCore::AccessibilityMenuListPopup::elementRect):
+        (WebCore::AccessibilityMenuListPopup::size):
+        (WebCore::AccessibilityMenuListPopup::roleValue):
+
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::actionVerb):
+        Add the menuListAction and menuListPopupAction verbs.
+
+        * accessibility/AccessibilityObject.h:
+        (WebCore::):
+        Add new roles.
+        (WebCore::AccessibilityObject::isMenuList):
+        Stubbed.
+        (WebCore::AccessibilityObject::isMenuListHiddenList):
+        Stubbed.
+        (WebCore::AccessibilityObject::isMenuListOption):
+        Stubbed.
+        (WebCore::AccessibilityObject::isVisible):
+        Stubbed.
+
+        * accessibility/chromium/AccessibilityObjectChromium.cpp:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        Ignore the new object type.
+
+        * accessibility/gtk/AccessibilityObjectAtk.cpp:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        Ditto.
+
+        * accessibility/mac/AccessibilityObjectMac.mm:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        Ditto.
+
+        * accessibility/qt/AccessibilityObjectQt.cpp:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        Ditto.
+
+        * accessibility/win/AccessibilityObjectWin.cpp:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        Allow the new object types.
+
+        * accessibility/wx/AccessibilityObjectWx.cpp:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        Ignore the new object type.
+
+        * accessibility/win/AccessibilityObjectWin.cpp:
+        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
+        If the object is an AccessibilityMenuListHiddenList or
+        AccessibilityMenuListOption, include it.
+
+        * html/HTMLOptionElement.cpp:
+        (WebCore::HTMLOptionElement::disabled):
+        Call ownElementDisabled().
+
+        * html/HTMLOptionElement.h:
+        (WebCore::HTMLOptionElement::ownElementDisabled):
+        Return the base class implementation of disabled, which returns
+        whether this <option> itself is disabled.
+
+        * platform/LocalizedStrings.h:
+        Declare new localized string functions.
+
+        * platform/gtk/LocalizedStringsGtk.cpp:
+        (WebCore::AXMenuListPopupActionVerb):
+        Stubbed.
+        (WebCore::AXMenuListActionVerb):
+        Stubbed.
+
+        * platform/haiku/LocalizedStringsHaiku.cpp:
+        (WebCore::AXMenuListPopupActionVerb):
+        Stubbed.
+        (WebCore::AXMenuListActionVerb):
+        Stubbed.
+
+        * platform/mac/LocalizedStringsMac.mm:
+        (WebCore::AXMenuListPopupActionVerb):
+        Call the view factory's method.
+        (WebCore::AXMenuListActionVerb):
+        Ditto.
+
+        * platform/qt/Localizations.cpp:
+        (WebCore::AXMenuListPopupActionVerb):
+        Stubbed.
+        (WebCore::AXMenuListActionVerb):
+        Stubbed.
+
+        * platform/wx/LocalizedStringsWx.cpp:
+        (WebCore::AXMenuListPopupActionVerb):
+        Stubbed.
+        (WebCore::AXMenuListActionVerb):
+        Stubbed.
+
 2010-01-19  Simon Fraser  <simon.fraser at apple.com>
 
         Reviewed by Dan Bernstein.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index ad72cab..7651ca7 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -316,6 +316,12 @@ webcore_sources += \
 	WebCore/accessibility/AccessibilityListBoxOption.h \
 	WebCore/accessibility/AccessibilityMediaControls.cpp \
 	WebCore/accessibility/AccessibilityMediaControls.h \
+	WebCore/accessibility/AccessibilityMenuList.cpp \
+	WebCore/accessibility/AccessibilityMenuList.h \
+	WebCore/accessibility/AccessibilityMenuListPopup.cpp \
+	WebCore/accessibility/AccessibilityMenuListPopup.h \
+	WebCore/accessibility/AccessibilityMenuListOption.cpp \
+	WebCore/accessibility/AccessibilityMenuListOption.h \
 	WebCore/accessibility/AccessibilityObject.cpp \
 	WebCore/accessibility/AccessibilityObject.h \
 	WebCore/accessibility/AccessibilityRenderObject.cpp \
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index aa5f59b..4feb4c6 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -403,6 +403,12 @@
             'accessibility/AccessibilityListBoxOption.h',
             'accessibility/AccessibilityMediaControls.cpp',
             'accessibility/AccessibilityMediaControls.h',
+            'accessibility/AccessibilityMenuList.cpp',
+            'accessibility/AccessibilityMenuList.h',
+            'accessibility/AccessibilityMenuListPopup.cpp',
+            'accessibility/AccessibilityMenuListPopup.h',
+            'accessibility/AccessibilityMenuListOption.cpp',
+            'accessibility/AccessibilityMenuListOption.h',
             'accessibility/AccessibilityObject.cpp',
             'accessibility/AccessibilityObject.h',
             'accessibility/AccessibilityRenderObject.cpp',
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index aa36239..8c4d209 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -19937,6 +19937,30 @@
 				>
 			</File>
 			<File
+				RelativePath="..\accessibility\AccessibilityMenuList.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\accessibility\AccessibilityMenuList.h"
+				>
+			</File>
+			<File
+				RelativePath="..\accessibility\AccessibilityMenuListOption.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\accessibility\AccessibilityMenuListOption.h"
+				>
+			</File>
+			<File
+				RelativePath="..\accessibility\AccessibilityMenuListPopup.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\accessibility\AccessibilityMenuListPopup.h"
+				>
+			</File>
+			<File
 				RelativePath="..\accessibility\AccessibilityObject.cpp"
 				>
 				<FileConfiguration
@@ -42007,7 +42031,7 @@
 					RelativePath="..\ForwardingHeaders\runtime\UString.h"
 					>
 				</File>
-                <File
+				<File
 					RelativePath="..\ForwardingHeaders\runtime\UStringImpl.h"
 					>
 				</File>
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index d49960e..efa8e81 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -1252,6 +1252,12 @@
 		7693BAD3106C2DCA007B0823 /* PluginHalter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7693BACF106C2DCA007B0823 /* PluginHalter.cpp */; };
 		7693BAD4106C2DCA007B0823 /* PluginHalter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7693BAD0106C2DCA007B0823 /* PluginHalter.h */; };
 		7693BAD5106C2DCA007B0823 /* PluginHalterClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 7693BAD1106C2DCA007B0823 /* PluginHalterClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		76CDD2F21103DA6600680521 /* AccessibilityMenuList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76CDD2EC1103DA6600680521 /* AccessibilityMenuList.cpp */; };
+		76CDD2F31103DA6600680521 /* AccessibilityMenuList.h in Headers */ = {isa = PBXBuildFile; fileRef = 76CDD2ED1103DA6600680521 /* AccessibilityMenuList.h */; };
+		76CDD2F41103DA6600680521 /* AccessibilityMenuListPopup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76CDD2EE1103DA6600680521 /* AccessibilityMenuListPopup.cpp */; };
+		76CDD2F51103DA6600680521 /* AccessibilityMenuListPopup.h in Headers */ = {isa = PBXBuildFile; fileRef = 76CDD2EF1103DA6600680521 /* AccessibilityMenuListPopup.h */; };
+		76CDD2F61103DA6600680521 /* AccessibilityMenuListOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76CDD2F01103DA6600680521 /* AccessibilityMenuListOption.cpp */; };
+		76CDD2F71103DA6600680521 /* AccessibilityMenuListOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 76CDD2F11103DA6600680521 /* AccessibilityMenuListOption.h */; };
 		79AC9218109945C80021266E /* JSCompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79AC9216109945C80021266E /* JSCompositionEvent.cpp */; };
 		79AC9219109945C80021266E /* JSCompositionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AC9217109945C80021266E /* JSCompositionEvent.h */; };
 		79F2F5A11091939A000D87CB /* CompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79F2F59E1091939A000D87CB /* CompositionEvent.cpp */; };
@@ -6623,6 +6629,12 @@
 		7693BACF106C2DCA007B0823 /* PluginHalter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginHalter.cpp; sourceTree = "<group>"; };
 		7693BAD0106C2DCA007B0823 /* PluginHalter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginHalter.h; sourceTree = "<group>"; };
 		7693BAD1106C2DCA007B0823 /* PluginHalterClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginHalterClient.h; sourceTree = "<group>"; };
+		76CDD2EC1103DA6600680521 /* AccessibilityMenuList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityMenuList.cpp; sourceTree = "<group>"; };
+		76CDD2ED1103DA6600680521 /* AccessibilityMenuList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityMenuList.h; sourceTree = "<group>"; };
+		76CDD2EE1103DA6600680521 /* AccessibilityMenuListPopup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityMenuListPopup.cpp; sourceTree = "<group>"; };
+		76CDD2EF1103DA6600680521 /* AccessibilityMenuListPopup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityMenuListPopup.h; sourceTree = "<group>"; };
+		76CDD2F01103DA6600680521 /* AccessibilityMenuListOption.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityMenuListOption.cpp; sourceTree = "<group>"; };
+		76CDD2F11103DA6600680521 /* AccessibilityMenuListOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityMenuListOption.h; sourceTree = "<group>"; };
 		79AC9216109945C80021266E /* JSCompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCompositionEvent.cpp; sourceTree = "<group>"; };
 		79AC9217109945C80021266E /* JSCompositionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCompositionEvent.h; sourceTree = "<group>"; };
 		79F2F59E1091939A000D87CB /* CompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompositionEvent.cpp; sourceTree = "<group>"; };
@@ -10605,6 +10617,12 @@
 				29A812240FBB9C1D00510293 /* AccessibilityListBoxOption.h */,
 				07B0113C1032241900FBDC33 /* AccessibilityMediaControls.cpp */,
 				07B0113E1032242200FBDC33 /* AccessibilityMediaControls.h */,
+				76CDD2EC1103DA6600680521 /* AccessibilityMenuList.cpp */,
+				76CDD2ED1103DA6600680521 /* AccessibilityMenuList.h */,
+				76CDD2EE1103DA6600680521 /* AccessibilityMenuListPopup.cpp */,
+				76CDD2EF1103DA6600680521 /* AccessibilityMenuListPopup.h */,
+				76CDD2F01103DA6600680521 /* AccessibilityMenuListOption.cpp */,
+				76CDD2F11103DA6600680521 /* AccessibilityMenuListOption.h */,
 				29A8121E0FBB9C1D00510293 /* AccessibilityObject.cpp */,
 				29A812180FBB9C1D00510293 /* AccessibilityObject.h */,
 				29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */,
@@ -18376,6 +18394,9 @@
 				599E759011055A1F00D904FA /* Bridge.h in Headers */,
 				59EE122E1106080F00885116 /* JNIUtilityPrivate.h in Headers */,
 				59EE12321106082900885116 /* JNIUtility.h in Headers */,
+				76CDD2F31103DA6600680521 /* AccessibilityMenuList.h in Headers */,
+				76CDD2F51103DA6600680521 /* AccessibilityMenuListPopup.h in Headers */,
+				76CDD2F71103DA6600680521 /* AccessibilityMenuListOption.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -20543,6 +20564,9 @@
 				599E759211055A2A00D904FA /* Bridge.cpp in Sources */,
 				59EE122C1106080500885116 /* JNIUtilityPrivate.cpp in Sources */,
 				59EE12301106081F00885116 /* JNIUtility.cpp in Sources */,
+				76CDD2F21103DA6600680521 /* AccessibilityMenuList.cpp in Sources */,
+				76CDD2F41103DA6600680521 /* AccessibilityMenuListPopup.cpp in Sources */,
+				76CDD2F61103DA6600680521 /* AccessibilityMenuListOption.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/WebCore/accessibility/AXObjectCache.cpp b/WebCore/accessibility/AXObjectCache.cpp
index 9eff5b6..7a7a4f2 100644
--- a/WebCore/accessibility/AXObjectCache.cpp
+++ b/WebCore/accessibility/AXObjectCache.cpp
@@ -37,6 +37,9 @@
 #include "AccessibilityListBox.h"
 #include "AccessibilityListBoxOption.h"
 #include "AccessibilityMediaControls.h"
+#include "AccessibilityMenuList.h"
+#include "AccessibilityMenuListPopup.h"
+#include "AccessibilityMenuListOption.h"
 #include "AccessibilityRenderObject.h"
 #include "AccessibilitySlider.h"
 #include "AccessibilityTable.h"
@@ -141,6 +144,8 @@ AccessibilityObject* AXObjectCache::getOrCreate(RenderObject* renderer)
         RefPtr<AccessibilityObject> newObj = 0;
         if (renderer->isListBox())
             newObj = AccessibilityListBox::create(renderer);
+        else if (renderer->isMenuList())
+            newObj = AccessibilityMenuList::create(renderer);
 
         // If the node is aria role="list" or the aria role is empty and its a ul/ol/dl type (it shouldn't be a list if aria says otherwise). 
         else if (node && ((nodeIsAriaType(node, "list") || nodeIsAriaType(node, "directory"))
@@ -209,6 +214,12 @@ AccessibilityObject* AXObjectCache::getOrCreate(AccessibilityRole role)
     case SliderThumbRole:
         obj = AccessibilitySliderThumb::create();
         break;
+    case MenuListPopupRole:
+        obj = AccessibilityMenuListPopup::create();
+        break;
+    case MenuListOptionRole:
+        obj = AccessibilityMenuListOption::create();
+        break;
     default:
         obj = 0;
     }
diff --git a/WebCore/accessibility/AccessibilityMenuList.cpp b/WebCore/accessibility/AccessibilityMenuList.cpp
new file mode 100644
index 0000000..05cdf97
--- /dev/null
+++ b/WebCore/accessibility/AccessibilityMenuList.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "AccessibilityMenuList.h"
+
+#include "AXObjectCache.h"
+#include "AccessibilityMenuListPopup.h"
+#include "RenderMenuList.h"
+
+namespace WebCore {
+
+AccessibilityMenuList::AccessibilityMenuList(RenderObject* renderer)
+    : AccessibilityRenderObject(renderer)
+{
+    ASSERT_ARG(renderer, renderer->isMenuList());
+}
+
+bool AccessibilityMenuList::press() const
+{
+    RenderMenuList* menuList = static_cast<RenderMenuList*>(m_renderer);
+    if (menuList->popupIsVisible())
+        menuList->hidePopup();
+    else
+        menuList->showPopup();
+    return true;
+}
+
+void AccessibilityMenuList::addChildren()
+{
+    m_haveChildren = true;
+
+    AXObjectCache* cache = m_renderer->document()->axObjectCache();
+
+    AccessibilityObject* list = cache->getOrCreate(MenuListPopupRole);
+    if (!list)
+        return;
+
+    if (list->accessibilityPlatformIncludesObject() == IgnoreObject) {
+        cache->remove(list->axObjectID());
+        return;
+    }
+
+    static_cast<AccessibilityMenuListPopup*>(list)->setMenuList(this);
+    m_children.append(list);
+
+    list->addChildren();
+}
+
+void AccessibilityMenuList::childrenChanged()
+{
+    if (m_children.isEmpty())
+        return;
+
+    ASSERT(m_children.size() == 1);
+    m_children[0]->childrenChanged();
+}
+
+bool AccessibilityMenuList::isCollapsed() const
+{
+    return !static_cast<RenderMenuList*>(m_renderer)->popupIsVisible();
+}
+
+} // namespace WebCore
diff --git a/WebCore/accessibility/AccessibilityMenuList.h b/WebCore/accessibility/AccessibilityMenuList.h
new file mode 100644
index 0000000..d00c8b4
--- /dev/null
+++ b/WebCore/accessibility/AccessibilityMenuList.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef AccessibilityMenuList_h
+#define AccessibilityMenuList_h
+
+#include "AccessibilityObject.h"
+#include "AccessibilityRenderObject.h"
+
+namespace WebCore {
+
+class AccessibilityMenuList;
+class AccessibilityMenuListPopup;
+class HTMLOptionElement;
+
+class AccessibilityMenuList : public AccessibilityRenderObject {
+public:
+    static PassRefPtr<AccessibilityMenuList> create(RenderObject* renderer) { return adoptRef(new AccessibilityMenuList(renderer)); }
+
+    virtual bool isCollapsed() const;
+    virtual bool press() const;
+
+private:
+    AccessibilityMenuList(RenderObject*);
+
+    virtual bool isMenuList() const { return true; }
+    virtual AccessibilityRole roleValue() const { return PopUpButtonRole; }
+    virtual bool accessibilityIsIgnored() const { return false; }
+    virtual bool canSetFocusAttribute() const { return true; }
+
+    virtual void addChildren();
+    virtual void childrenChanged();
+};
+
+} // namespace WebCore
+
+#endif // AccessibilityMenuList_h
diff --git a/WebCore/accessibility/AccessibilityMenuListOption.cpp b/WebCore/accessibility/AccessibilityMenuListOption.cpp
new file mode 100644
index 0000000..2a7bd91
--- /dev/null
+++ b/WebCore/accessibility/AccessibilityMenuListOption.cpp
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "AccessibilityMenuListOption.h"
+
+#include "AXObjectCache.h"
+#include "AccessibilityMenuListPopup.h"
+#include "HTMLNames.h"
+#include "HTMLOptionElement.h"
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+AccessibilityMenuListOption::AccessibilityMenuListOption()
+    : m_popup(0)
+{
+}
+
+void AccessibilityMenuListOption::setElement(HTMLElement* element)
+{
+    ASSERT_ARG(element, element->hasTagName(optionTag));
+    m_element = element;
+}
+
+Element* AccessibilityMenuListOption::actionElement() const
+{
+    return m_element.get();
+}
+
+AccessibilityObject* AccessibilityMenuListOption::parentObject() const
+{
+    return m_popup;
+}
+
+bool AccessibilityMenuListOption::isEnabled() const
+{
+    // disabled() returns true if the parent <select> element is disabled,
+    // which we don't want.
+    return !static_cast<HTMLOptionElement*>(m_element.get())->ownElementDisabled();
+}
+
+bool AccessibilityMenuListOption::isVisible() const
+{
+    // In a single-option select with the popup collapsed, only the selected
+    // item is considered visible.
+    return !m_popup->isOffScreen() || isSelected();
+}
+
+bool AccessibilityMenuListOption::isOffScreen() const
+{
+    // Invisible list options are considered to be offscreen.
+    return !isVisible();
+}
+
+bool AccessibilityMenuListOption::isSelected() const
+{
+    return static_cast<HTMLOptionElement*>(m_element.get())->selected();
+}
+
+void AccessibilityMenuListOption::setSelected(bool b)
+{
+    static_cast<HTMLOptionElement*>(m_element.get())->setSelected(b);
+}
+
+String AccessibilityMenuListOption::nameForMSAA() const
+{
+    return static_cast<HTMLOptionElement*>(m_element.get())->text();
+}
+
+bool AccessibilityMenuListOption::canSetSelectedAttribute() const
+{
+    return isEnabled();
+}
+
+IntRect AccessibilityMenuListOption::elementRect() const
+{
+    AccessibilityObject* parent = parentObject();
+    ASSERT(parent->isMenuListPopup());
+
+    AccessibilityObject* grandparent = parent->parentObject();
+    ASSERT(grandparent->isMenuList());
+
+    return grandparent->elementRect();
+}
+
+} // namespace WebCore
diff --git a/WebCore/accessibility/AccessibilityMenuListOption.h b/WebCore/accessibility/AccessibilityMenuListOption.h
new file mode 100644
index 0000000..7e27888
--- /dev/null
+++ b/WebCore/accessibility/AccessibilityMenuListOption.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef AccessibilityMenuListOption_h
+#define AccessibilityMenuListOption_h
+
+#include "AccessibilityObject.h"
+
+namespace WebCore {
+
+class AccessibilityMenuListPopup;
+class HTMLElement;
+
+class AccessibilityMenuListOption : public AccessibilityObject {
+public:
+    static PassRefPtr<AccessibilityMenuListOption> create() { return adoptRef(new AccessibilityMenuListOption); }
+
+    void setElement(HTMLElement*);
+    void setParent(AccessibilityMenuListPopup* popup) { m_popup = popup; }
+
+private:
+    AccessibilityMenuListOption();
+
+    virtual bool isMenuListOption() const { return true; }
+
+    virtual AccessibilityRole roleValue() const { return MenuListOptionRole; }
+    virtual bool canHaveChildren() const { return false; }
+    virtual IntSize size() const { return elementRect().size(); }
+
+    virtual Element* actionElement() const;
+    virtual AccessibilityObject* parentObject() const;
+    virtual bool isEnabled() const;
+    virtual bool isVisible() const;
+    virtual bool isOffScreen() const;
+    virtual bool isSelected() const;
+    virtual String nameForMSAA() const;
+    virtual void setSelected(bool);
+    virtual bool canSetSelectedAttribute() const;
+    virtual IntRect elementRect() const;
+
+    RefPtr<HTMLElement> m_element;
+    AccessibilityMenuListPopup* m_popup;
+};
+
+} // namespace WebCore
+
+#endif // AccessibilityMenuListOption_h
diff --git a/WebCore/accessibility/AccessibilityMenuListPopup.cpp b/WebCore/accessibility/AccessibilityMenuListPopup.cpp
new file mode 100644
index 0000000..48c2fab
--- /dev/null
+++ b/WebCore/accessibility/AccessibilityMenuListPopup.cpp
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "AccessibilityMenuListPopup.h"
+
+#include "AXObjectCache.h"
+#include "AccessibilityMenuList.h"
+#include "AccessibilityMenuListOption.h"
+#include "HTMLNames.h"
+#include "HTMLSelectElement.h"
+#include "RenderObject.h"
+
+namespace WebCore {
+
+using namespace HTMLNames;
+
+AccessibilityMenuListPopup::AccessibilityMenuListPopup()
+    : m_menuList(0)
+{
+}
+
+bool AccessibilityMenuListPopup::isVisible() const
+{
+    return false;
+}
+
+bool AccessibilityMenuListPopup::isOffScreen() const
+{
+    return m_menuList->isCollapsed();
+}
+
+AccessibilityObject* AccessibilityMenuListPopup::parentObject() const
+{
+    return m_menuList;
+}
+
+bool AccessibilityMenuListPopup::isEnabled() const
+{
+    return m_menuList->isEnabled();
+}
+
+AccessibilityMenuListOption* AccessibilityMenuListPopup::menuListOptionAccessibilityObject(HTMLElement* element) const
+{
+    if (!element || !element->hasTagName(optionTag))
+        return 0;
+
+    AccessibilityObject* object = m_menuList->renderer()->document()->axObjectCache()->getOrCreate(MenuListOptionRole);
+    ASSERT(object->isMenuListOption());
+
+    AccessibilityMenuListOption* option = static_cast<AccessibilityMenuListOption*>(object);
+    option->setElement(element);
+
+    return option;
+}
+
+bool AccessibilityMenuListPopup::press() const
+{
+    m_menuList->press();
+    return true;
+}
+
+void AccessibilityMenuListPopup::addChildren()
+{
+    Node* selectNode = m_menuList->renderer()->node();
+    if (!selectNode)
+        return;
+
+    m_haveChildren = true;
+
+    ASSERT(selectNode->hasTagName(selectTag));
+
+    const Vector<Element*>& listItems = static_cast<HTMLSelectElement*>(selectNode)->listItems();
+    unsigned length = listItems.size();
+    for (unsigned i = 0; i < length; i++) {
+        // The cast to HTMLElement below is safe because the only other possible listItem type
+        // would be a WMLElement, but WML builds don't use accessbility features at all.
+        AccessibilityMenuListOption* option = menuListOptionAccessibilityObject(static_cast<HTMLElement*>(listItems[i]));
+        if (option) {
+            option->setParent(this);
+            m_children.append(option);
+        }
+    }
+}
+
+void AccessibilityMenuListPopup::childrenChanged()
+{
+    for (size_t i = m_children.size(); i > 0 ; --i) {
+        AccessibilityObject* child = m_children[i - 1].get();
+        if (child->actionElement() && !child->actionElement()->attached()) {
+            m_menuList->renderer()->document()->axObjectCache()->remove(child->axObjectID());
+            m_children.remove(i - 1);
+        }
+    }
+}
+
+void AccessibilityMenuListPopup::setMenuList(AccessibilityMenuList* menuList)
+{
+    ASSERT_ARG(menuList, menuList);
+    ASSERT(!m_menuList);
+    m_menuList = menuList;
+}
+
+} // namespace WebCore
diff --git a/WebCore/accessibility/AccessibilityMenuListPopup.h b/WebCore/accessibility/AccessibilityMenuListPopup.h
new file mode 100644
index 0000000..88fbf7c
--- /dev/null
+++ b/WebCore/accessibility/AccessibilityMenuListPopup.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef AccessibilityMenuListPopup_h
+#define AccessibilityMenuListPopup_h
+
+#include "AccessibilityObject.h"
+
+namespace WebCore {
+
+class AccessibilityMenuList;
+class AccessibilityMenuListOption;
+class HTMLElement;
+
+class AccessibilityMenuListPopup : public AccessibilityObject {
+public:
+    static PassRefPtr<AccessibilityMenuListPopup> create() { return adoptRef(new AccessibilityMenuListPopup); }
+
+    void setMenuList(AccessibilityMenuList*);
+
+    virtual bool isEnabled() const;
+    virtual bool isOffScreen() const;
+
+private:
+    AccessibilityMenuListPopup();
+
+    virtual bool isMenuListPopup() const { return true; }
+
+    virtual IntRect elementRect() const { return IntRect(); }
+    virtual IntSize size() const { return IntSize(); }
+    virtual AccessibilityRole roleValue() const { return MenuListPopupRole; }
+
+    virtual bool isVisible() const;
+    virtual AccessibilityObject* parentObject() const;
+    virtual bool press() const;
+    virtual void addChildren();
+    virtual void childrenChanged();
+
+    AccessibilityMenuListOption* menuListOptionAccessibilityObject(HTMLElement*) const;
+
+    AccessibilityMenuList* m_menuList;
+};
+
+} // namespace WebCore
+
+#endif // AccessibilityMenuListPopup_h
diff --git a/WebCore/accessibility/AccessibilityObject.cpp b/WebCore/accessibility/AccessibilityObject.cpp
index 751813a..7c616ea 100644
--- a/WebCore/accessibility/AccessibilityObject.cpp
+++ b/WebCore/accessibility/AccessibilityObject.cpp
@@ -809,6 +809,8 @@ const String& AccessibilityObject::actionVerb() const
     DEFINE_STATIC_LOCAL(const String, checkedCheckBoxAction, (AXCheckedCheckBoxActionVerb()));
     DEFINE_STATIC_LOCAL(const String, uncheckedCheckBoxAction, (AXUncheckedCheckBoxActionVerb()));
     DEFINE_STATIC_LOCAL(const String, linkAction, (AXLinkActionVerb()));
+    DEFINE_STATIC_LOCAL(const String, menuListAction, (AXMenuListActionVerb()));
+    DEFINE_STATIC_LOCAL(const String, menuListPopupAction, (AXMenuListPopupActionVerb()));
     DEFINE_STATIC_LOCAL(const String, noAction, ());
 
     switch (roleValue()) {
@@ -824,6 +826,10 @@ const String& AccessibilityObject::actionVerb() const
     case LinkRole:
     case WebCoreLinkRole:
         return linkAction;
+    case PopUpButtonRole:
+        return menuListAction;
+    case MenuListPopupRole:
+        return menuListPopupAction;
     default:
         return noAction;
     }
diff --git a/WebCore/accessibility/AccessibilityObject.h b/WebCore/accessibility/AccessibilityObject.h
index d7bca67..363681d 100644
--- a/WebCore/accessibility/AccessibilityObject.h
+++ b/WebCore/accessibility/AccessibilityObject.h
@@ -170,6 +170,8 @@ enum AccessibilityRole {
     DirectoryRole,
     EditableTextRole,
     ListItemRole,
+    MenuListPopupRole,
+    MenuListOptionRole,
 
     // ARIA Grouping roles
     LandmarkApplicationRole,
@@ -283,6 +285,9 @@ public:
     virtual bool isFieldset() const { return false; }
     virtual bool isGroup() const { return false; }
     virtual bool isARIATreeGridRow() const { return false; }
+    virtual bool isMenuList() const { return false; }
+    virtual bool isMenuListPopup() const { return false; }
+    virtual bool isMenuListOption() const { return false; }
     bool isTabList() const { return roleValue() == TabListRole; }
     bool isTabItem() const { return roleValue() == TabRole; }
     bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
@@ -307,6 +312,8 @@ public:
     virtual bool isRequired() const { return false; }
     virtual bool isLinked() const { return false; }
     virtual bool isExpanded() const { return false; }
+    virtual bool isVisible() const { return true; }
+    virtual bool isCollapsed() const { return false; }
     virtual void setIsExpanded(bool) { }
 
     virtual bool canSetFocusAttribute() const { return false; }
diff --git a/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp b/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp
index 7ab7d79..0d711a0 100644
--- a/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp
+++ b/WebCore/accessibility/chromium/AccessibilityObjectChromium.cpp
@@ -36,6 +36,9 @@ bool AccessibilityObject::accessibilityIgnoreAttachment() const
 
 AccessibilityObjectPlatformInclusion AccessibilityObject::accessibilityPlatformIncludesObject() const
 {
+    if (AccessibilityMenuListPopup() || isMenuListOption())
+        return IgnoreObject;
+
     return DefaultBehavior;
 }
 
diff --git a/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp b/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp
index bc31fce..f48770f 100644
--- a/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp
+++ b/WebCore/accessibility/gtk/AccessibilityObjectAtk.cpp
@@ -38,6 +38,9 @@ AccessibilityObjectPlatformInclusion AccessibilityObject::accessibilityPlatformI
     if (!parent)
         return DefaultBehavior;
 
+    if (isMenuListPopup() || isMenuListOption())
+        return IgnoreObject;
+
     // When a list item is made up entirely of children (e.g. paragraphs)
     // the list item gets ignored. We need it.
     if (isGroup() && parent->isList())
diff --git a/WebCore/accessibility/mac/AccessibilityObjectMac.mm b/WebCore/accessibility/mac/AccessibilityObjectMac.mm
index 217af54..1807a9b 100644
--- a/WebCore/accessibility/mac/AccessibilityObjectMac.mm
+++ b/WebCore/accessibility/mac/AccessibilityObjectMac.mm
@@ -43,6 +43,9 @@ bool AccessibilityObject::accessibilityIgnoreAttachment() const
 
 AccessibilityObjectPlatformInclusion AccessibilityObject::accessibilityPlatformIncludesObject() const
 {
+    if (isMenuListPopup() || isMenuListOption())
+        return IgnoreObject;
+
     return DefaultBehavior;
 }
     
diff --git a/WebCore/accessibility/qt/AccessibilityObjectQt.cpp b/WebCore/accessibility/qt/AccessibilityObjectQt.cpp
index 07f13d4..5d85f1e 100644
--- a/WebCore/accessibility/qt/AccessibilityObjectQt.cpp
+++ b/WebCore/accessibility/qt/AccessibilityObjectQt.cpp
@@ -31,6 +31,9 @@ bool AccessibilityObject::accessibilityIgnoreAttachment() const
 
 AccessibilityObjectPlatformInclusion AccessibilityObject::accessibilityPlatformIncludesObject() const
 {
+    if (isMenuListPopup() || isMenuListOption())
+        return IgnoreObject;
+
     return DefaultBehavior;
 }
 
diff --git a/WebCore/accessibility/win/AccessibilityObjectWin.cpp b/WebCore/accessibility/win/AccessibilityObjectWin.cpp
index 895fc43..a86988f 100644
--- a/WebCore/accessibility/win/AccessibilityObjectWin.cpp
+++ b/WebCore/accessibility/win/AccessibilityObjectWin.cpp
@@ -37,6 +37,9 @@ bool AccessibilityObject::accessibilityIgnoreAttachment() const
 
 AccessibilityObjectPlatformInclusion AccessibilityObject::accessibilityPlatformIncludesObject() const
 {
+    if (isMenuListPopup() || isMenuListOption())
+        return IncludeObject;
+
     return DefaultBehavior;
 }
 
diff --git a/WebCore/accessibility/wx/AccessibilityObjectWx.cpp b/WebCore/accessibility/wx/AccessibilityObjectWx.cpp
index 07f13d4..5d85f1e 100644
--- a/WebCore/accessibility/wx/AccessibilityObjectWx.cpp
+++ b/WebCore/accessibility/wx/AccessibilityObjectWx.cpp
@@ -31,6 +31,9 @@ bool AccessibilityObject::accessibilityIgnoreAttachment() const
 
 AccessibilityObjectPlatformInclusion AccessibilityObject::accessibilityPlatformIncludesObject() const
 {
+    if (isMenuListPopup() || isMenuListOption())
+        return IgnoreObject;
+
     return DefaultBehavior;
 }
 
diff --git a/WebCore/html/HTMLOptionElement.cpp b/WebCore/html/HTMLOptionElement.cpp
index 316b192..b436667 100644
--- a/WebCore/html/HTMLOptionElement.cpp
+++ b/WebCore/html/HTMLOptionElement.cpp
@@ -213,7 +213,7 @@ String HTMLOptionElement::textIndentedToRespectGroupLabel() const
 
 bool HTMLOptionElement::disabled() const
 { 
-    return HTMLFormControlElement::disabled() || (parentNode() && static_cast<HTMLFormControlElement*>(parentNode())->disabled()); 
+    return ownElementDisabled() || (parentNode() && static_cast<HTMLFormControlElement*>(parentNode())->disabled()); 
 }
 
 void HTMLOptionElement::insertedIntoTree(bool deep)
diff --git a/WebCore/html/HTMLOptionElement.h b/WebCore/html/HTMLOptionElement.h
index 843608f..7be9e9a 100644
--- a/WebCore/html/HTMLOptionElement.h
+++ b/WebCore/html/HTMLOptionElement.h
@@ -76,6 +76,7 @@ public:
 
     virtual String textIndentedToRespectGroupLabel() const;
 
+    bool ownElementDisabled() const { return HTMLFormControlElement::disabled(); }
     virtual bool disabled() const;
     
     virtual void insertedIntoTree(bool);
diff --git a/WebCore/page/mac/WebCoreViewFactory.h b/WebCore/page/mac/WebCoreViewFactory.h
index 43f3f0a..fef856a 100644
--- a/WebCore/page/mac/WebCoreViewFactory.h
+++ b/WebCore/page/mac/WebCoreViewFactory.h
@@ -139,6 +139,8 @@
 - (NSString *)AXCheckedCheckBoxActionVerb;
 - (NSString *)AXUncheckedCheckBoxActionVerb;
 - (NSString *)AXLinkActionVerb;
+- (NSString *)AXMenuListPopupActionVerb;
+- (NSString *)AXMenuListActionVerb;
 
 - (NSString *)multipleFileUploadTextForNumberOfFiles:(unsigned)numberOfFiles;
 // FTP Directory Related
diff --git a/WebCore/platform/LocalizedStrings.h b/WebCore/platform/LocalizedStrings.h
index f7a6fa6..6ca5773 100644
--- a/WebCore/platform/LocalizedStrings.h
+++ b/WebCore/platform/LocalizedStrings.h
@@ -124,6 +124,8 @@ namespace WebCore {
     String AXTextFieldActionVerb();
     String AXCheckedCheckBoxActionVerb();
     String AXUncheckedCheckBoxActionVerb();
+    String AXMenuListActionVerb();
+    String AXMenuListPopupActionVerb();
     String AXLinkActionVerb();
 
     String multipleFileUploadText(unsigned numberOfFiles);
diff --git a/WebCore/platform/gtk/LocalizedStringsGtk.cpp b/WebCore/platform/gtk/LocalizedStringsGtk.cpp
index 2d8dfc4..e0ec3ab 100644
--- a/WebCore/platform/gtk/LocalizedStringsGtk.cpp
+++ b/WebCore/platform/gtk/LocalizedStringsGtk.cpp
@@ -326,6 +326,16 @@ String AXLinkActionVerb()
     return String::fromUTF8(_("jump"));
 }
 
+String AXMenuListPopupActionVerb()
+{
+    return String();
+}
+
+String AXMenuListActionVerb()
+{
+    return String();
+}
+
 String multipleFileUploadText(unsigned numberOfFiles)
 {
     // FIXME: If this file gets localized, this should really be localized as one string with a wildcard for the number.
diff --git a/WebCore/platform/haiku/LocalizedStringsHaiku.cpp b/WebCore/platform/haiku/LocalizedStringsHaiku.cpp
index 9bb4c3e..3b94bcb 100644
--- a/WebCore/platform/haiku/LocalizedStringsHaiku.cpp
+++ b/WebCore/platform/haiku/LocalizedStringsHaiku.cpp
@@ -292,6 +292,16 @@ String AXHeadingText()
     return String();
 }
 
+String AXMenuListPopupActionVerb()
+{
+    return String();
+}
+
+String AXMenuListActionVerb()
+{
+    return String();
+}
+
 String imageTitle(const String& filename, const IntSize& size)
 {
     return String(filename);
diff --git a/WebCore/platform/mac/LocalizedStringsMac.mm b/WebCore/platform/mac/LocalizedStringsMac.mm
index c438d6b..55fdd21 100644
--- a/WebCore/platform/mac/LocalizedStringsMac.mm
+++ b/WebCore/platform/mac/LocalizedStringsMac.mm
@@ -683,6 +683,23 @@ String AXLinkActionVerb()
     return String();
 }
 
+String AXMenuListPopupActionVerb()
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    return [[WebCoreViewFactory sharedFactory] AXMenuListPopupActionVerb];
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return String();
+}
+
+String AXMenuListActionVerb()
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    return [[WebCoreViewFactory sharedFactory] AXMenuListActionVerb];
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return String();
+}
+
+
 String multipleFileUploadText(unsigned numberOfFiles)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
diff --git a/WebCore/platform/qt/Localizations.cpp b/WebCore/platform/qt/Localizations.cpp
index e66f758..c919193 100644
--- a/WebCore/platform/qt/Localizations.cpp
+++ b/WebCore/platform/qt/Localizations.cpp
@@ -341,6 +341,16 @@ String AXLinkActionVerb()
     return String();
 }
 
+String AXMenuListPopupActionVerb()
+{
+    return String();
+}
+
+String AXMenuListActionVerb()
+{
+    return String();
+}
+
 String multipleFileUploadText(unsigned)
 {
     return String();
diff --git a/WebCore/platform/wx/LocalizedStringsWx.cpp b/WebCore/platform/wx/LocalizedStringsWx.cpp
index 6a389f2..8573482 100644
--- a/WebCore/platform/wx/LocalizedStringsWx.cpp
+++ b/WebCore/platform/wx/LocalizedStringsWx.cpp
@@ -324,6 +324,16 @@ String AXDefinitionListDefinitionText()
     return String();
 }
 
+String AXMenuListPopupActionVerb()
+{
+    return String();
+}
+
+String AXMenuListActionVerb()
+{
+    return String();
+}
+
 String validationMessageValueMissingText()
 {
     notImplemented();
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 07b094c..52963bc 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,16 @@
+2010-01-19  Jon Honeycutt  <jhoneycutt at apple.com>
+
+        MSAA: The child <option> elements of a non-multiple <select> are not
+        exposed
+
+        https://bugs.webkit.org/show_bug.cgi?id=33773
+        <rdar://problem/7550556>
+
+        Reviewed by Alice Liu.
+
+        * English.lproj/Localizable.strings:
+        Add new localized strings.
+
 2010-01-13  Kevin Decker  <kdecker at apple.com>
 
         Reviewed by Mark Rowe.
diff --git a/WebKit/English.lproj/Localizable.strings b/WebKit/English.lproj/Localizable.strings
index 370d46f..42c1386 100644
Binary files a/WebKit/English.lproj/Localizable.strings and b/WebKit/English.lproj/Localizable.strings differ
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 66fe9c0..0697a4a 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,17 @@
+2010-01-19  Jon Honeycutt  <jhoneycutt at apple.com>
+
+        MSAA: The child <option> elements of a non-multiple <select> are not
+        exposed
+
+        https://bugs.webkit.org/show_bug.cgi?id=33773
+        <rdar://problem/7550556>
+
+        * WebCoreSupport/WebViewFactory.mm:
+        (-[WebViewFactory AXMenuListPopupActionVerb]):
+        Stubbed.
+        (-[WebViewFactory AXMenuListActionVerb]):
+        Stubbed.
+
 2010-01-19  John Sullivan  <sullivan at apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=33854
diff --git a/WebKit/mac/WebCoreSupport/WebViewFactory.mm b/WebKit/mac/WebCoreSupport/WebViewFactory.mm
index 99729dc..2607f18 100644
--- a/WebKit/mac/WebCoreSupport/WebViewFactory.mm
+++ b/WebKit/mac/WebCoreSupport/WebViewFactory.mm
@@ -630,6 +630,16 @@
     return UI_STRING("jump", "Verb stating the action that will occur when a link is clicked, as used by accessibility");
 }
 
+- (NSString *)AXMenuListPopupActionVerb
+{
+    return nil;
+}
+
+- (NSString *)AXMenuListActionVerb
+{
+    return nil;
+}
+
 - (NSString *)multipleFileUploadTextForNumberOfFiles:(unsigned)numberOfFiles
 {
     return [NSString stringWithFormat:UI_STRING("%d files", "Label to describe the number of files selected in a file upload control that allows multiple files"), numberOfFiles];
diff --git a/WebKit/win/AccessibleBase.cpp b/WebKit/win/AccessibleBase.cpp
index feb6a09..930ab9f 100644
--- a/WebKit/win/AccessibleBase.cpp
+++ b/WebKit/win/AccessibleBase.cpp
@@ -292,6 +292,19 @@ HRESULT STDMETHODCALLTYPE AccessibleBase::get_accState(VARIANT vChild, VARIANT*
     if (childObj->isMultiSelectable())
         pvState->lVal |= STATE_SYSTEM_EXTSELECTABLE | STATE_SYSTEM_MULTISELECTABLE;
 
+    if (!childObj->isVisible())
+        pvState->lVal |= STATE_SYSTEM_INVISIBLE;
+
+    if (childObj->isCollapsed())
+        pvState->lVal |= STATE_SYSTEM_COLLAPSED;
+
+    if (childObj->roleValue() == PopUpButtonRole) {
+        pvState->lVal |= STATE_SYSTEM_HASPOPUP;
+
+        if (!childObj->isCollapsed())
+            pvState->lVal |= STATE_SYSTEM_EXPANDED;
+    }
+
     return S_OK;
 }
 
@@ -571,6 +584,7 @@ static long MSAARole(AccessibilityRole role)
             return ROLE_SYSTEM_GROUPING;
         case WebCore::ListRole:
         case WebCore::ListBoxRole:
+        case WebCore::MenuListPopupRole:
             return ROLE_SYSTEM_LIST;
         case WebCore::TableRole:
             return ROLE_SYSTEM_TABLE;
@@ -580,6 +594,7 @@ static long MSAARole(AccessibilityRole role)
         case WebCore::ImageMapRole:
         case WebCore::ImageRole:
             return ROLE_SYSTEM_GRAPHIC;
+        case WebCore::MenuListOptionRole:
         case WebCore::ListItemRole:
         case WebCore::ListBoxOptionRole:
             return ROLE_SYSTEM_LISTITEM;
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index 1d251f3..572cc19 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,3 +1,29 @@
+2010-01-17  Jon Honeycutt  <jhoneycutt at apple.com>
+
+        MSAA: The child <option> elements of a non-multiple <select> are not
+        exposed
+
+        https://bugs.webkit.org/show_bug.cgi?id=33773
+        <rdar://problem/7550556>
+
+        Reviewed by Alice Liu.
+
+        * AccessibleBase.cpp:
+        (AccessibleBase::get_accState):
+        If the object is invisible, set the invisible state flag. If the object
+        is collapsed, set the collapsed state. If the object is a combo box,
+        set the has popup flag, and if it's not collapsed, set the expanded
+        flag.
+        (MSAARole):
+        Add new WebCore to MSAA role mappings.
+
+        * WebCoreLocalizedStrings.cpp:
+        (WebCore::AXMenuListActionVerb):
+        Return the action verb that Firefox uses for <select> elements with
+        popups.
+        (WebCore::AXMenuListPopupActionVerb):
+        Return the verb that Firefox uses for a popup list.
+
 2010-01-19  John Sullivan  <sullivan at apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=33854
diff --git a/WebKit/win/WebCoreLocalizedStrings.cpp b/WebKit/win/WebCoreLocalizedStrings.cpp
index 020e9a7..5850605 100644
--- a/WebKit/win/WebCoreLocalizedStrings.cpp
+++ b/WebKit/win/WebCoreLocalizedStrings.cpp
@@ -92,6 +92,8 @@ String WebCore::AXTextFieldActionVerb() { return String(LPCTSTR_UI_STRING("activ
 String WebCore::AXCheckedCheckBoxActionVerb() { return String(LPCTSTR_UI_STRING("uncheck", "Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility")); }
 String WebCore::AXUncheckedCheckBoxActionVerb() { return String(LPCTSTR_UI_STRING("check", "Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility")); }
 String WebCore::AXLinkActionVerb() { return String(LPCTSTR_UI_STRING("jump", "Verb stating the action that will occur when a link is clicked, as used by accessibility")); }
+String WebCore::AXMenuListActionVerb() { return String(LPCTSTR_UI_STRING("open", "Verb stating the action that will occur when a select element is clicked, as used by accessibility")); }
+String WebCore::AXMenuListPopupActionVerb() { return String(LPCTSTR_UI_STRING("press", "Verb stating the action that will occur when a select element's popup list is clicked, as used by accessibility")); }
 String WebCore::unknownFileSizeText() { return String(LPCTSTR_UI_STRING("Unknown", "Unknown filesize FTP directory listing item")); }
 String WebCore::uploadFileText() { return String(LPCTSTR_UI_STRING("Upload file", "(Windows) Form submit file upload dialog title")); }
 String WebCore::allFilesText() { return String(LPCTSTR_UI_STRING("All Files", "(Windows) Form submit file upload all files pop-up")); }
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 3329403..855331e 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,62 @@
+2010-01-17  Jon Honeycutt  <jhoneycutt at apple.com>
+
+        MSAA: The child <option> elements of a non-multiple <select> are not
+        exposed
+
+        https://bugs.webkit.org/show_bug.cgi?id=33773
+        <rdar://problem/7550556>
+
+        Reviewed by Alice Liu.
+
+        * DumpRenderTree/AccessibilityUIElement.cpp:
+        (getIsVisibleCallback):
+        Call the object's isVisible() function.
+        (getIsOffScreenCallback):
+        Ditto, for isOffScreen().
+        (getIsCollapsedCallback):
+        Ditto, for isCollapsed().
+        (getHasPopupCallback):
+        Ditto, for hasPopup().
+        (AccessibilityUIElement::getJSClass):
+        Add isVisible and isOffScreen attributes.
+
+        * DumpRenderTree/AccessibilityUIElement.h:
+        Declare new functions.
+
+        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp:
+        (AccessibilityUIElement::isVisible):
+        Stubbed.
+        (AccessibilityUIElement::isOffScreen):
+        Stubbed.
+        (AccessibilityUIElement::isCollapsed):
+        Stubbed.
+        (AccessibilityUIElement::hasPopup):
+        Stubbed.
+
+        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
+        (AccessibilityUIElement::isVisible):
+        Stubbed.
+        (AccessibilityUIElement::isOffScreen):
+        Stubbed.
+        (AccessibilityUIElement::isCollapsed):
+        Stubbed.
+        (AccessibilityUIElement::hasPopup):
+        Stubbed.
+
+        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
+        (AccessibilityUIElement::showMenu):
+        Call the object's accDoDefaultAction() to show its popup menu.
+        (AccessibilityUIElement::isEnabled):
+        Check that the object does not have the "unavailable" state.
+        (AccessibilityUIElement::isVisible):
+        Check that the object does not have the "invisible" state.
+        (AccessibilityUIElement::isOffScreen):
+        Check whether the object has the "offscreen" state.
+        (AccessibilityUIElement::isCollapsed):
+        Check whether the object has the "collapsed" state.
+        (AccessibilityUIElement::hasPopup):
+        Check whether the object has the "has popup" state.
+
 2010-01-19  Victor Wang  <victorw at chromium.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
index ccc11a7..958d206 100644
--- a/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
+++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
@@ -512,6 +512,26 @@ static JSValueRef getIsCheckedCallback(JSContextRef context, JSObjectRef thisObj
     return JSValueMakeBoolean(context, toAXElement(thisObject)->isChecked());
 }
 
+static JSValueRef getIsVisibleCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->isVisible());
+}
+
+static JSValueRef getIsOffScreenCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->isOffScreen());
+}
+
+static JSValueRef getIsCollapsedCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->isCollapsed());
+}
+
+static JSValueRef getHasPopupCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->hasPopup());
+}
+
 static JSValueRef hierarchicalLevelCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
 {
     return JSValueMakeNumber(context, toAXElement(thisObject)->hierarchicalLevel());
@@ -601,6 +621,10 @@ JSClassRef AccessibilityUIElement::getJSClass()
         { "isMultiSelectable", getIsMultiSelectableCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "isExpanded", getIsExpandedCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "isChecked", getIsCheckedCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "isVisible", getIsVisibleCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "isOffScreen", getIsOffScreenCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "isCollapsed", getIsCollapsedCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "hasPopup", getHasPopupCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "valueDescription", getValueDescriptionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "hierarchicalLevel", hierarchicalLevelCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "documentEncoding", getDocumentEncodingCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
diff --git a/WebKitTools/DumpRenderTree/AccessibilityUIElement.h b/WebKitTools/DumpRenderTree/AccessibilityUIElement.h
index e2abb23..f5cc255 100644
--- a/WebKitTools/DumpRenderTree/AccessibilityUIElement.h
+++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.h
@@ -117,6 +117,10 @@ public:
     bool isMultiSelectable() const;
     bool isExpanded() const;
     bool isChecked() const;
+    bool isVisible() const;
+    bool isOffScreen() const;
+    bool isCollapsed() const;
+    bool hasPopup() const;
     int hierarchicalLevel() const;
     double clickPointX();
     double clickPointY();
diff --git a/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp b/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp
index c79b362..4307c6d 100644
--- a/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp
@@ -569,3 +569,27 @@ bool AccessibilityUIElement::isMultiSelectable() const
     // FIXME: implement
     return false;
 }
+
+bool AccessibilityUIElement::isVisible() const
+{
+    // FIXME: implement
+    return false;
+}
+
+bool AccessibilityUIElement::isOffScreen() const
+{
+    // FIXME: implement
+    return false;
+}
+
+bool AccessibilityUIElement::isCollapsed() const
+{
+    // FIXME: implement
+    return false;
+}
+
+bool AccessibilityUIElement::hasPopup() const
+{
+    // FIXME: implement
+    return false;
+}
diff --git a/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm b/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
index 21e450e..9eb5945 100644
--- a/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
+++ b/WebKitTools/DumpRenderTree/mac/AccessibilityUIElementMac.mm
@@ -791,3 +791,27 @@ bool AccessibilityUIElement::isMultiSelectable() const
     // FIXME: implement
     return false;
 }
+
+bool AccessibilityUIElement::isVisible() const
+{
+    // FIXME: implement
+    return false;
+}
+
+bool AccessibilityUIElement::isOffScreen() const
+{
+    // FIXME: implement
+    return false;
+}
+
+bool AccessibilityUIElement::isCollapsed() const
+{
+    // FIXME: implement
+    return false;
+}
+
+bool AccessibilityUIElement::hasPopup() const
+{
+    // FIXME: implement
+    return false;
+}
diff --git a/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp b/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp
index c8173d7..a2cf21c 100644
--- a/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp
+++ b/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp
@@ -349,7 +349,8 @@ bool AccessibilityUIElement::isActionSupported(JSStringRef action)
 
 bool AccessibilityUIElement::isEnabled()
 {
-    return false;
+    DWORD state = accessibilityState(m_element);
+    return (state & STATE_SYSTEM_UNAVAILABLE) != STATE_SYSTEM_UNAVAILABLE;
 }
 
 bool AccessibilityUIElement::isRequired() const
@@ -469,6 +470,8 @@ void AccessibilityUIElement::decrement()
 
 void AccessibilityUIElement::showMenu()
 {
+    ASSERT(hasPopup());
+    m_element->accDoDefaultAction(self());
 }
 
 AccessibilityUIElement AccessibilityUIElement::disclosedRowAtIndex(unsigned index)
@@ -544,4 +547,26 @@ bool AccessibilityUIElement::isMultiSelectable() const
     return (state & multiSelectable) == multiSelectable;
 }
 
+bool AccessibilityUIElement::isVisible() const
+{
+    DWORD state = accessibilityState(m_element);
+    return (state & STATE_SYSTEM_INVISIBLE) != STATE_SYSTEM_INVISIBLE;
+}
+
+bool AccessibilityUIElement::isOffScreen() const
+{
+    DWORD state = accessibilityState(m_element);
+    return (state & STATE_SYSTEM_OFFSCREEN) == STATE_SYSTEM_OFFSCREEN;
+}
+
+bool AccessibilityUIElement::isCollapsed() const
+{
+    DWORD state = accessibilityState(m_element);
+    return (state & STATE_SYSTEM_COLLAPSED) == STATE_SYSTEM_COLLAPSED;
+}
 
+bool AccessibilityUIElement::hasPopup() const
+{
+    DWORD state = accessibilityState(m_element);
+    return (state & STATE_SYSTEM_HASPOPUP) == STATE_SYSTEM_HASPOPUP;
+}

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list