commit c15e86cd0f082d63d37fddff1efc35a428cb8eca
Author: Arthur Edelstein <arthuredelstein(a)gmail.com>
Date: Wed Sep 9 06:06:43 2015 -0700
fixup! Bug #13670.1: Isolate favicon requests by first party
---
browser/base/content/tabbrowser.xml | 3 ++-
dom/base/ThirdPartyUtil.cpp | 26 ++++++++++++++++----------
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml
index 49d4207..6033b71 100644
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -5042,7 +5042,7 @@
class="tab-throbber"
role="presentation"
layer="true" />
- <xul:image xbl:inherits="src=image,fadein,pinned,selected,busy,crashed,firstparty"
+ <xul:image xbl:inherits="src=image,fadein,pinned,selected,busy,crashed"
anonid="tab-icon-image"
class="tab-icon-image"
validate="never"
@@ -5292,6 +5292,7 @@
aMenuitem.setAttribute("busy", aTab.getAttribute("busy"));
aMenuitem.removeAttribute("image");
} else {
+ aMenuitem.setAttribute("firstparty", aTab.getAttribute("firstparty"));
aMenuitem.setAttribute("image", aTab.getAttribute("image"));
aMenuitem.removeAttribute("busy");
}
diff --git a/dom/base/ThirdPartyUtil.cpp b/dom/base/ThirdPartyUtil.cpp
index 5cffc71..618d55b 100644
--- a/dom/base/ThirdPartyUtil.cpp
+++ b/dom/base/ThirdPartyUtil.cpp
@@ -594,16 +594,22 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel,
// to a particular web site should be assigned that site's first party.
if (aNode && aNode->IsElement() && aNode->OwnerDoc() &&
nsContentUtils::IsChromeDoc(aNode->OwnerDoc())) {
- nsString firstparty;
- aNode->AsElement()->GetAttribute(NS_LITERAL_STRING("firstparty"), firstparty);
- if (!firstparty.IsEmpty()) {
- nsCOMPtr<nsIURI> tempURI;
- rv = NS_NewURI(getter_AddRefs(tempURI), firstparty);
- if (rv != NS_OK) {
- return rv;
- } else {
- NS_ADDREF(*aOutput = tempURI);
- return NS_OK;
+ nsTArray<nsINode*> nodeAncestors;
+ nsContentUtils::GetAncestors(aNode, nodeAncestors);
+ for (nsINode* nodeAncestor : nodeAncestors) {
+ if (nodeAncestor->IsElement()) {
+ nsString firstparty;
+ nodeAncestor->AsElement()->GetAttribute(NS_LITERAL_STRING("firstparty"), firstparty);
+ if (!firstparty.IsEmpty()) {
+ nsCOMPtr<nsIURI> tempURI;
+ rv = NS_NewURI(getter_AddRefs(tempURI), firstparty);
+ if (rv != NS_OK) {
+ return rv;
+ } else {
+ NS_ADDREF(*aOutput = tempURI);
+ return NS_OK;
+ }
+ }
}
}
}