Index: Source/WebCore/svg/SVGTRefElement.cpp |
=================================================================== |
--- Source/WebCore/svg/SVGTRefElement.cpp (revision 126671) |
+++ Source/WebCore/svg/SVGTRefElement.cpp (working copy) |
@@ -69,9 +69,9 @@ |
? static_cast<const SVGTRefTargetEventListener*>(listener) : 0; |
} |
- void attach(Element* target, String& targetId); |
+ void attach(PassRefPtr<Element> target); |
void detach(); |
- bool isAttached() const { return m_attached; } |
+ bool isAttached() const { return m_target.get(); } |
private: |
SVGTRefTargetEventListener(SVGTRefElement* trefElement); |
@@ -80,29 +80,26 @@ |
virtual bool operator==(const EventListener&) OVERRIDE; |
SVGTRefElement* m_trefElement; |
- String m_targetId; |
- bool m_attached; |
+ RefPtr<Element> m_target; |
}; |
SVGTRefTargetEventListener::SVGTRefTargetEventListener(SVGTRefElement* trefElement) |
: EventListener(SVGTRefTargetEventListenerType) |
, m_trefElement(trefElement) |
- , m_attached(false) |
+ , m_target(0) |
{ |
ASSERT(m_trefElement); |
} |
-void SVGTRefTargetEventListener::attach(Element* target, String& targetId) |
+void SVGTRefTargetEventListener::attach(PassRefPtr<Element> target) |
{ |
ASSERT(!isAttached()); |
- ASSERT(target); |
+ ASSERT(target.get()); |
ASSERT(target->inDocument()); |
- ASSERT(!targetId.isEmpty()); |
target->addEventListener(eventNames().DOMSubtreeModifiedEvent, this, false); |
target->addEventListener(eventNames().DOMNodeRemovedFromDocumentEvent, this, false); |
- m_targetId = targetId; |
- m_attached = true; |
+ m_target = target; |
} |
void SVGTRefTargetEventListener::detach() |
@@ -110,13 +107,9 @@ |
if (!isAttached()) |
return; |
- if (Element* target = m_trefElement->treeScope()->getElementById(m_targetId)) { |
- target->removeEventListener(eventNames().DOMSubtreeModifiedEvent, this, false); |
- target->removeEventListener(eventNames().DOMNodeRemovedFromDocumentEvent, this, false); |
- } |
- |
- m_targetId = emptyString(); |
- m_attached = false; |
+ m_target->removeEventListener(eventNames().DOMSubtreeModifiedEvent, this, false); |
+ m_target->removeEventListener(eventNames().DOMNodeRemovedFromDocumentEvent, this, false); |
+ m_target.clear(); |
} |
bool SVGTRefTargetEventListener::operator==(const EventListener& listener) |
@@ -131,7 +124,7 @@ |
ASSERT(isAttached()); |
if (event->type() == eventNames().DOMSubtreeModifiedEvent && m_trefElement != event->target()) |
- m_trefElement->updateReferencedText(); |
+ m_trefElement->updateReferencedText(m_target.get()); |
else if (event->type() == eventNames().DOMNodeRemovedFromDocumentEvent) |
m_trefElement->detachTarget(); |
} |
@@ -183,10 +176,10 @@ |
ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION); |
} |
-void SVGTRefElement::updateReferencedText() |
+void SVGTRefElement::updateReferencedText(Element* target) |
{ |
String textContent; |
- if (Element* target = SVGURIReference::targetElementFromIRIString(href(), document())) |
+ if (target) |
textContent = target->textContent(); |
ASSERT(shadow()); |
@@ -296,8 +289,8 @@ |
return; |
String id; |
- Element* target = SVGURIReference::targetElementFromIRIString(href(), document(), &id); |
- if (!target) { |
+ RefPtr<Element> target = SVGURIReference::targetElementFromIRIString(href(), document(), &id); |
+ if (!target.get()) { |
if (id.isEmpty()) |
return; |
@@ -311,9 +304,9 @@ |
// expects every element instance to have an associated shadow tree element - which is not the |
// case when we land here from SVGUseElement::buildShadowTree(). |
if (!isInShadowTree()) |
- m_targetListener->attach(target, id); |
+ m_targetListener->attach(target); |
- updateReferencedText(); |
+ updateReferencedText(target.get()); |
} |
Node::InsertionNotificationRequest SVGTRefElement::insertedInto(ContainerNode* rootParent) |