| Index: third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp b/third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp
|
| index 8907cbac4f072df3e9c49b627ede9d91c2b82791..62fbfabb68b99a34d4285f52c749bb46143bda1c 100644
|
| --- a/third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/svg/SVGLayoutTreeAsText.cpp
|
| @@ -45,6 +45,8 @@
|
| #include "core/layout/svg/LayoutSVGShape.h"
|
| #include "core/layout/svg/LayoutSVGText.h"
|
| #include "core/layout/svg/SVGLayoutSupport.h"
|
| +#include "core/layout/svg/SVGResources.h"
|
| +#include "core/layout/svg/SVGResourcesCache.h"
|
| #include "core/layout/svg/line/SVGInlineTextBox.h"
|
| #include "core/layout/svg/line/SVGRootInlineBox.h"
|
| #include "core/paint/PaintLayer.h"
|
| @@ -706,68 +708,50 @@ void writeSVGGradientStop(TextStream& ts,
|
| }
|
|
|
| void writeResources(TextStream& ts, const LayoutObject& object, int indent) {
|
| + SVGResources* resources =
|
| + SVGResourcesCache::cachedResourcesForLayoutObject(&object);
|
| + if (!resources)
|
| + return;
|
| const ComputedStyle& style = object.styleRef();
|
| - const SVGComputedStyle& svgStyle = style.svgStyle();
|
| TreeScope& treeScope = object.document();
|
| - SVGTreeScopeResources& treeScopeResources =
|
| - treeScope.ensureSVGTreeScopedResources();
|
| -
|
| - // FIXME: We want to use SVGResourcesCache to determine which resources are
|
| - // present, instead of quering the resource <-> id cache.
|
| - // For now leave the DRT output as is, but later on we should change this so
|
| - // cycles are properly ignored in the DRT output.
|
| - if (!svgStyle.maskerResource().isEmpty()) {
|
| - if (LayoutSVGResourceMasker* masker =
|
| - getLayoutSVGResourceById<LayoutSVGResourceMasker>(
|
| - treeScopeResources, svgStyle.maskerResource())) {
|
| - writeIndent(ts, indent);
|
| - ts << " ";
|
| - writeNameAndQuotedValue(ts, "masker", svgStyle.maskerResource());
|
| - ts << " ";
|
| - writeStandardPrefix(ts, *masker, 0);
|
| - ts << " " << masker->resourceBoundingBox(&object) << "\n";
|
| - }
|
| + if (LayoutSVGResourceMasker* masker = resources->masker()) {
|
| + writeIndent(ts, indent);
|
| + ts << " ";
|
| + writeNameAndQuotedValue(ts, "masker", style.svgStyle().maskerResource());
|
| + ts << " ";
|
| + writeStandardPrefix(ts, *masker, 0);
|
| + ts << " " << masker->resourceBoundingBox(&object) << "\n";
|
| }
|
| - if (ClipPathOperation* clipPathOperation = style.clipPath()) {
|
| - if (clipPathOperation->type() == ClipPathOperation::REFERENCE) {
|
| - const ReferenceClipPathOperation& clipPathReference =
|
| - toReferenceClipPathOperation(*clipPathOperation);
|
| - AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString(
|
| - clipPathReference.url(), treeScope);
|
| - if (LayoutSVGResourceClipper* clipper =
|
| - getLayoutSVGResourceById<LayoutSVGResourceClipper>(
|
| - treeScopeResources, id)) {
|
| - writeIndent(ts, indent);
|
| - ts << " ";
|
| - writeNameAndQuotedValue(ts, "clipPath", id);
|
| - ts << " ";
|
| - writeStandardPrefix(ts, *clipper, 0);
|
| - ts << " " << clipper->resourceBoundingBox(object.objectBoundingBox())
|
| - << "\n";
|
| - }
|
| - }
|
| + if (LayoutSVGResourceClipper* clipper = resources->clipper()) {
|
| + DCHECK(style.clipPath());
|
| + DCHECK_EQ(style.clipPath()->type(), ClipPathOperation::REFERENCE);
|
| + const ReferenceClipPathOperation& clipPathReference =
|
| + toReferenceClipPathOperation(*style.clipPath());
|
| + AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString(
|
| + clipPathReference.url(), treeScope);
|
| + writeIndent(ts, indent);
|
| + ts << " ";
|
| + writeNameAndQuotedValue(ts, "clipPath", id);
|
| + ts << " ";
|
| + writeStandardPrefix(ts, *clipper, 0);
|
| + ts << " " << clipper->resourceBoundingBox(object.objectBoundingBox())
|
| + << "\n";
|
| }
|
| - if (style.hasFilter()) {
|
| - const FilterOperations& filterOperations = style.filter();
|
| - if (filterOperations.size() == 1) {
|
| - const FilterOperation& filterOperation = *filterOperations.at(0);
|
| - if (filterOperation.type() == FilterOperation::REFERENCE) {
|
| - const auto& referenceFilterOperation =
|
| - toReferenceFilterOperation(filterOperation);
|
| - AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString(
|
| - referenceFilterOperation.url(), treeScope);
|
| - if (LayoutSVGResourceFilter* filter =
|
| - getLayoutSVGResourceById<LayoutSVGResourceFilter>(
|
| - treeScopeResources, id)) {
|
| - writeIndent(ts, indent);
|
| - ts << " ";
|
| - writeNameAndQuotedValue(ts, "filter", id);
|
| - ts << " ";
|
| - writeStandardPrefix(ts, *filter, 0);
|
| - ts << " " << filter->resourceBoundingBox(&object) << "\n";
|
| - }
|
| - }
|
| - }
|
| + if (LayoutSVGResourceFilter* filter = resources->filter()) {
|
| + DCHECK(style.hasFilter());
|
| + DCHECK_EQ(style.filter().size(), 1u);
|
| + const FilterOperation& filterOperation = *style.filter().at(0);
|
| + DCHECK_EQ(filterOperation.type(), FilterOperation::REFERENCE);
|
| + const auto& referenceFilterOperation =
|
| + toReferenceFilterOperation(filterOperation);
|
| + AtomicString id = SVGURIReference::fragmentIdentifierFromIRIString(
|
| + referenceFilterOperation.url(), treeScope);
|
| + writeIndent(ts, indent);
|
| + ts << " ";
|
| + writeNameAndQuotedValue(ts, "filter", id);
|
| + ts << " ";
|
| + writeStandardPrefix(ts, *filter, 0);
|
| + ts << " " << filter->resourceBoundingBox(&object) << "\n";
|
| }
|
| }
|
|
|
|
|