summaryrefslogtreecommitdiffstats
path: root/layout/svg/nsSVGEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layout/svg/nsSVGEffects.cpp')
-rw-r--r--layout/svg/nsSVGEffects.cpp46
1 files changed, 30 insertions, 16 deletions
diff --git a/layout/svg/nsSVGEffects.cpp b/layout/svg/nsSVGEffects.cpp
index eac094a91..e75c973c8 100644
--- a/layout/svg/nsSVGEffects.cpp
+++ b/layout/svg/nsSVGEffects.cpp
@@ -888,24 +888,13 @@ nsSVGEffects::InvalidateDirectRenderingObservers(nsIFrame* aFrame, uint32_t aFla
}
}
-static already_AddRefed<nsIURI>
-ResolveURLUsingLocalRef(nsIFrame* aFrame, const css::URLValueData* aURL)
+already_AddRefed<nsIURI>
+nsSVGEffects::GetBaseURLForLocalRef(nsIContent* content, nsIURI* aDocURI)
{
- MOZ_ASSERT(aFrame);
-
- if (!aURL) {
- return nullptr;
- }
-
- // Non-local-reference URL.
- if (!aURL->IsLocalRef()) {
- nsCOMPtr<nsIURI> result = aURL->GetURI();
- return result.forget();
- }
+ MOZ_ASSERT(content);
// For a local-reference URL, resolve that fragment against the current
// document that relative URLs are resolved against.
- nsIContent* content = aFrame->GetContent();
nsCOMPtr<nsIURI> baseURI = content->OwnerDoc()->GetDocumentURI();
if (content->IsInAnonymousSubtree()) {
@@ -933,12 +922,37 @@ ResolveURLUsingLocalRef(nsIFrame* aFrame, const css::URLValueData* aURL)
}
}
- if (originalURI && aURL->EqualsExceptRef(originalURI)) {
- baseURI = originalURI;
+ if (originalURI) {
+ bool isEqualsExceptRef = false;
+ aDocURI->EqualsExceptRef(originalURI, &isEqualsExceptRef);
+ if (isEqualsExceptRef) {
+ baseURI = originalURI;
+ }
}
}
}
+ return baseURI.forget();
+}
+
+static already_AddRefed<nsIURI>
+ResolveURLUsingLocalRef(nsIFrame* aFrame, const css::URLValueData* aURL)
+{
+ MOZ_ASSERT(aFrame);
+
+ if (!aURL) {
+ return nullptr;
+ }
+
+ // Non-local-reference URL.
+ if (!aURL->IsLocalRef()) {
+ nsCOMPtr<nsIURI> result = aURL->GetURI();
+ return result.forget();
+ }
+
+ nsCOMPtr<nsIURI> baseURI =
+ nsSVGEffects::GetBaseURLForLocalRef(aFrame->GetContent(), aURL->GetURI());
+
return aURL->ResolveLocalRef(baseURI);
}