| 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 95b2c3f3603ee4940a646169abb669f15963efd8..0c0d7c0bd3c5401c8e7e1d59916f6e39e5420b8d 100644
|
| --- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
|
| +++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "core/dom/IdTargetObserver.h"
|
| #include "core/dom/StyleChangeReason.h"
|
| #include "core/dom/TaskRunnerHelper.h"
|
| +#include "core/dom/shadow/ElementShadow.h"
|
| #include "core/dom/shadow/ShadowRoot.h"
|
| #include "core/events/Event.h"
|
| #include "core/layout/svg/LayoutSVGTransformableContainer.h"
|
| @@ -80,7 +81,7 @@ inline SVGUseElement::SVGUseElement(Document& document)
|
| SVGUseElement* SVGUseElement::create(Document& document) {
|
| // Always build a user agent #shadow-root for SVGUseElement.
|
| SVGUseElement* use = new SVGUseElement(document);
|
| - use->ensureUserAgentShadowRoot();
|
| + use->ensureShadow().addShadowRoot(*use, ShadowRootType::Closed);
|
| return use;
|
| }
|
|
|
| @@ -313,7 +314,7 @@ void SVGUseElement::buildPendingResource() {
|
| if (inUseShadowTree())
|
| return;
|
| // FIXME: We should try to optimize this, to at least allow partial reclones.
|
| - userAgentShadowRoot()->removeChildren(OmitSubtreeModifiedEvent);
|
| + useShadowRoot().removeChildren(OmitSubtreeModifiedEvent);
|
| clearResourceReference();
|
| cancelShadowTreeRecreation();
|
| if (!isConnected())
|
| @@ -420,8 +421,8 @@ void SVGUseElement::buildShadowAndInstanceTree(SVGElement& target) {
|
| DCHECK(!m_targetElementInstance);
|
| DCHECK(!m_needsShadowTreeRecreation);
|
|
|
| - // <use> creates a "user agent" shadow root. Do not build the shadow/instance
|
| - // tree for <use> elements living in a user agent shadow tree because they
|
| + // <use> creates a closed shadow root. Do not build the shadow/instance
|
| + // tree for <use> elements living in a closed tree because they
|
| // will get expanded in a second pass -- see expandUseElementsInShadowTree().
|
| if (inUseShadowTree())
|
| return;
|
| @@ -435,8 +436,8 @@ void SVGUseElement::buildShadowAndInstanceTree(SVGElement& target) {
|
| // <symbol> yet.
|
| Element* instanceRoot = createInstanceTree(target);
|
| m_targetElementInstance = toSVGElement(instanceRoot);
|
| - ShadowRoot* shadowTreeRootElement = userAgentShadowRoot();
|
| - shadowTreeRootElement->appendChild(instanceRoot);
|
| + ShadowRoot& shadowRoot = useShadowRoot();
|
| + shadowRoot.appendChild(instanceRoot);
|
|
|
| addReferencesToFirstDegreeNestedUseElements(target);
|
|
|
| @@ -451,16 +452,15 @@ void SVGUseElement::buildShadowAndInstanceTree(SVGElement& target) {
|
| // Expand all <use> elements in the shadow tree.
|
| // Expand means: replace the actual <use> element by what it references.
|
| if (!expandUseElementsInShadowTree()) {
|
| - shadowTreeRootElement->removeChildren(OmitSubtreeModifiedEvent);
|
| + shadowRoot.removeChildren(OmitSubtreeModifiedEvent);
|
| clearResourceReference();
|
| return;
|
| }
|
|
|
| // If the instance root was a <use>, it could have been replaced now, so
|
| // reset |m_targetElementInstance|.
|
| - m_targetElementInstance =
|
| - toSVGElementOrDie(shadowTreeRootElement->firstChild());
|
| - DCHECK_EQ(m_targetElementInstance->parentNode(), shadowTreeRootElement);
|
| + m_targetElementInstance = toSVGElementOrDie(shadowRoot.firstChild());
|
| + DCHECK_EQ(m_targetElementInstance->parentNode(), shadowRoot);
|
|
|
| // Update relative length information.
|
| updateRelativeLengthsInformation();
|
| @@ -497,7 +497,7 @@ void SVGUseElement::toClipPath(Path& path) const {
|
|
|
| SVGGraphicsElement* SVGUseElement::visibleTargetGraphicsElementForClipping()
|
| const {
|
| - Node* n = userAgentShadowRoot()->firstChild();
|
| + Node* n = useShadowRoot().firstChild();
|
| if (!n || !n->isSVGElement())
|
| return nullptr;
|
|
|
| @@ -585,8 +585,8 @@ bool SVGUseElement::expandUseElementsInShadowTree() {
|
| // a <symbol> contains <use> tags, we'd miss them. So once we're done with
|
| // setting up the actual shadow tree (after the special case modification for
|
| // svg/symbol) we have to walk it completely and expand all <use> elements.
|
| - ShadowRoot* shadowRoot = userAgentShadowRoot();
|
| - for (SVGUseElement* use = Traversal<SVGUseElement>::firstWithin(*shadowRoot);
|
| + ShadowRoot& shadowRoot = useShadowRoot();
|
| + for (SVGUseElement* use = Traversal<SVGUseElement>::firstWithin(shadowRoot);
|
| use;) {
|
| DCHECK(!use->resourceIsStillLoading());
|
|
|
| @@ -617,7 +617,7 @@ bool SVGUseElement::expandUseElementsInShadowTree() {
|
| // Replace <use> with referenced content.
|
| use->parentNode()->replaceChild(cloneParent, use);
|
|
|
| - use = Traversal<SVGUseElement>::next(*replacingElement, shadowRoot);
|
| + use = Traversal<SVGUseElement>::next(*replacingElement, &shadowRoot);
|
| }
|
| return true;
|
| }
|
| @@ -718,7 +718,7 @@ bool SVGUseElement::resourceIsValid() const {
|
|
|
| bool SVGUseElement::instanceTreeIsLoading() const {
|
| for (const SVGUseElement& useElement :
|
| - Traversal<SVGUseElement>::descendantsOf(*userAgentShadowRoot())) {
|
| + Traversal<SVGUseElement>::descendantsOf(useShadowRoot())) {
|
| if (useElement.resourceIsStillLoading())
|
| return true;
|
| }
|
|
|