Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(876)

Unified Diff: Source/core/html/FormAssociatedElement.cpp

Issue 262093006: Oilpan: Make the Node hierarchy RefCountedGarbageCollected instead of TreeShared. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address more comments. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/html/FormAssociatedElement.cpp
diff --git a/Source/core/html/FormAssociatedElement.cpp b/Source/core/html/FormAssociatedElement.cpp
index a34beaacfff356699497c7a6d6e2b5a1f84a626b..46fc8b51335a12c36166786b6ebba8fa67ca7b35 100644
--- a/Source/core/html/FormAssociatedElement.cpp
+++ b/Source/core/html/FormAssociatedElement.cpp
@@ -36,7 +36,7 @@ namespace WebCore {
using namespace HTMLNames;
-class FormAttributeTargetObserver : IdTargetObserver {
+class FormAttributeTargetObserver : public IdTargetObserver {
WTF_MAKE_FAST_ALLOCATED;
public:
static PassOwnPtr<FormAttributeTargetObserver> create(const AtomicString& id, FormAssociatedElement*);
@@ -70,7 +70,7 @@ void FormAssociatedElement::didMoveToNewDocument(Document& oldDocument)
{
HTMLElement* element = toHTMLElement(this);
if (element->fastHasAttribute(formAttr))
- m_formAttributeTargetObserver = nullptr;
+ setFormAttributeTargetObserver(nullptr);
}
void FormAssociatedElement::insertedInto(ContainerNode* insertionPoint)
@@ -90,7 +90,7 @@ void FormAssociatedElement::removedFrom(ContainerNode* insertionPoint)
{
HTMLElement* element = toHTMLElement(this);
if (insertionPoint->inDocument() && element->fastHasAttribute(formAttr))
- m_formAttributeTargetObserver = nullptr;
+ setFormAttributeTargetObserver(nullptr);
haraken 2014/05/06 04:20:16 The observer is unregistered when FormAssociatedEl
Mads Ager (chromium) 2014/05/06 08:26:00 m_formAttributeTargetObserver is only non-null in
Erik Corry 2014/05/06 08:29:40 My guess is that the observer is in the form, whic
// If the form and element are both in the same tree, preserve the connection to the form.
// Otherwise, null out our form and remove ourselves from the form's list of elements.
if (m_form && element->highestAncestorOrSelf() != m_form->highestAncestorOrSelf())
@@ -253,14 +253,21 @@ void FormAssociatedElement::setCustomValidity(const String& error)
m_customValidationMessage = error;
}
+void FormAssociatedElement::setFormAttributeTargetObserver(PassOwnPtr<FormAttributeTargetObserver> newObserver)
+{
+ if (m_formAttributeTargetObserver)
+ m_formAttributeTargetObserver->unregister();
+ m_formAttributeTargetObserver = newObserver;
+}
+
void FormAssociatedElement::resetFormAttributeTargetObserver()
{
HTMLElement* element = toHTMLElement(this);
const AtomicString& formId(element->fastGetAttribute(formAttr));
if (!formId.isNull() && element->inDocument())
- m_formAttributeTargetObserver = FormAttributeTargetObserver::create(formId, this);
+ setFormAttributeTargetObserver(FormAttributeTargetObserver::create(formId, this));
else
- m_formAttributeTargetObserver = nullptr;
+ setFormAttributeTargetObserver(nullptr);
}
void FormAssociatedElement::formAttributeTargetChanged()

Powered by Google App Engine
This is Rietveld 408576698