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

Unified Diff: third_party/WebKit/Source/core/svg/SVGUseElement.cpp

Issue 1757323002: Eliminate SVGUseElement::referencedScope() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@svg-useelm-shadowbuilder-cleanup-7
Patch Set: Created 4 years, 10 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
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGUseElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/svg/SVGUseElement.cpp
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
index 46e52916022ba0e0e07e88645fd129e80e90cf68..a79965162c8e630822c003b2e2030b497a2e587a 100644
--- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -139,13 +139,6 @@ void SVGUseElement::removedFrom(ContainerNode* rootParent)
}
}
-TreeScope* SVGUseElement::referencedScope() const
-{
- if (isStructurallyExternal())
- return externalDocument();
- return &treeScope();
-}
-
Document* SVGUseElement::externalDocument() const
{
// Gracefully handle error condition.
@@ -330,20 +323,23 @@ void SVGUseElement::buildPendingResource()
return;
clearShadowTree();
cancelShadowTreeRecreation();
- if (!referencedScope() || !inDocument())
+ if (!inDocument())
+ return;
+ Document* externalDocument = this->externalDocument();
+ if (isStructurallyExternal() && !externalDocument)
return;
AtomicString id;
- Element* target = SVGURIReference::targetElementFromIRIString(hrefString(), treeScope(), &id, externalDocument());
+ Element* target = targetElementFromIRIString(hrefString(), treeScope(), &id, externalDocument);
if (!target || !target->inDocument()) {
// If we can't find the target of an external element, just give up.
// We can't observe if the target somewhen enters the external document, nor should we do it.
- if (externalDocument())
+ if (externalDocument)
return;
if (id.isEmpty())
return;
- referencedScope()->document().accessSVGExtensions().addPendingResource(id, this);
+ document().accessSVGExtensions().addPendingResource(id, this);
ASSERT(hasPendingResources());
return;
}
@@ -525,8 +521,7 @@ void SVGUseElement::cloneNonMarkupEventListeners()
bool SVGUseElement::hasCycleUseReferencing(const SVGUseElement& use, const ContainerNode& targetInstance, SVGElement*& newTarget) const
{
- ASSERT(referencedScope());
- Element* targetElement = SVGURIReference::targetElementFromIRIString(use.hrefString(), *referencedScope());
+ Element* targetElement = targetElementFromIRIString(use.hrefString(), use.treeScope());
newTarget = 0;
if (targetElement && targetElement->isSVGElement())
newTarget = toSVGElement(targetElement);
@@ -607,18 +602,19 @@ bool SVGUseElement::expandUseElementsInShadowTree()
for (RefPtrWillBeRawPtr<SVGUseElement> use = Traversal<SVGUseElement>::firstWithin(*shadowRoot); use; ) {
ASSERT(!use->resourceIsStillLoading());
- SVGElement* target = 0;
- if (hasCycleUseReferencing(toSVGUseElement(*use->correspondingElement()), *use, target))
+ SVGUseElement& originalUse = toSVGUseElement(*use->correspondingElement());
+ SVGElement* target = nullptr;
+ if (hasCycleUseReferencing(originalUse, *use, target))
return false;
if (target && isDisallowedElement(*target))
return false;
// Don't ASSERT(target) here, it may be "pending", too.
// Setup sub-shadow tree root node
- RefPtrWillBeRawPtr<SVGGElement> cloneParent = SVGGElement::create(referencedScope()->document());
+ RefPtrWillBeRawPtr<SVGGElement> cloneParent = SVGGElement::create(originalUse.document());
// Transfer all data (attributes, etc.) from <use> to the new <g> element.
cloneParent->cloneDataFromElement(*use);
- cloneParent->setCorrespondingElement(use->correspondingElement());
+ cloneParent->setCorrespondingElement(&originalUse);
removeAttributesFromReplacementElement(*cloneParent);
@@ -654,11 +650,11 @@ void SVGUseElement::expandSymbolElementsInShadowTree()
// height are provided on the 'use' element, then these attributes will be transferred to
// the generated 'svg'. If attributes width and/or height are not specified, the generated
// 'svg' element will use values of 100% for these attributes.
- ASSERT(referencedScope());
- RefPtrWillBeRawPtr<SVGSVGElement> svgElement = SVGSVGElement::create(referencedScope()->document());
+ SVGElement& originalSymbol = *symbol->correspondingElement();
+ RefPtrWillBeRawPtr<SVGSVGElement> svgElement = SVGSVGElement::create(originalSymbol.document());
// Transfer all data (attributes, etc.) from <symbol> to the new <svg> element.
svgElement->cloneDataFromElement(*symbol);
- svgElement->setCorrespondingElement(symbol->correspondingElement());
+ svgElement->setCorrespondingElement(&originalSymbol);
// Move already cloned elements to the new <svg> element.
moveChildrenToReplacementElement(*symbol, *svgElement);
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGUseElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698