Avoid a SVG property list-induced leak (Oilpan).

Address animations/svg-attribute-interpolation/svg-d-interpolation.html
leak.

R=haraken,kouhei
BUG=528275

Review URL: https://codereview.chromium.org/1328223002

git-svn-id: svn://svn.chromium.org/blink/trunk@202067 bbb929c8-8fbe-4397-9dbb-9b2b20218538
diff --git a/third_party/WebKit/Source/core/svg/SVGPathSeg.cpp b/third_party/WebKit/Source/core/svg/SVGPathSeg.cpp
index 5741959..6fe840f 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathSeg.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathSeg.cpp
@@ -44,7 +44,6 @@
 DEFINE_TRACE(SVGPathSeg)
 {
     visitor->trace(m_ownerList);
-    visitor->trace(m_contextElement);
 }
 
 void SVGPathSeg::commitChange()
diff --git a/third_party/WebKit/Source/core/svg/SVGPathSeg.h b/third_party/WebKit/Source/core/svg/SVGPathSeg.h
index 58422ba..ffa59f3 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathSeg.h
+++ b/third_party/WebKit/Source/core/svg/SVGPathSeg.h
@@ -163,7 +163,8 @@
 
 private:
     RawPtrWillBeMember<SVGPropertyBase> m_ownerList;
-    RawPtrWillBeMember<SVGElement> m_contextElement;
+    GC_PLUGIN_IGNORE("528275")
+    SVGElement* m_contextElement;
 };
 
 class SVGPathSegSingleCoordinate : public SVGPathSeg {
diff --git a/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp b/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp
index 1a84163a..9fecc71 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp
@@ -58,7 +58,6 @@
 
 DEFINE_TRACE(SVGPathSegList)
 {
-    visitor->trace(m_contextElement);
     SVGListPropertyHelper<SVGPathSegList, SVGPathSeg>::trace(visitor);
 }
 
diff --git a/third_party/WebKit/Source/core/svg/SVGPathSegList.h b/third_party/WebKit/Source/core/svg/SVGPathSegList.h
index fc3dbf6..cb67418 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathSegList.h
+++ b/third_party/WebKit/Source/core/svg/SVGPathSegList.h
@@ -165,7 +165,8 @@
     //
     // SVGPathSegList is either owned by SVGAnimatedPath or SVGPathSegListTearOff.
     // Both keep |contextElement| alive, so this ptr is always valid.
-    RawPtrWillBeMember<SVGPathElement> m_contextElement;
+    GC_PLUGIN_IGNORE("528275")
+    SVGPathElement* m_contextElement;
 
     mutable OwnPtr<SVGPathByteStream> m_byteStream;
     bool m_listSyncedToByteStream;
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGProperty.h b/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
index cb2e630..7e6ab25 100644
--- a/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
+++ b/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
@@ -88,10 +88,7 @@
         m_ownerList = ownerList;
     }
 
-    DEFINE_INLINE_VIRTUAL_TRACE()
-    {
-        visitor->trace(m_ownerList);
-    }
+    DEFINE_INLINE_VIRTUAL_TRACE() { }
 
 protected:
     explicit SVGPropertyBase(AnimatedPropertyType type)
@@ -103,7 +100,11 @@
 private:
     const AnimatedPropertyType m_type;
 
-    RawPtrWillBeMember<SVGPropertyBase> m_ownerList;
+    // Oilpan: the back reference to the owner should be a Member, but this can create
+    // cycles when SVG properties meet the off-heap InterpolationValue hierarchy.
+    // Not tracing it is safe, albeit an undesirable state of affairs.
+    GC_PLUGIN_IGNORE("528275")
+    SVGPropertyBase* m_ownerList;
 };
 
 }