[tbb-commits] [tor-browser/tor-browser-60.6.1esr-8.5-1] Bug 1542309 - Set firstPartyDomain to public suffix if getBaseDomain fails. r=baku
gk at torproject.org
gk at torproject.org
Tue Apr 23 10:46:55 UTC 2019
commit c722d57604db58695140d95565a78433989fe9ca
Author: Alex Catarineu <acat at torproject.org>
Date: Fri Apr 12 15:44:40 2019 +0000
Bug 1542309 - Set firstPartyDomain to public suffix if getBaseDomain fails. r=baku
Right now the firstPartyDomain is not set when host is in the public suffix list. The patch fixes it by setting firstPartyDomain to eTLD.getPublicSuffix in these cases.
Differential Revision: https://phabricator.services.mozilla.com/D26767
--HG--
extra : moz-landing-system : lando
---
caps/OriginAttributes.cpp | 11 +++++++++++
caps/tests/gtest/TestOriginAttributes.cpp | 28 ++++++++++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/caps/OriginAttributes.cpp b/caps/OriginAttributes.cpp
index 8a501f18010c..7dc79e7c1b9a 100644
--- a/caps/OriginAttributes.cpp
+++ b/caps/OriginAttributes.cpp
@@ -78,6 +78,8 @@ void OriginAttributes::SetFirstPartyDomain(const bool aIsTopLevelDocument,
return;
}
+ // Saving isInsufficientDomainLevels before rv is overwritten.
+ bool isInsufficientDomainLevels = (rv == NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS);
nsAutoCString scheme;
rv = aURI->GetScheme(scheme);
NS_ENSURE_SUCCESS_VOID(rv);
@@ -96,6 +98,15 @@ void OriginAttributes::SetFirstPartyDomain(const bool aIsTopLevelDocument,
}
}
}
+
+ if (isInsufficientDomainLevels) {
+ nsAutoCString publicSuffix;
+ rv = tldService->GetPublicSuffix(aURI, publicSuffix);
+ if (NS_SUCCEEDED(rv)) {
+ mFirstPartyDomain = NS_ConvertUTF8toUTF16(publicSuffix);
+ }
+ return;
+ }
}
void OriginAttributes::SetFirstPartyDomain(const bool aIsTopLevelDocument,
diff --git a/caps/tests/gtest/TestOriginAttributes.cpp b/caps/tests/gtest/TestOriginAttributes.cpp
index ffa4349939e4..12090bbbf1a5 100644
--- a/caps/tests/gtest/TestOriginAttributes.cpp
+++ b/caps/tests/gtest/TestOriginAttributes.cpp
@@ -3,8 +3,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "gtest/gtest.h"
#include "mozilla/BasePrincipal.h"
+#include "mozilla/Preferences.h"
+#include "nsNetUtil.h"
using mozilla::OriginAttributes;
+using mozilla::Preferences;
static void TestSuffix(const OriginAttributes& attrs) {
nsAutoCString suffix;
@@ -17,6 +20,14 @@ static void TestSuffix(const OriginAttributes& attrs) {
EXPECT_EQ(attrs, attrsFromSuffix);
}
+static void TestFPD(const nsAString &spec, const nsAString &fpd) {
+ OriginAttributes attrs;
+ nsCOMPtr<nsIURI> url;
+ ASSERT_EQ(NS_NewURI(getter_AddRefs(url), spec), NS_OK);
+ attrs.SetFirstPartyDomain(true, url);
+ EXPECT_TRUE(attrs.mFirstPartyDomain.Equals(fpd));
+}
+
TEST(OriginAttributes, Suffix_default) {
OriginAttributes attrs;
TestSuffix(attrs);
@@ -31,3 +42,20 @@ TEST(OriginAttributes, Suffix_maxAppId_inIsolatedMozBrowser) {
OriginAttributes attrs(4294967295, true);
TestSuffix(attrs);
}
+
+TEST(OriginAttributes, FirstPartyDomain_default) {
+ static const char prefKey[] = "privacy.firstparty.isolate";
+ bool oldPref = Preferences::GetBool(prefKey);
+ Preferences::SetBool(prefKey, true);
+ TestFPD(NS_LITERAL_STRING("http://www.example.com"),
+ NS_LITERAL_STRING("example.com"));
+ TestFPD(NS_LITERAL_STRING("http://s3.amazonaws.com"),
+ NS_LITERAL_STRING("s3.amazonaws.com"));
+ TestFPD(NS_LITERAL_STRING("http://com"), NS_LITERAL_STRING("com"));
+ TestFPD(NS_LITERAL_STRING("http://.com"), NS_LITERAL_STRING(""));
+ TestFPD(NS_LITERAL_STRING("http://..com"), NS_LITERAL_STRING(""));
+ TestFPD(NS_LITERAL_STRING("http://127.0.0.1"),
+ NS_LITERAL_STRING("127.0.0.1"));
+ TestFPD(NS_LITERAL_STRING("http://[::1]"), NS_LITERAL_STRING("[::1]"));
+ Preferences::SetBool(prefKey, oldPref);
+}
More information about the tbb-commits
mailing list