OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 {"https://example.com:123/", "https://example.com:123"}, | 144 {"https://example.com:123/", "https://example.com:123"}, |
145 {"file:///etc/passwd", "file://"}, | 145 {"file:///etc/passwd", "file://"}, |
146 {"file://example.com/etc/passwd", "file://"}, | 146 {"file://example.com/etc/passwd", "file://"}, |
147 }; | 147 }; |
148 | 148 |
149 for (const auto& test_case : cases) { | 149 for (const auto& test_case : cases) { |
150 SCOPED_TRACE(test_case.url); | 150 SCOPED_TRACE(test_case.url); |
151 GURL url(test_case.url); | 151 GURL url(test_case.url); |
152 EXPECT_TRUE(url.is_valid()); | 152 EXPECT_TRUE(url.is_valid()); |
153 url::Origin origin(url); | 153 url::Origin origin(url); |
| 154 EXPECT_TRUE(origin.suborigin().empty()); |
154 std::string serialized = origin.Serialize(); | 155 std::string serialized = origin.Serialize(); |
| 156 std::string serialized_physical_origin = origin.SerializePhysicalOrigin(); |
155 ExpectParsedUrlsEqual(GURL(serialized), origin.GetURL()); | 157 ExpectParsedUrlsEqual(GURL(serialized), origin.GetURL()); |
156 | 158 |
157 EXPECT_EQ(test_case.expected, serialized); | 159 EXPECT_EQ(test_case.expected, serialized); |
| 160 EXPECT_EQ(test_case.expected, serialized_physical_origin); |
158 | 161 |
159 // The '<<' operator should produce the same serialization as Serialize(). | 162 // The '<<' operator should produce the same serialization as Serialize(). |
160 std::stringstream out; | 163 std::stringstream out; |
161 out << origin; | 164 out << origin; |
162 EXPECT_EQ(test_case.expected, out.str()); | 165 EXPECT_EQ(test_case.expected, out.str()); |
163 } | 166 } |
164 } | 167 } |
165 | 168 |
| 169 TEST(OriginTest, SuboriginSerialization) { |
| 170 struct TestCases { |
| 171 const char* const url; |
| 172 const char* const expected; |
| 173 const char* const expected_physical_origin; |
| 174 const char* const expected_suborigin; |
| 175 } cases[] = { |
| 176 {"http-so://foobar.example.com/", "http-so://foobar.example.com", |
| 177 "http://example.com", "foobar"}, |
| 178 {"http-so://foobar.example.com:123/", "http-so://foobar.example.com:123", |
| 179 "http://example.com:123", "foobar"}, |
| 180 {"https-so://foobar.example.com/", "https-so://foobar.example.com", |
| 181 "https://example.com", "foobar"}, |
| 182 {"https-so://foobar.example.com:123/", |
| 183 "https-so://foobar.example.com:123", "https://example.com:123", |
| 184 "foobar"}, |
| 185 {"http://example.com/", "http://example.com", "http://example.com", ""}, |
| 186 {"http-so://foobar.example.com/some/path", "http-so://foobar.example.com", |
| 187 "http://example.com", "foobar"}, |
| 188 {"http-so://foobar.example.com/some/path?query", |
| 189 "http-so://foobar.example.com", "http://example.com", "foobar"}, |
| 190 {"http-so://foobar.example.com/some/path#fragment", |
| 191 "http-so://foobar.example.com", "http://example.com", "foobar"}, |
| 192 {"http-so://foobar.example.com/some/path?query#fragment", |
| 193 "http-so://foobar.example.com", "http://example.com", "foobar"}, |
| 194 {"http-so://foobar.example.com:1234/some/path?query#fragment", |
| 195 "http-so://foobar.example.com:1234", "http://example.com:1234", |
| 196 "foobar"}, |
| 197 }; |
| 198 |
| 199 for (const auto& test_case : cases) { |
| 200 SCOPED_TRACE(test_case.url); |
| 201 GURL url(test_case.url); |
| 202 EXPECT_TRUE(url.is_valid()); |
| 203 url::Origin origin(url); |
| 204 std::string serialized = origin.Serialize(); |
| 205 std::string serialized_physical_origin = origin.SerializePhysicalOrigin(); |
| 206 EXPECT_FALSE(origin.unique()); |
| 207 EXPECT_EQ(test_case.expected_suborigin, origin.suborigin()); |
| 208 ExpectParsedUrlsEqual(GURL(serialized), origin.GetURL()); |
| 209 |
| 210 EXPECT_EQ(test_case.expected, serialized); |
| 211 EXPECT_EQ(test_case.expected_physical_origin, serialized_physical_origin); |
| 212 |
| 213 // The '<<' operator should produce the same serialization as Serialize(). |
| 214 std::stringstream out; |
| 215 out << origin; |
| 216 EXPECT_EQ(test_case.expected, out.str()); |
| 217 } |
| 218 |
| 219 const char* const failure_cases[] = { |
| 220 "http-so://.", "http-so://foo", "http-so://.foo", "http-so://foo.", |
| 221 "https-so://.", "https-so://foo", "https-so://.foo", "https-so://foo.", |
| 222 }; |
| 223 |
| 224 for (const auto& test_case : failure_cases) { |
| 225 SCOPED_TRACE(test_case); |
| 226 GURL url(test_case); |
| 227 EXPECT_TRUE(url.is_valid()); |
| 228 url::Origin origin(url); |
| 229 std::string serialized = origin.Serialize(); |
| 230 std::string serialized_physical_origin = origin.SerializePhysicalOrigin(); |
| 231 EXPECT_TRUE(origin.unique()); |
| 232 EXPECT_EQ("", origin.suborigin()); |
| 233 ExpectParsedUrlsEqual(GURL(serialized), origin.GetURL()); |
| 234 |
| 235 EXPECT_EQ("null", serialized); |
| 236 EXPECT_EQ("null", serialized_physical_origin); |
| 237 } |
| 238 } |
| 239 |
| 240 TEST(OriginTest, SuboriginIsSameOriginWith) { |
| 241 struct TestCases { |
| 242 const char* const url1; |
| 243 const char* const url2; |
| 244 bool is_same_origin; |
| 245 bool is_same_physical_origin; |
| 246 } cases[]{ |
| 247 {"http-so://foobar1.example.com/", "http-so://foobar1.example.com", true, |
| 248 true}, |
| 249 {"http-so://foobar2.example.com/", "https-so://foobar2.example.com", |
| 250 false, false}, |
| 251 {"http-so://foobar3.example.com/", "http://example.com", false, true}, |
| 252 {"https-so://foobar4.example.com/", "https-so://foobar4.example.com", |
| 253 true, true}, |
| 254 {"https-so://foobar5.example.com/", "https://example.com", false, true}, |
| 255 {"http-so://foobar6.example.com/", "http-so://bazbar.example.com", false, |
| 256 true}, |
| 257 {"http-so://foobar7.example.com/", "http-so://foobar7.google.com", false, |
| 258 false}, |
| 259 }; |
| 260 |
| 261 for (const auto& test_case : cases) { |
| 262 SCOPED_TRACE(test_case.url1); |
| 263 url::Origin origin1(GURL(test_case.url1)); |
| 264 url::Origin origin2(GURL(test_case.url2)); |
| 265 |
| 266 EXPECT_TRUE(origin1.IsSameOriginWith(origin1)); |
| 267 EXPECT_TRUE(origin2.IsSameOriginWith(origin2)); |
| 268 EXPECT_EQ(test_case.is_same_origin, origin1.IsSameOriginWith(origin2)); |
| 269 EXPECT_EQ(test_case.is_same_origin, origin2.IsSameOriginWith(origin1)); |
| 270 |
| 271 EXPECT_TRUE(origin1.IsSamePhysicalOriginWith(origin1)); |
| 272 EXPECT_TRUE(origin2.IsSamePhysicalOriginWith(origin2)); |
| 273 EXPECT_EQ(test_case.is_same_physical_origin, |
| 274 origin1.IsSamePhysicalOriginWith(origin2)); |
| 275 EXPECT_EQ(test_case.is_same_physical_origin, |
| 276 origin2.IsSamePhysicalOriginWith(origin1)); |
| 277 } |
| 278 } |
| 279 |
166 TEST(OriginTest, Comparison) { | 280 TEST(OriginTest, Comparison) { |
167 // These URLs are arranged in increasing order: | 281 // These URLs are arranged in increasing order: |
168 const char* const urls[] = { | 282 const char* const urls[] = { |
169 "data:uniqueness", | 283 "data:uniqueness", |
170 "http://a:80", | 284 "http://a:80", |
171 "http://b:80", | 285 "http://b:80", |
172 "https://a:80", | 286 "https://a:80", |
173 "https://b:80", | 287 "https://b:80", |
174 "http://a:81", | 288 "http://a:81", |
175 "http://b:81", | 289 "http://b:81", |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 GURL invalid_url("google.com"); | 450 GURL invalid_url("google.com"); |
337 ASSERT_FALSE(invalid_url.is_valid()); | 451 ASSERT_FALSE(invalid_url.is_valid()); |
338 EXPECT_FALSE(url::Origin(invalid_url).DomainIs("google.com")); | 452 EXPECT_FALSE(url::Origin(invalid_url).DomainIs("google.com")); |
339 | 453 |
340 // Unique origins. | 454 // Unique origins. |
341 EXPECT_FALSE(url::Origin().DomainIs("")); | 455 EXPECT_FALSE(url::Origin().DomainIs("")); |
342 EXPECT_FALSE(url::Origin().DomainIs("com")); | 456 EXPECT_FALSE(url::Origin().DomainIs("com")); |
343 } | 457 } |
344 | 458 |
345 } // namespace url | 459 } // namespace url |
OLD | NEW |