public:
PassRefPtr<Touch> createTouch(DOMWindow* view, EventTarget* target, long identifier, long pageX, long pageY, long screenX, long screenY, ExceptionCode&);
PassRefPtr<TouchList> createTouchList(ExceptionCode&);
typedef HashCountedSet<Node*> TouchListenerMap;
void setInTouchEventHandling(bool handling);
void addTouchEventListener(Node*);
void removeTouchEventListener(Node*, bool removeAll = false);
void dirtyTouchEventRects();
void clearTouchEventListeners();
const TouchListenerMap& touchEventListeners() const;
void getTouchRects(Vector<IntRect>&);
private:
void setTouchEventListenersDirty(bool);
IntRect eventRectRelativeToRoot(Node*, RenderObject*);
void touchEventsChangedTimerFired(Timer<Document>*);
void checkChildRenderers(RenderObject*, const IntRect& containingRect, Vector<IntRect>& nodeRects);
void removeTouchEventListenersInDocument(Document*);
typedef HashMap< RefPtr<Node>, Vector<IntRect> > TouchEventRectMap;
bool m_handlingTouchEvent;
bool m_touchEventRegionsDirty;
TouchListenerMap m_touchEventListenersCounts;
TouchEventRectMap m_touchEventRects;
Mutex m_touchEventsRectMutex;
Timer<Document> m_touchEventsChangedTimer;
public: