10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Apple Inc. All rights reserved.
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * are met:
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 1.  Redistributions of source code must retain the above copyright
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     notice, this list of conditions and the following disclaimer.
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 2.  Redistributions in binary form must reproduce the above copyright
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     notice, this list of conditions and the following disclaimer in the
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     documentation and/or other materials provided with the distribution.
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     its contributors may be used to endorse or promote products derived
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *     from this software without specific prior written permission.
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h"
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "AccessibilitySlider.h"
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "AXObjectCache.h"
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLInputElement.h"
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLNames.h"
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderObject.h"
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderSlider.h"
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore {
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochusing namespace HTMLNames;
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochAccessibilitySlider::AccessibilitySlider(RenderObject* renderer)
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    : AccessibilityRenderObject(renderer)
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<AccessibilitySlider> AccessibilitySlider::create(RenderObject* renderer)
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return adoptRef(new AccessibilitySlider(renderer));
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochconst AccessibilityObject::AccessibilityChildrenVector& AccessibilitySlider::children()
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!m_haveChildren)
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        addChildren();
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return m_children;
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochAccessibilityOrientation AccessibilitySlider::orientation() const
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Default to horizontal in the unknown case.
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!m_renderer)
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return AccessibilityOrientationHorizontal;
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RenderStyle* style = m_renderer->style();
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!style)
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return AccessibilityOrientationHorizontal;
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ControlPart styleAppearance = style->appearance();
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    switch (styleAppearance) {
71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    case SliderThumbHorizontalPart:
72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    case SliderHorizontalPart:
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    case MediaSliderPart:
74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return AccessibilityOrientationHorizontal;
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    case SliderThumbVerticalPart:
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    case SliderVerticalPart:
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    case MediaVolumeSliderPart:
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return AccessibilityOrientationVertical;
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    default:
82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return AccessibilityOrientationHorizontal;
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid AccessibilitySlider::addChildren()
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(!m_haveChildren);
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_haveChildren = true;
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    AXObjectCache* cache = m_renderer->document()->axObjectCache();
932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    AccessibilitySliderThumb* thumb = static_cast<AccessibilitySliderThumb*>(cache->getOrCreate(SliderThumbRole));
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    thumb->setParentObject(this);
962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Before actually adding the value indicator to the hierarchy,
982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // allow the platform to make a final decision about it.
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (thumb->accessibilityIsIgnored())
1002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        cache->remove(thumb->axObjectID());
1012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    else
1022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_children.append(thumb);
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochconst AtomicString& AccessibilitySlider::getAttribute(const QualifiedName& attribute) const
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return element()->getAttribute(attribute);
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
109f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
110f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochAccessibilityObject* AccessibilitySlider::elementAccessibilityHitTest(const IntPoint& point) const
111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
112f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (m_children.size()) {
113f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        ASSERT(m_children.size() == 1);
114f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        if (m_children[0]->elementRect().contains(point))
115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            return m_children[0].get();
116f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
117f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return axObjectCache()->getOrCreate(m_renderer);
119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool AccessibilitySlider::accessibilityIsIgnored() const
122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    AccessibilityObjectInclusion decision = accessibilityIsIgnoredBase();
124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (decision == IncludeObject)
125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return false;
126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (decision == IgnoreObject)
127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return true;
128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return false;
130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfloat AccessibilitySlider::valueForRange() const
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return element()->value().toFloat();
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfloat AccessibilitySlider::maxValueForRange() const
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return static_cast<float>(element()->maximum());
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfloat AccessibilitySlider::minValueForRange() const
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
144f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return static_cast<float>(element()->minimum());
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid AccessibilitySlider::setValue(const String& value)
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    HTMLInputElement* input = element();
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (input->value() == value)
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return;
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    input->setValue(value);
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Fire change event manually, as RenderSlider::setValueForPosition does.
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    input->dispatchFormControlChangeEvent();
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHTMLInputElement* AccessibilitySlider::element() const
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return static_cast<HTMLInputElement*>(m_renderer->node());
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochAccessibilitySliderThumb::AccessibilitySliderThumb()
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    : m_parentSlider(0)
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<AccessibilitySliderThumb> AccessibilitySliderThumb::create()
1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return adoptRef(new AccessibilitySliderThumb());
1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochIntRect AccessibilitySliderThumb::elementRect() const
1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!m_parentSlider->renderer())
1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return IntRect();
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntRect intRect = toRenderSlider(m_parentSlider->renderer())->thumbRect();
1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatQuad floatQuad = m_parentSlider->renderer()->localToAbsoluteQuad(FloatRect(intRect));
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return floatQuad.enclosingBoundingBox();
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochIntSize AccessibilitySliderThumb::size() const
1880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return elementRect().size();
1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool AccessibilitySliderThumb::accessibilityIsIgnored() const
1932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
1942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    AccessibilityObjectInclusion decision = accessibilityPlatformIncludesObject();
1952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (decision == IncludeObject)
1962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return false;
1972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (decision == IgnoreObject)
1982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return true;
1992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return false;
2012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore
204