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

Side by Side Diff: ppapi/tests/test_url_loader.cc

Issue 8857003: Consolidate tests for HTTP request restrictions on untrusted loaders. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/tests/test_url_loader.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ppapi/tests/test_url_loader.h" 5 #include "ppapi/tests/test_url_loader.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <string.h> 8 #include <string.h>
9 #include <string> 9 #include <string>
10 10
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter); 113 RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter);
114 RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter); 114 RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter);
115 RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter); 115 RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter);
116 RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile, filter); 116 RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile, filter);
117 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedSameOriginRestriction, filter); 117 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedSameOriginRestriction, filter);
118 RUN_TEST_FORCEASYNC_AND_NOT(TrustedSameOriginRestriction, filter); 118 RUN_TEST_FORCEASYNC_AND_NOT(TrustedSameOriginRestriction, filter);
119 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCrossOriginRequest, filter); 119 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCrossOriginRequest, filter);
120 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCrossOriginRequest, filter); 120 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCrossOriginRequest, filter);
121 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedJavascriptURLRestriction, filter); 121 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedJavascriptURLRestriction, filter);
122 RUN_TEST_FORCEASYNC_AND_NOT(TrustedJavascriptURLRestriction, filter); 122 RUN_TEST_FORCEASYNC_AND_NOT(TrustedJavascriptURLRestriction, filter);
123 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedMethodRestriction, filter); 123 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedHttpRequests, filter);
124 RUN_TEST_FORCEASYNC_AND_NOT(TrustedMethodRestriction, filter); 124 RUN_TEST_FORCEASYNC_AND_NOT(TrustedHttpRequests, filter);
125 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedHeaderRestriction, filter);
126 RUN_TEST_FORCEASYNC_AND_NOT(TrustedHeaderRestriction, filter);
127 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCustomReferrer, filter);
128 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCustomReferrer, filter);
129 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCustomContentTransferEncoding, filter);
130 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCustomContentTransferEncoding, filter);
131 RUN_TEST_FORCEASYNC_AND_NOT(AuditURLRedirect, filter); 125 RUN_TEST_FORCEASYNC_AND_NOT(AuditURLRedirect, filter);
132 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls, filter); 126 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls, filter);
133 RUN_TEST_FORCEASYNC_AND_NOT(UntendedLoad, filter); 127 RUN_TEST_FORCEASYNC_AND_NOT(UntendedLoad, filter);
134 } 128 }
135 129
136 std::string TestURLLoader::ReadEntireFile(pp::FileIO* file_io, 130 std::string TestURLLoader::ReadEntireFile(pp::FileIO* file_io,
137 std::string* data) { 131 std::string* data) {
138 TestCompletionCallback callback(instance_->pp_instance(), force_async_); 132 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
139 char buf[256]; 133 char buf[256];
140 int64_t offset = 0; 134 int64_t offset = 0;
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 request.SetURL("javascript:foo = bar"); 579 request.SetURL("javascript:foo = bar");
586 580
587 int32_t rv = OpenTrusted(request); 581 int32_t rv = OpenTrusted(request);
588 if (rv == PP_ERROR_NOACCESS) 582 if (rv == PP_ERROR_NOACCESS)
589 return ReportError( 583 return ReportError(
590 "Trusted Javascript URL request", rv); 584 "Trusted Javascript URL request", rv);
591 585
592 PASS(); 586 PASS();
593 } 587 }
594 588
595 // HTTP methods are restricted only for untrusted loaders. Forbidden 589 std::string TestURLLoader::TestUntrustedHttpRequests() {
596 // methods are CONNECT, TRACE, and TRACK, and any string that is not a valid 590 // HTTP methods are restricted only for untrusted loaders. Forbidden
597 // token (containing special characters like CR, LF). 591 // methods are CONNECT, TRACE, and TRACK, and any string that is not a
598 // http://www.w3.org/TR/XMLHttpRequest/ 592 // valid token (containing special characters like CR, LF).
599 std::string TestURLLoader::TestUntrustedMethodRestriction() { 593 // http://www.w3.org/TR/XMLHttpRequest/
600 ASSERT_EQ(OpenUntrusted("cOnNeCt", ""), PP_ERROR_NOACCESS); 594 {
601 ASSERT_EQ(OpenUntrusted("tRaCk", ""), PP_ERROR_NOACCESS); 595 ASSERT_EQ(OpenUntrusted("cOnNeCt", ""), PP_ERROR_NOACCESS);
602 ASSERT_EQ(OpenUntrusted("tRaCe", ""), PP_ERROR_NOACCESS); 596 ASSERT_EQ(OpenUntrusted("tRaCk", ""), PP_ERROR_NOACCESS);
603 ASSERT_EQ(OpenUntrusted("POST\x0d\x0ax-csrf-token:\x20test1234", ""), 597 ASSERT_EQ(OpenUntrusted("tRaCe", ""), PP_ERROR_NOACCESS);
604 PP_ERROR_NOACCESS); 598 ASSERT_EQ(OpenUntrusted("POST\x0d\x0ax-csrf-token:\x20test1234", ""),
605 PASS(); 599 PP_ERROR_NOACCESS);
606 } 600 }
601 // HTTP methods are restricted only for untrusted loaders. Try all headers
602 // that are forbidden by http://www.w3.org/TR/XMLHttpRequest/.
603 {
604 ASSERT_EQ(OpenUntrusted("GET", "Accept-Charset:\n"), PP_ERROR_NOACCESS);
605 ASSERT_EQ(OpenUntrusted("GET", "Accept-Encoding:\n"), PP_ERROR_NOACCESS);
606 ASSERT_EQ(OpenUntrusted("GET", "Connection:\n"), PP_ERROR_NOACCESS);
607 ASSERT_EQ(OpenUntrusted("GET", "Content-Length:\n"), PP_ERROR_NOACCESS);
608 ASSERT_EQ(OpenUntrusted("GET", "Cookie:\n"), PP_ERROR_NOACCESS);
609 ASSERT_EQ(OpenUntrusted("GET", "Cookie2:\n"), PP_ERROR_NOACCESS);
610 ASSERT_EQ(OpenUntrusted(
611 "GET", "Content-Transfer-Encoding:\n"), PP_ERROR_NOACCESS);
612 ASSERT_EQ(OpenUntrusted("GET", "Date:\n"), PP_ERROR_NOACCESS);
613 ASSERT_EQ(OpenUntrusted("GET", "Expect:\n"), PP_ERROR_NOACCESS);
614 ASSERT_EQ(OpenUntrusted("GET", "Host:\n"), PP_ERROR_NOACCESS);
615 ASSERT_EQ(OpenUntrusted("GET", "Keep-Alive:\n"), PP_ERROR_NOACCESS);
616 ASSERT_EQ(OpenUntrusted("GET", "Referer:\n"), PP_ERROR_NOACCESS);
617 ASSERT_EQ(OpenUntrusted("GET", "TE:\n"), PP_ERROR_NOACCESS);
618 ASSERT_EQ(OpenUntrusted("GET", "Trailer:\n"), PP_ERROR_NOACCESS);
619 ASSERT_EQ(OpenUntrusted(
620 "GET", "Transfer-Encoding:\n"), PP_ERROR_NOACCESS);
621 ASSERT_EQ(OpenUntrusted("GET", "Upgrade:\n"), PP_ERROR_NOACCESS);
622 ASSERT_EQ(OpenUntrusted("GET", "User-Agent:\n"), PP_ERROR_NOACCESS);
623 ASSERT_EQ(OpenUntrusted("GET", "Via:\n"), PP_ERROR_NOACCESS);
624 ASSERT_EQ(OpenUntrusted(
625 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"),
626 PP_ERROR_NOACCESS);
627 ASSERT_EQ(OpenUntrusted("GET", "Sec-foo:\n"), PP_ERROR_NOACCESS);
628 }
629 // Untrusted requests with custom referrer should fail.
630 {
631 pp::URLRequestInfo request(instance_);
632 request.SetCustomReferrerURL("http://www.google.com/");
607 633
608 // Trusted requests can use restricted methods. 634 int32_t rv = OpenUntrusted(request);
609 std::string TestURLLoader::TestTrustedMethodRestriction() { 635 if (rv != PP_ERROR_NOACCESS)
610 ASSERT_EQ(OpenTrusted("cOnNeCt", ""), PP_OK); 636 return ReportError(
611 ASSERT_EQ(OpenTrusted("tRaCk", ""), PP_OK); 637 "Untrusted request with custom referrer restriction", rv);
612 ASSERT_EQ(OpenTrusted("tRaCe", ""), PP_OK); 638 }
639 // Untrusted requests with custom transfer encodings should fail.
640 {
641 pp::URLRequestInfo request(instance_);
642 request.SetCustomContentTransferEncoding("foo");
643
644 int32_t rv = OpenUntrusted(request);
645 if (rv != PP_ERROR_NOACCESS)
646 return ReportError(
647 "Untrusted request with content-transfer-encoding restriction", rv);
648 }
613 649
614 PASS(); 650 PASS();
615 } 651 }
616 652
617 // HTTP methods are restricted only for untrusted loaders. Try all headers 653 std::string TestURLLoader::TestTrustedHttpRequests() {
618 // that are forbidden by http://www.w3.org/TR/XMLHttpRequest/. 654 // Trusted requests can use restricted methods.
619 std::string TestURLLoader::TestUntrustedHeaderRestriction() { 655 {
620 ASSERT_EQ(OpenUntrusted("GET", "Accept-Charset:\n"), PP_ERROR_NOACCESS); 656 ASSERT_EQ(OpenTrusted("cOnNeCt", ""), PP_OK);
621 ASSERT_EQ(OpenUntrusted("GET", "Accept-Encoding:\n"), PP_ERROR_NOACCESS); 657 ASSERT_EQ(OpenTrusted("tRaCk", ""), PP_OK);
622 ASSERT_EQ(OpenUntrusted("GET", "Connection:\n"), PP_ERROR_NOACCESS); 658 ASSERT_EQ(OpenTrusted("tRaCe", ""), PP_OK);
623 ASSERT_EQ(OpenUntrusted("GET", "Content-Length:\n"), PP_ERROR_NOACCESS); 659 }
624 ASSERT_EQ(OpenUntrusted("GET", "Cookie:\n"), PP_ERROR_NOACCESS); 660 // Trusted requests can use restricted headers.
625 ASSERT_EQ(OpenUntrusted("GET", "Cookie2:\n"), PP_ERROR_NOACCESS); 661 {
626 ASSERT_EQ(OpenUntrusted( 662 ASSERT_EQ(OpenTrusted("GET", "Accept-Charset:\n"), PP_OK);
627 "GET", "Content-Transfer-Encoding:\n"), PP_ERROR_NOACCESS); 663 ASSERT_EQ(OpenTrusted("GET", "Accept-Encoding:\n"), PP_OK);
628 ASSERT_EQ(OpenUntrusted("GET", "Date:\n"), PP_ERROR_NOACCESS); 664 ASSERT_EQ(OpenTrusted("GET", "Connection:\n"), PP_OK);
629 ASSERT_EQ(OpenUntrusted("GET", "Expect:\n"), PP_ERROR_NOACCESS); 665 ASSERT_EQ(OpenTrusted("GET", "Content-Length:\n"), PP_OK);
630 ASSERT_EQ(OpenUntrusted("GET", "Host:\n"), PP_ERROR_NOACCESS); 666 ASSERT_EQ(OpenTrusted("GET", "Cookie:\n"), PP_OK);
631 ASSERT_EQ(OpenUntrusted("GET", "Keep-Alive:\n"), PP_ERROR_NOACCESS); 667 ASSERT_EQ(OpenTrusted("GET", "Cookie2:\n"), PP_OK);
632 ASSERT_EQ(OpenUntrusted("GET", "Referer:\n"), PP_ERROR_NOACCESS); 668 ASSERT_EQ(OpenTrusted(
633 ASSERT_EQ(OpenUntrusted("GET", "TE:\n"), PP_ERROR_NOACCESS); 669 "GET", "Content-Transfer-Encoding:\n"), PP_OK);
634 ASSERT_EQ(OpenUntrusted("GET", "Trailer:\n"), PP_ERROR_NOACCESS); 670 ASSERT_EQ(OpenTrusted("GET", "Date:\n"), PP_OK);
635 ASSERT_EQ(OpenUntrusted("GET", "Transfer-Encoding:\n"), PP_ERROR_NOACCESS); 671 ASSERT_EQ(OpenTrusted("GET", "Expect:\n"), PP_OK);
636 ASSERT_EQ(OpenUntrusted("GET", "Upgrade:\n"), PP_ERROR_NOACCESS); 672 ASSERT_EQ(OpenTrusted("GET", "Host:\n"), PP_OK);
637 ASSERT_EQ(OpenUntrusted("GET", "User-Agent:\n"), PP_ERROR_NOACCESS); 673 ASSERT_EQ(OpenTrusted("GET", "Keep-Alive:\n"), PP_OK);
638 ASSERT_EQ(OpenUntrusted("GET", "Via:\n"), PP_ERROR_NOACCESS); 674 ASSERT_EQ(OpenTrusted("GET", "Referer:\n"), PP_OK);
639 ASSERT_EQ(OpenUntrusted( 675 ASSERT_EQ(OpenTrusted("GET", "TE:\n"), PP_OK);
640 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), 676 ASSERT_EQ(OpenTrusted("GET", "Trailer:\n"), PP_OK);
641 PP_ERROR_NOACCESS); 677 ASSERT_EQ(OpenTrusted("GET", "Transfer-Encoding:\n"), PP_OK);
642 ASSERT_EQ(OpenUntrusted("GET", "Sec-foo:\n"), PP_ERROR_NOACCESS); 678 ASSERT_EQ(OpenTrusted("GET", "Upgrade:\n"), PP_OK);
679 ASSERT_EQ(OpenTrusted("GET", "User-Agent:\n"), PP_OK);
680 ASSERT_EQ(OpenTrusted("GET", "Via:\n"), PP_OK);
681 ASSERT_EQ(OpenTrusted(
682 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), PP_OK);
683 ASSERT_EQ(OpenTrusted("GET", "Sec-foo:\n"), PP_OK);
684 }
685 // Trusted requests with custom referrer should succeed.
686 {
687 pp::URLRequestInfo request(instance_);
688 request.SetCustomReferrerURL("http://www.google.com/");
643 689
644 PASS(); 690 int32_t rv = OpenTrusted(request);
645 } 691 if (rv != PP_OK)
692 return ReportError("Trusted request with custom referrer", rv);
693 }
694 // Trusted requests with custom transfer encodings should succeed.
695 {
696 pp::URLRequestInfo request(instance_);
697 request.SetCustomContentTransferEncoding("foo");
646 698
647 // Trusted requests can use restricted headers. 699 int32_t rv = OpenTrusted(request);
648 std::string TestURLLoader::TestTrustedHeaderRestriction() { 700 if (rv != PP_OK)
649 ASSERT_EQ(OpenTrusted("GET", "Accept-Charset:\n"), PP_OK); 701 return ReportError(
650 ASSERT_EQ(OpenTrusted("GET", "Accept-Encoding:\n"), PP_OK); 702 "Trusted request with content-transfer-encoding failed", rv);
651 ASSERT_EQ(OpenTrusted("GET", "Connection:\n"), PP_OK); 703 }
652 ASSERT_EQ(OpenTrusted("GET", "Content-Length:\n"), PP_OK);
653 ASSERT_EQ(OpenTrusted("GET", "Cookie:\n"), PP_OK);
654 ASSERT_EQ(OpenTrusted("GET", "Cookie2:\n"), PP_OK);
655 ASSERT_EQ(OpenTrusted(
656 "GET", "Content-Transfer-Encoding:\n"), PP_OK);
657 ASSERT_EQ(OpenTrusted("GET", "Date:\n"), PP_OK);
658 ASSERT_EQ(OpenTrusted("GET", "Expect:\n"), PP_OK);
659 ASSERT_EQ(OpenTrusted("GET", "Host:\n"), PP_OK);
660 ASSERT_EQ(OpenTrusted("GET", "Keep-Alive:\n"), PP_OK);
661 ASSERT_EQ(OpenTrusted("GET", "Referer:\n"), PP_OK);
662 ASSERT_EQ(OpenTrusted("GET", "TE:\n"), PP_OK);
663 ASSERT_EQ(OpenTrusted("GET", "Trailer:\n"), PP_OK);
664 ASSERT_EQ(OpenTrusted("GET", "Transfer-Encoding:\n"), PP_OK);
665 ASSERT_EQ(OpenTrusted("GET", "Upgrade:\n"), PP_OK);
666 ASSERT_EQ(OpenTrusted("GET", "User-Agent:\n"), PP_OK);
667 ASSERT_EQ(OpenTrusted("GET", "Via:\n"), PP_OK);
668 ASSERT_EQ(OpenTrusted(
669 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), PP_OK);
670 ASSERT_EQ(OpenTrusted("GET", "Sec-foo:\n"), PP_OK);
671 704
672 PASS(); 705 PASS();
673 } 706 }
674 707
675 // Untrusted requests with custom referrer should fail.
676 std::string TestURLLoader::TestUntrustedCustomReferrer() {
677 pp::URLRequestInfo request(instance_);
678 request.SetCustomReferrerURL("http://www.google.com/");
679
680 int32_t rv = OpenUntrusted(request);
681 if (rv != PP_ERROR_NOACCESS)
682 return ReportError(
683 "Untrusted request with custom referrer restriction", rv);
684
685 PASS();
686 }
687
688 // Trusted requests with custom referrer should succeed.
689 std::string TestURLLoader::TestTrustedCustomReferrer() {
690 pp::URLRequestInfo request(instance_);
691 request.SetCustomReferrerURL("http://www.google.com/");
692
693 int32_t rv = OpenTrusted(request);
694 if (rv != PP_OK)
695 return ReportError("Trusted request with custom referrer", rv);
696
697 PASS();
698 }
699
700 // Untrusted requests with custom transfer encodings should fail.
701 std::string TestURLLoader::TestUntrustedCustomContentTransferEncoding() {
702 pp::URLRequestInfo request(instance_);
703 request.SetCustomContentTransferEncoding("foo");
704
705 int32_t rv = OpenUntrusted(request);
706 if (rv != PP_ERROR_NOACCESS)
707 return ReportError(
708 "Untrusted request with content-transfer-encoding restriction", rv);
709
710 PASS();
711 }
712
713 // Trusted requests with custom transfer encodings should succeed.
714 std::string TestURLLoader::TestTrustedCustomContentTransferEncoding() {
715 pp::URLRequestInfo request(instance_);
716 request.SetCustomContentTransferEncoding("foo");
717
718 int32_t rv = OpenTrusted(request);
719 if (rv != PP_OK)
720 return ReportError("Trusted request with content-transfer-encoding failed",
721 rv);
722 PASS();
723 }
724
725 // This test should cause a redirect and ensure that the loader runs 708 // This test should cause a redirect and ensure that the loader runs
726 // the callback, rather than following the redirect. 709 // the callback, rather than following the redirect.
727 std::string TestURLLoader::TestAuditURLRedirect() { 710 std::string TestURLLoader::TestAuditURLRedirect() {
728 pp::URLRequestInfo request(instance_); 711 pp::URLRequestInfo request(instance_);
729 // This path will cause the server to return a 301 redirect. 712 // This path will cause the server to return a 301 redirect.
730 request.SetURL("/server-redirect?www.google.com"); 713 request.SetURL("/server-redirect?www.google.com");
731 request.SetFollowRedirects(false); 714 request.SetFollowRedirects(false);
732 715
733 TestCompletionCallback callback(instance_->pp_instance(), force_async_); 716 TestCompletionCallback callback(instance_->pp_instance(), force_async_);
734 717
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 if (!error.empty()) 838 if (!error.empty())
856 return error; 839 return error;
857 if (body != "hello\n") 840 if (body != "hello\n")
858 return ReportError("Couldn't read data", rv); 841 return ReportError("Couldn't read data", rv);
859 842
860 PASS(); 843 PASS();
861 } 844 }
862 845
863 // TODO(viettrungluu): Add tests for FollowRedirect, 846 // TODO(viettrungluu): Add tests for FollowRedirect,
864 // Get{Upload,Download}Progress, Close (including abort tests if applicable). 847 // Get{Upload,Download}Progress, Close (including abort tests if applicable).
OLDNEW
« no previous file with comments | « ppapi/tests/test_url_loader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698