OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 18 matching lines...) Expand all Loading... |
29 */ | 29 */ |
30 | 30 |
31 #include "platform/weborigin/SecurityOrigin.h" | 31 #include "platform/weborigin/SecurityOrigin.h" |
32 | 32 |
33 #include "platform/RuntimeEnabledFeatures.h" | 33 #include "platform/RuntimeEnabledFeatures.h" |
34 #include "platform/blob/BlobURL.h" | 34 #include "platform/blob/BlobURL.h" |
35 #include "platform/weborigin/KURL.h" | 35 #include "platform/weborigin/KURL.h" |
36 #include "platform/weborigin/SecurityPolicy.h" | 36 #include "platform/weborigin/SecurityPolicy.h" |
37 #include "platform/weborigin/Suborigin.h" | 37 #include "platform/weborigin/Suborigin.h" |
38 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
| 39 #include "url/url_util.h" |
39 #include "wtf/text/StringBuilder.h" | 40 #include "wtf/text/StringBuilder.h" |
40 #include "wtf/text/WTFString.h" | 41 #include "wtf/text/WTFString.h" |
41 | 42 |
42 namespace blink { | 43 namespace blink { |
43 | 44 |
44 const int MaxAllowedPort = 65535; | 45 const int MaxAllowedPort = 65535; |
45 | 46 |
46 class SecurityOriginTest : public ::testing::Test { }; | 47 class SecurityOriginTest : public ::testing::Test { |
| 48 public: |
| 49 void SetUp() override |
| 50 { |
| 51 url::AddStandardScheme("http-so", url::SCHEME_WITH_PORT); |
| 52 url::AddStandardScheme("https-so", url::SCHEME_WITH_PORT); |
| 53 } |
| 54 }; |
47 | 55 |
48 TEST_F(SecurityOriginTest, InvalidPortsCreateUniqueOrigins) | 56 TEST_F(SecurityOriginTest, InvalidPortsCreateUniqueOrigins) |
49 { | 57 { |
50 int ports[] = { -100, -1, MaxAllowedPort + 1, 1000000 }; | 58 int ports[] = { -100, -1, MaxAllowedPort + 1, 1000000 }; |
51 | 59 |
52 for (size_t i = 0; i < WTF_ARRAY_LENGTH(ports); ++i) { | 60 for (size_t i = 0; i < WTF_ARRAY_LENGTH(ports); ++i) { |
53 RefPtr<SecurityOrigin> origin = SecurityOrigin::create("http", "example.
com", ports[i]); | 61 RefPtr<SecurityOrigin> origin = SecurityOrigin::create("http", "example.
com", ports[i]); |
54 EXPECT_TRUE(origin->isUnique()) << "Port " << ports[i] << " should have
generated a unique origin."; | 62 EXPECT_TRUE(origin->isUnique()) << "Port " << ports[i] << " should have
generated a unique origin."; |
55 } | 63 } |
56 } | 64 } |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 RuntimeEnabledFeatures::setSuboriginsEnabled(true); | 229 RuntimeEnabledFeatures::setSuboriginsEnabled(true); |
222 | 230 |
223 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString("https://te
st.com"); | 231 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString("https://te
st.com"); |
224 Suborigin suborigin; | 232 Suborigin suborigin; |
225 suborigin.setName("foobar"); | 233 suborigin.setName("foobar"); |
226 EXPECT_FALSE(origin->hasSuborigin()); | 234 EXPECT_FALSE(origin->hasSuborigin()); |
227 origin->addSuborigin(suborigin); | 235 origin->addSuborigin(suborigin); |
228 EXPECT_TRUE(origin->hasSuborigin()); | 236 EXPECT_TRUE(origin->hasSuborigin()); |
229 EXPECT_EQ("foobar", origin->suborigin()->name()); | 237 EXPECT_EQ("foobar", origin->suborigin()->name()); |
230 | 238 |
231 origin = SecurityOrigin::createFromString("https://foobar_test.com"); | 239 origin = SecurityOrigin::createFromString("https-so://foobar.test.com"); |
232 EXPECT_EQ("https", origin->protocol()); | 240 EXPECT_EQ("https", origin->protocol()); |
233 EXPECT_EQ("test.com", origin->host()); | 241 EXPECT_EQ("test.com", origin->host()); |
234 EXPECT_EQ("foobar", origin->suborigin()->name()); | 242 EXPECT_EQ("foobar", origin->suborigin()->name()); |
235 | 243 |
236 origin = SecurityOrigin::createFromString("https://foobar_test.com"); | 244 origin = SecurityOrigin::createFromString("https-so://foobar.test.com"); |
237 EXPECT_TRUE(origin->hasSuborigin()); | 245 EXPECT_TRUE(origin->hasSuborigin()); |
238 EXPECT_EQ("foobar", origin->suborigin()->name()); | 246 EXPECT_EQ("foobar", origin->suborigin()->name()); |
239 | 247 |
240 origin = SecurityOrigin::createFromString("https://foobar+test.com"); | 248 origin = SecurityOrigin::createFromString("https://foobar+test.com"); |
241 EXPECT_FALSE(origin->hasSuborigin()); | 249 EXPECT_FALSE(origin->hasSuborigin()); |
242 | 250 |
| 251 origin = SecurityOrigin::createFromString("https.so://foobar+test.com"); |
| 252 EXPECT_FALSE(origin->hasSuborigin()); |
| 253 |
243 origin = SecurityOrigin::createFromString("https://_test.com"); | 254 origin = SecurityOrigin::createFromString("https://_test.com"); |
244 EXPECT_FALSE(origin->hasSuborigin()); | 255 EXPECT_FALSE(origin->hasSuborigin()); |
245 | 256 |
| 257 origin = SecurityOrigin::createFromString("https-so://_test.com"); |
| 258 EXPECT_TRUE(origin->hasSuborigin()); |
| 259 EXPECT_EQ("_test", origin->suborigin()->name()); |
| 260 |
| 261 origin = SecurityOrigin::createFromString("https-so-so://foobar.test.com"); |
| 262 EXPECT_FALSE(origin->hasSuborigin()); |
| 263 |
246 origin = adoptRef<SecurityOrigin>(new SecurityOrigin); | 264 origin = adoptRef<SecurityOrigin>(new SecurityOrigin); |
247 EXPECT_FALSE(origin->hasSuborigin()); | 265 EXPECT_FALSE(origin->hasSuborigin()); |
248 | 266 |
249 origin = SecurityOrigin::createFromString("https://foobar_test.com"); | 267 origin = SecurityOrigin::createFromString("https-so://foobar.test.com"); |
250 Suborigin emptySuborigin; | 268 Suborigin emptySuborigin; |
251 EXPECT_DEATH(origin->addSuborigin(emptySuborigin), ""); | 269 EXPECT_DEATH(origin->addSuborigin(emptySuborigin), ""); |
252 } | 270 } |
253 | 271 |
254 TEST_F(SecurityOriginTest, SuboriginsParsing) | 272 TEST_F(SecurityOriginTest, SuboriginsParsing) |
255 { | 273 { |
256 RuntimeEnabledFeatures::setSuboriginsEnabled(true); | 274 RuntimeEnabledFeatures::setSuboriginsEnabled(true); |
257 String host, realHost, suborigin; | 275 String protocol, realProtocol, host, realHost, suborigin; |
| 276 protocol = "https"; |
258 host = "test.com"; | 277 host = "test.com"; |
259 EXPECT_FALSE(SecurityOrigin::deserializeSuboriginAndHost(host, suborigin, re
alHost)); | 278 EXPECT_FALSE(SecurityOrigin::deserializeSuboriginAndProtocolAndHost(protocol
, host, suborigin, realProtocol, realHost)); |
260 | 279 |
261 host = "foobar_test.com"; | 280 protocol = "https-so"; |
262 EXPECT_TRUE(SecurityOrigin::deserializeSuboriginAndHost(host, suborigin, rea
lHost)); | 281 host = "foobar.test.com"; |
| 282 EXPECT_TRUE(SecurityOrigin::deserializeSuboriginAndProtocolAndHost(protocol,
host, suborigin, realProtocol, realHost)); |
| 283 EXPECT_EQ("https", realProtocol); |
263 EXPECT_EQ("test.com", realHost); | 284 EXPECT_EQ("test.com", realHost); |
264 EXPECT_EQ("foobar", suborigin); | 285 EXPECT_EQ("foobar", suborigin); |
265 | 286 |
266 RefPtr<SecurityOrigin> origin; | 287 RefPtr<SecurityOrigin> origin; |
267 StringBuilder builder; | 288 StringBuilder builder; |
268 | 289 |
269 origin = SecurityOrigin::createFromString("https://foobar_test.com"); | 290 origin = SecurityOrigin::createFromString("https-so://foobar.test.com"); |
270 origin->buildRawString(builder, true); | 291 origin->buildRawString(builder, true); |
271 EXPECT_EQ("https://foobar_test.com", builder.toString()); | 292 EXPECT_EQ("https-so://foobar.test.com", builder.toString()); |
272 EXPECT_EQ("https://foobar_test.com", origin->toString()); | 293 EXPECT_EQ("https-so://foobar.test.com", origin->toString()); |
273 builder.clear(); | 294 builder.clear(); |
274 origin->buildRawString(builder, false); | 295 origin->buildRawString(builder, false); |
275 EXPECT_EQ("https://test.com", builder.toString()); | 296 EXPECT_EQ("https://test.com", builder.toString()); |
276 EXPECT_EQ("https://test.com", origin->toPhysicalOriginString()); | 297 EXPECT_EQ("https://test.com", origin->toPhysicalOriginString()); |
277 | 298 |
278 Suborigin suboriginObj; | 299 Suborigin suboriginObj; |
279 suboriginObj.setName("foobar"); | 300 suboriginObj.setName("foobar"); |
280 builder.clear(); | 301 builder.clear(); |
281 origin = SecurityOrigin::createFromString("https://test.com"); | 302 origin = SecurityOrigin::createFromString("https://test.com"); |
282 origin->addSuborigin(suboriginObj); | 303 origin->addSuborigin(suboriginObj); |
283 origin->buildRawString(builder, true); | 304 origin->buildRawString(builder, true); |
284 EXPECT_EQ("https://foobar_test.com", builder.toString()); | 305 EXPECT_EQ("https-so://foobar.test.com", builder.toString()); |
285 EXPECT_EQ("https://foobar_test.com", origin->toString()); | 306 EXPECT_EQ("https-so://foobar.test.com", origin->toString()); |
286 builder.clear(); | 307 builder.clear(); |
287 origin->buildRawString(builder, false); | 308 origin->buildRawString(builder, false); |
288 EXPECT_EQ("https://test.com", builder.toString()); | 309 EXPECT_EQ("https://test.com", builder.toString()); |
289 EXPECT_EQ("https://test.com", origin->toPhysicalOriginString()); | 310 EXPECT_EQ("https://test.com", origin->toPhysicalOriginString()); |
290 } | 311 } |
291 | 312 |
292 TEST_F(SecurityOriginTest, SuboriginsIsSameSchemeHostPortAndSuborigin) | 313 TEST_F(SecurityOriginTest, SuboriginsIsSameSchemeHostPortAndSuborigin) |
293 { | 314 { |
294 blink::RuntimeEnabledFeatures::setSuboriginsEnabled(true); | 315 blink::RuntimeEnabledFeatures::setSuboriginsEnabled(true); |
295 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString("https://fo
obar_test.com"); | 316 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString("https-so:/
/foobar.test.com"); |
296 RefPtr<SecurityOrigin> other1 = SecurityOrigin::createFromString("https://ba
zbar_test.com"); | 317 RefPtr<SecurityOrigin> other1 = SecurityOrigin::createFromString("https-so:/
/bazbar.test.com"); |
297 RefPtr<SecurityOrigin> other2 = SecurityOrigin::createFromString("http://foo
bar_test.com"); | 318 RefPtr<SecurityOrigin> other2 = SecurityOrigin::createFromString("http-so://
foobar.test.com"); |
298 RefPtr<SecurityOrigin> other3 = SecurityOrigin::createFromString("https://fo
obar_test.com:1234"); | 319 RefPtr<SecurityOrigin> other3 = SecurityOrigin::createFromString("https-so:/
/foobar.test.com:1234"); |
299 RefPtr<SecurityOrigin> other4 = SecurityOrigin::createFromString("https://te
st.com"); | 320 RefPtr<SecurityOrigin> other4 = SecurityOrigin::createFromString("https://te
st.com"); |
300 | 321 |
301 EXPECT_TRUE(origin->isSameSchemeHostPortAndSuborigin(origin.get())); | 322 EXPECT_TRUE(origin->isSameSchemeHostPortAndSuborigin(origin.get())); |
302 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other1.get())); | 323 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other1.get())); |
303 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other2.get())); | 324 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other2.get())); |
304 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other3.get())); | 325 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other3.get())); |
305 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other4.get())); | 326 EXPECT_FALSE(origin->isSameSchemeHostPortAndSuborigin(other4.get())); |
306 } | 327 } |
307 | 328 |
308 TEST_F(SecurityOriginTest, CanAccess) | 329 TEST_F(SecurityOriginTest, CanAccess) |
309 { | 330 { |
310 RuntimeEnabledFeatures::setSuboriginsEnabled(true); | 331 RuntimeEnabledFeatures::setSuboriginsEnabled(true); |
311 | 332 |
312 struct TestCase { | 333 struct TestCase { |
313 bool canAccess; | 334 bool canAccess; |
314 bool canAccessCheckSuborigins; | 335 bool canAccessCheckSuborigins; |
315 const char* origin1; | 336 const char* origin1; |
316 const char* origin2; | 337 const char* origin2; |
317 }; | 338 }; |
318 | 339 |
319 TestCase tests[] = { | 340 TestCase tests[] = { |
320 { true, true, "https://foobar.com", "https://foobar.com" }, | 341 { true, true, "https://foobar.com", "https://foobar.com" }, |
321 { false, false, "https://foobar.com", "https://bazbar.com" }, | 342 { false, false, "https://foobar.com", "https://bazbar.com" }, |
322 { true, false, "https://foobar.com", "https://name_foobar.com" }, | 343 { true, false, "https://foobar.com", "https-so://name.foobar.com" }, |
323 { true, false, "https://name_foobar.com", "https://foobar.com" }, | 344 { true, false, "https-so://name.foobar.com", "https://foobar.com" }, |
324 { true, true, "https://name_foobar.com", "https://name_foobar.com" }, | 345 { true, true, "https-so://name.foobar.com", "https-so://name.foobar.com"
}, |
325 }; | 346 }; |
326 | 347 |
327 for (size_t i = 0; i < WTF_ARRAY_LENGTH(tests); ++i) { | 348 for (size_t i = 0; i < WTF_ARRAY_LENGTH(tests); ++i) { |
328 RefPtr<SecurityOrigin> origin1 = SecurityOrigin::createFromString(tests[
i].origin1); | 349 RefPtr<SecurityOrigin> origin1 = SecurityOrigin::createFromString(tests[
i].origin1); |
329 RefPtr<SecurityOrigin> origin2 = SecurityOrigin::createFromString(tests[
i].origin2); | 350 RefPtr<SecurityOrigin> origin2 = SecurityOrigin::createFromString(tests[
i].origin2); |
330 EXPECT_EQ(tests[i].canAccess, origin1->canAccess(origin2.get())); | 351 EXPECT_EQ(tests[i].canAccess, origin1->canAccess(origin2.get())); |
331 EXPECT_EQ(tests[i].canAccessCheckSuborigins, origin1->canAccessCheckSubo
rigins(origin2.get())); | 352 EXPECT_EQ(tests[i].canAccessCheckSuborigins, origin1->canAccessCheckSubo
rigins(origin2.get())); |
332 } | 353 } |
333 } | 354 } |
334 | 355 |
335 TEST_F(SecurityOriginTest, CanRequest) | 356 TEST_F(SecurityOriginTest, CanRequest) |
336 { | 357 { |
337 RuntimeEnabledFeatures::setSuboriginsEnabled(true); | 358 RuntimeEnabledFeatures::setSuboriginsEnabled(true); |
338 | 359 |
339 struct TestCase { | 360 struct TestCase { |
340 bool canRequest; | 361 bool canRequest; |
341 bool canRequestNoSuborigin; | 362 bool canRequestNoSuborigin; |
342 const char* origin; | 363 const char* origin; |
343 const char* url; | 364 const char* url; |
344 }; | 365 }; |
345 | 366 |
346 TestCase tests[] = { | 367 TestCase tests[] = { |
347 { true, true, "https://foobar.com", "https://foobar.com" }, | 368 { true, true, "https://foobar.com", "https://foobar.com" }, |
348 { false, false, "https://foobar.com", "https://bazbar.com" }, | 369 { false, false, "https://foobar.com", "https://bazbar.com" }, |
349 { true, false, "https://name_foobar.com", "https://foobar.com" }, | 370 { true, false, "https-so://name.foobar.com", "https://foobar.com" }, |
350 { false, false, "https://name_foobar.com", "https://bazbar.com" }, | 371 { false, false, "https-so://name.foobar.com", "https://bazbar.com" }, |
351 }; | 372 }; |
352 | 373 |
353 for (size_t i = 0; i < WTF_ARRAY_LENGTH(tests); ++i) { | 374 for (size_t i = 0; i < WTF_ARRAY_LENGTH(tests); ++i) { |
354 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString(tests[i
].origin); | 375 RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString(tests[i
].origin); |
355 blink::KURL url(blink::ParsedURLString, tests[i].url); | 376 blink::KURL url(blink::ParsedURLString, tests[i].url); |
356 EXPECT_EQ(tests[i].canRequest, origin->canRequest(url)); | 377 EXPECT_EQ(tests[i].canRequest, origin->canRequest(url)); |
357 EXPECT_EQ(tests[i].canRequestNoSuborigin, origin->canRequestNoSuborigin(
url)); | 378 EXPECT_EQ(tests[i].canRequestNoSuborigin, origin->canRequestNoSuborigin(
url)); |
358 } | 379 } |
359 } | 380 } |
360 | 381 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 RefPtr<SecurityOrigin> uniqueOrigin = SecurityOrigin::createUnique(); | 461 RefPtr<SecurityOrigin> uniqueOrigin = SecurityOrigin::createUnique(); |
441 RefPtr<SecurityOrigin> tupleOrigin = SecurityOrigin::createFromString("http:
//example.com"); | 462 RefPtr<SecurityOrigin> tupleOrigin = SecurityOrigin::createFromString("http:
//example.com"); |
442 | 463 |
443 EXPECT_TRUE(uniqueOrigin->isSameSchemeHostPort(uniqueOrigin.get())); | 464 EXPECT_TRUE(uniqueOrigin->isSameSchemeHostPort(uniqueOrigin.get())); |
444 EXPECT_FALSE(SecurityOrigin::createUnique()->isSameSchemeHostPort(uniqueOrig
in.get())); | 465 EXPECT_FALSE(SecurityOrigin::createUnique()->isSameSchemeHostPort(uniqueOrig
in.get())); |
445 EXPECT_FALSE(tupleOrigin->isSameSchemeHostPort(uniqueOrigin.get())); | 466 EXPECT_FALSE(tupleOrigin->isSameSchemeHostPort(uniqueOrigin.get())); |
446 EXPECT_FALSE(uniqueOrigin->isSameSchemeHostPort(tupleOrigin.get())); | 467 EXPECT_FALSE(uniqueOrigin->isSameSchemeHostPort(tupleOrigin.get())); |
447 } | 468 } |
448 | 469 |
449 } // namespace blink | 470 } // namespace blink |
OLD | NEW |