Make kUseRegistrableDomainInNetworkIsolationKey only affect HTTP origins.

Previously, it would make NetworkIsolationKeys replace hostnames with
eTLD+1's regardless of scheme.

Bug: 1030824
Change-Id: I79889920ed99f8d13d7a470e6aa2b2f7ac480f6c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1972577
Reviewed-by: Shivani Sharma <[email protected]>
Commit-Queue: Matt Menke <[email protected]>
Cr-Commit-Position: refs/heads/master@{#725963}
diff --git a/net/base/network_isolation_key_unittest.cc b/net/base/network_isolation_key_unittest.cc
index af421263..43b3f19 100644
--- a/net/base/network_isolation_key_unittest.cc
+++ b/net/base/network_isolation_key_unittest.cc
@@ -11,6 +11,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 #include "url/origin.h"
+#include "url/url_util.h"
 
 namespace net {
 
@@ -490,6 +491,30 @@
   EXPECT_EQ(key_copied, key_bar);
 }
 
+// Make sure that kUseRegistrableDomainInNetworkIsolationKey does not affect the
+// host when using a non-standard scheme.
+TEST(NetworkIsolationKeyTest, UseRegistrableDomainWithNonStandardScheme) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      features::kUseRegistrableDomainInNetworkIsolationKey);
+
+  // Have to register the scheme, or url::Origin::Create() will return an opaque
+  // origin.
+  url::AddStandardScheme("foo", url::SCHEME_WITH_HOST);
+
+  url::Origin origin = url::Origin::Create(GURL("foo://a.foo.com"));
+  ASSERT_FALSE(origin.opaque());
+  ASSERT_EQ(origin.scheme(), "foo");
+  ASSERT_EQ(origin.host(), "a.foo.com");
+
+  net::NetworkIsolationKey key(origin, origin);
+  EXPECT_EQ(origin, key.GetTopFrameOrigin());
+  EXPECT_FALSE(key.GetTopFrameOrigin()->opaque());
+  EXPECT_EQ(key.GetTopFrameOrigin()->scheme(), "foo");
+  EXPECT_EQ(key.GetTopFrameOrigin()->host(), "a.foo.com");
+  EXPECT_EQ(origin.Serialize(), key.ToString());
+}
+
 TEST_F(NetworkIsolationKeyWithFrameOriginTest, CreateWithNewFrameOrigin) {
   url::Origin origin_a = url::Origin::Create(GURL("http://a.com"));
   url::Origin origin_b = url::Origin::Create(GURL("http://b.com"));