Index: third_party/WebKit/Source/core/layout/svg/SVGResources.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp b/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp |
index c26d538198ed88cf21b4ffe5b8b5735f8bdba647..4156e04a49b798c0c611e1791fd69703c28d9338 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp |
@@ -418,6 +418,58 @@ void SVGResources::ResourceDestroyed(LayoutSVGResourceContainer* resource) { |
} |
} |
+void SVGResources::ClearReferencesTo(LayoutSVGResourceContainer* resource) { |
+ DCHECK(resource); |
+ if (linked_resource_ == resource) { |
+ DCHECK(!clipper_filter_masker_data_); |
+ DCHECK(!marker_data_); |
+ DCHECK(!fill_stroke_data_); |
+ linked_resource_ = nullptr; |
+ return; |
+ } |
+ |
+ switch (resource->ResourceType()) { |
+ case kMaskerResourceType: |
+ DCHECK(clipper_filter_masker_data_); |
+ DCHECK_EQ(clipper_filter_masker_data_->masker, resource); |
+ clipper_filter_masker_data_->masker = nullptr; |
+ break; |
+ case kMarkerResourceType: |
+ DCHECK(marker_data_); |
+ DCHECK(resource == MarkerStart() || resource == MarkerMid() || |
+ resource == MarkerEnd()); |
+ if (marker_data_->marker_start == resource) |
+ marker_data_->marker_start = nullptr; |
+ if (marker_data_->marker_mid == resource) |
+ marker_data_->marker_mid = nullptr; |
+ if (marker_data_->marker_end == resource) |
+ marker_data_->marker_end = nullptr; |
+ break; |
+ case kPatternResourceType: |
+ case kLinearGradientResourceType: |
+ case kRadialGradientResourceType: |
+ DCHECK(fill_stroke_data_); |
+ DCHECK(resource == Fill() || resource == Stroke()); |
+ if (fill_stroke_data_->fill == resource) |
+ fill_stroke_data_->fill = nullptr; |
+ if (fill_stroke_data_->stroke == resource) |
+ fill_stroke_data_->stroke = nullptr; |
+ break; |
+ case kFilterResourceType: |
+ DCHECK(clipper_filter_masker_data_); |
+ DCHECK_EQ(clipper_filter_masker_data_->filter, resource); |
+ clipper_filter_masker_data_->filter = nullptr; |
+ break; |
+ case kClipperResourceType: |
+ DCHECK(clipper_filter_masker_data_); |
+ DCHECK_EQ(clipper_filter_masker_data_->clipper, resource); |
+ clipper_filter_masker_data_->clipper = nullptr; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+} |
+ |
void SVGResources::BuildSetOfResources( |
HashSet<LayoutSVGResourceContainer*>& set) { |
if (!HasResourceData()) |
@@ -469,12 +521,6 @@ void SVGResources::SetClipper(LayoutSVGResourceClipper* clipper) { |
clipper_filter_masker_data_->clipper = clipper; |
} |
-void SVGResources::ResetClipper() { |
- DCHECK(clipper_filter_masker_data_); |
- DCHECK(clipper_filter_masker_data_->clipper); |
- clipper_filter_masker_data_->clipper = nullptr; |
-} |
- |
void SVGResources::SetFilter(LayoutSVGResourceFilter* filter) { |
if (!filter) |
return; |
@@ -487,12 +533,6 @@ void SVGResources::SetFilter(LayoutSVGResourceFilter* filter) { |
clipper_filter_masker_data_->filter = filter; |
} |
-void SVGResources::ResetFilter() { |
- DCHECK(clipper_filter_masker_data_); |
- DCHECK(clipper_filter_masker_data_->filter); |
- clipper_filter_masker_data_->filter = nullptr; |
-} |
- |
void SVGResources::SetMarkerStart(LayoutSVGResourceMarker* marker_start) { |
if (!marker_start) |
return; |
@@ -505,12 +545,6 @@ void SVGResources::SetMarkerStart(LayoutSVGResourceMarker* marker_start) { |
marker_data_->marker_start = marker_start; |
} |
-void SVGResources::ResetMarkerStart() { |
- DCHECK(marker_data_); |
- DCHECK(marker_data_->marker_start); |
- marker_data_->marker_start = nullptr; |
-} |
- |
void SVGResources::SetMarkerMid(LayoutSVGResourceMarker* marker_mid) { |
if (!marker_mid) |
return; |
@@ -523,12 +557,6 @@ void SVGResources::SetMarkerMid(LayoutSVGResourceMarker* marker_mid) { |
marker_data_->marker_mid = marker_mid; |
} |
-void SVGResources::ResetMarkerMid() { |
- DCHECK(marker_data_); |
- DCHECK(marker_data_->marker_mid); |
- marker_data_->marker_mid = nullptr; |
-} |
- |
void SVGResources::SetMarkerEnd(LayoutSVGResourceMarker* marker_end) { |
if (!marker_end) |
return; |
@@ -541,12 +569,6 @@ void SVGResources::SetMarkerEnd(LayoutSVGResourceMarker* marker_end) { |
marker_data_->marker_end = marker_end; |
} |
-void SVGResources::ResetMarkerEnd() { |
- DCHECK(marker_data_); |
- DCHECK(marker_data_->marker_end); |
- marker_data_->marker_end = nullptr; |
-} |
- |
void SVGResources::SetMasker(LayoutSVGResourceMasker* masker) { |
if (!masker) |
return; |
@@ -559,12 +581,6 @@ void SVGResources::SetMasker(LayoutSVGResourceMasker* masker) { |
clipper_filter_masker_data_->masker = masker; |
} |
-void SVGResources::ResetMasker() { |
- DCHECK(clipper_filter_masker_data_); |
- DCHECK(clipper_filter_masker_data_->masker); |
- clipper_filter_masker_data_->masker = nullptr; |
-} |
- |
void SVGResources::SetFill(LayoutSVGResourcePaintServer* fill) { |
if (!fill) |
return; |
@@ -575,12 +591,6 @@ void SVGResources::SetFill(LayoutSVGResourcePaintServer* fill) { |
fill_stroke_data_->fill = fill; |
} |
-void SVGResources::ResetFill() { |
- DCHECK(fill_stroke_data_); |
- DCHECK(fill_stroke_data_->fill); |
- fill_stroke_data_->fill = nullptr; |
-} |
- |
void SVGResources::SetStroke(LayoutSVGResourcePaintServer* stroke) { |
if (!stroke) |
return; |
@@ -591,12 +601,6 @@ void SVGResources::SetStroke(LayoutSVGResourcePaintServer* stroke) { |
fill_stroke_data_->stroke = stroke; |
} |
-void SVGResources::ResetStroke() { |
- DCHECK(fill_stroke_data_); |
- DCHECK(fill_stroke_data_->stroke); |
- fill_stroke_data_->stroke = nullptr; |
-} |
- |
void SVGResources::SetLinkedResource( |
LayoutSVGResourceContainer* linked_resource) { |
if (!linked_resource) |
@@ -605,11 +609,6 @@ void SVGResources::SetLinkedResource( |
linked_resource_ = linked_resource; |
} |
-void SVGResources::ResetLinkedResource() { |
- DCHECK(linked_resource_); |
- linked_resource_ = nullptr; |
-} |
- |
#ifndef NDEBUG |
void SVGResources::Dump(const LayoutObject* object) { |
DCHECK(object); |