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

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

Issue 2740003003: Use IdTargetObserver in SVGFEImageElement (Closed)
Patch Set: Forward declare ImageResourceContent Created 3 years, 9 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/SVGFEImageElement.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/SVGFEImageElement.cpp
diff --git a/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp b/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp
index c0127df275ccb55ab8d235c98a0d2c24d7b5138b..c3393388176c0889b1f93ade1c1e5f8bb2437fba 100644
--- a/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGFEImageElement.cpp
@@ -21,9 +21,11 @@
#include "core/svg/SVGFEImageElement.h"
+#include "core/SVGNames.h"
#include "core/dom/Document.h"
+#include "core/dom/IdTargetObserver.h"
+#include "core/loader/resource/ImageResourceContent.h"
#include "core/svg/SVGPreserveAspectRatio.h"
-#include "core/svg/SVGTreeScopeResources.h"
#include "core/svg/graphics/filters/SVGFEImage.h"
#include "platform/graphics/Image.h"
#include "platform/loader/fetch/FetchRequest.h"
@@ -43,15 +45,13 @@ inline SVGFEImageElement::SVGFEImageElement(Document& document)
DEFINE_NODE_FACTORY(SVGFEImageElement)
SVGFEImageElement::~SVGFEImageElement() {
- if (m_cachedImage) {
- m_cachedImage->removeObserver(this);
- m_cachedImage = nullptr;
- }
+ clearImageResource();
}
DEFINE_TRACE(SVGFEImageElement) {
visitor->trace(m_preserveAspectRatio);
visitor->trace(m_cachedImage);
+ visitor->trace(m_targetIdObserver);
SVGFilterPrimitiveStandardAttributes::trace(visitor);
SVGURIReference::trace(visitor);
}
@@ -64,38 +64,36 @@ bool SVGFEImageElement::currentFrameHasSingleSecurityOrigin() const {
}
void SVGFEImageElement::clearResourceReferences() {
- if (m_cachedImage) {
- m_cachedImage->removeObserver(this);
- m_cachedImage = nullptr;
- }
-
+ clearImageResource();
+ unobserveTarget(m_targetIdObserver);
removeAllOutgoingReferences();
}
void SVGFEImageElement::fetchImageResource() {
- FetchRequest request(
- ResourceRequest(ownerDocument()->completeURL(hrefString())), localName());
+ FetchRequest request(ResourceRequest(document().completeURL(hrefString())),
+ localName());
m_cachedImage = ImageResourceContent::fetch(request, document().fetcher());
if (m_cachedImage)
m_cachedImage->addObserver(this);
}
+void SVGFEImageElement::clearImageResource() {
+ if (!m_cachedImage)
+ return;
+ m_cachedImage->removeObserver(this);
+ m_cachedImage = nullptr;
+}
+
void SVGFEImageElement::buildPendingResource() {
clearResourceReferences();
if (!isConnected())
return;
- AtomicString id;
- Element* target = SVGURIReference::targetElementFromIRIString(
- hrefString(), treeScope(), &id);
+ Element* target = observeTarget(m_targetIdObserver, *this);
if (!target) {
- if (id.isEmpty()) {
+ if (!SVGURLReferenceResolver(hrefString(), document()).isLocal())
fetchImageResource();
- } else {
- treeScope().ensureSVGTreeScopedResources().addPendingResource(id, *this);
- DCHECK(hasPendingResources());
- }
} else if (target->isSVGElement()) {
// Register us with the target in the dependencies map. Any change of
// hrefElement that leads to relayout/repainting now informs us, so we can
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGFEImageElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698