Chromium Code Reviews| Index: Source/core/events/EventContext.h |
| diff --git a/Source/core/events/EventContext.h b/Source/core/events/EventContext.h |
| index c51c90d4aaf84ca4b8099c63a9c71f1dd72034b7..c30ff23fbc0f1a867611170b3ebd4a870c7c8230 100644 |
| --- a/Source/core/events/EventContext.h |
| +++ b/Source/core/events/EventContext.h |
| @@ -43,9 +43,9 @@ public: |
| static PassRefPtr<TouchEventContext> create(); |
| ~TouchEventContext(); |
| void handleLocalEvents(Event*) const; |
| - TouchList* touches() { return m_touches.get(); } |
| - TouchList* targetTouches() { return m_targetTouches.get(); } |
| - TouchList* changedTouches() { return m_changedTouches.get(); } |
| + TouchList& touches() { return *m_touches; } |
| + TouchList& targetTouches() { return *m_targetTouches; } |
| + TouchList& changedTouches() { return *m_changedTouches; } |
| private: |
| TouchEventContext(); |
| @@ -55,14 +55,12 @@ private: |
| RefPtr<TouchList> m_changedTouches; |
| }; |
| -class EventContext { |
| +class SharedEventContext : public RefCounted<SharedEventContext> { |
|
dglazkov
2013/12/26 17:30:13
"Shared" is a bit too vague here. To be fair, "Eve
|
| public: |
| - // FIXME: Use ContainerNode instead of Node. |
| - EventContext(PassRefPtr<Node>, PassRefPtr<EventTarget> currentTarget); |
| - ~EventContext(); |
| + static PassRefPtr<SharedEventContext> create(TreeScope&); |
| + ~SharedEventContext(); |
| - Node* node() const { return m_node.get(); } |
| - EventTarget* currentTarget() const { return m_currentTarget.get(); } |
| + TreeScope& treeScope() const { return m_treeScope; } |
| EventTarget* target() const { return m_target.get(); } |
| void setTarget(PassRefPtr<EventTarget>); |
| @@ -75,38 +73,62 @@ public: |
| PassRefPtr<NodeList> eventPath() const { return m_eventPath; } |
| void adoptEventPath(Vector<RefPtr<Node> >&); |
| - void setEventPath(PassRefPtr<NodeList> nodeList) { m_eventPath = nodeList; } |
| - bool currentTargetSameAsTarget() const { return m_currentTarget.get() == m_target.get(); } |
| - void handleLocalEvents(Event*) const; |
| +private: |
| + SharedEventContext(TreeScope&); |
| -protected: |
| #ifndef NDEBUG |
| bool isUnreachableNode(EventTarget*); |
| #endif |
| - RefPtr<Node> m_node; |
| - RefPtr<EventTarget> m_currentTarget; |
| + |
| + TreeScope& m_treeScope; |
| RefPtr<EventTarget> m_target; |
| RefPtr<EventTarget> m_relatedTarget; |
| RefPtr<NodeList> m_eventPath; |
| RefPtr<TouchEventContext> m_touchEventContext; |
| }; |
| +class EventContext { |
| +public: |
| + // FIXME: Use ContainerNode instead of Node. |
| + EventContext(PassRefPtr<Node>, PassRefPtr<EventTarget> currentTarget); |
| + ~EventContext(); |
| + |
| + Node* node() const { return m_node.get(); } |
| + EventTarget* currentTarget() const { return m_currentTarget.get(); } |
| + |
| + SharedEventContext* sharedEventContext() const { return m_sharedEventContext.get(); } |
| + void setSharedEventContext(PassRefPtr<SharedEventContext> sharedEventContext) { m_sharedEventContext = sharedEventContext; } |
| + |
| + EventTarget* target() const { return m_sharedEventContext->target(); } |
| + EventTarget* relatedTarget() const { return m_sharedEventContext->relatedTarget(); } |
| + TouchEventContext* touchEventContext() const { return m_sharedEventContext->touchEventContext(); } |
| + PassRefPtr<NodeList> eventPath() const { return m_sharedEventContext->eventPath(); } |
| + |
| + bool currentTargetSameAsTarget() const { return m_currentTarget.get() == target(); } |
| + void handleLocalEvents(Event*) const; |
| + |
| +private: |
| + RefPtr<Node> m_node; |
| + RefPtr<EventTarget> m_currentTarget; |
| + RefPtr<SharedEventContext> m_sharedEventContext; |
| +}; |
| + |
| #ifndef NDEBUG |
| -inline bool EventContext::isUnreachableNode(EventTarget* target) |
| +inline bool SharedEventContext::isUnreachableNode(EventTarget* target) |
| { |
| // FIXME: Checks also for SVG elements. |
| - return target && target->toNode() && !target->toNode()->isSVGElement() && !target->toNode()->treeScope().isInclusiveAncestorOf(m_node->treeScope()); |
| + return target && target->toNode() && !target->toNode()->isSVGElement() && !target->toNode()->treeScope().isInclusiveAncestorOf(m_treeScope); |
| } |
| #endif |
| -inline void EventContext::setTarget(PassRefPtr<EventTarget> target) |
| +inline void SharedEventContext::setTarget(PassRefPtr<EventTarget> target) |
| { |
| ASSERT(!isUnreachableNode(target.get())); |
| m_target = target; |
| } |
| -inline void EventContext::setRelatedTarget(PassRefPtr<EventTarget> relatedTarget) |
| +inline void SharedEventContext::setRelatedTarget(PassRefPtr<EventTarget> relatedTarget) |
| { |
| ASSERT(!isUnreachableNode(relatedTarget.get())); |
| m_relatedTarget = relatedTarget; |