| 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
|
|
|