blob: 0624f39d069298421e97e2b49d109e25de11c15c [file] [log] [blame]
/*
* Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010, 2011 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 COMPUTER, 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 COMPUTER, 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 AXObjectCache_h
#define AXObjectCache_h
#include "core/CoreExport.h"
#include "core/dom/Document.h"
#include <memory>
typedef unsigned AXID;
namespace blink {
class AbstractInlineTextBox;
class AXObject;
class FrameView;
class HTMLOptionElement;
class HTMLSelectElement;
class LayoutMenuList;
class LineLayoutItem;
class Page;
class CORE_EXPORT AXObjectCache
: public GarbageCollectedFinalized<AXObjectCache> {
WTF_MAKE_NONCOPYABLE(AXObjectCache);
public:
static AXObjectCache* create(Document&);
static AXObject* focusedObject();
virtual ~AXObjectCache();
DEFINE_INLINE_VIRTUAL_TRACE() {}
enum AXNotification {
AXActiveDescendantChanged,
AXAlert,
AXAriaAttributeChanged,
AXAutocorrectionOccured,
AXBlur,
AXCheckedStateChanged,
AXChildrenChanged,
AXClicked,
AXDocumentSelectionChanged,
AXExpandedChanged,
AXFocusedUIElementChanged,
AXHide,
AXHover,
AXInvalidStatusChanged,
AXLayoutComplete,
AXLiveRegionChanged,
AXLoadComplete,
AXLocationChanged,
AXMenuListItemSelected,
AXMenuListItemUnselected,
AXMenuListValueChanged,
AXRowCollapsed,
AXRowCountChanged,
AXRowExpanded,
AXScrollPositionChanged,
AXScrolledToAnchor,
AXSelectedChildrenChanged,
AXSelectedTextChanged,
AXShow,
AXTextChanged,
AXTextInserted,
AXTextRemoved,
AXValueChanged
};
virtual void dispose() = 0;
virtual void selectionChanged(Node*) = 0;
virtual void childrenChanged(Node*) = 0;
virtual void childrenChanged(LayoutObject*) = 0;
virtual void checkedStateChanged(Node*) = 0;
virtual void listboxOptionStateChanged(HTMLOptionElement*) = 0;
virtual void listboxSelectedChildrenChanged(HTMLSelectElement*) = 0;
virtual void listboxActiveIndexChanged(HTMLSelectElement*) = 0;
virtual void radiobuttonRemovedFromGroup(HTMLInputElement*) = 0;
virtual void remove(LayoutObject*) = 0;
virtual void remove(Node*) = 0;
virtual void remove(AbstractInlineTextBox*) = 0;
virtual const Element* rootAXEditableElement(const Node*) = 0;
// Called by a node when text or a text equivalent (e.g. alt) attribute is
// changed.
virtual void textChanged(LayoutObject*) = 0;
// Called when a node has just been attached, so we can make sure we have the
// right subclass of AXObject.
virtual void updateCacheAfterNodeIsAttached(Node*) = 0;
virtual void handleAttributeChanged(const QualifiedName& attrName,
Element*) = 0;
virtual void handleFocusedUIElementChanged(Node* oldFocusedNode,
Node* newFocusedNode) = 0;
virtual void handleInitialFocus() = 0;
virtual void handleEditableTextContentChanged(Node*) = 0;
virtual void handleTextFormControlChanged(Node*) = 0;
virtual void handleValueChanged(Node*) = 0;
virtual void handleUpdateActiveMenuOption(LayoutMenuList*,
int optionIndex) = 0;
virtual void didShowMenuListPopup(LayoutMenuList*) = 0;
virtual void didHideMenuListPopup(LayoutMenuList*) = 0;
virtual void handleLoadComplete(Document*) = 0;
virtual void handleLayoutComplete(Document*) = 0;
virtual void handleClicked(Node*) = 0;
virtual void setCanvasObjectBounds(HTMLCanvasElement*,
Element*,
const LayoutRect&) = 0;
virtual void inlineTextBoxesUpdated(LineLayoutItem) = 0;
// Called when the scroll offset changes.
virtual void handleScrollPositionChanged(FrameView*) = 0;
virtual void handleScrollPositionChanged(LayoutObject*) = 0;
// Called when scroll bars are added / removed (as the view resizes).
virtual void handleLayoutComplete(LayoutObject*) = 0;
virtual void handleScrolledToAnchor(const Node* anchorNode) = 0;
virtual const AtomicString& computedRoleForNode(Node*) = 0;
virtual String computedNameForNode(Node*) = 0;
virtual void onTouchAccessibilityHover(const IntPoint&) = 0;
typedef AXObjectCache* (*AXObjectCacheCreateFunction)(Document&);
static void init(AXObjectCacheCreateFunction);
protected:
AXObjectCache();
private:
static AXObjectCacheCreateFunction m_createFunction;
};
class CORE_EXPORT ScopedAXObjectCache {
USING_FAST_MALLOC(ScopedAXObjectCache);
WTF_MAKE_NONCOPYABLE(ScopedAXObjectCache);
public:
static std::unique_ptr<ScopedAXObjectCache> create(Document&);
~ScopedAXObjectCache();
AXObjectCache* get();
private:
explicit ScopedAXObjectCache(Document&);
Persistent<Document> m_document;
Persistent<AXObjectCache> m_cache;
};
} // namespace blink
#endif