Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(310)

Unified Diff: url/origin_unittest.cc

Issue 2714813003: Add an identity component for unique/opaque url::Origins.
Patch Set: Switch to base::UnguessableToken, add to SecurityOrigin. No conversions yet. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « url/origin.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: url/origin_unittest.cc
diff --git a/url/origin_unittest.cc b/url/origin_unittest.cc
index a5c30426f346214213f94c2b46c7da5924e48b89..697cbcf269e115505807c55ec94243cc98db44d7 100644
--- a/url/origin_unittest.cc
+++ b/url/origin_unittest.cc
@@ -5,6 +5,8 @@
#include <stddef.h>
#include <stdint.h>
+#include <map>
+
#include "base/logging.h"
#include "base/macros.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -41,7 +43,7 @@ TEST(OriginTest, UniqueOriginComparison) {
EXPECT_EQ("", unique_origin.host());
EXPECT_EQ(0, unique_origin.port());
EXPECT_TRUE(unique_origin.unique());
- EXPECT_FALSE(unique_origin.IsSameOriginWith(unique_origin));
+ EXPECT_TRUE(unique_origin.IsSameOriginWith(unique_origin));
const char* const urls[] = {"data:text/html,Hello!",
"javascript:alert(1)",
@@ -53,15 +55,24 @@ TEST(OriginTest, UniqueOriginComparison) {
SCOPED_TRACE(test_url);
GURL url(test_url);
url::Origin origin(url);
+ url::Origin origin_copy(origin);
EXPECT_EQ("", origin.scheme());
EXPECT_EQ("", origin.host());
EXPECT_EQ(0, origin.port());
EXPECT_TRUE(origin.unique());
- EXPECT_FALSE(origin.IsSameOriginWith(origin));
+ EXPECT_TRUE(origin.IsSameOriginWith(origin));
EXPECT_FALSE(unique_origin.IsSameOriginWith(origin));
EXPECT_FALSE(origin.IsSameOriginWith(unique_origin));
ExpectParsedUrlsEqual(GURL(origin.Serialize()), origin.GetURL());
+
+ // A unique origin should always be same origin to itself…
+ EXPECT_TRUE(origin.IsSameOriginWith(origin_copy));
+
+ // …but it shouldn't be same origin if it's created again.
+ url::Origin origin2(url);
+ EXPECT_FALSE(origin.IsSameOriginWith(origin2));
+ EXPECT_FALSE(origin2.IsSameOriginWith(origin));
}
}
@@ -321,26 +332,18 @@ TEST(OriginTest, SuboriginIsSameOriginWith) {
TEST(OriginTest, Comparison) {
// These URLs are arranged in increasing order:
- const char* const urls[] = {
- "data:uniqueness",
- "http://a:80",
- "http://b:80",
- "https://a:80",
- "https://b:80",
- "http://a:81",
- "http://b:81",
- "https://a:81",
- "https://b:81",
+ url::Origin origins[] = {
+ url::Origin(GURL("data:uniqueness")), url::Origin(GURL("http://a:80")),
+ url::Origin(GURL("http://b:80")), url::Origin(GURL("https://a:80")),
+ url::Origin(GURL("https://b:80")), url::Origin(GURL("http://a:81")),
+ url::Origin(GURL("http://b:81")), url::Origin(GURL("https://a:81")),
+ url::Origin(GURL("https://b:81")),
};
- for (size_t i = 0; i < arraysize(urls); i++) {
- GURL current_url(urls[i]);
- url::Origin current(current_url);
- for (size_t j = i; j < arraysize(urls); j++) {
- GURL compare_url(urls[j]);
- url::Origin to_compare(compare_url);
- EXPECT_EQ(i < j, current < to_compare) << i << " < " << j;
- EXPECT_EQ(j < i, to_compare < current) << j << " < " << i;
+ for (size_t i = 0; i < arraysize(origins); i++) {
+ for (size_t j = i; j < arraysize(origins); j++) {
+ EXPECT_EQ(i < j, origins[i] < origins[j]) << i << " < " << j;
+ EXPECT_EQ(j < i, origins[j] < origins[i]) << j << " < " << i;
}
}
}
@@ -405,9 +408,17 @@ TEST(OriginTest, UnsafelyCreateUniqueOnInvalidInput) {
EXPECT_EQ("", origin.host());
EXPECT_EQ(0, origin.port());
EXPECT_TRUE(origin.unique());
- EXPECT_FALSE(origin.IsSameOriginWith(origin));
ExpectParsedUrlsEqual(GURL(origin.Serialize()), origin.GetURL());
+
+ // A unique origin should always be same origin to itself…
+ EXPECT_TRUE(origin.IsSameOriginWith(origin));
+
+ // …but it shouldn't be same origin if it's created again.
+ url::Origin origin2 = url::Origin::UnsafelyCreateOriginWithoutNormalization(
+ test.scheme, test.host, test.port);
+ EXPECT_FALSE(origin.IsSameOriginWith(origin2));
+ EXPECT_FALSE(origin2.IsSameOriginWith(origin));
}
}
@@ -435,9 +446,18 @@ TEST(OriginTest, UnsafelyCreateUniqueViaEmbeddedNulls) {
EXPECT_EQ("", origin.host());
EXPECT_EQ(0, origin.port());
EXPECT_TRUE(origin.unique());
- EXPECT_FALSE(origin.IsSameOriginWith(origin));
ExpectParsedUrlsEqual(GURL(origin.Serialize()), origin.GetURL());
+
+ // A unique origin should always be same origin to itself…
+ EXPECT_TRUE(origin.IsSameOriginWith(origin));
+
+ // …but it shouldn't be same origin if it's created again.
+ url::Origin origin2 = url::Origin::UnsafelyCreateOriginWithoutNormalization(
+ std::string(test.scheme, test.scheme_length),
+ std::string(test.host, test.host_length), test.port);
+ EXPECT_FALSE(origin.IsSameOriginWith(origin2));
+ EXPECT_FALSE(origin2.IsSameOriginWith(origin));
}
}
@@ -498,4 +518,33 @@ TEST(OriginTest, DomainIs) {
EXPECT_FALSE(url::Origin().DomainIs("com"));
}
+TEST(OriginTest, UniqueOriginsInSet) {
+ std::set<url::Origin> origins;
+ EXPECT_TRUE(origins.empty());
+
+ url::Origin origin1;
+ origins.insert(origin1);
+ EXPECT_EQ(1u, origins.size());
+ EXPECT_TRUE(origins.find(origin1) != origins.end());
+
+ url::Origin origin2;
+ origins.insert(origin2);
+ EXPECT_EQ(2u, origins.size());
+ EXPECT_TRUE(origins.find(origin2) != origins.end());
+
+ {
+ auto result = origins.insert(origin1);
+ EXPECT_FALSE(result.second);
+ EXPECT_TRUE(origin1.IsSameOriginWith(*result.first));
+ }
+
+ {
+ auto result = origins.insert(origin2);
+ EXPECT_FALSE(result.second);
+ EXPECT_TRUE(origin2.IsSameOriginWith(*result.first));
+ }
+
+ EXPECT_EQ(2u, origins.size());
+}
+
} // namespace url
« no previous file with comments | « url/origin.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698