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 "core/frame/csp/CSPSource.h" | 5 #include "core/frame/csp/CSPSource.h" |
6 | 6 |
7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" |
8 #include "core/frame/csp/ContentSecurityPolicy.h" | 8 #include "core/frame/csp/ContentSecurityPolicy.h" |
9 #include "platform/network/ResourceRequest.h" | 9 #include "platform/network/ResourceRequest.h" |
10 #include "platform/weborigin/KURL.h" | 10 #include "platform/weborigin/KURL.h" |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
438 CSPSource* required = new CSPSource( | 438 CSPSource* required = new CSPSource( |
439 csp.get(), test.b.scheme, test.b.host, test.b.port, test.b.path, | 439 csp.get(), test.b.scheme, test.b.host, test.b.port, test.b.path, |
440 CSPSource::NoWildcard, CSPSource::NoWildcard); | 440 CSPSource::NoWildcard, CSPSource::NoWildcard); |
441 | 441 |
442 EXPECT_EQ(returned->isSimilar(required), test.isSimilar); | 442 EXPECT_EQ(returned->isSimilar(required), test.isSimilar); |
443 // Verify the same test with a and b swapped. | 443 // Verify the same test with a and b swapped. |
444 EXPECT_EQ(required->isSimilar(returned), test.isSimilar); | 444 EXPECT_EQ(required->isSimilar(returned), test.isSimilar); |
445 } | 445 } |
446 } | 446 } |
447 | 447 |
448 TEST_F(CSPSourceTest, FirstSubsumesSecond) { | |
449 struct Source { | |
450 const char* scheme; | |
451 const char* host; | |
452 const char* path; | |
453 }; | |
454 struct TestCase { | |
455 const Source returned; | |
456 String requiredScheme; | |
457 bool expected; | |
458 } cases[] = { | |
459 // Subsumed. | |
460 {{"http", "example.com", "/"}, "http", true}, | |
461 {{"http", "example.com", "/page.html"}, "http", true}, | |
462 {{"http", "second-example.com", "/"}, "http", true}, | |
463 {{"https", "second-example.com", "/"}, "http", true}, | |
464 {{"http", "second-example.com", "/page.html"}, "http", true}, | |
465 {{"https", "second-example.com", "/page.html"}, "http", true}, | |
466 {{"https", "second-example.com", "/"}, "https", true}, | |
467 {{"https", "second-example.com", "/page.html"}, "https", true}, | |
468 // NOT subsumed. | |
Mike West
2016/11/10 15:04:54
Scheme-only expressions?
Ports?
| |
469 {{"wss", "second-example.com", "/"}, "http", false}, | |
470 {{"http", "non-example.com", "/"}, "http", false}, | |
471 {{"http", "second-example.com", "/"}, "https", false}, | |
472 }; | |
473 | |
474 for (const auto& test : cases) { | |
475 // Setup default vectors. | |
476 HeapVector<Member<CSPSource>> required; | |
477 HeapVector<Member<CSPSource>> returned; | |
Mike West
2016/11/10 15:04:54
I think |A| and |B| are probably simpler here. |re
| |
478 returned.append(new CSPSource(csp.get(), "http", "example.com", 0, "/", | |
Mike West
2016/11/10 15:04:55
You're creating these sources every time you go th
| |
479 CSPSource::NoWildcard, | |
480 CSPSource::NoWildcard)); | |
481 // Empty `required` implies `none` is allowed. | |
482 EXPECT_FALSE(CSPSource::firstSubsumesSecond(required, returned)); | |
483 | |
484 required.append(new CSPSource(csp.get(), "http", "example.com", 0, "/", | |
485 CSPSource::NoWildcard, | |
486 CSPSource::NoWildcard)); | |
487 // Add CSPSources based on the current test. | |
488 returned.append(new CSPSource( | |
489 csp.get(), test.returned.scheme, test.returned.host, 0, | |
490 test.returned.path, CSPSource::NoWildcard, CSPSource::NoWildcard)); | |
491 required.append( | |
492 new CSPSource(csp.get(), test.requiredScheme, "second-example.com", 0, | |
493 "/", CSPSource::NoWildcard, CSPSource::NoWildcard)); | |
494 // returned contains: ["http://example.com/", test.returned] | |
495 // required contains: ["http://example.com/", | |
496 // test.requiredScheme+"second-example.com/"] | |
497 EXPECT_EQ(test.expected, | |
498 CSPSource::firstSubsumesSecond(required, returned)); | |
499 | |
500 // If we add another source to `returned` with a host wildcard, | |
501 // then the result should definitely be false. | |
502 returned.append(new CSPSource(csp.get(), "http", "third-example.com", 0, | |
503 "/", CSPSource::HasWildcard, | |
504 CSPSource::NoWildcard)); | |
505 EXPECT_FALSE(CSPSource::firstSubsumesSecond(required, returned)); | |
506 | |
507 // If we add another source to `required` with a port wildcard, | |
508 // it does not make `returned` to be subsumed under `required`. | |
509 returned.append(new CSPSource(csp.get(), "http", "third-example.com", 0, | |
510 "/", CSPSource::NoWildcard, | |
511 CSPSource::HasWildcard)); | |
512 EXPECT_FALSE(CSPSource::firstSubsumesSecond(required, returned)); | |
513 | |
514 // If however we add another source to `required` with both wildcards, | |
515 // that CSPSource is subsumed, so the answer should be as expected | |
516 // before. | |
517 required.append(Member<CSPSource>( | |
518 new CSPSource(csp.get(), "http", "third-example.com", 0, "/", | |
519 CSPSource::HasWildcard, CSPSource::HasWildcard))); | |
520 EXPECT_EQ(test.expected, | |
521 CSPSource::firstSubsumesSecond(required, returned)); | |
522 } | |
523 } | |
524 | |
448 } // namespace blink | 525 } // namespace blink |
OLD | NEW |