[tor-commits] [tor-browser/tor-browser-45.0.2esr-6.x-1] fixup! Bug #5742: API allows you to get the url bar URI for a channel or nsIDocument.

gk at torproject.org gk at torproject.org
Fri Apr 22 19:48:06 UTC 2016


commit 1f16ce85bc145032a6954a2b8ae81875c6ec1dbf
Author: Arthur Edelstein <arthuredelstein at gmail.com>
Date:   Wed Apr 20 11:05:51 2016 -0700

    fixup! Bug #5742: API allows you to get the url bar URI for a channel or nsIDocument.
    
    See also: Bug 18741: Ensure that favicons and similar "content images in chrome"
    get the correct first-party assigned.
---
 dom/base/ThirdPartyUtil.cpp | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/dom/base/ThirdPartyUtil.cpp b/dom/base/ThirdPartyUtil.cpp
index 762e2cf..26c95f5 100644
--- a/dom/base/ThirdPartyUtil.cpp
+++ b/dom/base/ThirdPartyUtil.cpp
@@ -543,24 +543,26 @@ ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel,
 
   // Favicons, or other items being loaded in chrome that belong
   // to a particular web site should be assigned that site's first party.
-  if (aNode && aNode->IsElement() && aNode->OwnerDoc() &&
-      nsContentUtils::IsChromeDoc(aNode->OwnerDoc())) {
-    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;
-          }
-        }
+  // If the originating node has a "firstparty" attribute
+  // containing a URI string, then it is returned.
+  nsCOMPtr<nsINode> node = aNode;
+  if (!node && aChannel) {
+    if (nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo()) {
+      node = loadInfo->LoadingNode();
+    }
+  }
+  if (node && node->IsElement() && node->OwnerDoc() &&
+      nsContentUtils::IsChromeDoc(node->OwnerDoc())) {
+    nsString firstparty;
+    node->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;
       }
     }
   }





More information about the tor-commits mailing list