[tor-commits] [tor-browser/tor-browser-24.1.1esr-1] fixup! Add mozIThirdPartyUtil.getFirstPartyURI API

mikeperry at torproject.org mikeperry at torproject.org
Mon Dec 9 04:49:21 UTC 2013


commit 2df3a6e502c52c4a8e3bc34921aad0eda80af340
Author: Kathy Brade <brade at pearlcrescent.com>
Date:   Fri Dec 6 10:54:24 2013 -0500

    fixup! Add mozIThirdPartyUtil.getFirstPartyURI API
    
    Add mozIThirdPartyUtil.getFirstPartyURIFromChannel() API.
    
    Marked getFirstPartyURI() as [noscript] since it cannot be
    called from JS due to its use of an nsIDocument parameter.
    See Tor bug # 8167.
---
 content/base/src/ThirdPartyUtil.cpp        |   20 +++++++++++++++++++-
 content/base/src/ThirdPartyUtil.h          |    2 ++
 netwerk/base/public/mozIThirdPartyUtil.idl |   24 ++++++++++++++++++++++--
 3 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/content/base/src/ThirdPartyUtil.cpp b/content/base/src/ThirdPartyUtil.cpp
index 6c17974..55eb316 100644
--- a/content/base/src/ThirdPartyUtil.cpp
+++ b/content/base/src/ThirdPartyUtil.cpp
@@ -411,11 +411,21 @@ ThirdPartyUtil::GetBaseDomain(nsIURI* aHostURI,
   return NS_OK;
 }
 
+// Not scriptable due to the use of an nsIDocument parameter.
 NS_IMETHODIMP
 ThirdPartyUtil::GetFirstPartyURI(nsIChannel *aChannel,
                                  nsIDocument *aDoc,
                                  nsIURI **aOutput)
 {
+  return GetFirstPartyURIInternal(aChannel, aDoc, true, aOutput);
+}
+
+nsresult
+ThirdPartyUtil::GetFirstPartyURIInternal(nsIChannel *aChannel,
+                                         nsIDocument *aDoc,
+                                         bool aLogErrors,
+                                         nsIURI **aOutput)
+{
   nsresult rv = NS_ERROR_NULL_POINTER;
 
   if (!aOutput)
@@ -490,7 +500,7 @@ ThirdPartyUtil::GetFirstPartyURI(nsIChannel *aChannel,
   }
 
   // Log failure to error console.
-  if (NS_FAILED(rv)) {
+  if (aLogErrors && NS_FAILED(rv)) {
     nsCOMPtr<nsIConsoleService> console
                               (do_GetService(NS_CONSOLESERVICE_CONTRACTID));
     if (console) {
@@ -525,6 +535,14 @@ ThirdPartyUtil::GetFirstPartyURI(nsIChannel *aChannel,
 }
 
 NS_IMETHODIMP
+ThirdPartyUtil::GetFirstPartyURIFromChannel(nsIChannel *aChannel,
+                                            bool aLogErrors,
+                                            nsIURI **aOutput)
+{
+  return GetFirstPartyURIInternal(aChannel, nullptr, aLogErrors, aOutput);
+}
+
+NS_IMETHODIMP
 ThirdPartyUtil::GetFirstPartyHostForIsolation(nsIURI *aFirstPartyURI,
                                               nsACString& aHost)
 {
diff --git a/content/base/src/ThirdPartyUtil.h b/content/base/src/ThirdPartyUtil.h
index 93d3e1f..8777f44 100644
--- a/content/base/src/ThirdPartyUtil.h
+++ b/content/base/src/ThirdPartyUtil.h
@@ -30,6 +30,8 @@ private:
   bool SchemeIsWhiteListed(nsIURI *aURI);
   static already_AddRefed<nsIURI> GetURIFromWindow(nsIDOMWindow* aWin);
   static nsresult GetOriginatingURI(nsIChannel  *aChannel, nsIURI **aURI);
+  nsresult GetFirstPartyURIInternal(nsIChannel *aChannel, nsIDocument *aDoc,
+                                    bool aLogErrors, nsIURI **aOutput);
 
   nsCOMPtr<nsIEffectiveTLDService> mTLDService;
   nsCOMPtr<nsICookiePermission> mCookiePermissions;
diff --git a/netwerk/base/public/mozIThirdPartyUtil.idl b/netwerk/base/public/mozIThirdPartyUtil.idl
index b602ac3..6137274 100644
--- a/netwerk/base/public/mozIThirdPartyUtil.idl
+++ b/netwerk/base/public/mozIThirdPartyUtil.idl
@@ -161,8 +161,28 @@ interface mozIThirdPartyUtil : nsISupports
    * @throws if the URI cannot be obtained or the URI lacks a hostname and the
    *         URI's scheme is not white listed.
    */
-  nsIURI getFirstPartyURI(in nsIChannel aChannel,
-                          in nsIDocument aDoc);
+  [noscript] nsIURI getFirstPartyURI(in nsIChannel aChannel,
+                                     in nsIDocument aDoc);
+
+  /**
+   * getFirstPartyURIFromChannel
+   *
+   * Obtain the top-level url bar URI for a channel.
+   *
+   * @param aChannel
+   *        An arbitrary channel for some content element of a first party
+   *        load.
+   *
+   * @param aLogErrors
+   *        If true, log errors to the Error Console.
+   *
+   * @return the first party url bar URI for the load.
+   *
+   * @throws if the URI cannot be obtained or the URI lacks a hostname and the
+   *         URI's scheme is not white listed.
+   */
+  nsIURI getFirstPartyURIFromChannel(in nsIChannel aChannel,
+                                     in bool aLogErrors);
 
   /**
    * getFirstPartyHostForIsolation



More information about the tor-commits mailing list