Bug 1061469 - Part 2: ImportManager::AddLoaderWithNewURI should only return main referrers. r=mrbkap
--- a/content/base/src/ImportManager.cpp
+++ b/content/base/src/ImportManager.cpp
@@ -737,32 +737,40 @@ ImportManager::AddLoaderWithNewURI(Impor
}
nsRefPtr<ImportLoader> ImportManager::GetNearestPredecessor(nsINode* aNode)
{
// Return the previous link if there is any in the same document.
nsIDocument* doc = aNode->OwnerDoc();
int32_t idx = doc->IndexOfSubImportLink(aNode);
MOZ_ASSERT(idx != -1, "aNode must be a sub import link of its owner document");
+
+ for (; idx > 0; idx--) {
+ HTMLLinkElement* link =
+ static_cast<HTMLLinkElement*>(doc->GetSubImportLink(idx - 1));
+ nsCOMPtr<nsIURI> uri = link->GetHrefURI();
+ nsRefPtr<ImportLoader> ret;
+ mImports.Get(uri, getter_AddRefs(ret));
+ // Only main referrer links are interesting.
+ if (ret->GetMainReferrer() == link) {
+ return ret;
+ }
+ }
+
if (idx == 0) {
if (doc->IsMasterDocument()) {
// If there is no previous one, and it was the master document, then
// there is no predecessor.
return nullptr;
}
// Else we find the main referrer of the import parent of the link's document.
// And do a recursion.
ImportLoader* owner = Find(doc);
MOZ_ASSERT(owner);
nsCOMPtr<nsINode> mainReferrer = owner->GetMainReferrer();
return GetNearestPredecessor(mainReferrer);
}
- MOZ_ASSERT(idx > 0);
- HTMLLinkElement* link =
- static_cast<HTMLLinkElement*>(doc->GetSubImportLink(idx - 1));
- nsCOMPtr<nsIURI> uri = link->GetHrefURI();
- nsRefPtr<ImportLoader> ret;
- mImports.Get(uri, getter_AddRefs(ret));
- return ret;
+
+ return nullptr;
}
} // namespace dom
} // namespace mozilla